augustine-jkmap 1.0.7 → 1.0.8
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/augustine-jkmap.common.js +2 -2
- package/dist/augustine-jkmap.common.js.map +1 -1
- package/dist/augustine-jkmap.umd.js +2 -2
- package/dist/augustine-jkmap.umd.js.map +1 -1
- package/dist/augustine-jkmap.umd.min.js +1 -1
- package/dist/augustine-jkmap.umd.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"augustine-jkmap.umd.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;ACVA;AACA,CAAC,KAA4D;AAC7D,CAAC,CACwD;AACzD,CAAC,6BAA6B;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uBAAuB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,iCAAiC;AACjG;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+CAA+C,aAAa;;AAE5D,CAAC;AACD;;;;;;;;ACpSA;;AAEA;AACA,KAAK,KAA0B;AAC/B,uCAAuC,mBAAO,CAAC,GAAa;AAC5D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,4bAA4b;AACvc,aAAa,2LAA2L;AACxM;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB,iEAAiE;AACrF;AACA,oBAAoB,iEAAiE;AACrF;AACA,oBAAoB,iEAAiE;AACrF;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA,oBAAoB,oEAAoE;AACxF;AACA,oBAAoB,oEAAoE;AACxF;AACA,oBAAoB,oEAAoE;AACxF;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA,oBAAoB,4EAA4E;AAChG;AACA,oBAAoB,4EAA4E;AAChG;AACA,oBAAoB,4EAA4E;AAChG;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA,oBAAoB,yEAAyE;AAC7F;AACA,oBAAoB,yEAAyE;AAC7F;AACA,oBAAoB,yEAAyE;AAC7F;AACA,oBAAoB;AACpB;AACA;AACA,CAAC;AACD,SAAS,uFAAuF,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sCAAsC,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sCAAsC,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,UAAU,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,sCAAsC,EAAE,sCAAsC,EAAE,sCAAsC,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,uCAAuC,EAAE,uCAAuC,EAAE,uCAAuC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,SAAS,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,iCAAiC,EAAE,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB;AACn3F,iBAAiB,uXAAuX;AACxY;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,yCAAyC,4HAA4H;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,qBAAqB,2CAA2C;AAChE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B,cAAc;AACd;AACA,qBAAqB,eAAe,0BAA0B;AAC9D;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,2BAA2B;AAC/C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,sBAAsB;AAC1C;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,sBAAsB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;AACA,sBAAsB,qCAAqC;AAC3D;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iCAAiC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;AC7vBD;;AAEA;AACA,KAAK,KAA0B;AAC/B;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,kBAAkB;AACtC;;AAEA,sBAAsB,kBAAkB;AACxC;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,kBAAkB;AACtC;;AAEA,sBAAsB,kBAAkB;AACxC;AACA,wBAAwB,uBAAuB;AAC/C;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,kBAAkB;AACtC;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wDAAwD,QAAQ;AAChE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2DAA2D,QAAQ;AACnE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN,sBAAsB,6BAA6B;AACnD;AACA;AACA,MAAM;AACN,sBAAsB,+BAA+B;AACrD;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA,QAAQ,OAAO;AACf;AACA,0BAA0B,oBAAoB;AAC9C;AACA,4BAA4B;AAC5B;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,sBAAsB,cAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,cAAc;;AAElC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA,oBAAoB,6BAA6B;AACjD,sBAAsB,gCAAgC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,kCAAkC;AACtD,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;;AAEA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;;AAEA;;AAEA;AACA,QAAQ;AACR,oBAAoB,6BAA6B;AACjD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,QAAQ;AACR,oBAAoB,6BAA6B;AACjD,mCAAmC,mDAAmD;;AAEtF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,kCAAkC;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR,oBAAoB,6BAA6B;AACjD;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,kCAAkC;AAC1D;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR,oBAAoB,kCAAkC;AACtD,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA,QAAQ;AACR,oBAAoB,6BAA6B;AACjD;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,QAAQ;AACR,oBAAoB,kCAAkC;AACtD,wBAAwB;;AAExB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;;;;;;;AC34CD;AACA;;AAEA;AACA,KAAK,KAA0B;AAC/B,uCAAuC,mBAAO,CAAC,GAAa;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,mBAAmB;AACnB,cAAc;;AAEd;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kCAAkC;AAClC,QAAQ;AACR,4CAA4C;AAC5C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B,MAAM;AACN;AACA,MAAM;AACN,2BAA2B;AAC3B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6BAA6B;AAC/C;AACA;AACA;AACA;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;UCnaD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC,I;;;;;WCPD,wF;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;WCNA,2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;;AAEA;AACA;AACA,MAAM,KAAuC,EAAE;AAAA,yBAQ5C;;AAEH;AACA;AACA,IAAI,qBAAuB;AAC3B;AACA;;AAEA;AACA,oDAAe,IAAI;;;ACtBnB,+BAA+B,6BAA6B,yBAAyB,OAAO,yBAAyB,YAAY,4BAA4B,YAAY,kCAAkC,gBAAgB,iEAAiE,uBAAuB,YAAY,oCAAoC,6CAA6C,KAAK,wBAAwB,oGAAoG,gCAAgC,yBAAyB,yDAAyD,OAAO,4CAA4C,yCAAyC,gCAAgC,2BAA2B,2BAA2B,gCAAgC,yBAAyB,yCAAyC,6BAA6B,gCAAgC,yBAAyB,qCAAqC,4BAA4B,gCAAgC,8BAA8B,gDAAgD,mCAAmC,4BAA4B,MAAM,EAAE,0KAA0K,GAAG;AACh5C;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAe,SAAS;;;ACvDxB;AACA;AACA,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AAAY;AACd;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,iBAAiB,YAAY,gFAAgF,WAAW,8BAA8B,EAAE,qDAAqD,EAAE,UAAU,EAAE;AAC3N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;ACxJA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,SAAS;AACpB;AACA;AACA,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,eAAe;AACf;AACO;AACP;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,gCAAgC,KAAK,GAAG,KAAK;AAC7C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,8BAA8B,KAAK,GAAG,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,KAAK,GAAG,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,4BAA4B,KAAK,GAAG,KAAK;AACzC,IAAI;AACJ,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACO;AACP;AACA,kEAAkE,KAAK;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,KAAK;AACjE;AACA,IAAI;AACJ,2CAA2C,MAAM;AACjD;AACA;;;ACzJuC;AACvC;AACA;AACA,aAAa;AACb,WAAW,KAAK;AAChB,cAAc,8CAA8C;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS,MAAM,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,MAAM;AACN,+CAA+C,MAAM;AACrD;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,eAAe,uBAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,KAAK;AAChB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,aAAa;AACb;AACA,2CAA2C,UAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,mBAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,MAAM;AACN,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,IAAI,EAAE,IAAI;AAC5B,aAAa,GAAG;AAChB,eAAe;AACf;AACA;AACA;AACA;AACA,QAAQ,IAAI;AACZ;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,SAAS;AACtB,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,sCAAsC,UAAU;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,KAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,0CAA0C,UAAU;AACpD;AACA,GAAG;AACH;AACA;AACkC;;;AClwBK;AACY;AACnD;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACO;AACP,MAAM,OAAO,aAAa,OAAO;AACjC;AACA;AACA;AACA,QAAQ,OAAO,aAAa,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,iBAAiB;AAC5B,WAAW,iBAAiB;AAC5B,WAAW,SAAS;AACpB;AACA;AACO;AACP,UAAU,2CAA2C;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,cAAc,eAAe;AAC7B;AACO,SAAS,mBAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf,yDAAyD,QAAQ;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mBAAmB;AAC1E,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,WAAW;AACX;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,yEAAyE;AACzE,QAAQ;AACR;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,WAAW;AACX;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD,SAAS;AACT;AACA,qBAAqB;AACrB;AACA;AACA;AACA,kDAAkD,MAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ,wDAAwD,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,uBAAuB;AACpC;AACO,qEAAqE;AAC5E;AACA;AACA;AACA;AACA;AACA,UAAU,gDAAgD;AAC1D;AACA;AACA,yBAAyB;AACzB;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,QAAQ;AACR;AACA,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mBAAmB;AAC1E,SAAS;AACT;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E,WAAW;AACX;AACA,uBAAuB;AACvB,QAAQ;AACR;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,WAAW;AACX;AACA,uBAAuB;AACvB,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,WAAW;AACX;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD,SAAS;AACT;AACA,qBAAqB;AACrB;AACA;AACA;AACA,kDAAkD,MAAM;AACxD;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mCAAmC;AACvD,KAAK;AACL,IAAI;AACJ,wDAAwD,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,wBAAwB;AACnC,aAAa,wBAAwB;AACrC;AACO;AACP;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO,yCAAyC,OAAO,GAAG,WAAW,OAAO;AACvF,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,0DAA0D;AACrE;AACA,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oEAAoE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,gDAAgD,YAAY;AAC5D,MAAM;AACN;AACA,gDAAgD,YAAY;AAC5D;AACA,IAAI;AACJ,8CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,aAAa,GAAG;AAChB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO,yCAAyC,OAAO,GAAG,WAAW,OAAO;AACvF,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,0DAA0D;AACrE;AACA,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oDAAoD;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,gDAAgD,YAAY;AAC5D,MAAM;AACN;AACA,gDAAgD,YAAY;AAC5D;AACA,IAAI;AACJ,8CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT,oCAAoC,oCAAoC;AACxE,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,sCAAsC,oCAAoC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA,MAAM;AACN;AACA;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;AC1sCA,YAAY,0CAA0C;AACtD;AACA;AACA,2DAA2D,cAAc,IAAI;AAC7E,mBAAmB,gBAAgB,4BAA4B,oCAAoC,KAAK;AACxG,eAAe;AACf,uBAAuB,aAAa;AACpC,KAAK,KAAK,gCAAgC;AAC1C;AAC8C;AAC9C;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ,kBAAkB,IAAI,IAAI,SAAS,IAAI;AAC1D,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,UAAU,oCAAoC,GAAG,IAAI,IAAI,SAAS,IAAI,UAAU;AAChF;AACA;AACA,WAAW,yCAAY;AACvB,IAAI;AACJ,8CAA8C,MAAM;AACpD;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS,eAAe;AACnC,aAAa,QAAQ;AACrB;AACA;AACA,iDAAiD,UAAU,sEAAsE,SAAS;AAC1I;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AAC6C;AAC7C;AACA;AACA;AACA;AACA,mEAAmE;AACnE,oDAAoD,oCAAoC;AACxF;AACwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,kBAAkB;AAClB;AACA;AACA,gBAAgB;AAChB;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA,yDAAyD,QAAQ;AACjE;AACA;AACA,IAAI;AACJ,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA,wDAAwD,WAAW;AACnE;AACA;AACA;AACA;AACA,IAAI;AACJ,uDAAuD,cAAc,KAAK,WAAW;AACrF;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AAQC;;;AChND;AACuD;AACa;AAapC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA,4CAA4C,iBAAiB,GAAG;AAChE,YAAY,4BAA4B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0CAA0C;AAC1D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA;AACA,0BAA0B,YAAY;AACtC;AACA;AACA,sBAAsB,UAAU,wIAAwI,MAAM,UAAU,IAAI,UAAU,IAAI;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,OAAO;AACP,qBAAqB,YAAY;AACjC;AACA;AACA,sBAAsB,UAAU,wIAAwI,MAAM,UAAU,IAAI,UAAU,IAAI;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,wBAAwB,YAAY;AACpC;AACA;AACA,sBAAsB,UAAU,wIAAwI,MAAM,UAAU,IAAI,UAAU,IAAI;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,OAAO;AACP,MAAM;AACN,wBAAwB,YAAY;AACpC;AACA;AACA,uBAAuB,UAAU,wIAAwI,MAAM,UAAU,IAAI,UAAU,IAAI;AAC3M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,YAAY,4BAA4B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qDAAqD;AACtE,iBAAiB,iBAAiB;AAClC;AACA;AACA,UAAU;AACV,MAAM;AACN,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0CAA0C;AAC1D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,aAAa;AAC3B;AACA;AACA;AACA,KAAK;AACL,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACA,qCAAqC,UAAU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AAC6D;AAkB3D;;;AC3TW;;AAEb;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,aAAa,UAAU;AACvB;AACe;AACf;AACA;AACA;AACA;;;ACba;;AAEwB;;AAErC;;AAEA,OAAO,QAAQ,kBAAE;AACjB,OAAO,gBAAgB;AACvB,OAAO,uBAAuB;;AAE9B;AACA,gBAAgB,cAAQ;AACxB;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACA,OAAO,SAAS;;AAEhB;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;;AAGA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,UAAU;AACrB;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA,2BAA2B,oBAAoB,IAAI;AACnD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wFAAwF,qBAAM;AAC9F,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA4B;AAC5B;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,kCAAkC;AAClC,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA,gCAAgC,WAAW,IAAI;AAC/C;AACA;AACA,eAAe,IAAI;AACnB,MAAM;AACN;AACA;AACA,GAAG,GAAG,WAAW;AACjB;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,kBAAkB;AAC7B,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,oBAAc,MAAM,eAAe;;AAEzC;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;;;AAIA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,GAAG,WAAW,cAAc;AAC5B,CAAC;AACD;AACA;AACA;;AAEA;AACA;;AAEA;;;AAGA;;;AAGA,4CAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,cAAc,oBAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;;;AC7wBW;;AAEmB;;AAEhC;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,KAAK;AACnB;AACA;AACA;AACA;AACA,CAAC;;AAED,MAAM,oBAAS;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,CAAC;;AAED;AACA,sBAAsB,oBAAS,mBAAmB,YAAY;;AAE9D;AACA;AACA,mCAAmC,oBAAS;;AAE5C,EAAE,KAAK;AACP;AACA,GAAG;AACH;AACA,GAAG;;AAEH;;AAEA,2BAA2B;AAC3B;AACA;;AAEA,qDAAqD;AACrD;AACA,iDAAiD,kCAAkC;AACnF;;AAEA;;AAEA;;AAEA;AACA;;AAEA,sDAAe,UAAU,EAAC;;;AC7G1B;AACA,mDAAe,IAAI,EAAC;;;ACDP;;AAEmB;AACe;AAC/C;AACoE;;AAEpE;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA,SAAS,KAAK,yBAAyB,KAAK;AAC5C;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,KAAK;AACd;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA,aAAa;AACb;AACA;AACA,SAAS,KAAK;AACd;;AAEA,mBAAmB,KAAK,cAAc,KAAK,IAAI;AAC/C;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,qBAAqB;AAChC;AACA;AACA;AACA;AACA,OAAO,KAAK;AACZ;AACA;;AAEA;AACA,8BAA8B,YAAgB;;AAE9C;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA,GAAG;AACH;AACA,YAAY,KAAK;AACjB,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,KAAK;;AAEhC,OAAO,KAAK;AACZ;AACA;;AAEA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA,oBAAoB,KAAK;AACzB,gBAAgB,eAAU;AAC1B;;AAEA,QAAQ,KAAK,yBAAyB,KAAK;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,GAAG;AAChB,aAAa,eAAe;AAC5B,aAAa,sBAAsB;AACnC,YAAY;AACZ;AACA,eAAe,SAAS;AACxB;AACA;AACA;;AAEA;AACA,UAAU,KAAK,kBAAkB;AACjC;AACA;AACA;AACA;AACA,QAAQ;AACR,SAAS,KAAK;AACd,UAAU,KAAK,sBAAsB,KAAK,gCAAgC,KAAK;AAC/E;AACA;AACA;;AAEA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,QAAQ,KAAK;;AAEb;AACA;AACA;;AAEA;;AAEA,IAAI,KAAK;AACT,uBAAuB,KAAK;AAC5B,sBAAsB,KAAK;AAC3B;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA,OAAO,KAAK;AACZ;AACA;;AAEA;;AAEA;AACA;;AAEA,yDAAe,UAAU,EAAC;;;AC9Nb;;AAE4B;;AAEzC;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,WAAW,qBAAqB;AAChC;AACA,aAAa;AACb;AACA;AACA;;AAEA,YAAY,kBAAU;AACtB;;AAEA,MAAM,8BAAS;;AAEf,8BAAS;AACT;AACA;;AAEA,8BAAS;AACT;AACA;AACA,IAAI;;AAEJ;AACA;AACA,GAAG;AACH;;AAEA,mEAAe,oBAAoB,EAAC;;;ACzDvB;;AAEmB;AACsC;;AAEtE;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA,SAAS,eAAM;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,oBAAoB;AAC/B;AACA,aAAa,QAAQ;AACrB;AACe;AACf;AACA;AACA;AACA;AACA;AACA,+CAA+C,eAAM;;AAErD,MAAM,KAAK;AACX;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ,uBAAuB,KAAK;AAC5B;AACA,UAAU,4BAAoB;AAC9B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AClEa;;AAEqB;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,UAAU;AACvB;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB;AACA,eAAe;AACf;AACA;AACA,IAAI,KAAK;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,8DAAe,kBAAkB,EAAC;;;ACtErB;;AAEb,4DAAe;AACf;AACA;AACA;AACA,CAAC,EAAC;;;ACNW;;AAE+D;AAC5E,8DAAe,2DAA2D,4BAAoB,EAAC;;;ACHlF;;AAEb,uDAAe,iDAAiD,EAAC;;;ACFrD;;AAEZ,mDAAe,yCAAyC;;;ACFE;AACd;AACR;;AAEpC,8CAAe;AACf;AACA;AACA,mBAAmB;AACnB,YAAY;AACZ,QAAQ;AACR,GAAG;AACH;AACA,CAAC,EAAC;;;ACZF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAQC;;;AClDsC;AACI;;AAE3C,+CAAe;AACf,KAAK,4BAAK;AACV,KAAK,OAAQ;AACb,CAAC;;;ACNY;;AAEmB;AACS;AACG;;AAE7B;AACf,SAAS,kBAAU,WAAW,QAAQ;AACtC;AACA,UAAU,QAAQ,WAAW,KAAK;AAClC;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,GAAG;AACH;;;AClBa;;AAEmB;;AAEhC;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK;AACd;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,KAAK;;AAEzB;AACA,UAAU,KAAK;AACf;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA,0BAA0B,KAAK;AAC/B;AACA;;AAEA;;AAEA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;;AAEA,MAAM,KAAK,yBAAyB,KAAK;AACzC;;AAEA,IAAI,KAAK;AACT;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA,6DAAe,cAAc,EAAC;;;AC9FjB;;AAEmB;AACe;AACM;AACH;AACY;AAClB;AACc;;AAE1D;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB;AACA,aAAa,QAAQ;AACrB;AACA;AACA,MAAM,KAAK;AACX;AACA;AACA,aAAa,KAAK;AAClB,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,gBAAgB,qBAAoB;;AAEpC;;AAEA;AACA;AACA;AACA,4BAA4B,KAAK;;AAEjC,2BAA2B,KAAK;AAChC;AACA;;AAEA,uBAAuB,KAAK;;AAE5B;AACA,iDAAiD,sBAAc;AAC/D;;AAEA,QAAQ,KAAK;AACb,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,KAAK;AACX;AACA;AACA;AACA,QAAQ,KAAK;AACb;AACA;AACA,QAAQ,KAAK;AACb,gEAAgE;AAChE;AACA;;AAEA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;;AAEA,wBAAwB,KAAK;AAC7B;;AAEA,eAAe,kBAAU;AACzB,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA,QAAQ,KAAK,qBAAqB,KAAK;AACvC;AACA;;AAEA,gBAAgB,KAAK;AACrB;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,kBAAkB,eAAU,SAAS,eAAU;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,QAAQ;AACtB,UAAU,QAAQ;AAClB,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA,CAAC;;AAED,mDAAe,QAAQ,EAAC;;;AChKX;;AAEqB;;AAElC;AACA;AACA,0BAA0B,KAAK;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA,mDAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA,CAAC,EAAC;;;ACtDW;;AAEmB;AACsB;;AAEtD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS,KAAK;AACd;;AAEA;AACA;AACA,2BAA2B,mBAAmB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,MAAM,KAAK;AACX;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,KAAK;;AAEZ,MAAM,KAAK;AACX;AACA;;AAEA,MAAM,KAAK;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,uBAAuB,KAAK;;AAE5B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,KAAK;;AAEvB;AACA;AACA;AACA;;AAEA;AACA,MAAM,KAAK;;AAEX,QAAQ,KAAK;AACb;AACA,MAAM,QAAQ,KAAK;AACnB,iBAAiB,YAAY;AAC7B,MAAM,SAAS,KAAK,qBAAqB,KAAK;AAC9C,kBAAkB;AAClB;AACA,aAAa,KAAK;AAClB;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;;AAEA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,KAAK;;AAEvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,YAAY,KAAK;AACjB;AACA;;AAEA,YAAY,KAAK;AACjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,KAAK;;AAEvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,KAAK;;AAEzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,KAAK;AACT,kBAAkB,KAAK;;AAEvB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAI,KAAK;AACT,sEAAsE,KAAK;AAC3E,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,KAAK;;AAET;AACA;AACA;;AAEA;;AAEA;AACA,KAAK,6CAA6C,MAAM;AACxD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,KAAK;;AAEL,wDAAe,YAAY,EAAC;;;ACzTf;;AAEqB;AACU;AACO;;AAEnD;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB;AACA,aAAa,GAAG;AAChB;AACe;AACf,yBAAyB,YAAQ;AACjC;AACA,kBAAkB,iBAAY;AAC9B;;AAEA,EAAE,KAAK;AACP;AACA,GAAG;;AAEH;;AAEA;AACA;;;AC3Ba;;AAEE;AACf;AACA;;;ACJa;;AAEkC;AACf;;AAEhC;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA,EAAE,eAAU,oDAAoD,eAAU;AAC1E;AACA;;AAEA,KAAK,yBAAyB,eAAU;AACxC;AACA,CAAC;;AAED,2DAAe,aAAa,EAAC;;;ACxBhB;;AAE4B;;AAEzC;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf;AACA;AACA;AACA,IAAI;AACJ,eAAe,eAAU;AACzB;AACA,OAAO,eAAU,kBAAkB,eAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;;;AC1Ba;;AAEE;AACf,0BAA0B,KAAK;AAC/B;AACA;;;ACLa;;AAEb;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,0DAAe,WAAW,EAAC;;;ACtD3B;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uDAAe,QAAQ,EAAC;;;AC3CmB;AACN;AACL;;AAEzB;AACP;AACA,uBAAuB,mBAAW;;AAElC,SAAS,gBAAQ;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEO;AACP;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEO,4CAA4C,KAAK;;;AC3CZ;;AAE5C,sDAAe,QAAQ;AACvB,qBAAqB,QAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,UAAU,QAAQ;AAClB,EAAE,QAAQ,qCAAqC,QAAQ;AACvD,cAAc,EAAC;;;ACbmB;AACU;;AAE5C,8CAAe,QAAQ;;AAEvB;AACA;AACA;AACA;;AAEA,yBAAyB,KAAK,GAAG,0BAA0B;;AAE3D,UAAU,KAAK;AACf,+BAA+B,gCAAgC;AAC/D;AACA,UAAU,KAAK;AACf,4BAA4B,KAAK;AACjC;AACA,UAAU,KAAK;AACf,8BAA8B,OAAO;AACrC;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf,gCAAgC,SAAS;AACzC;;AAEA,uCAAuC;AACvC,KAAK;;AAEL;AACA;AACA,6DAA6D,kBAAkB;AAC/E;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,KAAK;AACL;AACA,GAAG,EAAC;;;;ACnDS;;AAEb;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACe;AACf;AACA;AACA;AACA;AACA;;;ACda;;AAEb;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf;AACA;AACA;AACA;;;ACda;;AAE2C;AACJ;;AAEpD;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf,uBAAuB,aAAa;AACpC;AACA,WAAW,WAAW;AACtB;AACA;AACA;;;ACrBa;;AAEmB;AACa;;AAE7C,oDAAoD,iBAAY,KAAK,WAAW;;AAEhF;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf;AACA;AACA;;AAEA;AACA,QAAQ,KAAK,0BAA0B,KAAK;AAC5C,aAAa,KAAK,aAAa,SAAS;AACxC,MAAM,SAAS,KAAK;AACpB,aAAa,KAAK,SAAS;AAC3B,MAAM,SAAS,KAAK;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,KAAK;AACd;AACA,MAAM,UAAU,KAAK;AACrB;AACA;AACA;;AAEA;AACA;AACA,SAAS,KAAK;AACd;AACA;AACA;;AAEA;AACA;AACA,SAAS,KAAK;AACd;AACA,MAAM,UAAU,KAAK;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,KAAK,sBAAsB,uBAAuB;AACpD;AACA;AACA,KAAK,KAAK;AACV,GAAG;;AAEH;AACA;;;ACzG4C;AACZ;AACmB;AAChB;AACkB;AACJ;AACE;AACd;;AAErC,oDAAe;AACf,oBAAoB,WAAW,GAAG;;AAElC,QAAQ,qEAAqE;;AAE7E,gCAAgC,iBAAY;;AAE5C,kBAAkB,QAAQ,CAAC,aAAa;;AAExC;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,KAAK;AACX,QAAQ,QAAQ,0BAA0B,QAAQ;AAClD,yCAAyC;AACzC,MAAM,SAAS,KAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA,MAAM,QAAQ;AACd,qBAAqB,KAAK;;AAE1B,qDAAqD,eAAe;AACpE;AACA,4DAA4D,OAAO;;AAEnE;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;AC3DiC;AACO;AACsB;AAChB;AACQ;AACC;AACZ;AACO;AACqB;AAChB;;AAExD;;AAEA,0CAAe;AACf;AACA,oBAAoB,aAAa;AACjC;AACA,2BAA2B,iBAAY;AACvC,SAAS,oDAAoD;AAC7D;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC,wCAAwC;;AAExC;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,MAAM;AACZ;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,eAAU,oBAAoB,eAAU;;AAEzD;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,uBAAuB,eAAU,MAAM,eAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qBAAoB;AACvE;AACA;AACA;AACA,iBAAiB,eAAU;AAC3B;AACA,2CAA2C,eAAU,aAAa,eAAU;AAC5E;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM,KAAK;AACX;AACA,OAAO;AACP;;AAEA;AACA,SAAS,KAAK;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,oBAAoB;AAChE;AACA;;AAEA;AACA;AACA,wCAAwC,oBAAoB;;AAE5D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAa;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,aAAa;;AAElC,oBAAoB,QAAQ;AAC5B,iBAAiB,eAAU,2CAA2C,eAAU;AAChF;AACA;;;AAGA;AACA;AACA,GAAG;AACH,CAAC;;;ACvMsD;AACR;AACf;;AAEhC;AACA,SAAS,QAAQ;;AAEjB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,eAAU,aAAa,oBAAa;AAC5E;AACA;;AAEA;AACA;AACA,kBAAkB,eAAU,YAAY,SAAS,iBAAiB,eAAU;AAC5E,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA,WAAW,QAAQ;;AAEnB,+BAA+B,KAAK;;AAEpC;AACA;AACA;;AAEA,6DAAe,cAAc,EAAC;;;;AC9CvB;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,aAAa;;AAE5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;;ACtF4C;AACZ;AACe;AACW;AACJ;AACH;AAC6D;AACxD;AACjB;;AAEvC;;AAEA,OAAO,UAAU,oBAAE,EAAE,KAAK;;AAE1B,0BAA0B,kBAAkB;AAC5C;AACA,CAAC,GAAG,KAAK;;AAET;AACA,gBAAgB;AAChB,EAAE,EAAE,KAAK;;;AAGT;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA,QAAQ,KAAK;AACb;AACA,GAAG;;AAEH,SAAS,oCAAoC;AAC7C,sCAAsC,gBAAU;AAChD,6BAA6B,gBAAU;AACvC,8BAA8B,gBAAU;;AAExC;AACA;AACA;;AAEA,wDAAwD,gBAAU,CAAC,oBAAc;;AAEjF;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uCAAuC,QAAQ;AAC/C,gBAAgB,oBAAc;AAC9B;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA,eAAe,KAAK;;AAEpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,eAAU,mBAAmB,KAAK,qBAAqB,eAAU;AACnF,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA,QAAQ,KAAK;AACb,mCAAmC,QAAQ;AAC3C;AACA;AACA,OAAO;AACP;AACA;;AAEA,QAAQ,KAAK,4BAA4B,KAAK;AAC9C;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;;AAEA;AACA,mBAAmB,KAAK;;AAExB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,EAAE,aAAa;;AAErB;;AAEA;;AAEA,yBAAyB,sBAAc;;AAEvC;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;;AAEA,YAAY,KAAK;AACjB;AACA;;AAEA;AACA,sCAAsC,sBAAsB;AAC5D;AACA,YAAY,oBAAoB,CAAC,cAAc;AAC/C;;AAEA,iBAAiB,WAAW;AAC5B;AACA;;AAEA,WAAW,KAAK;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET,sCAAsC,KAAK;;AAE3C,0DAA0D,sBAAsB;AAChF;AACA,UAAU,oBAAoB,CAAC,cAAc;AAC7C;;AAEA;AACA,UAAU,WAAW;AACrB;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;;AAEA,yCAAyC,KAAK;;AAE9C;;AAEA;AACA,QAAQ,MAAM;AACd;AACA,mBAAmB,iBAAY;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,MAAM;AACN;;AAEA;AACA;AACA,cAAc,eAAU,kBAAkB,eAAU;AACpD;AACA;AACA;AACA;AACA;;AAEA,YAAY,eAAU;AACtB;AACA;AACA;;AAEA;;AAEO;AACP;AACA,SAAS,0BAA0B;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,qDAAe,uDAAO,IAAC;;;AC/RS;AACI;AACF;AACS;AACI;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ,YAAW;AACnB,OAAO,GAAU;AACjB;AACA,SAAS,QAAqB;AAC9B;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA,0CAA0C,OAAO;AACjD,MAAM;AACN;AACA;AACA,+CAA+C,OAAO;AACtD;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA,sCAAsC,OAAO;;AAE7C;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA,sCAAsC,KAAK;;AAE3C;AACA;AACA;AACA;AACA;AACA,WAAW,wCAAwC;AACnD,WAAW,QAAQ;AACnB,YAAY,YAAY;AACxB,aAAa,UAAU;AACvB;AACA;AACA,aAAa,KAAK;;AAElB,UAAU,SAAS;AACnB;AACA;;AAEA;;AAEA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAkB,eAAU,qBAAqB,GAAG;AACpD;AACA;;AAEA,oBAAoB,KAAK;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uCAAuC,IAAI;AAC3C;AACA;;AAEA;AACA;AACA;;AAEA,cAAc,eAAU;AACxB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+CAAe;AACf;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA,CAAC,EAAC;;;AC7HW;;AAEkC;AACF;AACD;AACW;AACJ;AACJ;;AAE/C;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,oBAAa;AAC3B;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACe;AACf;;AAEA,mBAAmB,iBAAY;;AAE/B;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,QAAQ,8BAA8B,YAAQ;;AAEhE;AACA;;AAEA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;;AAEA,uBAAuB,iBAAY;;AAEnC;AACA,GAAG;AACH,SAAS,QAAQ;AACjB;;AAEA;AACA;AACA,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA,kCAAkC,iBAAY;AAC9C;AACA;;AAEA;AACA,GAAG;AACH;;;AChFO,yB;;ACAM;;AAE0B;AACQ;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,aAAa;AACb;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;;AAEA;AACA;AACA;AACA,gBAAgB,eAAU;AAC1B;AACA,QAAQ,eAAU;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,KAAK,6BAA6B,gBAAgB;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACA,aAAa;AACb;;AAEA;AACA;AACA,cAAc,eAAU,8BAA8B,eAAU;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAU,yCAAyC,eAAU;AAC/E;AACA;AACA;AACA;AACA,gBAAgB,eAAU,0BAA0B,eAAU;AAC9D;AACA;AACA;;AAEA,gDAAe;AACf;AACA;AACA,CAAC,EAAC;;;AClGW;;AAEqB;AACY;AACW;AACN;AACR;AACI;AACC;AACH;;AAE7C,MAAM,gBAAU,GAAG,SAAS;;AAE5B;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAkB;AACrC,oBAAoB,uBAAkB;AACtC;AACA;;AAEA;AACA;AACA;AACA,aAAa,eAAe;AAC5B,aAAa,SAAS;AACtB;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,aAAa,WAAW;;AAExB,WAAW,yCAAyC;;AAEpD;AACA,MAAM,SAAS;AACf,2BAA2B,gBAAU,cAAc,gBAAU;AAC7D,2BAA2B,gBAAU,cAAc,gBAAU;AAC7D,6BAA6B,gBAAU,cAAc,gBAAU;AAC/D,OAAO;AACP;;AAEA;AACA,UAAU,KAAK;AACf;AACA;AACA;AACA,QAAQ;AACR,QAAQ,SAAS;AACjB,kBAAkB,gBAAU;AAC5B,qBAAqB,gBAAU;AAC/B,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA,IAAI,SAAS;AACb,eAAe,gBAAU;AACzB,qBAAqB,gBAAU;AAC/B,KAAK;;AAEL;AACA;;AAEA;AACA,oCAAoC,KAAK;AACzC;AACA;AACA;;AAEA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,iBAAY;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,eAAe;AAC/B,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,WAAW;AACxB,qBAAqB,aAAa;AAClC,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA,wBAAwB,WAAW,aAAa;AAChD;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA,CAAC;;AAED,KAAK;AACL;;AAEA;AACA;AACA,0BAA0B,WAAW,aAAa;AAClD;AACA;AACA;AACA,UAAU,IAAI;AACd;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED,iDAAe,KAAK,EAAC;;;AC/OR;;AAEkC;;AAE/C;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,oBAAa;AACtC;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,yDAAe,WAAW,EAAC;;;ACtId;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACe;AACf;AACA;AACA;AACA;;;AC3Ba;;AAEqB;;AAElC;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACe;AACf,SAAS,KAAK;AACd;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED,6DAAe,cAAc,EAAC;;;AC5EjB;;AAEkB;AACM;AACD;AACY;AACL;AACc;AACH;AACJ;AACN;AACN;AACW;AACH;AACL;AACY;AACH;AACJ;AACW;;AAEzD;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,OAAO;AACpB;AACA;AACA,sBAAsB,UAAK;AAC3B,mBAAmB,IAAI,CAAC,UAAK;;AAE7B;AACA,EAAE,KAAK,kBAAkB,UAAK,sBAAsB,iBAAiB;;AAErE;AACA,EAAE,KAAK,kCAAkC,iBAAiB;;AAE1D;AACA;AACA,0BAA0B,WAAW;AACrC;;AAEA;AACA;;AAEA;AACA,MAAM,WAAK,kBAAkB,YAAQ;;AAErC;AACA,WAAK,SAAS,UAAK;;AAEnB;AACA,WAAK,iBAAiB,oBAAa;AACnC,WAAK,eAAe,kBAAW;AAC/B,WAAK,YAAY,QAAQ;AACzB,WAAK,WAAW,OAAO;AACvB,WAAK,cAAc,kBAAU;;AAE7B;AACA,WAAK,cAAc,eAAU;;AAE7B;AACA,WAAK,UAAU,WAAK;;AAEpB;AACA,WAAK;AACL;AACA;;AAEA,WAAK,UAAU,MAAM;;AAErB;AACA,WAAK,gBAAgB,YAAY;;AAEjC;AACA,WAAK,eAAe,WAAW;;AAE/B,WAAK,gBAAgB,iBAAY;;AAEjC,WAAK,uBAAuB,sBAAc,CAAC,KAAK;;AAEhD,WAAK,cAAc,QAAQ;;AAE3B,WAAK,kBAAkB,sBAAc;;AAErC,WAAK,WAAW,WAAK;;AAErB;AACA,gDAAe,WAAK;;;ACxFK;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA,MAAM,SAAK;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,MAAM;AACN;AACA;AACA,GAAG;AACH;;;AC/0BA;AACA;AACA;AACA;AACA,SAAS;AACT,SAAS,6BAA6B;AACtC;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC/CA,IAAI,2CAAM,qBAAqB,6BAA6B,uCAAuC,0BAA0B,uJAAuJ,aAAa,OAAO,izBAAizB,mCAAmC,0BAA0B,uJAAuJ,aAAa,OAAO,0jBAA0jB,sCAAsC,0BAA0B,uJAAuJ,aAAa,OAAO,qyCAAqyC,mCAAmC,0BAA0B,uJAAuJ,aAAa,OAAO,oUAAoU,mCAAmC,0BAA0B,uJAAuJ,aAAa,OAAO,qUAAqU,oCAAoC,0BAA0B,uJAAuJ,aAAa,OAAO,40BAA40B,kCAAkC,0BAA0B,uJAAuJ,aAAa,OAAO,+XAA+X,aAAa,OAAO,2MAA2M,mCAAmC,0BAA0B,uJAAuJ,aAAa,OAAO,g9CAAg9C,sCAAsC,0BAA0B,uJAAuJ,aAAa,OAAO,qwFAAqwF;AACtgW;AACA,IAAI,oDAAe;;;;;AC+JnB,qEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AChL8H,CAAC,yEAAe,8BAAG,EAAC,C;;ACAnJ;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AC/FqF;AAC3B;AACL;;;AAGrD;AACA,CAAgG;AAChG,gBAAgB,kBAAU;AAC1B,EAAE,kCAAM;AACR,EAAE,2CAAM;AACR,EAAE,oDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAAe,iB;;;;;;;;AClBf,IAAI,2CAAM,qBAAqB,6BAA6B,iBAAiB,8BAA8B,YAAY,+BAA+B,0BAA0B,0BAA0B;AAC1M;AACA,IAAI,oDAAe;;;;;ACOnB,qEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACjBiI,CAAC,0EAAe,8BAAG,EAAC,C;;ACAtJ;;;;;AEAqF;AAC3B;AACL;AACrD,CAAmF;;;AAGnF;AACmG;AACnG,IAAI,iBAAS,GAAG,kBAAU;AAC1B,EAAE,mCAAM;AACR,EAAE,2CAAM;AACR,EAAE,oDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAAe,iBAAS,Q;;ACnBxB,IAAI,6DAAM,qBAAqB,6BAA6B,sBAAsB,OAAO,aAAa,0BAA0B,8EAA8E,yBAAyB,oBAAoB;AAC3P;AACA,IAAI,sEAAe;;;;;ACUnB,2EAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACnDuI,CAAC,gFAAe,oCAAG,EAAC,C;;ACA5J;;;;;AEAuG;AACvC;AACL;AAC3D,CAAqG;;;AAGrG;AACmG;AACnG,IAAI,uBAAS,GAAG,kBAAU;AAC1B,EAAE,yCAAM;AACR,EAAE,6DAAM;AACR,EAAE,sEAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,oDAAe,uBAAS,Q;;;ACe0B;AACH;AAC0B;AAChC;AACI;AACH;AACN;AACO;AACA;AACD;AACK;AACT;AACS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAAe;AACf;AACA,6BAA6B,wBAAS,qBAAY;AAClD;AACA;AACA;AACA,eAAe,UAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAW,GAAG,mBAAY;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0BAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAO;AAClD;AACA;AACA;AACA;AACA;AACA,iBAAiB,mBAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA,oBAAoB,aAAa;AACjC;AACA,iBAAiB,uBAAO;AACxB;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,WAAW;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,uBAAO;AACb;AACA,MAAM,4BAAW;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACtdwI,CAAC,iFAAe,qCAAG,EAAC,C;;ACA7J;;;;;AEAA;;;;;AEAwG;AACvC;AACL;AAC5D,CAAsG;AACZ;;;AAG1F;AACmG;AACnG,IAAI,wBAAS,GAAG,kBAAU;AAC1B,EAAE,0CAAM;AACR,EAAE,MAAM;AACR,EAAE,eAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,qDAAe,wBAAS,Q;;ACpBxB,IAAI,+CAAM,qBAAqB,6BAA6B,yBAAyB,OAAO,yBAAyB,YAAY,4BAA4B,YAAY,iCAAiC,gBAAgB,mDAAmD,oBAAoB,qEAAqE;AACtW;AACA,IAAI,wDAAe;;;;ACFnB,IAAI,8CAAM,qBAAqB,6BAA6B,iBAAiB,oCAAoC,YAAY,gCAAgC,0BAA0B,IAAI,sFAAsF,QAAQ,6CAA6C,gBAAgB,uBAAuB,+DAA+D,8BAA8B,YAAY,0BAA0B,YAAY,kCAAkC,4EAA4E,iBAAiB,sCAAsC,yBAAyB,yBAAyB,4BAA4B,YAAY,0BAA0B,wCAAwC,6BAA6B,mCAAmC,2BAA2B,yBAAyB,uFAAuF,6BAA6B;AACriC;AACA,IAAI,uDAAe;;;;ACFnB,IAAI,2DAAM,qBAAqB,6BAA6B,wBAAwB,OAAO,uBAAuB,+BAA+B,sDAAsD,SAAS,MAAM,yBAAyB,0BAA0B,CAAuF,qBAAqB,sCAAsC,4DAA4D,2CAA2C,oCAAoC,KAAK,yBAAyB,yBAAyB,0CAA0C;AACvoB;AACA,IAAI,oEAAe;;;;;AC0BnB,yEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;AC3GqI,CAAC,8EAAe,kCAAG,EAAC,C;;ACA1J;;;;;AEAqG;AACvC;AACL;AACzD,CAAmG;;;AAGnG;AACmG;AACnG,IAAI,qBAAS,GAAG,kBAAU;AAC1B,EAAE,uCAAM;AACR,EAAE,2DAAM;AACR,EAAE,oEAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAe,qBAAS,Q;;ACnBxB,IAAI,iEAAM,qBAAqB,6BAA6B,iBAAiB,mCAAmC,YAAY,8BAA8B,cAAc,aAAa,8EAA8E,gDAAgD,oDAAoD,WAAW,yBAAyB,KAAK,yBAAyB,iGAAiG,+CAA+C,2BAA2B,kCAAkC,mCAAmC,uCAAuC,qBAAqB,yBAAyB,wBAAwB,oEAAoE,+BAA+B,oCAAoC,KAAK,yBAAyB,yBAAyB,gDAAgD,wCAAwC,gCAAgC,kCAAkC,KAAK,yBAAyB,yBAAyB,iDAAiD,YAAY,OAAO,wFAAwF,eAAe,OAAO,6BAA6B,aAAa,OAAO,wBAAwB,oBAAoB,8BAA8B,cAAc,oCAAoC,kBAAkB,WAAW,gCAAgC,KAAK,iCAAiC,aAAa,2BAA2B,YAAY,gCAAgC,mGAAmG,aAAa,OAAO,iHAAiH,iBAAiB,sCAAsC,mDAAmD,EAAE;AAC//D;AACA,IAAI,0EAAe;;;;;ACqEnB,+EAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACvH2I,CAAC,oFAAe,wCAAG,EAAC,C;;ACAhK;;;;;AEA2G;AACvC;AACL;AAC/D,CAAyG;;;AAGzG;AACmG;AACnG,IAAI,2BAAS,GAAG,kBAAU;AAC1B,EAAE,6CAAM;AACR,EAAE,iEAAM;AACR,EAAE,0EAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,wDAAe,2BAAS,Q;;ACnBxB;AACyB;AACzB;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,IAAI,SAAK;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,IAAI,SAAK;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,GAAG;AACH;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA,IAAI,SAAK;AACT;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ,4BAA4B;AAC/C,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;;;ACjI2C;AACY;AACD;AACtD;AACA,wEAAe;AACf;AACA,2BAA2B,gCAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACrJoI,CAAC,6EAAe,iCAAG,EAAC,C;;ACAjE;AAC3B;AACL;;;AAGxD;AACA,CAAmG;AACnG,IAAI,oBAAS,GAAG,kBAAU;AAC1B,EAAE,sCAAM;AACR,EAAE,8CAAM;AACR,EAAE,uDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAe,oBAAS,Q;;;;AClBG;AACqB;AACD;AACF;AACI;AACZ;AAMV;AAC8C;AACzE;AACA;AACA;AACA;AACA,EAAE,2BAAU;AACZ;AACA;AACA,OAAO,4BAAQ;AACf;AACA;AACA;AACO;AACP,gBAAgB,UAAU,oBAAW,qBAAS,WAAE;AAChD;AACA;AACA;AACA,eAAe,UAAS;AACxB,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,kBAAkB;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2BAAU;AACxB,cAAc,2BAAU;AACxB;AACA,qCAAqC,2BAAU;AAC/C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW;AACjB,MAAM,2BAAU,qCAAqC,kBAAkB;AACvE,oBAAoB,2BAAU;AAC9B;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,mCAAS;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR,QAAQ,kBAAkB;AAC1B;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,gBAAgB;AACvD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,MAAM,2BAAU,IAAI,2BAAU;AAC9B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM,2BAAU,IAAI,2BAAU;AAC9B,yBAAyB;AACzB,MAAM,2BAAU,KAAK,YAAY;AACjC;AACA;AACA,iCAAiC,2BAAU;AAC3C,SAAS;AACT,MAAM,mCAAS;AACf,KAAK;AACL;AACA;AACA,eAAe,GAAG;AAClB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;;;AC7WA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,UAAU;AACvB;AACO,oDAAoD;AAC3D,UAAU,gFAAgF;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACtIA;AACmD;AACC;AACO;AAC3D,IAAI,eAAI,OAAO;AACiC;AAChD;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,aAAa,GAAG;AAChB;AACA;AACA,6BAA6B;AAC7B;AACA,kBAAkB,GAAG,UAAS;AAC9B;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA,QAAQ,uBAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2BAAW,YAAY,mBAAmB;AAChD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,MAAM;AACN;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,IAAI,eAAI,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAI;AACZ,QAAQ,eAAI;AACZ;AACA;AACA;AACA;AACA,QAAQ,eAAI;AACZ;AACA;AACA;AACA,MAAM,eAAI;AACV;AACA;AACA;AACA,oBAAoB,eAAI;AACxB;AACA;AACA,gBAAgB,eAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM,UAAU;AAChB;AACA,OAAO;AACP,MAAM;AACN,MAAM,aAAa;AACnB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAe,UAAU,EAAC;;;;ACjIsC;AACnB;AAC7C,yEAAe;AACf;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA,mBAAmB,cAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACnCqI,CAAC,8EAAe,kCAAG,EAAC,C;;ACAjE;AAC3B;AACL;;;AAGzD;AACA,CAAmG;AACnG,IAAI,qBAAS,GAAG,kBAAU;AAC1B,EAAE,uCAAM;AACR,EAAE,+CAAM;AACR,EAAE,wDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAe,qBAAS,Q;;AClBxB,IAAI,gDAAM,qBAAqB,6BAA6B,yBAAyB,OAAO,yBAAyB,YAAY,4BAA4B,YAAY,iCAAiC,gBAAgB,mDAAmD,oBAAoB,qEAAqE,wCAAwC,2BAA2B,8BAA8B,wBAAwB,wGAAwG,8BAA8B,aAAa,KAAK,wBAAwB,gBAAgB,OAAO,2CAA2C,yFAAyF,8BAA8B,YAAY,KAAK,yBAAyB,oCAAoC,uFAAuF,8BAA8B,YAAY,KAAK,yBAAyB,uCAAuC,gBAAgB,OAAO,eAAe,wEAAwE,8BAA8B,YAAY,KAAK,yBAAyB,sCAAsC,gBAAgB,OAAO,kBAAkB,yBAAyB,8BAA8B,aAAa,KAAK,wBAAwB,gBAAgB,OAAO,4CAA4C,gBAAgB,8BAA8B,aAAa,KAAK,qBAAqB,gBAAgB,OAAO,cAAc,gBAAgB,+BAA+B,4BAA4B,QAAQ,cAAc,KAAK,kBAAkB,gBAAgB,OAAO,uEAAuE,gBAAgB,+BAA+B,2CAA2C,QAAQ,cAAc,KAAK,kBAAkB,gBAAgB,OAAO,sFAAsF;AACzkE;AACA,IAAI,yDAAe;;;;ACFQ;AACoB;AACF;AACI;AACZ;AAQV;AACkC;AAC7D;AACA,IAAI,kBAAS;AACb,EAAE,mBAAU;AACZ,EAAE,+BAAsB;AACxB,EAAE,sBAAa;AACf,EAAE,mBAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAU;AAChB,OAAO,4BAAQ;AACf;AACA;AACA;AACA;AACO;AACP,gBAAgB,SAAS,qBAAS,qBAAY,WAAE;AAChD;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,6CAA6C;AAC7C,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa,kBAAS;AACtB,KAAK;AACL;AACA,aAAa,mBAAU;AACvB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,UAAU,sBAAa;AACvB,UAAU,+BAAsB;AAChC,QAAQ,+BAAsB;AAC9B;AACA,MAAM,+BAAsB;AAC5B,MAAM,sBAAa;AACnB;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAU;AAC1C,YAAY,+BAAsB;AAClC,sCAAsC,4BAA4B;AAClE,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA,UAAU,sBAAa;AACvB,UAAU,+BAAsB;AAChC,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,4BAA4B,mBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,QAAQ,mBAAU;AAClB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM,kBAAS;AACf,MAAM,mBAAU;AAChB,MAAM,WAAW;AACjB;AACA;AACA,QAAQ,mBAAU,qCAAqC,kBAAkB;AACzE,QAAQ,kBAAS,KAAK,mBAAU;AAChC;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM,mBAAU;AAChB,KAAK;AACL;AACA;AACA,MAAM,mBAAU;AAChB;AACA;AACA,WAAW,mBAAU;AACrB;AACA,MAAM,mBAAU,KAAK,YAAY;AACjC,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,yBAAyB,gBAAgB;AACzC,yCAAyC,4BAAQ;AACjD;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAU;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM,mBAAU,qCAAqC,kBAAkB;AACvE,oDAAoD,iBAAiB;AACrE,wDAAwD,qBAAqB;AAC7E,sDAAsD,mBAAmB;AACzE;AACA;AACA,OAAO;AACP,sDAAsD,mBAAmB;AACzE,MAAM,kBAAS,KAAK,mBAAU;AAC9B,MAAM,kBAAS;AACf,MAAM,kBAAS;AACf,MAAM,kBAAS;AACf,MAAM,kBAAS;AACf,MAAM,kBAAS;AACf;AACA;AACA,cAAc,mBAAU;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY;AACZ,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,kDAAkD;AAClD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAS;AACjC;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;;;ACle6C;AACG;AAChD,0EAAe;AACf;AACA,WAAW,QAAQ;AACnB;AACA;AACA,mBAAmB,cAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACxFsI,CAAC,+EAAe,mCAAG,EAAC,C;;ACAjE;AAC3B;AACL;;;AAG1D;AACA,CAAmG;AACnG,IAAI,sBAAS,GAAG,kBAAU;AAC1B,EAAE,wCAAM;AACR,EAAE,gDAAM;AACR,EAAE,yDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,mDAAe,sBAAS,Q;;AClBxB,IAAI,2CAAM,qBAAqB,6BAA6B,yBAAyB,OAAO,yBAAyB,YAAY,4BAA4B,YAAY,iCAAiC,gBAAgB;AAC1N;AACA,IAAI,oDAAe;;;;ACFQ;AACqB;AACH;AACiC;AAC9E;AACA,IAAI,sBAAS;AACb,EAAE,uBAAU;AACZ,EAAE,mCAAsB;AACxB,EAAE,0BAAa;AACf,EAAE,uBAAU;AACL;AACP,gBAAgB,UAAU,WAAE;AAC5B;AACA;AACA;AACA,eAAe,UAAS;AACxB,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,kBAAkB;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,aAAa,sBAAS;AACtB,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,uBAAU;AACvB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,UAAU,uBAAU,IAAI,uBAAU,aAAa,uBAAU;AACzD,QAAQ,uBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,UAAU,0BAAa;AACvB;AACA,UAAU,mCAAsB;AAChC,QAAQ,mCAAsB;AAC9B;AACA,MAAM,mCAAsB;AAC5B,MAAM,0BAAa;AACnB;AACA;AACA;AACA;AACA,6BAA6B,uBAAU,aAAa;AACpD;AACA;AACA,cAAc,mCAAsB,yBAAyB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,0BAAa;AACzB,YAAY,mCAAsB;AAClC,WAAW;AACX,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,4BAA4B,uBAAU;AACtC;AACA,QAAQ,uBAAU;AAClB;AACA,QAAQ,KAAK,uBAAU;AACvB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM,sBAAS;AACf,MAAM,uBAAU;AAChB;AACA,QAAQ,uBAAU,qCAAqC,kBAAkB;AACzE,QAAQ,sBAAS,KAAK,uBAAU;AAChC;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf,QAAQ,KAAK,OAAO;AACpB,KAAK;AACL;AACA;AACA;AACA,yBAAyB,cAAc;AACvC,sCAAsC;AACtC,QAAQ,uBAAU;AAClB,QAAQ,OAAO,CAAC,uBAAU;AAC1B;AACA,KAAK;AACL;AACA;AACA,eAAe,GAAG;AAClB;AACA;AACA;AACA,UAAU,sBAAS,IAAI,uBAAU;AACjC,YAAY,uBAAU,EAAE,uBAAU;AAClC;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;;;AC7MwD;AACX;AAC7C,qEAAe;AACf;AACA,WAAW,YAAY;AACvB;AACA;AACA,mBAAmB,cAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACvBiI,CAAC,0EAAe,8BAAG,EAAC,C;;ACAjE;AAC3B;AACL;;;AAGrD;AACA,CAAmG;AACnG,IAAI,iBAAS,GAAG,kBAAU;AAC1B,EAAE,mCAAM;AACR,EAAE,2CAAM;AACR,EAAE,oDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAAe,iBAAS,Q;;AClB+B;AACN;AACE;AACV;AACqB;AAC9D;AACA,oBAAoB,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,4CAAe;AACf;AACA;AACA,CAAC,EAAC;AAkBwB;AAkBxB;AACF;AACA;AACA;AACA;;;AC5DwB;AACA;AACxB,gDAAe,KAAG;AACI","sources":["webpack://augustine-jkmap/webpack/universalModuleDefinition","webpack://augustine-jkmap/./node_modules/esri-loader/dist/umd/esri-loader.js","webpack://augustine-jkmap/./node_modules/terraformer-wkt-parser/terraformer-wkt-parser.js","webpack://augustine-jkmap/./node_modules/terraformer/terraformer.js","webpack://augustine-jkmap/./node_modules/terraformer-arcgis-parser/terraformer-arcgis-parser.js","webpack://augustine-jkmap/webpack/bootstrap","webpack://augustine-jkmap/webpack/runtime/compat get default export","webpack://augustine-jkmap/webpack/runtime/define property getters","webpack://augustine-jkmap/webpack/runtime/global","webpack://augustine-jkmap/webpack/runtime/hasOwnProperty shorthand","webpack://augustine-jkmap/webpack/runtime/make namespace object","webpack://augustine-jkmap/webpack/runtime/publicPath","webpack://augustine-jkmap/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?ae56","webpack://augustine-jkmap/./src/config/map.config.js","webpack://augustine-jkmap/./src/config/loadLayers.js","webpack://augustine-jkmap/./src/config/comstom.js","webpack://augustine-jkmap/./src/config/toArcGISPoint.js","webpack://augustine-jkmap/./src/config/drawLayer.js","webpack://augustine-jkmap/./src/config/wktMethods.js","webpack://augustine-jkmap/./src/utils/index.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/bind.js","webpack://augustine-jkmap/./node_modules/axios/lib/utils.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/AxiosError.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/null.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/toFormData.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/buildURL.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/InterceptorManager.js","webpack://augustine-jkmap/./node_modules/axios/lib/defaults/transitional.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/browser/classes/Blob.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/browser/index.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/common/utils.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/index.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://augustine-jkmap/./node_modules/axios/lib/defaults/index.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/transformData.js","webpack://augustine-jkmap/./node_modules/axios/lib/cancel/isCancel.js","webpack://augustine-jkmap/./node_modules/axios/lib/cancel/CanceledError.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/settle.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/speedometer.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/throttle.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/progressEventReducer.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/cookies.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/combineURLs.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/buildFullPath.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/mergeConfig.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/resolveConfig.js","webpack://augustine-jkmap/./node_modules/axios/lib/adapters/xhr.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/composeSignals.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/trackStream.js","webpack://augustine-jkmap/./node_modules/axios/lib/adapters/fetch.js","webpack://augustine-jkmap/./node_modules/axios/lib/adapters/adapters.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/dispatchRequest.js","webpack://augustine-jkmap/./node_modules/axios/lib/env/data.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/validator.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/Axios.js","webpack://augustine-jkmap/./node_modules/axios/lib/cancel/CancelToken.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/spread.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/HttpStatusCode.js","webpack://augustine-jkmap/./node_modules/axios/lib/axios.js","webpack://augustine-jkmap/./src/mock/api.js","webpack://augustine-jkmap/./src/utils/bearing.js","webpack://augustine-jkmap/./src/svgIcon.vue?8031","webpack://augustine-jkmap/src/svgIcon.vue","webpack://augustine-jkmap/./src/svgIcon.vue?eb42","webpack://augustine-jkmap/./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js","webpack://augustine-jkmap/./src/svgIcon.vue","webpack://augustine-jkmap/./src/vue2/loading.vue?51c5","webpack://augustine-jkmap/src/vue2/loading.vue","webpack://augustine-jkmap/./src/vue2/loading.vue?e8e5","webpack://augustine-jkmap/./src/vue2/loading.vue?bb4f","webpack://augustine-jkmap/./src/vue2/loading.vue?4572","webpack://augustine-jkmap/./src/vue2/loading.vue","webpack://augustine-jkmap/./src/vue2/customTooltip.vue?8745","webpack://augustine-jkmap/src/vue2/customTooltip.vue","webpack://augustine-jkmap/./src/vue2/customTooltip.vue?966b","webpack://augustine-jkmap/./src/vue2/customTooltip.vue?dde6","webpack://augustine-jkmap/./src/vue2/customTooltip.vue?487a","webpack://augustine-jkmap/./src/vue2/customTooltip.vue","webpack://augustine-jkmap/src/vue2/augustineGjMap.vue","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?d092","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?73fc","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?5c54","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?dc18","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?993e","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue","webpack://augustine-jkmap/./src/vue2/locationMap.vue?3606","webpack://augustine-jkmap/./src/vue2/search_map.vue?d0cf","webpack://augustine-jkmap/./src/vue2/CustomModal.vue?2ceb","webpack://augustine-jkmap/src/vue2/CustomModal.vue","webpack://augustine-jkmap/./src/vue2/CustomModal.vue?ffd1","webpack://augustine-jkmap/./src/vue2/CustomModal.vue?4d51","webpack://augustine-jkmap/./src/vue2/CustomModal.vue?f83d","webpack://augustine-jkmap/./src/vue2/CustomModal.vue","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue?5ebf","webpack://augustine-jkmap/src/vue2/CustomSearchInput.vue","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue?b4a2","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue?485a","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue?9042","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue","webpack://augustine-jkmap/./src/utils/tianditu.js","webpack://augustine-jkmap/src/vue2/search_map.vue","webpack://augustine-jkmap/./src/vue2/search_map.vue?73d2","webpack://augustine-jkmap/./src/vue2/search_map.vue","webpack://augustine-jkmap/./src/mixins/mapLocationMixin.js","webpack://augustine-jkmap/./src/lib/eventManager.js","webpack://augustine-jkmap/./src/lib/MapWrapper.js","webpack://augustine-jkmap/src/vue2/locationMap.vue","webpack://augustine-jkmap/./src/vue2/locationMap.vue?6a1c","webpack://augustine-jkmap/./src/vue2/locationMap.vue","webpack://augustine-jkmap/./src/vue2/augustineMap.vue?48fc","webpack://augustine-jkmap/./src/mixins/mapMixin.js","webpack://augustine-jkmap/src/vue2/augustineMap.vue","webpack://augustine-jkmap/./src/vue2/augustineMap.vue?bdf0","webpack://augustine-jkmap/./src/vue2/augustineMap.vue","webpack://augustine-jkmap/./src/vue2/mapList.vue?7590","webpack://augustine-jkmap/./src/mixins/mapListMixin.js","webpack://augustine-jkmap/src/vue2/mapList.vue","webpack://augustine-jkmap/./src/vue2/mapList.vue?b572","webpack://augustine-jkmap/./src/vue2/mapList.vue","webpack://augustine-jkmap/./src/index.js","webpack://augustine-jkmap/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"augustine-jkmap\"] = factory();\n\telse\n\t\troot[\"augustine-jkmap\"] = factory();\n})((typeof self !== 'undefined' ? self : this), () => {\nreturn ","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.esriLoader = global.esriLoader || {})));\n}(this, (function (exports) { 'use strict';\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar isBrowser = typeof window !== 'undefined';\n// allow consuming libraries to provide their own Promise implementations\nvar utils = {\n Promise: isBrowser ? window['Promise'] : undefined\n};\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar DEFAULT_VERSION = '4.25';\nvar NEXT = 'next';\nfunction parseVersion(version) {\n if (version.toLowerCase() === NEXT) {\n return NEXT;\n }\n var match = version && version.match(/^(\\d)\\.(\\d+)/);\n return match && {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10)\n };\n}\n/**\n * Get the CDN url for a given version\n *\n * @param version Ex: '4.25' or '3.42'. Defaults to the latest 4.x version.\n */\nfunction getCdnUrl(version) {\n if (version === void 0) { version = DEFAULT_VERSION; }\n return \"https://js.arcgis.com/\".concat(version, \"/\");\n}\n/**\n * Get the CDN url for a the CSS for a given version and/or theme\n *\n * @param version Ex: '4.25', '3.42', or 'next'. Defaults to the latest 4.x version.\n */\nfunction getCdnCssUrl(version) {\n if (version === void 0) { version = DEFAULT_VERSION; }\n var baseUrl = getCdnUrl(version);\n var parsedVersion = parseVersion(version);\n if (parsedVersion !== NEXT && parsedVersion.major === 3) {\n // NOTE: at 3.11 the CSS moved from the /js folder to the root\n var path = parsedVersion.minor <= 10 ? 'js/' : '';\n return \"\".concat(baseUrl).concat(path, \"esri/css/esri.css\");\n }\n else {\n // assume 4.x\n return \"\".concat(baseUrl, \"esri/themes/light/main.css\");\n }\n}\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nfunction createStylesheetLink(href) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n return link;\n}\nfunction insertLink(link, before) {\n if (before) {\n // the link should be inserted before a specific node\n var beforeNode = document.querySelector(before);\n beforeNode.parentNode.insertBefore(link, beforeNode);\n }\n else {\n // append the link to then end of the head tag\n document.head.appendChild(link);\n }\n}\n// check if the css url has been injected or added manually\nfunction getCss(url) {\n return document.querySelector(\"link[href*=\\\"\".concat(url, \"\\\"]\"));\n}\nfunction getCssUrl(urlOrVersion) {\n return !urlOrVersion || parseVersion(urlOrVersion)\n // if it's a valid version string return the CDN URL\n ? getCdnCssUrl(urlOrVersion)\n // otherwise assume it's a URL and return that\n : urlOrVersion;\n}\n// lazy load the CSS needed for the ArcGIS API\nfunction loadCss(urlOrVersion, before) {\n var url = getCssUrl(urlOrVersion);\n var link = getCss(url);\n if (!link) {\n // create & load the css link\n link = createStylesheetLink(url);\n insertLink(link, before);\n }\n return link;\n}\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar defaultOptions = {};\nfunction createScript(url) {\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.setAttribute('data-esri-loader', 'loading');\n return script;\n}\n// add a one-time load handler to script\n// and optionally add a one time error handler as well\nfunction handleScriptLoad(script, callback, errback) {\n var onScriptError;\n if (errback) {\n // set up an error handler as well\n onScriptError = handleScriptError(script, errback);\n }\n var onScriptLoad = function () {\n // pass the script to the callback\n callback(script);\n // remove this event listener\n script.removeEventListener('load', onScriptLoad, false);\n if (onScriptError) {\n // remove the error listener as well\n script.removeEventListener('error', onScriptError, false);\n }\n };\n script.addEventListener('load', onScriptLoad, false);\n}\n// add a one-time error handler to the script\nfunction handleScriptError(script, callback) {\n var onScriptError = function (e) {\n // reject the promise and remove this event listener\n callback(e.error || new Error(\"There was an error attempting to load \".concat(script.src)));\n // remove this event listener\n script.removeEventListener('error', onScriptError, false);\n };\n script.addEventListener('error', onScriptError, false);\n return onScriptError;\n}\n// allow the user to configure default script options rather than passing options to `loadModules` each time\nfunction setDefaultOptions(options) {\n if (options === void 0) { options = {}; }\n defaultOptions = options;\n}\n// get the script injected by this library\nfunction getScript() {\n return document.querySelector('script[data-esri-loader]');\n}\n// has ArcGIS API been loaded on the page yet?\nfunction isLoaded() {\n var globalRequire = window['require'];\n // .on() ensures that it's Dojo's AMD loader\n return globalRequire && globalRequire.on;\n}\n// load the ArcGIS API on the page\nfunction loadScript(options) {\n if (options === void 0) { options = {}; }\n // we would have liked to use spread like { ...defaultOptions, ...options }\n // but TS would inject a polyfill that would require use to configure rollup w content: 'window'\n // if we have another occasion to use spread, let's do that and replace this for...in\n var opts = {};\n [defaultOptions, options].forEach(function (obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n opts[prop] = obj[prop];\n }\n }\n });\n // URL to load\n var version = opts.version;\n var url = opts.url || getCdnUrl(version);\n return new utils.Promise(function (resolve, reject) {\n var script = getScript();\n if (script) {\n // the API is already loaded or in the process of loading...\n // NOTE: have to test against scr attribute value, not script.src\n // b/c the latter will return the full url for relative paths\n var src = script.getAttribute('src');\n if (src !== url) {\n // potentially trying to load a different version of the API\n reject(new Error(\"The ArcGIS API for JavaScript is already loaded (\".concat(src, \").\")));\n }\n else {\n if (isLoaded()) {\n // the script has already successfully loaded\n resolve(script);\n }\n else {\n // wait for the script to load and then resolve\n handleScriptLoad(script, resolve, reject);\n }\n }\n }\n else {\n if (isLoaded()) {\n // the API has been loaded by some other means\n // potentially trying to load a different version of the API\n reject(new Error(\"The ArcGIS API for JavaScript is already loaded.\"));\n }\n else {\n // this is the first time attempting to load the API\n var css = opts.css;\n if (css) {\n var useVersion = css === true;\n // load the css before loading the script\n loadCss(useVersion ? version : css, opts.insertCssBefore);\n }\n // create a script object whose source points to the API\n script = createScript(url);\n // _currentUrl = url;\n // once the script is loaded...\n handleScriptLoad(script, function () {\n // update the status of the script\n script.setAttribute('data-esri-loader', 'loaded');\n // return the script\n resolve(script);\n }, reject);\n // load the script\n document.body.appendChild(script);\n }\n }\n });\n}\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\n// wrap Dojo's require() in a promise\nfunction requireModules(modules) {\n return new utils.Promise(function (resolve, reject) {\n // If something goes wrong loading the esri/dojo scripts, reject with the error.\n var errorHandler = window['require'].on('error', reject);\n window['require'](modules, function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // remove error handler\n errorHandler.remove();\n // Resolve with the parameters from dojo require as an array.\n resolve(args);\n });\n });\n}\n// returns a promise that resolves with an array of the required modules\n// also will attempt to lazy load the ArcGIS API if it has not already been loaded\nfunction loadModules(modules, loadScriptOptions) {\n if (loadScriptOptions === void 0) { loadScriptOptions = {}; }\n if (!isLoaded()) {\n // script is not yet loaded, is it in the process of loading?\n var script = getScript();\n var src = script && script.getAttribute('src');\n if (!loadScriptOptions.url && src) {\n // script is still loading and user did not specify a URL\n // in this case we want to default to the URL that's being loaded\n // instead of defaulting to the latest 4.x URL\n loadScriptOptions.url = src;\n }\n // attempt to load the script then load the modules\n return loadScript(loadScriptOptions).then(function () { return requireModules(modules); });\n }\n else {\n // script is already loaded, just load the modules\n return requireModules(modules);\n }\n}\n\n/*\n Copyright (c) 2022 Esri\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n// re-export the functions that are part of the public API\n\nexports.utils = utils;\nexports.loadModules = loadModules;\nexports.getScript = getScript;\nexports.isLoaded = isLoaded;\nexports.loadScript = loadScript;\nexports.setDefaultOptions = setDefaultOptions;\nexports.loadCss = loadCss;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=esri-loader.js.map\n","(function (root, factory) {\n\n // Node.\n if(typeof module === 'object' && typeof module.exports === 'object') {\n exports = module.exports = factory(require(\"terraformer\"));\n } else if(typeof navigator === \"object\") {\n // Browser Global.\n if (!root.Terraformer){\n throw new Error(\"Terraformer.WKT requires the core Terraformer library. http://github.com/esri/terraformer\")\n }\n root.Terraformer.WKT = factory(root.Terraformer);\n }\n\n}(this, function(Terraformer) {\n var exports = { };\n\n /* Jison generated parser */\nvar parser = (function(){\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"expressions\":3,\"point\":4,\"EOF\":5,\"linestring\":6,\"polygon\":7,\"multipoint\":8,\"multilinestring\":9,\"multipolygon\":10,\"coordinate\":11,\"DOUBLE_TOK\":12,\"ptarray\":13,\"COMMA\":14,\"ring_list\":15,\"ring\":16,\"(\":17,\")\":18,\"POINT\":19,\"Z\":20,\"ZM\":21,\"M\":22,\"EMPTY\":23,\"point_untagged\":24,\"polygon_list\":25,\"polygon_untagged\":26,\"point_list\":27,\"LINESTRING\":28,\"POLYGON\":29,\"MULTIPOINT\":30,\"MULTILINESTRING\":31,\"MULTIPOLYGON\":32,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",12:\"DOUBLE_TOK\",14:\"COMMA\",17:\"(\",18:\")\",19:\"POINT\",20:\"Z\",21:\"ZM\",22:\"M\",23:\"EMPTY\",28:\"LINESTRING\",29:\"POLYGON\",30:\"MULTIPOINT\",31:\"MULTILINESTRING\",32:\"MULTIPOLYGON\"},\nproductions_: [0,[3,2],[3,2],[3,2],[3,2],[3,2],[3,2],[11,2],[11,3],[11,4],[13,3],[13,1],[15,3],[15,1],[16,3],[4,4],[4,5],[4,5],[4,5],[4,2],[24,1],[24,3],[25,3],[25,1],[26,3],[27,3],[27,1],[6,4],[6,5],[6,5],[6,5],[6,2],[7,4],[7,5],[7,5],[7,5],[7,2],[8,4],[8,5],[8,5],[8,5],[8,2],[9,4],[9,5],[9,5],[9,5],[9,2],[10,4],[10,5],[10,5],[10,5],[10,2]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$,_$\n) {\n\nvar $0 = $.length - 1;\nswitch (yystate) {\ncase 1: return $[$0-1]; \nbreak;\ncase 2: return $[$0-1]; \nbreak;\ncase 3: return $[$0-1]; \nbreak;\ncase 4: return $[$0-1]; \nbreak;\ncase 5: return $[$0-1]; \nbreak;\ncase 6: return $[$0-1]; \nbreak;\ncase 7: this.$ = new PointArray([ Number($[$0-1]), Number($[$0]) ]); \nbreak;\ncase 8: this.$ = new PointArray([ Number($[$0-2]), Number($[$0-1]), Number($[$0]) ]); \nbreak;\ncase 9: this.$ = new PointArray([ Number($[$0-3]), Number($[$0-2]), Number($[$0-1]), Number($[$0]) ]); \nbreak;\ncase 10: this.$ = $[$0-2].addPoint($[$0]); \nbreak;\ncase 11: this.$ = $[$0]; \nbreak;\ncase 12: this.$ = $[$0-2].addRing($[$0]); \nbreak;\ncase 13: this.$ = new RingList($[$0]); \nbreak;\ncase 14: this.$ = new Ring($[$0-1]); \nbreak;\ncase 15: this.$ = { \"type\": \"Point\", \"coordinates\": $[$0-1].data[0] }; \nbreak;\ncase 16: this.$ = { \"type\": \"Point\", \"coordinates\": $[$0-1].data[0], \"properties\": { z: true } }; \nbreak;\ncase 17: this.$ = { \"type\": \"Point\", \"coordinates\": $[$0-1].data[0], \"properties\": { z: true, m: true } }; \nbreak;\ncase 18: this.$ = { \"type\": \"Point\", \"coordinates\": $[$0-1].data[0], \"properties\": { m: true } }; \nbreak;\ncase 19: this.$ = { \"type\": \"Point\", \"coordinates\": [ ] }; \nbreak;\ncase 20: this.$ = $[$0]; \nbreak;\ncase 21: this.$ = $[$0-1]; \nbreak;\ncase 22: this.$ = $[$0-2].addPolygon($[$0]); \nbreak;\ncase 23: this.$ = new PolygonList($[$0]); \nbreak;\ncase 24: this.$ = $[$0-1]; \nbreak;\ncase 25: this.$ = $[$0-2].addPoint($[$0]); \nbreak;\ncase 26: this.$ = $[$0]; \nbreak;\ncase 27: this.$ = { \"type\": \"LineString\", \"coordinates\": $[$0-1].data }; \nbreak;\ncase 28: this.$ = { \"type\": \"LineString\", \"coordinates\": $[$0-1].data, \"properties\": { z: true } }; \nbreak;\ncase 29: this.$ = { \"type\": \"LineString\", \"coordinates\": $[$0-1].data, \"properties\": { m: true } }; \nbreak;\ncase 30: this.$ = { \"type\": \"LineString\", \"coordinates\": $[$0-1].data, \"properties\": { z: true, m: true } }; \nbreak;\ncase 31: this.$ = { \"type\": \"LineString\", \"coordinates\": [ ] }; \nbreak;\ncase 32: this.$ = { \"type\": \"Polygon\", \"coordinates\": $[$0-1].toJSON() }; \nbreak;\ncase 33: this.$ = { \"type\": \"Polygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true } }; \nbreak;\ncase 34: this.$ = { \"type\": \"Polygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { m: true } }; \nbreak;\ncase 35: this.$ = { \"type\": \"Polygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true, m: true } }; \nbreak;\ncase 36: this.$ = { \"type\": \"Polygon\", \"coordinates\": [ ] }; \nbreak;\ncase 37: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": $[$0-1].data }; \nbreak;\ncase 38: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": $[$0-1].data, \"properties\": { z: true } }; \nbreak;\ncase 39: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": $[$0-1].data, \"properties\": { m: true } }; \nbreak;\ncase 40: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": $[$0-1].data, \"properties\": { z: true, m: true } }; \nbreak;\ncase 41: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": [ ] } \nbreak;\ncase 42: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": $[$0-1].toJSON() }; \nbreak;\ncase 43: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true } }; \nbreak;\ncase 44: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { m: true } }; \nbreak;\ncase 45: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true, m: true } }; \nbreak;\ncase 46: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": [ ] }; \nbreak;\ncase 47: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": $[$0-1].toJSON() }; \nbreak;\ncase 48: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true } }; \nbreak;\ncase 49: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { m: true } }; \nbreak;\ncase 50: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true, m: true } }; \nbreak;\ncase 51: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": [ ] }; \nbreak;\n}\n},\ntable: [{3:1,4:2,6:3,7:4,8:5,9:6,10:7,19:[1,8],28:[1,9],29:[1,10],30:[1,11],31:[1,12],32:[1,13]},{1:[3]},{5:[1,14]},{5:[1,15]},{5:[1,16]},{5:[1,17]},{5:[1,18]},{5:[1,19]},{17:[1,20],20:[1,21],21:[1,22],22:[1,23],23:[1,24]},{17:[1,25],20:[1,26],21:[1,28],22:[1,27],23:[1,29]},{17:[1,30],20:[1,31],21:[1,33],22:[1,32],23:[1,34]},{17:[1,35],20:[1,36],21:[1,38],22:[1,37],23:[1,39]},{17:[1,40],20:[1,41],21:[1,43],22:[1,42],23:[1,44]},{17:[1,45],20:[1,46],21:[1,48],22:[1,47],23:[1,49]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{11:51,12:[1,52],13:50},{17:[1,53]},{17:[1,54]},{17:[1,55]},{5:[2,19]},{11:58,12:[1,52],17:[1,59],24:57,27:56},{17:[1,60]},{17:[1,61]},{17:[1,62]},{5:[2,31]},{15:63,16:64,17:[1,65]},{17:[1,66]},{17:[1,67]},{17:[1,68]},{5:[2,36]},{11:58,12:[1,52],17:[1,59],24:57,27:69},{17:[1,70]},{17:[1,71]},{17:[1,72]},{5:[2,41]},{15:73,16:64,17:[1,65]},{17:[1,74]},{17:[1,75]},{17:[1,76]},{5:[2,46]},{17:[1,79],25:77,26:78},{17:[1,80]},{17:[1,81]},{17:[1,82]},{5:[2,51]},{14:[1,84],18:[1,83]},{14:[2,11],18:[2,11]},{12:[1,85]},{11:51,12:[1,52],13:86},{11:51,12:[1,52],13:87},{11:51,12:[1,52],13:88},{14:[1,90],18:[1,89]},{14:[2,26],18:[2,26]},{14:[2,20],18:[2,20]},{11:91,12:[1,52]},{11:58,12:[1,52],17:[1,59],24:57,27:92},{11:58,12:[1,52],17:[1,59],24:57,27:93},{11:58,12:[1,52],17:[1,59],24:57,27:94},{14:[1,96],18:[1,95]},{14:[2,13],18:[2,13]},{11:51,12:[1,52],13:97},{15:98,16:64,17:[1,65]},{15:99,16:64,17:[1,65]},{15:100,16:64,17:[1,65]},{14:[1,90],18:[1,101]},{11:58,12:[1,52],17:[1,59],24:57,27:102},{11:58,12:[1,52],17:[1,59],24:57,27:103},{11:58,12:[1,52],17:[1,59],24:57,27:104},{14:[1,96],18:[1,105]},{15:106,16:64,17:[1,65]},{15:107,16:64,17:[1,65]},{15:108,16:64,17:[1,65]},{14:[1,110],18:[1,109]},{14:[2,23],18:[2,23]},{15:111,16:64,17:[1,65]},{17:[1,79],25:112,26:78},{17:[1,79],25:113,26:78},{17:[1,79],25:114,26:78},{5:[2,15]},{11:115,12:[1,52]},{12:[1,116],14:[2,7],18:[2,7]},{14:[1,84],18:[1,117]},{14:[1,84],18:[1,118]},{14:[1,84],18:[1,119]},{5:[2,27]},{11:58,12:[1,52],17:[1,59],24:120},{18:[1,121]},{14:[1,90],18:[1,122]},{14:[1,90],18:[1,123]},{14:[1,90],18:[1,124]},{5:[2,32]},{16:125,17:[1,65]},{14:[1,84],18:[1,126]},{14:[1,96],18:[1,127]},{14:[1,96],18:[1,128]},{14:[1,96],18:[1,129]},{5:[2,37]},{14:[1,90],18:[1,130]},{14:[1,90],18:[1,131]},{14:[1,90],18:[1,132]},{5:[2,42]},{14:[1,96],18:[1,133]},{14:[1,96],18:[1,134]},{14:[1,96],18:[1,135]},{5:[2,47]},{17:[1,79],26:136},{14:[1,96],18:[1,137]},{14:[1,110],18:[1,138]},{14:[1,110],18:[1,139]},{14:[1,110],18:[1,140]},{14:[2,10],18:[2,10]},{12:[1,141],14:[2,8],18:[2,8]},{5:[2,16]},{5:[2,17]},{5:[2,18]},{14:[2,25],18:[2,25]},{14:[2,21],18:[2,21]},{5:[2,28]},{5:[2,29]},{5:[2,30]},{14:[2,12],18:[2,12]},{14:[2,14],18:[2,14]},{5:[2,33]},{5:[2,34]},{5:[2,35]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,43]},{5:[2,44]},{5:[2,45]},{14:[2,22],18:[2,22]},{14:[2,24],18:[2,24]},{5:[2,48]},{5:[2,49]},{5:[2,50]},{14:[2,9],18:[2,9]}],\ndefaultActions: {14:[2,1],15:[2,2],16:[2,3],17:[2,4],18:[2,5],19:[2,6],24:[2,19],29:[2,31],34:[2,36],39:[2,41],44:[2,46],49:[2,51],83:[2,15],89:[2,27],95:[2,32],101:[2,37],105:[2,42],109:[2,47],117:[2,16],118:[2,17],119:[2,18],122:[2,28],123:[2,29],124:[2,30],127:[2,33],128:[2,34],129:[2,35],130:[2,38],131:[2,39],132:[2,40],133:[2,43],134:[2,44],135:[2,45],138:[2,48],139:[2,49],140:[2,50]},\nparseError: function parseError (str, hash) {\n throw new Error(str);\n},\nparse: function parse(input) {\n var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n this.yy.parser = this;\n if (typeof this.lexer.yylloc == \"undefined\")\n this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n var ranges = this.lexer.options && this.lexer.options.ranges;\n if (typeof this.yy.parseError === \"function\")\n this.parseError = this.yy.parseError;\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = self.lexer.lex() || 1;\n if (typeof token !== \"number\") {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n if (!recovering) {\n expected = [];\n for (p in table[state])\n if (this.terminals_[p] && p > 2) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n if (this.lexer.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1?\"end of input\":\"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n }\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0)\n recovering--;\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}\n};\nundefined/* Jison generated lexer */\nvar lexer = (function(){\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\nsetInput:function (input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n if (this.options.ranges) this.yylloc.range = [0,0];\n this.offset = 0;\n return this;\n },\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) this.yylloc.range[1]++;\n\n this._input = this._input.slice(1);\n return ch;\n },\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length-len-1);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length-1);\n this.matched = this.matched.substr(0, this.matched.length-1);\n\n if (lines.length-1) this.yylineno -= lines.length-1;\n var r = this.yylloc.range;\n\n this.yylloc = {first_line: this.yylloc.first_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n return this;\n },\nmore:function () {\n this._more = true;\n return this;\n },\nless:function (n) {\n this.unput(this.match.slice(n));\n },\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n },\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n },\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token,\n match,\n tempMatch,\n index,\n col,\n lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i=0;i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (!this.options.flex) break;\n }\n }\n if (match) {\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = {first_line: this.yylloc.last_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length};\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\n if (this.done && this._input) this.done = false;\n if (token) return token;\n else return;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n {text: \"\", token: null, line: this.yylineno});\n }\n },\nlex:function lex () {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\npopState:function popState () {\n return this.conditionStack.pop();\n },\n_currentRules:function _currentRules () {\n return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n },\ntopState:function () {\n return this.conditionStack[this.conditionStack.length-2];\n },\npushState:function begin (condition) {\n this.begin(condition);\n }});\nlexer.options = {};\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START\n) {\n\nvar YYSTATE=YY_START\nswitch($avoiding_name_collisions) {\ncase 0:// ignore\nbreak;\ncase 1:return 17\nbreak;\ncase 2:return 18\nbreak;\ncase 3:return 12\nbreak;\ncase 4:return 19\nbreak;\ncase 5:return 28\nbreak;\ncase 6:return 29\nbreak;\ncase 7:return 30\nbreak;\ncase 8:return 31\nbreak;\ncase 9:return 32\nbreak;\ncase 10:return 14\nbreak;\ncase 11:return 23\nbreak;\ncase 12:return 22\nbreak;\ncase 13:return 20\nbreak;\ncase 14:return 21\nbreak;\ncase 15:return 5\nbreak;\ncase 16:return \"INVALID\"\nbreak;\n}\n};\nlexer.rules = [/^(?:\\s+)/,/^(?:\\()/,/^(?:\\))/,/^(?:-?[0-9]+(\\.[0-9]+)?([eE][\\-\\+]?[0-9]+)?)/,/^(?:POINT\\b)/,/^(?:LINESTRING\\b)/,/^(?:POLYGON\\b)/,/^(?:MULTIPOINT\\b)/,/^(?:MULTILINESTRING\\b)/,/^(?:MULTIPOLYGON\\b)/,/^(?:,)/,/^(?:EMPTY\\b)/,/^(?:M\\b)/,/^(?:Z\\b)/,/^(?:ZM\\b)/,/^(?:$)/,/^(?:.)/];\nlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],\"inclusive\":true}};\nreturn lexer;})()\nparser.lexer = lexer;\nfunction Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n function PointArray (point) {\n this.data = [ point ];\n this.type = 'PointArray';\n }\n\n PointArray.prototype.addPoint = function (point) {\n if (point.type === 'PointArray') {\n this.data = this.data.concat(point.data);\n } else {\n this.data.push(point);\n }\n\n return this;\n };\n\n PointArray.prototype.toJSON = function () {\n return this.data;\n };\n\n function Ring (point) {\n this.data = point;\n this.type = 'Ring';\n }\n\n Ring.prototype.toJSON = function () {\n var data = [ ];\n\n for (var i = 0; i < this.data.data.length; i++) {\n data.push(this.data.data[i]);\n }\n\n return data;\n };\n\n function RingList (ring) {\n this.data = [ ring ];\n this.type = 'RingList';\n }\n\n RingList.prototype.addRing = function (ring) {\n this.data.push(ring);\n\n return this;\n };\n\n RingList.prototype.toJSON = function () {\n var data = [ ];\n\n for (var i = 0; i < this.data.length; i++) {\n data.push(this.data[i].toJSON());\n }\n\n if (data.length === 1) {\n return data;\n } else {\n return data;\n }\n };\n\n function PolygonList (polygon) {\n this.data = [ polygon ];\n this.type = 'PolygonList';\n }\n\n PolygonList.prototype.addPolygon = function (polygon) {\n this.data.push(polygon);\n\n return this;\n };\n\n PolygonList.prototype.toJSON = function () {\n var data = [ ];\n\n for (var i = 0; i < this.data.length; i++) {\n data = data.concat( [ this.data[i].toJSON() ] );\n }\n\n return data;\n };\n\n function _parse () {\n return parser.parse.apply(parser, arguments);\n }\n\n function parse (element) {\n var res, primitive;\n\n try {\n res = parser.parse(element);\n } catch (err) {\n throw Error(\"Unable to parse: \" + err);\n }\n\n return Terraformer.Primitive(res);\n }\n\n function arrayToRing (arr) {\n var parts = [ ], ret = '';\n\n for (var i = 0; i < arr.length; i++) {\n parts.push(arr[i].join(' '));\n }\n\n ret += '(' + parts.join(', ') + ')';\n\n return ret;\n\n }\n\n function pointToWKTPoint (primitive) {\n var ret = 'POINT ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates.length === 3) {\n // 3d or time? default to 3d\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates.length === 4) {\n // 3d and time\n ret += 'ZM ';\n }\n\n // include coordinates\n ret += '(' + primitive.coordinates.join(' ') + ')';\n\n return ret;\n }\n\n function lineStringToWKTLineString (primitive) {\n var ret = 'LINESTRING ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += arrayToRing(primitive.coordinates);\n\n return ret;\n }\n\n function polygonToWKTPolygon (primitive) {\n var ret = 'POLYGON ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0][0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0][0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += '(';\n var parts = [ ];\n for (var i = 0; i < primitive.coordinates.length; i++) {\n parts.push(arrayToRing(primitive.coordinates[i]));\n }\n\n ret += parts.join(', ');\n ret += ')';\n\n return ret;\n }\n\n function multiPointToWKTMultiPoint (primitive) {\n var ret = 'MULTIPOINT ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += arrayToRing(primitive.coordinates);\n\n return ret;\n }\n\n function multiLineStringToWKTMultiLineString (primitive) {\n var ret = 'MULTILINESTRING ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0][0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0][0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += '(';\n var parts = [ ];\n for (var i = 0; i < primitive.coordinates.length; i++) {\n parts.push(arrayToRing(primitive.coordinates[i]));\n }\n\n ret += parts.join(', ');\n ret += ')';\n\n return ret;\n }\n\n function multiPolygonToWKTMultiPolygon (primitive) {\n var ret = 'MULTIPOLYGON ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0 || primitive.coordinates[0][0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0][0][0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0][0][0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += '(';\n var inner = [ ];\n for (var c = 0; c < primitive.coordinates.length; c++) {\n var it = '(';\n var parts = [ ];\n for (var i = 0; i < primitive.coordinates[c].length; i++) {\n parts.push(arrayToRing(primitive.coordinates[c][i]));\n }\n\n it += parts.join(', ');\n it += ')';\n\n inner.push(it);\n }\n\n ret += inner.join(', ');\n ret += ')';\n\n return ret;\n }\n\n function convert (primitive) {\n switch (primitive.type) {\n case 'Point':\n return pointToWKTPoint(primitive);\n case 'LineString':\n return lineStringToWKTLineString(primitive);\n case 'Polygon':\n return polygonToWKTPolygon(primitive);\n case 'MultiPoint':\n return multiPointToWKTMultiPoint(primitive);\n case 'MultiLineString':\n return multiLineStringToWKTMultiLineString(primitive);\n case 'MultiPolygon':\n return multiPolygonToWKTMultiPolygon(primitive);\n case 'GeometryCollection':\n var ret = 'GEOMETRYCOLLECTION';\n var parts = [ ];\n for (i = 0; i < primitive.geometries.length; i++){\n parts.push(convert(primitive.geometries[i]));\n }\n return ret + '(' + parts.join(', ') + ')';\n default:\n throw Error (\"Unknown Type: \" + primitive.type);\n }\n }\n\n exports.parser = parser;\n exports.Parser = parser.Parser;\n exports.parse = parse;\n exports.convert = convert;\n\n return exports;\n}));\n","(function (root, factory) {\n\n // Node.\n if(typeof module === 'object' && typeof module.exports === 'object') {\n exports = module.exports = factory();\n }\n\n // Browser Global.\n if(typeof window === \"object\") {\n root.Terraformer = factory();\n }\n\n}(this, function(){\n \"use strict\";\n\n var exports = {},\n EarthRadius = 6378137,\n DegreesPerRadian = 57.295779513082320,\n RadiansPerDegree = 0.017453292519943,\n MercatorCRS = {\n \"type\": \"link\",\n \"properties\": {\n \"href\": \"http://spatialreference.org/ref/sr-org/6928/ogcwkt/\",\n \"type\": \"ogcwkt\"\n }\n },\n GeographicCRS = {\n \"type\": \"link\",\n \"properties\": {\n \"href\": \"http://spatialreference.org/ref/epsg/4326/ogcwkt/\",\n \"type\": \"ogcwkt\"\n }\n };\n\n /*\n Internal: isArray function\n */\n function isArray(obj) {\n return Object.prototype.toString.call(obj) === \"[object Array]\";\n }\n\n /*\n Internal: safe warning\n */\n function warn() {\n var args = Array.prototype.slice.apply(arguments);\n\n if (typeof console !== undefined && console.warn) {\n console.warn.apply(console, args);\n }\n }\n\n /*\n Internal: Extend one object with another.\n */\n function extend(destination, source) {\n for (var k in source) {\n if (source.hasOwnProperty(k)) {\n destination[k] = source[k];\n }\n }\n return destination;\n }\n\n /*\n Public: Calculate an bounding box for a geojson object\n */\n function calculateBounds (geojson) {\n if(geojson.type){\n switch (geojson.type) {\n case 'Point':\n return [ geojson.coordinates[0], geojson.coordinates[1], geojson.coordinates[0], geojson.coordinates[1]];\n\n case 'MultiPoint':\n return calculateBoundsFromArray(geojson.coordinates);\n\n case 'LineString':\n return calculateBoundsFromArray(geojson.coordinates);\n\n case 'MultiLineString':\n return calculateBoundsFromNestedArrays(geojson.coordinates);\n\n case 'Polygon':\n return calculateBoundsFromNestedArrays(geojson.coordinates);\n\n case 'MultiPolygon':\n return calculateBoundsFromNestedArrayOfArrays(geojson.coordinates);\n\n case 'Feature':\n return geojson.geometry? calculateBounds(geojson.geometry) : null;\n\n case 'FeatureCollection':\n return calculateBoundsForFeatureCollection(geojson);\n\n case 'GeometryCollection':\n return calculateBoundsForGeometryCollection(geojson);\n\n default:\n throw new Error(\"Unknown type: \" + geojson.type);\n }\n }\n return null;\n }\n\n /*\n Internal: Calculate an bounding box from an nested array of positions\n [\n [\n [ [lng, lat],[lng, lat],[lng, lat] ]\n ]\n [\n [lng, lat],[lng, lat],[lng, lat]\n ]\n [\n [lng, lat],[lng, lat],[lng, lat]\n ]\n ]\n */\n function calculateBoundsFromNestedArrays (array) {\n var x1 = null, x2 = null, y1 = null, y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var inner = array[i];\n\n for (var j = 0; j < inner.length; j++) {\n var lonlat = inner[j];\n\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n }\n\n return [x1, y1, x2, y2 ];\n }\n\n /*\n Internal: Calculate a bounding box from an array of arrays of arrays\n [\n [ [lng, lat],[lng, lat],[lng, lat] ]\n [ [lng, lat],[lng, lat],[lng, lat] ]\n [ [lng, lat],[lng, lat],[lng, lat] ]\n ]\n */\n function calculateBoundsFromNestedArrayOfArrays (array) {\n var x1 = null, x2 = null, y1 = null, y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var inner = array[i];\n\n for (var j = 0; j < inner.length; j++) {\n var innerinner = inner[j];\n for (var k = 0; k < innerinner.length; k++) {\n var lonlat = innerinner[k];\n\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n }\n }\n\n return [x1, y1, x2, y2];\n }\n\n /*\n Internal: Calculate a bounding box from an array of positions\n [\n [lng, lat],[lng, lat],[lng, lat]\n ]\n */\n function calculateBoundsFromArray (array) {\n var x1 = null, x2 = null, y1 = null, y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var lonlat = array[i];\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n\n return [x1, y1, x2, y2 ];\n }\n\n /*\n Internal: Calculate an bounding box for a feature collection\n */\n function calculateBoundsForFeatureCollection(featureCollection){\n var extents = [], extent;\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n extent = calculateBounds(featureCollection.features[i].geometry);\n extents.push([extent[0],extent[1]]);\n extents.push([extent[2],extent[3]]);\n }\n\n return calculateBoundsFromArray(extents);\n }\n\n /*\n Internal: Calculate an bounding box for a geometry collection\n */\n function calculateBoundsForGeometryCollection(geometryCollection){\n var extents = [], extent;\n\n for (var i = geometryCollection.geometries.length - 1; i >= 0; i--) {\n extent = calculateBounds(geometryCollection.geometries[i]);\n extents.push([extent[0],extent[1]]);\n extents.push([extent[2],extent[3]]);\n }\n\n return calculateBoundsFromArray(extents);\n }\n\n function calculateEnvelope(geojson){\n var bounds = calculateBounds(geojson);\n return {\n x: bounds[0],\n y: bounds[1],\n w: Math.abs(bounds[0] - bounds[2]),\n h: Math.abs(bounds[1] - bounds[3])\n };\n }\n\n /*\n Internal: Convert radians to degrees. Used by spatial reference converters.\n */\n function radToDeg(rad) {\n return rad * DegreesPerRadian;\n }\n\n /*\n Internal: Convert degrees to radians. Used by spatial reference converters.\n */\n function degToRad(deg) {\n return deg * RadiansPerDegree;\n }\n\n /*\n Internal: Loop over each array in a geojson object and apply a function to it. Used by spatial reference converters.\n */\n function eachPosition(coordinates, func) {\n for (var i = 0; i < coordinates.length; i++) {\n // we found a number so lets convert this pair\n if(typeof coordinates[i][0] === \"number\"){\n coordinates[i] = func(coordinates[i]);\n }\n // we found an coordinates array it again and run THIS function against it\n if(typeof coordinates[i] === \"object\"){\n coordinates[i] = eachPosition(coordinates[i], func);\n }\n }\n return coordinates;\n }\n\n /*\n Public: Convert a GeoJSON Position object to Geographic (4326)\n */\n function positionToGeographic(position) {\n var x = position[0];\n var y = position[1];\n return [radToDeg(x / EarthRadius) - (Math.floor((radToDeg(x / EarthRadius) + 180) / 360) * 360), radToDeg((Math.PI / 2) - (2 * Math.atan(Math.exp(-1.0 * y / EarthRadius))))];\n }\n\n /*\n Public: Convert a GeoJSON Position object to Web Mercator (102100)\n */\n function positionToMercator(position) {\n var lng = position[0];\n var lat = Math.max(Math.min(position[1], 89.99999), -89.99999);\n return [degToRad(lng) * EarthRadius, EarthRadius/2.0 * Math.log( (1.0 + Math.sin(degToRad(lat))) / (1.0 - Math.sin(degToRad(lat))) )];\n }\n\n /*\n Public: Apply a function agaist all positions in a geojson object. Used by spatial reference converters.\n */\n function applyConverter(geojson, converter, noCrs){\n if(geojson.type === \"Point\") {\n geojson.coordinates = converter(geojson.coordinates);\n } else if(geojson.type === \"Feature\") {\n geojson.geometry = applyConverter(geojson.geometry, converter, true);\n } else if(geojson.type === \"FeatureCollection\") {\n for (var f = 0; f < geojson.features.length; f++) {\n geojson.features[f] = applyConverter(geojson.features[f], converter, true);\n }\n } else if(geojson.type === \"GeometryCollection\") {\n for (var g = 0; g < geojson.geometries.length; g++) {\n geojson.geometries[g] = applyConverter(geojson.geometries[g], converter, true);\n }\n } else {\n geojson.coordinates = eachPosition(geojson.coordinates, converter);\n }\n\n if(!noCrs){\n if(converter === positionToMercator){\n geojson.crs = MercatorCRS;\n }\n }\n\n if(converter === positionToGeographic){\n delete geojson.crs;\n }\n\n return geojson;\n }\n\n /*\n Public: Convert a GeoJSON object to ESRI Web Mercator (102100)\n */\n function toMercator(geojson) {\n return applyConverter(geojson, positionToMercator);\n }\n\n /*\n Convert a GeoJSON object to Geographic coordinates (WSG84, 4326)\n */\n function toGeographic(geojson) {\n return applyConverter(geojson, positionToGeographic);\n }\n\n\n /*\n Internal: -1,0,1 comparison function\n */\n function cmp(a, b) {\n if(a < b) {\n return -1;\n } else if(a > b) {\n return 1;\n } else {\n return 0;\n }\n }\n\n /*\n Internal: used for sorting\n */\n function compSort(p1, p2) {\n if (p1[0] > p2[0]) {\n return -1;\n } else if (p1[0] < p2[0]) {\n return 1;\n } else if (p1[1] > p2[1]) {\n return -1;\n } else if (p1[1] < p2[1]) {\n return 1;\n } else {\n return 0;\n }\n }\n\n\n /*\n Internal: used to determine turn\n */\n function turn(p, q, r) {\n // Returns -1, 0, 1 if p,q,r forms a right, straight, or left turn.\n return cmp((q[0] - p[0]) * (r[1] - p[1]) - (r[0] - p[0]) * (q[1] - p[1]), 0);\n }\n\n /*\n Internal: used to determine euclidean distance between two points\n */\n function euclideanDistance(p, q) {\n // Returns the squared Euclidean distance between p and q.\n var dx = q[0] - p[0];\n var dy = q[1] - p[1];\n\n return dx * dx + dy * dy;\n }\n\n function nextHullPoint(points, p) {\n // Returns the next point on the convex hull in CCW from p.\n var q = p;\n for(var r in points) {\n var t = turn(p, q, points[r]);\n if(t === -1 || t === 0 && euclideanDistance(p, points[r]) > euclideanDistance(p, q)) {\n q = points[r];\n }\n }\n return q;\n }\n\n function convexHull(points) {\n // implementation of the Jarvis March algorithm\n // adapted from http://tixxit.wordpress.com/2009/12/09/jarvis-march/\n\n if(points.length === 0) {\n return [];\n } else if(points.length === 1) {\n return points;\n }\n\n // Returns the points on the convex hull of points in CCW order.\n var hull = [points.sort(compSort)[0]];\n\n for(var p = 0; p < hull.length; p++) {\n var q = nextHullPoint(points, hull[p]);\n\n if(q !== hull[0]) {\n hull.push(q);\n }\n }\n\n return hull;\n }\n\n function isConvex(points) {\n var ltz;\n\n for (var i = 0; i < points.length - 3; i++) {\n var p1 = points[i];\n var p2 = points[i + 1];\n var p3 = points[i + 2];\n var v = [p2[0] - p1[0], p2[1] - p1[1]];\n\n // p3.x * v.y - p3.y * v.x + v.x * p1.y - v.y * p1.x\n var res = p3[0] * v[1] - p3[1] * v[0] + v[0] * p1[1] - v[1] * p1[0];\n\n if (i === 0) {\n if (res < 0) {\n ltz = true;\n } else {\n ltz = false;\n }\n } else {\n if (ltz && (res > 0) || !ltz && (res < 0)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n function polygonContainsPoint(polygon, point) {\n if (polygon && polygon.length) {\n if (polygon.length === 1) { // polygon with no holes\n return coordinatesContainPoint(polygon[0], point);\n } else { // polygon with holes\n if (coordinatesContainPoint(polygon[0], point)) {\n for (var i = 1; i < polygon.length; i++) {\n if (coordinatesContainPoint(polygon[i], point)) {\n return false; // found in hole\n }\n }\n\n return true;\n } else {\n return false;\n }\n }\n } else {\n return false;\n }\n }\n\n function edgeIntersectsEdge(a1, a2, b1, b2) {\n var ua_t = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ub_t = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var u_b = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( u_b !== 0 ) {\n var ua = ua_t / u_b;\n var ub = ub_t / u_b;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function arraysIntersectArrays(a, b) {\n if (isNumber(a[0][0])) {\n if (isNumber(b[0][0])) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (edgeIntersectsEdge(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n } else {\n for (var k = 0; k < b.length; k++) {\n if (arraysIntersectArrays(a, b[k])) {\n return true;\n }\n }\n }\n } else {\n for (var l = 0; l < a.length; l++) {\n if (arraysIntersectArrays(a[l], b)) {\n return true;\n }\n }\n }\n return false;\n }\n\n /*\n Internal: Returns a copy of coordinates for s closed polygon\n */\n function closedPolygon(coordinates) {\n var outer = [ ];\n\n for (var i = 0; i < coordinates.length; i++) {\n var inner = coordinates[i].slice();\n if (pointsEqual(inner[0], inner[inner.length - 1]) === false) {\n inner.push(inner[0]);\n }\n\n outer.push(inner);\n }\n\n return outer;\n }\n\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n function coordinatesEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n\n var na = a.slice().sort(compSort);\n var nb = b.slice().sort(compSort);\n\n for (var i = 0; i < na.length; i++) {\n if (na[i].length !== nb[i].length) {\n return false;\n }\n for (var j = 0; j < na.length; j++) {\n if (na[i][j] !== nb[i][j]) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /*\n Internal: An array of variables that will be excluded form JSON objects.\n */\n var excludeFromJSON = [\"length\"];\n\n /*\n Internal: Base GeoJSON Primitive\n */\n function Primitive(geojson){\n if(geojson){\n switch (geojson.type) {\n case 'Point':\n return new Point(geojson);\n\n case 'MultiPoint':\n return new MultiPoint(geojson);\n\n case 'LineString':\n return new LineString(geojson);\n\n case 'MultiLineString':\n return new MultiLineString(geojson);\n\n case 'Polygon':\n return new Polygon(geojson);\n\n case 'MultiPolygon':\n return new MultiPolygon(geojson);\n\n case 'Feature':\n return new Feature(geojson);\n\n case 'FeatureCollection':\n return new FeatureCollection(geojson);\n\n case 'GeometryCollection':\n return new GeometryCollection(geojson);\n\n default:\n throw new Error(\"Unknown type: \" + geojson.type);\n }\n }\n }\n\n Primitive.prototype.toMercator = function(){\n return toMercator(this);\n };\n\n Primitive.prototype.toGeographic = function(){\n return toGeographic(this);\n };\n\n Primitive.prototype.envelope = function(){\n return calculateEnvelope(this);\n };\n\n Primitive.prototype.bbox = function(){\n return calculateBounds(this);\n };\n\n Primitive.prototype.convexHull = function(){\n var coordinates = [ ], i, j;\n if (this.type === 'Point') {\n return null;\n } else if (this.type === 'LineString' || this.type === 'MultiPoint') {\n if (this.coordinates && this.coordinates.length >= 3) {\n coordinates = this.coordinates;\n } else {\n return null;\n }\n } else if (this.type === 'Polygon' || this.type === 'MultiLineString') {\n if (this.coordinates && this.coordinates.length > 0) {\n for (i = 0; i < this.coordinates.length; i++) {\n coordinates = coordinates.concat(this.coordinates[i]);\n }\n if(coordinates.length < 3){\n return null;\n }\n } else {\n return null;\n }\n } else if (this.type === 'MultiPolygon') {\n if (this.coordinates && this.coordinates.length > 0) {\n for (i = 0; i < this.coordinates.length; i++) {\n for (j = 0; j < this.coordinates[i].length; j++) {\n coordinates = coordinates.concat(this.coordinates[i][j]);\n }\n }\n if(coordinates.length < 3){\n return null;\n }\n } else {\n return null;\n }\n } else if(this.type === \"Feature\"){\n var primitive = new Primitive(this.geometry);\n return primitive.convexHull();\n }\n\n return new Polygon({\n type: 'Polygon',\n coordinates: closedPolygon([convexHull(coordinates)])\n });\n };\n\n Primitive.prototype.toJSON = function(){\n var obj = {};\n for (var key in this) {\n if (this.hasOwnProperty(key) && excludeFromJSON.indexOf(key) === -1) {\n obj[key] = this[key];\n }\n }\n obj.bbox = calculateBounds(this);\n return obj;\n };\n\n Primitive.prototype.contains = function(primitive){\n return new Primitive(primitive).within(this);\n };\n\n Primitive.prototype.within = function(primitive) {\n var coordinates, i, j, contains;\n\n // if we are passed a feature, use the polygon inside instead\n if (primitive.type === 'Feature') {\n primitive = primitive.geometry;\n }\n\n // point.within(point) :: equality\n if (primitive.type === \"Point\") {\n if (this.type === \"Point\") {\n return pointsEqual(this.coordinates, primitive.coordinates);\n\n }\n }\n\n // point.within(multilinestring)\n if (primitive.type === \"MultiLineString\") {\n if (this.type === \"Point\") {\n for (i = 0; i < primitive.coordinates.length; i++) {\n var linestring = { type: \"LineString\", coordinates: primitive.coordinates[i] };\n\n if (this.within(linestring)) {\n return true;\n }\n }\n }\n }\n\n // point.within(linestring), point.within(multipoint)\n if (primitive.type === \"LineString\" || primitive.type === \"MultiPoint\") {\n if (this.type === \"Point\") {\n for (i = 0; i < primitive.coordinates.length; i++) {\n if (this.coordinates.length !== primitive.coordinates[i].length) {\n return false;\n }\n\n if (pointsEqual(this.coordinates, primitive.coordinates[i])) {\n return true;\n }\n }\n }\n }\n\n if (primitive.type === \"Polygon\") {\n // polygon.within(polygon)\n if (this.type === \"Polygon\") {\n // check for equal polygons\n if (primitive.coordinates.length === this.coordinates.length) {\n for (i = 0; i < this.coordinates.length; i++) {\n if (coordinatesEqual(this.coordinates[i], primitive.coordinates[i])) {\n return true;\n }\n }\n }\n\n if (this.coordinates.length && polygonContainsPoint(primitive.coordinates, this.coordinates[0][0])) {\n return !arraysIntersectArrays(closedPolygon(this.coordinates), closedPolygon(primitive.coordinates));\n } else {\n return false;\n }\n\n // point.within(polygon)\n } else if (this.type === \"Point\") {\n return polygonContainsPoint(primitive.coordinates, this.coordinates);\n\n // linestring/multipoint withing polygon\n } else if (this.type === \"LineString\" || this.type === \"MultiPoint\") {\n if (!this.coordinates || this.coordinates.length === 0) {\n return false;\n }\n\n for (i = 0; i < this.coordinates.length; i++) {\n if (polygonContainsPoint(primitive.coordinates, this.coordinates[i]) === false) {\n return false;\n }\n }\n\n return true;\n\n // multilinestring.within(polygon)\n } else if (this.type === \"MultiLineString\") {\n for (i = 0; i < this.coordinates.length; i++) {\n var ls = new LineString(this.coordinates[i]);\n\n if (ls.within(primitive) === false) {\n contains++;\n return false;\n }\n }\n\n return true;\n\n // multipolygon.within(polygon)\n } else if (this.type === \"MultiPolygon\") {\n for (i = 0; i < this.coordinates.length; i++) {\n var p1 = new Primitive({ type: \"Polygon\", coordinates: this.coordinates[i] });\n\n if (p1.within(primitive) === false) {\n return false;\n }\n }\n\n return true;\n }\n\n }\n\n if (primitive.type === \"MultiPolygon\") {\n // point.within(multipolygon)\n if (this.type === \"Point\") {\n if (primitive.coordinates.length) {\n for (i = 0; i < primitive.coordinates.length; i++) {\n coordinates = primitive.coordinates[i];\n if (polygonContainsPoint(coordinates, this.coordinates) && arraysIntersectArrays([this.coordinates], primitive.coordinates) === false) {\n return true;\n }\n }\n }\n\n return false;\n // polygon.within(multipolygon)\n } else if (this.type === \"Polygon\") {\n for (i = 0; i < this.coordinates.length; i++) {\n if (primitive.coordinates[i].length === this.coordinates.length) {\n for (j = 0; j < this.coordinates.length; j++) {\n if (coordinatesEqual(this.coordinates[j], primitive.coordinates[i][j])) {\n return true;\n }\n }\n }\n }\n\n if (arraysIntersectArrays(this.coordinates, primitive.coordinates) === false) {\n if (primitive.coordinates.length) {\n for (i = 0; i < primitive.coordinates.length; i++) {\n coordinates = primitive.coordinates[i];\n if (polygonContainsPoint(coordinates, this.coordinates[0][0]) === false) {\n contains = false;\n } else {\n contains = true;\n }\n }\n\n return contains;\n }\n }\n\n // linestring.within(multipolygon), multipoint.within(multipolygon)\n } else if (this.type === \"LineString\" || this.type === \"MultiPoint\") {\n for (i = 0; i < primitive.coordinates.length; i++) {\n var p = { type: \"Polygon\", coordinates: primitive.coordinates[i] };\n\n if (this.within(p)) {\n return true;\n }\n\n return false;\n }\n\n // multilinestring.within(multipolygon)\n } else if (this.type === \"MultiLineString\") {\n for (i = 0; i < this.coordinates.length; i++) {\n var lines = new LineString(this.coordinates[i]);\n\n if (lines.within(primitive) === false) {\n return false;\n }\n }\n\n return true;\n\n // multipolygon.within(multipolygon)\n } else if (this.type === \"MultiPolygon\") {\n for (i = 0; i < primitive.coordinates.length; i++) {\n var mpoly = { type: \"Polygon\", coordinates: primitive.coordinates[i] };\n\n if (this.within(mpoly) === false) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n // default to false\n return false;\n };\n\n Primitive.prototype.intersects = function(primitive) {\n // if we are passed a feature, use the polygon inside instead\n if (primitive.type === 'Feature') {\n primitive = primitive.geometry;\n }\n\n var p = new Primitive(primitive);\n if (this.within(primitive) || p.within(this)) {\n return true;\n }\n\n\n if (this.type !== 'Point' && this.type !== 'MultiPoint' &&\n primitive.type !== 'Point' && primitive.type !== 'MultiPoint') {\n return arraysIntersectArrays(this.coordinates, primitive.coordinates);\n } else if (this.type === 'Feature') {\n // in the case of a Feature, use the internal primitive for intersection\n var inner = new Primitive(this.geometry);\n return inner.intersects(primitive);\n }\n\n warn(\"Type \" + this.type + \" to \" + primitive.type + \" intersection is not supported by intersects\");\n return false;\n };\n\n\n /*\n GeoJSON Point Class\n new Point();\n new Point(x,y,z,wtf);\n new Point([x,y,z,wtf]);\n new Point([x,y]);\n new Point({\n type: \"Point\",\n coordinates: [x,y]\n });\n */\n function Point(input){\n var args = Array.prototype.slice.call(arguments);\n\n if(input && input.type === \"Point\" && input.coordinates){\n extend(this, input);\n } else if(input && isArray(input)) {\n this.coordinates = input;\n } else if(args.length >= 2) {\n this.coordinates = args;\n } else {\n throw \"Terraformer: invalid input for Terraformer.Point\";\n }\n\n this.type = \"Point\";\n }\n\n Point.prototype = new Primitive();\n Point.prototype.constructor = Point;\n\n /*\n GeoJSON MultiPoint Class\n new MultiPoint();\n new MultiPoint([[x,y], [x1,y1]]);\n new MultiPoint({\n type: \"MultiPoint\",\n coordinates: [x,y]\n });\n */\n function MultiPoint(input){\n if(input && input.type === \"MultiPoint\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.MultiPoint\";\n }\n\n this.type = \"MultiPoint\";\n }\n\n MultiPoint.prototype = new Primitive();\n MultiPoint.prototype.constructor = MultiPoint;\n MultiPoint.prototype.forEach = function(func){\n for (var i = 0; i < this.coordinates.length; i++) {\n func.apply(this, [this.coordinates[i], i, this.coordinates]);\n }\n return this;\n };\n MultiPoint.prototype.addPoint = function(point){\n this.coordinates.push(point);\n return this;\n };\n MultiPoint.prototype.insertPoint = function(point, index){\n this.coordinates.splice(index, 0, point);\n return this;\n };\n MultiPoint.prototype.removePoint = function(remove){\n if(typeof remove === \"number\"){\n this.coordinates.splice(remove, 1);\n } else {\n this.coordinates.splice(this.coordinates.indexOf(remove), 1);\n }\n return this;\n };\n MultiPoint.prototype.get = function(i){\n return new Point(this.coordinates[i]);\n };\n\n /*\n GeoJSON LineString Class\n new LineString();\n new LineString([[x,y], [x1,y1]]);\n new LineString({\n type: \"LineString\",\n coordinates: [x,y]\n });\n */\n function LineString(input){\n if(input && input.type === \"LineString\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.LineString\";\n }\n\n this.type = \"LineString\";\n }\n\n LineString.prototype = new Primitive();\n LineString.prototype.constructor = LineString;\n LineString.prototype.addVertex = function(point){\n this.coordinates.push(point);\n return this;\n };\n LineString.prototype.insertVertex = function(point, index){\n this.coordinates.splice(index, 0, point);\n return this;\n };\n LineString.prototype.removeVertex = function(remove){\n this.coordinates.splice(remove, 1);\n return this;\n };\n\n /*\n GeoJSON MultiLineString Class\n new MultiLineString();\n new MultiLineString([ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ]);\n new MultiLineString({\n type: \"MultiLineString\",\n coordinates: [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ]\n });\n */\n function MultiLineString(input){\n if(input && input.type === \"MultiLineString\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.MultiLineString\";\n }\n\n this.type = \"MultiLineString\";\n }\n\n MultiLineString.prototype = new Primitive();\n MultiLineString.prototype.constructor = MultiLineString;\n MultiLineString.prototype.forEach = function(func){\n for (var i = 0; i < this.coordinates.length; i++) {\n func.apply(this, [this.coordinates[i], i, this.coordinates ]);\n }\n };\n MultiLineString.prototype.get = function(i){\n return new LineString(this.coordinates[i]);\n };\n\n /*\n GeoJSON Polygon Class\n new Polygon();\n new Polygon([ [[x,y], [x1,y1], [x2,y2]] ]);\n new Polygon({\n type: \"Polygon\",\n coordinates: [ [[x,y], [x1,y1], [x2,y2]] ]\n });\n */\n function Polygon(input){\n if(input && input.type === \"Polygon\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.Polygon\";\n }\n\n this.type = \"Polygon\";\n }\n\n Polygon.prototype = new Primitive();\n Polygon.prototype.constructor = Polygon;\n Polygon.prototype.addVertex = function(point){\n this.insertVertex(point, this.coordinates[0].length - 1);\n return this;\n };\n Polygon.prototype.insertVertex = function(point, index){\n this.coordinates[0].splice(index, 0, point);\n return this;\n };\n Polygon.prototype.removeVertex = function(remove){\n this.coordinates[0].splice(remove, 1);\n return this;\n };\n Polygon.prototype.close = function() {\n this.coordinates = closedPolygon(this.coordinates);\n };\n Polygon.prototype.hasHoles = function() {\n return this.coordinates.length > 1;\n };\n Polygon.prototype.holes = function() {\n var holes = [];\n if (this.hasHoles()) {\n for (var i = 1; i < this.coordinates.length; i++) {\n holes.push(new Polygon([this.coordinates[i]]));\n }\n }\n return holes;\n };\n\n /*\n GeoJSON MultiPolygon Class\n new MultiPolygon();\n new MultiPolygon([ [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ] ]);\n new MultiPolygon({\n type: \"MultiPolygon\",\n coordinates: [ [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ] ]\n });\n */\n function MultiPolygon(input){\n if(input && input.type === \"MultiPolygon\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.MultiPolygon\";\n }\n\n this.type = \"MultiPolygon\";\n }\n\n MultiPolygon.prototype = new Primitive();\n MultiPolygon.prototype.constructor = MultiPolygon;\n MultiPolygon.prototype.forEach = function(func){\n for (var i = 0; i < this.coordinates.length; i++) {\n func.apply(this, [this.coordinates[i], i, this.coordinates ]);\n }\n };\n MultiPolygon.prototype.get = function(i){\n return new Polygon(this.coordinates[i]);\n };\n MultiPolygon.prototype.close = function(){\n var outer = [];\n this.forEach(function(polygon){\n outer.push(closedPolygon(polygon));\n });\n this.coordinates = outer;\n return this;\n };\n\n /*\n GeoJSON Feature Class\n new Feature();\n new Feature({\n type: \"Feature\",\n geometry: {\n type: \"Polygon\",\n coordinates: [ [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ] ]\n }\n });\n new Feature({\n type: \"Polygon\",\n coordinates: [ [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ] ]\n });\n */\n function Feature(input){\n if(input && input.type === \"Feature\"){\n extend(this, input);\n } else if(input && input.type && input.coordinates) {\n this.geometry = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.Feature\";\n }\n\n this.type = \"Feature\";\n }\n\n Feature.prototype = new Primitive();\n Feature.prototype.constructor = Feature;\n\n /*\n GeoJSON FeatureCollection Class\n new FeatureCollection();\n new FeatureCollection([feature, feature1]);\n new FeatureCollection({\n type: \"FeatureCollection\",\n coordinates: [feature, feature1]\n });\n */\n function FeatureCollection(input){\n if(input && input.type === \"FeatureCollection\" && input.features){\n extend(this, input);\n } else if(isArray(input)) {\n this.features = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.FeatureCollection\";\n }\n\n this.type = \"FeatureCollection\";\n }\n\n FeatureCollection.prototype = new Primitive();\n FeatureCollection.prototype.constructor = FeatureCollection;\n FeatureCollection.prototype.forEach = function(func){\n for (var i = 0; i < this.features.length; i++) {\n func.apply(this, [this.features[i], i, this.features]);\n }\n };\n FeatureCollection.prototype.get = function(id){\n var found;\n this.forEach(function(feature){\n if(feature.id === id){\n found = feature;\n }\n });\n return new Feature(found);\n };\n\n /*\n GeoJSON GeometryCollection Class\n new GeometryCollection();\n new GeometryCollection([geometry, geometry1]);\n new GeometryCollection({\n type: \"GeometryCollection\",\n coordinates: [geometry, geometry1]\n });\n */\n function GeometryCollection(input){\n if(input && input.type === \"GeometryCollection\" && input.geometries){\n extend(this, input);\n } else if(isArray(input)) {\n this.geometries = input;\n } else if(input.coordinates && input.type){\n this.type = \"GeometryCollection\";\n this.geometries = [input];\n } else {\n throw \"Terraformer: invalid input for Terraformer.GeometryCollection\";\n }\n\n this.type = \"GeometryCollection\";\n }\n\n GeometryCollection.prototype = new Primitive();\n GeometryCollection.prototype.constructor = GeometryCollection;\n GeometryCollection.prototype.forEach = function(func){\n for (var i = 0; i < this.geometries.length; i++) {\n func.apply(this, [this.geometries[i], i, this.geometries]);\n }\n };\n GeometryCollection.prototype.get = function(i){\n return new Primitive(this.geometries[i]);\n };\n\n function createCircle(center, radius, interpolate){\n var mercatorPosition = positionToMercator(center);\n var steps = interpolate || 64;\n var polygon = {\n type: \"Polygon\",\n coordinates: [[]]\n };\n for(var i=1; i<=steps; i++) {\n var radians = i * (360/steps) * Math.PI / 180;\n polygon.coordinates[0].push([mercatorPosition[0] + radius * Math.cos(radians), mercatorPosition[1] + radius * Math.sin(radians)]);\n }\n polygon.coordinates = closedPolygon(polygon.coordinates);\n\n return toGeographic(polygon);\n }\n\n function Circle (center, radius, interpolate) {\n var steps = interpolate || 64;\n var rad = radius || 250;\n\n if(!center || center.length < 2 || !rad || !steps) {\n throw new Error(\"Terraformer: missing parameter for Terraformer.Circle\");\n }\n\n extend(this, new Feature({\n type: \"Feature\",\n geometry: createCircle(center, rad, steps),\n properties: {\n radius: rad,\n center: center,\n steps: steps\n }\n }));\n }\n\n Circle.prototype = new Primitive();\n Circle.prototype.constructor = Circle;\n Circle.prototype.recalculate = function(){\n this.geometry = createCircle(this.properties.center, this.properties.radius, this.properties.steps);\n return this;\n };\n Circle.prototype.center = function(coordinates){\n if(coordinates){\n this.properties.center = coordinates;\n this.recalculate();\n }\n return this.properties.center;\n };\n Circle.prototype.radius = function(radius){\n if(radius){\n this.properties.radius = radius;\n this.recalculate();\n }\n return this.properties.radius;\n };\n Circle.prototype.steps = function(steps){\n if(steps){\n this.properties.steps = steps;\n this.recalculate();\n }\n return this.properties.steps;\n };\n\n Circle.prototype.toJSON = function() {\n var output = Primitive.prototype.toJSON.call(this);\n return output;\n };\n\n exports.Primitive = Primitive;\n exports.Point = Point;\n exports.MultiPoint = MultiPoint;\n exports.LineString = LineString;\n exports.MultiLineString = MultiLineString;\n exports.Polygon = Polygon;\n exports.MultiPolygon = MultiPolygon;\n exports.Feature = Feature;\n exports.FeatureCollection = FeatureCollection;\n exports.GeometryCollection = GeometryCollection;\n exports.Circle = Circle;\n\n exports.toMercator = toMercator;\n exports.toGeographic = toGeographic;\n\n exports.Tools = {};\n exports.Tools.positionToMercator = positionToMercator;\n exports.Tools.positionToGeographic = positionToGeographic;\n exports.Tools.applyConverter = applyConverter;\n exports.Tools.toMercator = toMercator;\n exports.Tools.toGeographic = toGeographic;\n exports.Tools.createCircle = createCircle;\n\n exports.Tools.calculateBounds = calculateBounds;\n exports.Tools.calculateEnvelope = calculateEnvelope;\n\n exports.Tools.coordinatesContainPoint = coordinatesContainPoint;\n exports.Tools.polygonContainsPoint = polygonContainsPoint;\n exports.Tools.arraysIntersectArrays = arraysIntersectArrays;\n exports.Tools.coordinatesContainPoint = coordinatesContainPoint;\n exports.Tools.coordinatesEqual = coordinatesEqual;\n exports.Tools.convexHull = convexHull;\n exports.Tools.isConvex = isConvex;\n\n exports.MercatorCRS = MercatorCRS;\n exports.GeographicCRS = GeographicCRS;\n\n return exports;\n}));\n","/* globals Terraformer */\n(function (root, factory) {\n\n // Node.\n if(typeof module === 'object' && typeof module.exports === 'object') {\n exports = module.exports = factory(require('terraformer'));\n }\n\n // Browser Global.\n if(typeof root.navigator === \"object\") {\n if (!root.Terraformer){\n throw new Error(\"Terraformer.ArcGIS requires the core Terraformer library. https://github.com/esri/Terraformer\");\n }\n root.Terraformer.ArcGIS = factory(root.Terraformer);\n }\n\n}(this, function(Terraformer) {\n var exports = {};\n\n // https://github.com/Esri/terraformer-arcgis-parser/issues/10\n function decompressGeometry(str) {\n var xDiffPrev = 0;\n var yDiffPrev = 0;\n var points = [];\n var x, y;\n var strings;\n var coefficient;\n\n // Split the string into an array on the + and - characters\n strings = str.match(/((\\+|\\-)[^\\+\\-]+)/g);\n\n // The first value is the coefficient in base 32\n coefficient = parseInt(strings[0], 32);\n\n for (var j = 1; j < strings.length; j += 2) {\n // j is the offset for the x value\n // Convert the value from base 32 and add the previous x value\n x = (parseInt(strings[j], 32) + xDiffPrev);\n xDiffPrev = x;\n\n // j+1 is the offset for the y value\n // Convert the value from base 32 and add the previous y value\n y = (parseInt(strings[j + 1], 32) + yDiffPrev);\n yDiffPrev = y;\n\n points.push([x / coefficient, y / coefficient]);\n }\n\n return points;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // [\n // [\n // [ array of outer coordinates ]\n // [ hole coordinates ]\n // [ hole coordinates ]\n // ],\n // [\n // [ array of outer coordinates ]\n // [ hole coordinates ]\n // [ hole coordinates ]\n // ],\n // ]\n // becomes\n // [\n // [ array of outer coordinates ]\n // [ hole coordinates ]\n // [ hole coordinates ]\n // [ array of outer coordinates ]\n // [ hole coordinates ]\n // [ hole coordinates ]\n // ]\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n function coordinatesContainCoordinates(outer, inner){\n var intersects = Terraformer.Tools.arraysIntersectArrays(outer, inner);\n var contains = Terraformer.Tools.coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring.slice().reverse() ]; // wind outer rings counterclockwise for RFC 7946 compliance\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring.slice().reverse()); // wind inner rings clockwise for RFC 7946 compliance\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can now try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(Terraformer.Tools.arraysIntersectArrays(outerRing, hole)){\n // the hole intersects the outer ring push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n // hole does not intersect ANY outer ring at this point\n // make it an outer ring.\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // ArcGIS -> GeoJSON\n function parse(arcgis, options){\n var geojson = {};\n\n options = options || {};\n options.idAttribute = options.idAttribute || undefined;\n\n if (arcgis.spatialReference && (arcgis.spatialReference.wkid === 3857 || arcgis.spatialReference.wkid === 102100)) {\n geojson.crs = Terraformer.MercatorCRS;\n }\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = \"Point\";\n geojson.coordinates = [arcgis.x, arcgis.y];\n if (arcgis.z || arcgis.m){\n geojson.coordinates.push(arcgis.z);\n }\n if (arcgis.m){\n geojson.coordinates.push(arcgis.m);\n }\n }\n\n if(arcgis.points){\n geojson.type = \"MultiPoint\";\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = \"LineString\";\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = \"MultiLineString\";\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(\n typeof arcgis.xmin === \"number\" &&\n typeof arcgis.ymin === \"number\" &&\n typeof arcgis.xmax === \"number\" &&\n typeof arcgis.ymax === \"number\"\n ) {\n geojson.type = \"Polygon\";\n geojson.coordinates = [[\n [arcgis.xmax, arcgis.ymax],\n [arcgis.xmin, arcgis.ymax],\n [arcgis.xmin, arcgis.ymin],\n [arcgis.xmax, arcgis.ymin],\n [arcgis.xmax, arcgis.ymax]\n ]];\n }\n\n if(arcgis.compressedGeometry || arcgis.geometry || arcgis.attributes) {\n geojson.type = \"Feature\";\n\n if(arcgis.compressedGeometry){\n arcgis.geometry = {\n paths: [\n decompressGeometry(arcgis.compressedGeometry)\n ]\n };\n }\n\n geojson.geometry = (arcgis.geometry) ? parse(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[options.idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return new Terraformer.Primitive(geojson);\n }\n\n // GeoJSON -> ArcGIS\n function convert(geojson, options){\n var spatialReference;\n\n options = options || {};\n var idAttribute = options.idAttribute || \"OBJECTID\";\n\n if(options.sr){\n spatialReference = { wkid: options.sr };\n } else if (geojson && geojson.crs && geojson.crs.properties.name != \"urn:ogc:def:crs:OGC:1.3:CRS84\") {\n spatialReference = null;\n } else {\n spatialReference = { wkid: 4326 };\n }\n\n var result = {};\n var i;\n\n switch(geojson.type){\n case \"Point\":\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n if(geojson.coordinates[2]) {\n result.z = geojson.coordinates[2];\n }\n if(geojson.coordinates[3]) {\n result.m = geojson.coordinates[3];\n }\n result.spatialReference = spatialReference;\n break;\n case \"MultiPoint\":\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case \"LineString\":\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case \"MultiLineString\":\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case \"Polygon\":\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case \"MultiPolygon\":\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case \"Feature\":\n if(geojson.geometry) {\n result.geometry = convert(geojson.geometry, options);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id) {\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case \"FeatureCollection\":\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(convert(geojson.features[i], options));\n }\n break;\n case \"GeometryCollection\":\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(convert(geojson.geometries[i], options));\n }\n break;\n }\n\n return result;\n }\n\n function parseCompressedGeometry(string){\n return new Terraformer.LineString(decompressGeometry(string));\n }\n\n exports.parse = parse;\n exports.convert = convert;\n exports.toGeoJSON = parse;\n exports.fromGeoJSON = convert;\n exports.parseCompressedGeometry = parseCompressedGeometry;\n\n return exports;\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"\";","/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('loading-box',{attrs:{\"loading\":_vm.isLoading}},[_c('div',{staticClass:\"arcgisMap-box\"},[_c('div',{staticClass:\"arcgisMapBox\",attrs:{\"id\":_vm.mapId}}),(_vm.pathCoordinates.length > 0 && _vm.noAbleMoving)?_c('div',{staticClass:\"controls\"},[_c('div',{staticClass:\"controls-item\",class:{ 'controls-active': _vm.currentPathIndex > 0 },on:{\"click\":_vm.changeMove}},[_vm._v(\" \"+_vm._s(_vm.currentPathIndex == 0 ? '开始' : _vm.isPaused ? '继续' : '暂停')+\" \")]),_c('div',{staticClass:\"controls-item\",on:{\"click\":_vm.changeSpeed}},[_c('p',[_vm._v(_vm._s(_vm.speedNum)+\" \"),_c('svgIcon',{attrs:{\"name\":\"close\",\"width\":\"14\",\"color\":\"#000\"}})],1),_c('p',[_vm._v(\"加速\")])]),_c('div',{staticClass:\"controls-item\",on:{\"click\":_vm.stopAnimation}},[_vm._v(\"重置\")]),_c('div',{staticClass:\"controls-item\",on:{\"click\":function($event){return _vm.drawMeasurement('distance')}}},[_vm._v(\" 测距 \")]),_c('div',{staticClass:\"controls-item\",on:{\"click\":function($event){return _vm.drawMeasurement('area')}}},[_vm._v(\"测面积\")]),_c('div',{staticClass:\"controls-item\",on:{\"click\":_vm.clearMeasurement}},[_vm._v(\"清除\")])]):_vm._e(),_c('CustomTooltip',{ref:\"tooltip\",scopedSlots:_vm._u([{key:\"default\",fn:function({ data }){return [_c('div',[_vm._v(\" 经纬度: \"),_c('b',[_vm._v(_vm._s(data.longitude)+\"-\"+_vm._s(data.latitude))])]),_c('div',[_vm._v(\" 时间: \"),_c('b',[_vm._v(_vm._s(data.time))])])]}}])})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","const mapConfig = {\r\n initJs: 'https://web.joinken.cn:82/arcgis/4.30/init.js', // arcgis的JS地址\r\n initCss: 'https://web.joinken.cn:82/arcgis/4.30/esri/themes/light/main.css', // arcgis的CSS地址\r\n // initJs: 'https://js.arcgis.com/4.30/',\r\n // initCss: 'https://js.arcgis.com/4.30/esri/themes/light/main.css',\r\n config: null,\r\n //影像图-tdtYxt;地形图-tdtDxt;矢量图-tdtSlt(同时也是图层的id) 动态地图服务-dynamic 缓存瓦片地图服务-TileLayer\r\n //怎么判断-动态地图服务-dynamic(WMS) 缓存瓦片地图服务-TileLayer(WMTS)\r\n //访问-https://your-server/arcgis/rest/services/MyMap/MapServer(有Single Fused Map Cache: true且Tile Info:是瓦片服务用TileLayer)\r\n layersType: 'tdtYxt',\r\n baseMapUrl: 'https://sp.joinken.cn/arcgis2d/rest/services/base/china_04/MapServer',\r\n center: [113.15333645218509, 22.708905783449126], //广东省中心点\r\n extent: null,\r\n zoom: 1,\r\n minZoom: 1,\r\n maxZoom: 17,\r\n modules: [\r\n 'esri/config',\r\n 'esri/Map',\r\n 'esri/request',\r\n 'esri/views/MapView',\r\n 'esri/layers/BaseTileLayer',\r\n 'esri/views/SceneView',\r\n 'esri/Color',\r\n 'esri/geometry/Point',\r\n 'esri/geometry/Circle',\r\n 'esri/geometry/Polygon',\r\n 'esri/geometry/Polyline',\r\n 'esri/geometry/SpatialReference',\r\n 'esri/geometry/Extent',\r\n 'esri/layers/GraphicsLayer',\r\n 'esri/geometry/geometryEngine',\r\n 'esri/geometry/support/webMercatorUtils',\r\n 'esri/layers/BaseDynamicLayer',\r\n 'esri/layers/MapImageLayer', //ArcGIS 动态地图服务\r\n 'esri/layers/WebTileLayer', //第三方 XYZ/TMS 瓦片\r\n 'esri/layers/TileLayer', //已缓存的 ArcGIS MapServer 服务\r\n 'esri/layers/WMSLayer',\r\n 'esri/layers/WMTSLayer',\r\n 'esri/layers/FeatureLayer',\r\n // 'esri/layers/IntegratedMeshLayer',//三维模型\r\n 'esri/symbols/PictureMarkerSymbol',\r\n 'esri/symbols/SimpleMarkerSymbol',\r\n 'esri/symbols/SimpleLineSymbol',\r\n 'esri/symbols/SimpleFillSymbol',\r\n 'esri/layers/support/TileInfo',\r\n 'esri/widgets/Sketch/SketchViewModel',\r\n 'esri/Graphic',\r\n 'esri/Camera',\r\n 'esri/widgets/ScaleBar',\r\n 'esri/widgets/Swipe',\r\n 'esri/geometry/projection',\r\n 'esri/widgets/Measurement'\r\n ]\r\n}\r\nexport default mapConfig\r\n","/**\r\n * 返回roles\r\n * @param {*} maxLevel\r\n * @returns\r\n */\r\nexport function returnRole(maxLevel = 18, type = '2d') {\r\n const lods = [],\r\n isWebMercator = false\r\n if (isWebMercator) {\r\n // EPSG:3857(Web墨卡托)的LODs(单位:米/像素)\r\n // 级别从0开始(行业惯例),分辨率逐级减半\r\n const startResolution = 156543.03390625 // level 0的分辨率(米/像素)\r\n const startScale = 591657527.591555 // level 0的比例尺(1:591657527.591555)\r\n for (let level = 0; level <= maxLevel; level++) {\r\n const levelValue = type == '2d' ? level : level + 1\r\n // 0-20级(共21级)\r\n lods.push({\r\n level: level,\r\n levelValue,\r\n resolution: startResolution / Math.pow(2, level), // 逐级减半\r\n scale: startScale / Math.pow(2, level)\r\n })\r\n }\r\n } else {\r\n // EPSG:4490/4326(地理坐标系)的LODs(单位:度/像素)\r\n // 级别从1开始(保持原逻辑兼容)\r\n const startResolution = 0.703125 // level 1的分辨率(度/像素)\r\n const startScale = 295497593.05875003 // level 1的比例尺\r\n for (let level = 1; level <= maxLevel; level++) {\r\n // 1-20级(共20级)\r\n const levelValue = type == '2d' ? level - 1 : level\r\n lods.push({\r\n level: level - 1,\r\n levelValue,\r\n resolution: startResolution / Math.pow(2, level - 1), // 逐级减半(level 2是level 1的1/2)\r\n scale: startScale / Math.pow(2, level - 1)\r\n })\r\n }\r\n }\r\n return lods\r\n}\r\n/**\r\n * 加载\r\n * @param {*} options-传参\r\n * @param {*} url 服务地址\r\n * @param {*} subDomains 当瓦片服务器支持跨多个子域名请求以提高性能时使用。提供一个子域名数组\r\n * @param {*} title 服务标题\r\n * @param {*} id 为图层指定一个唯一的标识符\r\n * @param {*} tileInfo 图层的名称或标题,通常用于图例或图层列表中展示\r\n * @param {*} wkid 服务地图层级\r\n * @param {*} fullExtent 服务地图层级\r\n * @param {*} loadInfo 是否加载titleInfo\r\n * @param {*} visible 布尔值,决定图层是否可见,默认是 true。设置为 false 可隐藏图层\r\n * @param {*} opacity 图层的透明度,范围从0到1,默认是 1(完全不透明\r\n * @param {*} minScale | maxScale 分别定义了图层的最大和最小比例尺。超出这些范围的缩放级别,图层将不会显示\r\n * @param {*} popupTemplate 定义了点击图层上的要素时弹出窗口的内容模板\r\n * @param {*} copyright 版权信息字符串,用于声明数据来源或版权声明\r\n *\r\n */\r\nexport function loadWmsLayer(options) {\r\n if (!options) return ''\r\n let {\r\n url,\r\n subDomains,\r\n title,\r\n id,\r\n tileInfo,\r\n wkid,\r\n fullExtent,\r\n loadInfo = false,\r\n visible = true,\r\n opacity = 1,\r\n minScale = 1,\r\n maxScale = 22,\r\n popupTemplate,\r\n copyright = 'jk'\r\n } = options\r\n\r\n if (!url) return ''\r\n\r\n const isVisible = visible || false\r\n isVisible\r\n minScale\r\n maxScale\r\n copyright\r\n let params = {\r\n visible: isVisible,\r\n opacity,\r\n\r\n spatialReference: {\r\n wkid: 4490\r\n }\r\n }\r\n if (subDomains) params.subDomains = subDomains\r\n if (title) params.title = title\r\n if (id) params.id = id\r\n if (tileInfo) params.tileInfo = tileInfo\r\n if (loadInfo) {\r\n if (tileInfo) params.tileInfo = tileInfo\r\n else if (window.jkEsri && window.jkEsri.TileInfo)\r\n params.tileInfo = new window.jkEsri.TileInfo({\r\n dpi: '90.71428571427429',\r\n rows: 256,\r\n cols: 256,\r\n compressionQuality: 0,\r\n origin: {\r\n x: -180,\r\n y: 90\r\n },\r\n spatialReference: {\r\n wkid: 4490\r\n },\r\n lods: returnRole(28, '3d')\r\n })\r\n }\r\n if (wkid) params.spatialReference.wkid = wkid\r\n if (fullExtent) params.fullExtent = fullExtent\r\n if (popupTemplate) params.popupTemplate = popupTemplate\r\n return new window.jkEsri.WebTileLayer(url, params)\r\n\r\n return layer\r\n}\r\n/**\r\n * 加载wmts服务\r\n * @param Object options = {url,id,title} 参数\r\n */\r\nexport function WMTSlayer(options) {\r\n let tileInfo = new window.jkEsri.TileInfo({\r\n dpi: 90,\r\n rows: 256,\r\n cols: 256,\r\n compressionQuality: 0,\r\n origin: {\r\n x: -180,\r\n y: 90\r\n },\r\n spatialReference: {\r\n wkid: 4490\r\n },\r\n lods: returnRole(25)\r\n })\r\n const url = `${options.url}?layers=jk_map_server%3Atgzx&REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&LAYER=${options.id}&STYLE=&TILEMATRIX=EPSG:4490:{z}&TILEMATRIXSET=EPSG:4490&FORMAT=image%2Fpng&TILECOL={x}&TILEROW={y}&key=586f4e24c298419e9d76302147f98cca`\r\n const layer = new window.jkEsri.WebTileLayer({\r\n urlTemplate: url,\r\n id: options.id,\r\n title: options.title,\r\n tileInfo: tileInfo,\r\n spatialReference: {\r\n wkid: 4490\r\n }\r\n })\r\n return layer\r\n}\r\n","/**\r\n * 判断值是否为空\r\n * @param {any} value - 待检测的值\r\n * @param {boolean} [strict=false] - 是否启用严格模式:\r\n * - false(默认):0、false 视为非空;但 NaN、'NaN'、null、undefined、'' 等视为空\r\n * - true:0、false 也视为空\r\n * @returns {boolean} true 表示为空\r\n */\r\nexport function isEmpty(value, strict = false) {\r\n // 1. null / undefined → 空\r\n if (value == null) {\r\n return true\r\n }\r\n\r\n // 2. 字符串特殊处理:空、空白、'null'、'undefined'、'NaN' → 空\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim()\r\n if (trimmed === '' || trimmed === 'null' || trimmed === 'undefined' || trimmed === 'NaN') {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n // 4. 严格模式:0 和 false 也视为空\r\n if (strict) {\r\n if (value === 0 || value === false) {\r\n return true\r\n }\r\n }\r\n\r\n // 5. 其他所有类型(对象、数组、函数、日期、Symbol 等)→ 非空\r\n return false\r\n}\r\n\r\n/**\r\n * 反向函数\r\n * @param {*} value\r\n * @param {*} strict\r\n * @returns\r\n */\r\nexport function isNotEmpty(value, strict = false) {\r\n return !isEmpty(value, strict)\r\n}\r\n/**\r\n * 判断数值是否为有限数且在地理坐标范围内\r\n * @param {*} val - 待检测值\r\n * @param {'x'|'y'} type - 'x' 表示经度,'y' 表示纬度\r\n * @returns {boolean}\r\n */\r\nfunction isFiniteGeoNumber(val, type) {\r\n // 快速类型+范围检查(避免 isNaN 开销)\r\n if (typeof val !== 'number' || !isFinite(val)) {\r\n return false\r\n }\r\n if (type === 'x') {\r\n // 经度: -180 ~ 180\r\n return val >= -180 && val <= 180\r\n } else {\r\n // 纬度: -90 ~ 90\r\n return val >= -90 && val <= 90\r\n }\r\n}\r\n/**\r\n * 判断传入对象是否包含有效的 ArcGIS 点位坐标\r\n * 支持字段:x/y, longitude/latitude, lon/lat(大小写不敏感)\r\n * 要求:数值或可转为数值的字符串,且在地理范围内\r\n *\r\n * @param {Object} obj - 输入对象\r\n * @returns {{ valid: boolean, x?: number, y?: number }}\r\n */\r\nexport function isValidArcGISPoint(obj) {\r\n try {\r\n if (!obj || typeof obj !== 'object') {\r\n throw new Error(`解析错误,数据格式为空${obj}`)\r\n }\r\n // 尝试从常见字段提取原始值(不转换类型)\r\n let rawX = null\r\n let rawY = null\r\n\r\n // 优先级: longitude/latitude > lon/lat > jd/wd > x/y\r\n if ('longitude' in obj && 'latitude' in obj) {\r\n rawX = obj.longitude\r\n rawY = obj.latitude\r\n } else if ('lon' in obj && 'lat' in obj) {\r\n rawX = obj.lon\r\n rawY = obj.lat\r\n } else if ('jd' in obj && 'wd' in obj) {\r\n rawX = obj.jd\r\n rawY = obj.wd\r\n } else if ('x' in obj && 'y' in obj) {\r\n rawX = obj.x\r\n rawY = obj.y\r\n }\r\n // 可扩展:支持大小写(如 Longitude/Latitude)\r\n else if ('Longitude' in obj && 'Latitude' in obj) {\r\n rawX = obj.Longitude\r\n rawY = obj.Latitude\r\n } else if ('X' in obj && 'Y' in obj) {\r\n rawX = obj.X\r\n rawY = obj.Y\r\n }\r\n if (!isNotEmpty(rawX) || !isNotEmpty(rawY)) {\r\n throw new Error(`解析错误,数据${rawX},${rawX}`)\r\n }\r\n // 快速路径:已经是有效 number\r\n if (typeof rawX === 'number' && typeof rawY === 'number') {\r\n if (isFiniteGeoNumber(rawX, 'x') && isFiniteGeoNumber(rawY, 'y')) {\r\n return { x: rawX, y: rawY }\r\n }\r\n throw new Error(`解析错误,${rawX},${rawX}`)\r\n }\r\n\r\n // 字符串或可转字符串的情况\r\n const strX = String(rawX).trim()\r\n const strY = String(rawY).trim()\r\n\r\n // 快速排除明显无效(空、非数字字符开头)\r\n if (strX === '' || strY === '') {\r\n throw new Error(`解析错误,${strX},${strY}`)\r\n }\r\n\r\n // 使用 Number() 转换(比 parseFloat 更严格,拒绝 \"123abc\")\r\n const numX = Number(strX)\r\n const numY = Number(strY)\r\n\r\n if (isFiniteGeoNumber(numX, 'x') && isFiniteGeoNumber(numY, 'y')) {\r\n return { x: numX, y: numY, longitude: x, latitude: y }\r\n }\r\n throw new Error(`解析错误,${numX},${numY}`)\r\n } catch (error) {\r\n throw new Error(`geojson解析失败: ${error.message}`)\r\n }\r\n}\r\n/**\r\n * 判断地图数据类型\r\n * @param {*} type\r\n * @param {*} defaultType:点-1,线-2,面-3\r\n */\r\nexport function judgmentMapDataType(type = '') {\r\n try {\r\n if (isEmpty(type)) throw new Error(`judgmentMapDataType,数据错误${type}`)\r\n let isType = type.includes('oint')\r\n ? 'point'\r\n : type.includes('olygon')\r\n ? 'polygon'\r\n : type.includes('ine')\r\n ? 'polyline'\r\n : ''\r\n if (!isType) throw new Error(`judgmentMapDataType,类型为空${type}`)\r\n return isType\r\n } catch (error) {\r\n throw new Error(`judgmentMapDataType,${error}`)\r\n }\r\n}\r\n","import { isEmpty } from \"./comstom.js\";\r\n\r\n/**\r\n * 将原始坐标解析为 {x, y, spatialReference?}\r\n * @param {any} input\r\n * @returns {{x: number, y: number, spatialReference?: any} | null}\r\n */\r\nfunction parseToPoint(input) {\r\n if (!input) return null;\r\n\r\n // 字符串 \"lng,lat\"\r\n if (typeof input === \"string\") {\r\n const parts = input.split(\",\").map((s) => parseFloat(s.trim()));\r\n if (parts.length === 2 && !isNaN(parts[0]) && !isNaN(parts[1])) {\r\n return { x: parts[0], y: parts[1] };\r\n }\r\n }\r\n\r\n // 数组 [x, y]\r\n if (Array.isArray(input) && input.length >= 2) {\r\n const x = parseFloat(input[0]);\r\n const y = parseFloat(input[1]);\r\n if (!isNaN(x) && !isNaN(y)) {\r\n return { x, y };\r\n }\r\n }\r\n\r\n // 对象 {x, y} 或 {longitude, latitude}\r\n if (typeof input === \"object\") {\r\n let x, y;\r\n if (\"x\" in input && \"y\" in input) {\r\n x = parseFloat(input.x);\r\n y = parseFloat(input.y);\r\n } else if (\"longitude\" in input && \"latitude\" in input) {\r\n x = parseFloat(input.longitude);\r\n y = parseFloat(input.latitude);\r\n } else if (\"lng\" in input && \"lat\" in input) {\r\n x = parseFloat(input.lng);\r\n y = parseFloat(input.lat);\r\n }\r\n if (!isNaN(x) && !isNaN(y)) {\r\n return { x, y, spatialReference: input.spatialReference };\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n/**\r\n * 尝试将 esri/geometry/Point 转为普通对象\r\n */\r\nfunction tryConvertEsriPoint(obj) {\r\n // 检查是否有 toJSON 方法(esri geometry 标准)\r\n if (obj && typeof obj.toJSON === \"function\") {\r\n try {\r\n const json = obj.toJSON();\r\n // 验证是否为点(有 x 和 y)\r\n if (typeof json.x === \"number\" && typeof json.y === \"number\") {\r\n return obj; // 已是标准 ArcGIS JSON\r\n }\r\n } catch (error) {\r\n throw new Error(`esri.Point toJSON 失败: ${error}`);\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * 将任意变量尝试转换为 ArcGIS 点格式 { x, y }\r\n * 支持多种常见输入格式,严格校验经纬度范围\r\n * @param {*} crPoint - 任意输入\r\n * @param {boolean} [strict=true] - 是否启用经纬度范围校验(经度 [-180,180], 纬度 [-90,90])\r\n * @returns {{ x: number, y: number } | null}\r\n */\r\nfunction toArcGISPoint(crPoint, strict = true) {\r\n let x,\r\n y,\r\n result = null;\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri || !window.jkEsri.Point) {\r\n console.warn(\"[createText] ArcGIS API 未加载,跳过创建\");\r\n throw new Error(\"[createText] ArcGIS API 未加载,跳过创建\");\r\n }\r\n // 1. null / undefined\r\n if (isEmpty(crPoint)) {\r\n throw new Error(\"转换异常,无经纬度点位数据\");\r\n }\r\n // 2. 尝试作为 esri.Point 处理(优先级高)\r\n result = tryConvertEsriPoint(crPoint);\r\n if (result) {\r\n // 成功解析为 {x, y, ...}\r\n return result;\r\n } else {\r\n const transform_point = parseToPoint(crPoint);\r\n\r\n if (\r\n isEmpty(transform_point) ||\r\n isEmpty(transform_point.x) ||\r\n isEmpty(transform_point.y)\r\n ) {\r\n throw new Error(\"转换异常,无经纬度点位数据\");\r\n }\r\n x = transform_point.x;\r\n y = transform_point.y;\r\n }\r\n // 5. 仍未成功解析\r\n if (isNaN(x) || isNaN(y)) {\r\n throw new Error(\"转换异常,无经纬度点位数据\");\r\n }\r\n // 6. 【可选】经纬度范围校验\r\n if (strict) {\r\n if (x < -180 || x > 180) {\r\n throw new Error(\"转换异常,x < -180 || x > 180\");\r\n }\r\n if (y < -90 || y > 90) {\r\n throw new Error(\"转换异常,y < -90 || y > 90\");\r\n }\r\n }\r\n let wkid = crPoint.wkid ? crPoint.wkid : Number(x) > 1000 ? 102100 : 4326;\r\n // 7. 返回标准 ArcGIS 点\r\n return new window.jkEsri.Point(\r\n Number(x),\r\n Number(y),\r\n new window.jkEsri.SpatialReference({\r\n wkid,\r\n })\r\n );\r\n } catch (error) {\r\n console.warn(\"error\", error);\r\n throw new Error(`转换异常:${error}`);\r\n }\r\n}\r\n/**\r\n * 智能地图跳转(终极稳定版)\r\n * 新增能力:解决 Goto was interrupted 中断问题,强化单点跳转稳定性\r\n * 核心优化:视图就绪校验、防抖、空间参考强制转换、中断重试、参数合法性校验\r\n *\r\n * @param {__esri.MapView | __esri.SceneView} view - 地图/场景视图实例\r\n * @param {any} target - 跳转目标(单点JSON/线/面/图形数组等)\r\n * @param {Object} [options] - 跳转配置\r\n * @param {number} [options.padding=20] - 线/面边距(MapView)\r\n * @param {boolean} [options.animate=true] - 是否动画(建议单点关闭动画减少中断)\r\n * @param {number} [options.pointZoom=15] - MapView 单点缩放级别(控制在1-20内)\r\n * @param {number} [options.pointScale=5000] - SceneView 单点相机高度(米,合理范围)\r\n * @param {__esri.Extent} [options.fallbackExtent] - 兜底范围\r\n * @param {number} [options.retryTimes=1] - 跳转中断时重试次数\r\n * @returns {Promise<void>}\r\n */\r\nfunction mapJump(view, target, options = { zoom: 16 }) {\r\n // 前置校验:ArcGIS API是否加载\r\n if (!window.jkEsri) {\r\n return Promise.reject(\r\n new Error(\"[mapJump] ArcGIS API 未加载 (window.jkEsri missing)\")\r\n );\r\n }\r\n // 前置校验:view有效性\r\n if (!view || typeof view.goTo !== \"function\") {\r\n return Promise.reject(\r\n new Error(\"[mapJump] 无效的 view 对象(缺少 goTo 方法)\")\r\n );\r\n }\r\n\r\n // 视图类型判断\r\n const isScene = view.declaredClass === \"esri.views.SceneView\";\r\n const isMap = view.declaredClass === \"esri.views.MapView\";\r\n if (!isScene && !isMap) {\r\n return Promise.reject(\r\n new Error(`[mapJump] 不支持的 view 类型: ${view.declaredClass}`)\r\n );\r\n }\r\n\r\n // 合并配置项(新增重试、动画默认优化)\r\n const opts = Object.assign(\r\n {\r\n padding: 20,\r\n animate: false, // 单点跳转默认关闭动画,减少中断(核心优化)\r\n pointZoom: Math.max(\r\n 1,\r\n Math.min(20, options.pointZoom ? options.pointZoom : 15)\r\n ), // 限制缩放级别范围\r\n pointScale: Math.max(\r\n 100,\r\n Math.min(100000, options.pointScale ? options.pointScale : 5000)\r\n ), // 限制相机高度\r\n fallbackExtent: null,\r\n retryTimes: 1, // 中断时重试1次\r\n },\r\n options\r\n );\r\n\r\n // 防抖标记:避免短时间多次调用\r\n let isJumping = false;\r\n /**\r\n * 工具函数:等待视图就绪(核心!解决视图未加载完成导致的中断)\r\n * @returns {Promise<void>}\r\n */\r\n function waitViewReady() {\r\n return new Promise((resolve) => {\r\n if (view.ready) {\r\n resolve();\r\n } else {\r\n view.when(() => resolve());\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 工具函数:强制转换空间参考(解决4326/3857不匹配问题)\r\n * @param {__esri.Geometry} geom - API几何实例\r\n * @returns {__esri.Geometry} 转换后的几何\r\n */\r\n function projectGeometry(geom) {\r\n if (!geom || !geom.spatialReference) return geom;\r\n\r\n // 空间参考一致,无需转换\r\n if (geom.spatialReference.wkid === view.spatialReference.wkid) {\r\n return geom;\r\n }\r\n\r\n try {\r\n // 使用ArcGIS投影工具转换空间参考\r\n return window.jkEsri.geometry.project(geom, view.spatialReference);\r\n } catch (e) {\r\n console.warn(\"[projectGeometry] 空间参考转换失败,使用原几何:\", e);\r\n return geom;\r\n }\r\n }\r\n\r\n /**\r\n * 工具函数:判断是否为点类几何(含单点/多点集合)\r\n * @param {*} geometry - API实例/纯JSON几何对象\r\n * @returns {boolean}\r\n */\r\n function isPointGeometry(geometry) {\r\n if (!geometry) return false;\r\n const type = geometry.type || (geometry.x && geometry.y ? \"point\" : \"\");\r\n return type === \"point\" || type === \"multipoint\";\r\n }\r\n\r\n /**\r\n * 核心工具:纯JSON几何 → ArcGIS API几何实例(支持点/线/面所有类型)\r\n * @param {*} geomJson - 纯JSON几何对象\r\n * @returns {__esri.Geometry | null}\r\n */\r\n function toEsriGeometry(geomJson) {\r\n if (!geomJson) return null;\r\n\r\n // 已是API实例,直接返回\r\n if (geomJson.toJSON && typeof geomJson.toJSON === \"function\") {\r\n return geomJson;\r\n }\r\n\r\n // 提取几何类型(兼容纯JSON无type字段的Point)\r\n let geomType = geomJson.type;\r\n if (!geomType && geomJson.x !== undefined && geomJson.y !== undefined) {\r\n geomType = \"point\";\r\n }\r\n if (!geomType) return null;\r\n\r\n // 统一空间参考(优先用几何自身的,无则用视图的)\r\n const sr = geomJson.spatialReference || view.spatialReference;\r\n\r\n try {\r\n // 1. 点(核心:校验坐标合法性,避免NaN导致中断)\r\n if (geomType === \"point\") {\r\n const x = Number(geomJson.x);\r\n const y = Number(geomJson.y);\r\n // 坐标合法性校验(关键!NaN会导致goTo中断)\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"[toEsriGeometry] 点坐标非法:\", geomJson);\r\n return null;\r\n }\r\n return new window.jkEsri.Point({\r\n x,\r\n y,\r\n z: geomJson.z ? Number(geomJson.z) : undefined,\r\n spatialReference: sr,\r\n });\r\n } else if (geomType === \"multipoint\") {\r\n return new window.jkEsri.MultiPoint({\r\n points: geomJson.points.map((pt) => pt.map(Number)) || [],\r\n spatialReference: sr,\r\n });\r\n }\r\n\r\n // 2. 线/多线\r\n else if (geomType === \"polyline\" || geomType === \"multipolyline\") {\r\n return new window.jkEsri.Polyline({\r\n paths:\r\n geomJson.paths.map((path) => path.map((pt) => pt.map(Number))) ||\r\n [],\r\n spatialReference: sr,\r\n });\r\n }\r\n\r\n // 3. 面/多面\r\n else if (geomType === \"polygon\" || geomType === \"multipolygon\") {\r\n return new window.jkEsri.Polygon({\r\n rings:\r\n geomJson.rings.map((ring) => ring.map((pt) => pt.map(Number))) ||\r\n [],\r\n spatialReference: sr,\r\n });\r\n }\r\n\r\n // 4. 范围\r\n else if (geomType === \"extent\") {\r\n return new window.jkEsri.Extent({\r\n xmin: Number(geomJson.xmin),\r\n ymin: Number(geomJson.ymin),\r\n xmax: Number(geomJson.xmax),\r\n ymax: Number(geomJson.ymax),\r\n spatialReference: sr,\r\n });\r\n }\r\n\r\n return null;\r\n } catch (e) {\r\n console.warn(`[toEsriGeometry] 转换${geomType}失败:`, e);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * 核心工具:获取几何对象的有效范围(兼容所有类型 + 纯JSON)\r\n * @param {*} geom - API实例/纯JSON几何\r\n * @returns {__esri.Extent | null}\r\n */\r\n function getGeometryExtent(geom) {\r\n if (!geom) return null;\r\n\r\n // 步骤1:转换为API实例(解决纯JSON无extent问题)\r\n const esriGeom = toEsriGeometry(geom);\r\n if (!esriGeom) return null;\r\n\r\n // 步骤2:API实例自带extent,直接返回\r\n if (esriGeom.extent) {\r\n return esriGeom.extent;\r\n }\r\n\r\n // 步骤3:极端降级 - 手动构建Point的范围(x/y相同)\r\n if (esriGeom.type === \"point\") {\r\n return new window.jkEsri.Extent({\r\n xmin: esriGeom.x,\r\n ymin: esriGeom.y,\r\n xmax: esriGeom.x,\r\n ymax: esriGeom.y,\r\n spatialReference: esriGeom.spatialReference,\r\n });\r\n }\r\n\r\n console.warn(\"[getGeometryExtent] 无法获取几何范围:\", geom);\r\n return null;\r\n }\r\n\r\n /**\r\n * 核心工具:从图形数组计算合并范围(兼容点/线/面混合 + 纯JSON)\r\n * @param {Array} graphics - API Graphic数组 / 纯JSON Graphic数组\r\n * @returns {__esri.Extent | null}\r\n */\r\n function computeExtentFromGraphics(graphics) {\r\n if (!graphics || graphics.length === 0) return null;\r\n\r\n const validExtents = [];\r\n for (const graphic of graphics) {\r\n // 跳过无几何的无效图形\r\n if (!graphic || !graphic.geometry) {\r\n console.warn(\"[computeExtentFromGraphics] 跳过无几何的图形:\", graphic);\r\n continue;\r\n }\r\n\r\n // 获取单个图形的有效范围(自动转换纯JSON几何)\r\n const extent = getGeometryExtent(graphic.geometry);\r\n if (extent) {\r\n validExtents.push(extent);\r\n } else {\r\n console.warn(\r\n \"[computeExtentFromGraphics] 图形几何无有效范围:\",\r\n graphic.geometry\r\n );\r\n }\r\n }\r\n\r\n // 无有效范围\r\n if (validExtents.length === 0) {\r\n console.error(\"[computeExtentFromGraphics] 所有图形均无有效范围!\");\r\n return null;\r\n }\r\n\r\n // 单个范围直接返回\r\n if (validExtents.length === 1) {\r\n return validExtents[0];\r\n }\r\n\r\n // 合并多个范围(点/线/面混合也能正确union)\r\n let combinedExtent = validExtents[0];\r\n for (let i = 1; i < validExtents.length; i++) {\r\n combinedExtent = combinedExtent.union(validExtents[i]);\r\n }\r\n return combinedExtent;\r\n }\r\n\r\n /**\r\n * 工具函数:解析普通坐标为{x,y}({x,y}/[x,y]/\"lng,lat\")\r\n * @param {*} target - 原始坐标\r\n * @returns {Object|null}\r\n */\r\n function parseToPoint(target) {\r\n if (!target) return null;\r\n\r\n // {x,y}格式\r\n if (target.x !== undefined && target.y !== undefined) {\r\n const x = Number(target.x);\r\n const y = Number(target.y);\r\n return !isNaN(x) && !isNaN(y) ? { x, y } : null;\r\n }\r\n\r\n // [x,y]数组格式\r\n if (Array.isArray(target) && target.length >= 2) {\r\n const x = Number(target[0]);\r\n const y = Number(target[1]);\r\n return !isNaN(x) && !isNaN(y) ? { x, y } : null;\r\n }\r\n\r\n // \"lng,lat\"字符串格式\r\n if (typeof target === \"string\" && target.includes(\",\")) {\r\n const [x, y] = target.split(\",\").map(Number);\r\n return !isNaN(x) && !isNaN(y) ? { x, y } : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * 核心执行:视图跳转(带中断重试、防抖、空间参考转换)\r\n * @param {__esri.Geometry | __esri.Extent} targetGeom - 目标几何/范围\r\n * @param {boolean} isPointType - 是否为点类几何\r\n * @param {number} retryLeft - 剩余重试次数\r\n * @returns {Promise<void>}\r\n */\r\n async function doGoToWithRetry(targetGeom, isPointType, retryLeft) {\r\n // 防抖:已有跳转中,直接中断\r\n if (isJumping) {\r\n throw new Error(\"[mapJump] 前一次跳转未完成,中断本次操作\");\r\n }\r\n\r\n try {\r\n isJumping = true;\r\n // 步骤1:等待视图就绪\r\n await waitViewReady();\r\n\r\n // 步骤2:强制转换空间参考(解决4326/3857不匹配)\r\n const projectedGeom = projectGeometry(targetGeom);\r\n if (!projectedGeom) {\r\n throw new Error(\"[mapJump] 空间参考转换后几何无效\");\r\n }\r\n\r\n // 步骤3:构建goTo配置(优化动画/缩放参数,减少中断)\r\n const goToOptions = {\r\n animate: opts.animate,\r\n // 新增:延长动画时间,避免快速中断(单点建议关闭动画)\r\n duration: opts.animate ? 500 : 0,\r\n };\r\n\r\n // MapView配置:限制缩放级别在有效范围(1-20)\r\n if (isMap) {\r\n if (isPointType) {\r\n goToOptions.zoom = Math.max(1, Math.min(20, opts.pointZoom));\r\n } else {\r\n goToOptions.padding = opts.padding;\r\n }\r\n }\r\n // SceneView配置:限制scale在合理范围\r\n else if (isScene) {\r\n if (isPointType) {\r\n goToOptions.scale = Math.max(100, opts.pointScale);\r\n // 新增:SceneView单点跳转强制设置target为相机位置,减少中断\r\n goToOptions.target = {\r\n position: projectedGeom,\r\n scale: goToOptions.scale,\r\n };\r\n }\r\n }\r\n\r\n // 步骤4:执行跳转(捕获interrupted错误)\r\n try {\r\n await view.goTo(projectedGeom, goToOptions);\r\n } catch (gotoErr) {\r\n // 捕获Goto was interrupted错误,重试\r\n if (gotoErr.message.includes(\"interrupted\") && retryLeft > 0) {\r\n console.warn(\r\n `[mapJump] 跳转中断,剩余重试次数: ${retryLeft}`,\r\n gotoErr\r\n );\r\n // 延迟50ms重试,避免连续中断\r\n await new Promise((resolve) => setTimeout(resolve, 50));\r\n return doGoToWithRetry(targetGeom, isPointType, retryLeft - 1);\r\n }\r\n throw gotoErr;\r\n }\r\n } finally {\r\n isJumping = false; // 重置防抖标记\r\n }\r\n }\r\n\r\n /**\r\n * 工具函数:解析WMS/WMTS图层范围\r\n * @param {__esri.WMSLayer | __esri.WMTSLayer} layer - 图层实例\r\n * @returns {__esri.Extent | null}\r\n */\r\n function getWMXLayerExtent(layer) {\r\n // 优先读取图层内置范围\r\n if (layer.fullExtent) return layer.fullExtent;\r\n if (layer.extent) return layer.extent;\r\n if (layer.tileInfo.fullExtent) return layer.tileInfo.fullExtent;\r\n if (layer.initialExtent) return layer.initialExtent;\r\n\r\n // 解析URL中的BBOX参数(WMS标准)\r\n if (layer.url) {\r\n try {\r\n const urlObj = new URL(layer.url);\r\n const bbox =\r\n urlObj.searchParams.get(\"BBOX\") || urlObj.searchParams.get(\"bbox\");\r\n if (bbox) {\r\n const [xmin, ymin, xmax, ymax] = bbox.split(\",\").map(Number);\r\n if (!isNaN(xmin) && !isNaN(ymin) && !isNaN(xmax) && !isNaN(ymax)) {\r\n return new window.jkEsri.Extent({\r\n xmin,\r\n ymin,\r\n xmax,\r\n ymax,\r\n spatialReference: layer.spatialReference || view.spatialReference,\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n console.warn(\"[getWMXLayerExtent] 解析URL BBOX失败:\", e);\r\n }\r\n }\r\n\r\n // 兜底范围\r\n return opts.fallbackExtent;\r\n }\r\n\r\n // 主逻辑:Promise封装,统一处理所有目标类型\r\n return new Promise(async (resolve, reject) => {\r\n let targetGeometry = null; // 最终解析的几何实例\r\n let isPointType = false; // 是否为点类几何\r\n\r\n try {\r\n // 等待视图就绪(前置校验)\r\n await waitViewReady();\r\n\r\n // ========== 分支1:处理图层对象 ==========\r\n if (\r\n target &&\r\n typeof target === \"object\" &&\r\n target.declaredClass &&\r\n target.declaredClass.endsWith(\"Layer\")\r\n ) {\r\n const layer = target;\r\n\r\n // 1.1 图形图层(GraphicsLayer)\r\n if (layer.declaredClass === \"esri.layers.GraphicsLayer\") {\r\n const graphics = layer.graphics.toArray();\r\n if (graphics.length === 0) {\r\n reject(new Error(\"[mapJump] GraphicsLayer 无有效图形\"));\r\n return;\r\n }\r\n\r\n // 单个图形且为点类 → 按点跳转\r\n if (graphics.length === 1 && isPointGeometry(graphics[0].geometry)) {\r\n await doGoToWithRetry(graphics[0].geometry, true, opts.retryTimes);\r\n resolve();\r\n return;\r\n }\r\n\r\n // 多个图形/线/面 → 计算合并范围\r\n const layerExtent = computeExtentFromGraphics(graphics);\r\n if (layerExtent) {\r\n await doGoToWithRetry(layerExtent, false, opts.retryTimes);\r\n resolve();\r\n } else {\r\n // 兜底1:取第一个有效图形\r\n const firstValid = graphics.find(\r\n (g) => g.geometry && getGeometryExtent(g.geometry)\r\n );\r\n if (firstValid) {\r\n await doGoToWithRetry(\r\n firstValid.geometry,\r\n isPointGeometry(firstValid.geometry),\r\n opts.retryTimes\r\n );\r\n resolve();\r\n }\r\n // 兜底2:使用配置的兜底范围\r\n else if (opts.fallbackExtent) {\r\n await doGoToWithRetry(\r\n opts.fallbackExtent,\r\n false,\r\n opts.retryTimes\r\n );\r\n resolve();\r\n }\r\n // 最终兜底:报错\r\n else {\r\n reject(\r\n new Error(\r\n \"[mapJump] 无法从GraphicsLayer计算有效范围,且无兜底范围\"\r\n )\r\n );\r\n }\r\n }\r\n return;\r\n }\r\n\r\n // 1.2 WMS/WMTS图层\r\n if (\r\n layer.declaredClass === \"esri.layers.WMSLayer\" ||\r\n layer.declaredClass === \"esri.layers.WMTSLayer\"\r\n ) {\r\n // 图层未加载则先加载\r\n if (!layer.loaded) {\r\n await layer.load();\r\n }\r\n const extent = getWMXLayerExtent(layer);\r\n if (extent) {\r\n await doGoToWithRetry(extent, false, opts.retryTimes);\r\n resolve();\r\n } else {\r\n reject(\r\n new Error(\r\n `WM${\r\n layer.declaredClass.includes(\"WMS\") ? \"S\" : \"TS\"\r\n }图层无有效范围`\r\n )\r\n );\r\n }\r\n return;\r\n }\r\n\r\n // 1.3 服务图层(FeatureLayer/TileLayer等,支持queryExtent)\r\n if (typeof layer.queryExtent === \"function\") {\r\n if (!layer.loaded) {\r\n await layer.load();\r\n }\r\n const res = await layer.queryExtent();\r\n if (res.extent) {\r\n await doGoToWithRetry(res.extent, false, opts.retryTimes);\r\n resolve();\r\n } else {\r\n reject(new Error(\"服务图层查询范围为空\"));\r\n }\r\n return;\r\n }\r\n\r\n // 1.4 普通图层(无queryExtent,用fullExtent)\r\n if (layer.fullExtent) {\r\n await doGoToWithRetry(layer.fullExtent, false, opts.retryTimes);\r\n resolve();\r\n return;\r\n }\r\n\r\n // 不支持的图层类型\r\n reject(new Error(`[mapJump] 不支持的图层类型: ${layer.declaredClass}`));\r\n return;\r\n }\r\n\r\n // ========== 分支2:处理图形数组(API实例/纯JSON) ==========\r\n if (Array.isArray(target) && target.length > 0) {\r\n // 判断是否为Graphic数组(含纯JSON)\r\n const isGraphicArray = target.every((item) => item.geometry);\r\n if (isGraphicArray) {\r\n // 单个图形且为点类 → 按点跳转\r\n if (target.length === 1 && isPointGeometry(target[0].geometry)) {\r\n targetGeometry = toEsriGeometry(target[0].geometry);\r\n if (!targetGeometry) {\r\n reject(new Error(\"单个图形几何无效\"));\r\n return;\r\n }\r\n await doGoToWithRetry(targetGeometry, true, opts.retryTimes);\r\n resolve();\r\n return;\r\n }\r\n\r\n // 多个图形/线/面 → 计算合并范围\r\n const graphicsExtent = computeExtentFromGraphics(target);\r\n if (graphicsExtent) {\r\n await doGoToWithRetry(graphicsExtent, false, opts.retryTimes);\r\n resolve();\r\n } else {\r\n // 兜底1:取第一个有效图形\r\n const firstValid = target.find(\r\n (item) => item.geometry && toEsriGeometry(item.geometry)\r\n );\r\n if (firstValid) {\r\n targetGeometry = toEsriGeometry(firstValid.geometry);\r\n await doGoToWithRetry(\r\n targetGeometry,\r\n isPointGeometry(firstValid.geometry),\r\n opts.retryTimes\r\n );\r\n resolve();\r\n }\r\n // 兜底2:兜底范围\r\n else if (opts.fallbackExtent) {\r\n await doGoToWithRetry(\r\n opts.fallbackExtent,\r\n false,\r\n opts.retryTimes\r\n );\r\n resolve();\r\n }\r\n // 最终兜底\r\n else {\r\n reject(\r\n new Error(\"[mapJump] 无法从图形数组计算有效范围,且无兜底范围\")\r\n );\r\n }\r\n }\r\n return;\r\n }\r\n }\r\n\r\n // ========== 分支3:处理单个Graphic(API实例/纯JSON) ==========\r\n if (target && target.geometry) {\r\n targetGeometry = toEsriGeometry(target.geometry);\r\n isPointType = isPointGeometry(target.geometry);\r\n }\r\n\r\n // ========== 分支4:处理几何对象(API实例/纯JSON) ==========\r\n else if (target && (target.type || (target.x && target.y))) {\r\n targetGeometry = toEsriGeometry(target);\r\n isPointType = isPointGeometry(target);\r\n }\r\n\r\n // ========== 分支5:处理普通坐标格式 ==========\r\n else {\r\n const pointObj = parseToPoint(target);\r\n if (pointObj) {\r\n targetGeometry = new window.jkEsri.Point({\r\n x: pointObj.x,\r\n y: pointObj.y,\r\n spatialReference: view.spatialReference,\r\n });\r\n isPointType = true;\r\n }\r\n }\r\n\r\n // ========== 最终校验:解析结果有效性 ==========\r\n if (!targetGeometry) {\r\n reject(\r\n new Error(`[mapJump] 无法解析跳转目标,支持类型:\r\n 1. 基础坐标:{x,y} / [x,y] / \"lng,lat\"\r\n 2. 几何对象:Point/MultiPoint/Polyline/MultiPolyline/Polygon/MultiPolygon/Extent(API实例/纯JSON)\r\n 3. 图形对象:Graphic / 纯JSON Graphic / Graphic[] / 纯JSON Graphic[]\r\n 4. 图层对象:Layer(FeatureLayer/WMSLayer/WMTSLayer等)`)\r\n );\r\n return;\r\n }\r\n\r\n // 执行跳转(带重试)\r\n await doGoToWithRetry(targetGeometry, isPointType, opts.retryTimes);\r\n resolve();\r\n } catch (e) {\r\n // 捕获所有异常\r\n reject(new Error(`[mapJump] 执行失败: ${e.message}`));\r\n }\r\n });\r\n}\r\n\r\nexport { toArcGISPoint, mapJump };\r\n","import { isEmpty } from \"./comstom.js\";\r\nimport { toArcGISPoint } from \"./toArcGISPoint.js\";\r\n\r\n/**\r\n * 判断是否类型\r\n * @param {*} type\r\n * @returns\r\n */\r\nfunction judgeLayerType(type) {\r\n if (!type) return;\r\n if (type.includes(\"oint\")) return \"point\";\r\n if (type.includes(\"olygon\")) return \"polygon\";\r\n if (type.includes(\"ine\")) return \"polyline\";\r\n}\r\n/**\r\n * TextSymbol 符号\r\n * @param {Object} options 传递参数\r\n * @param {string} options.mapText 内容\r\n * @param {number} options.fontSize 字体大小\r\n * @param {string} options.color 字体颜色\r\n * @param {string} options.haloColor 字体阴影\r\n * @param {string} options.haloSize 字体阴影大小\r\n * @param {number } options.xoffset 字体偏移x轴\r\n * @param {number } options.yoffset 字体偏移y轴\r\n * @returns\r\n */\r\nexport function getTextSymbol(options) {\r\n try {\r\n const text = options.mapText || \"暂无描述\";\r\n const fontSize = isFinite(options.fontSize) ? Number(options.fontSize) : 10;\r\n const color = (typeof options.color === \"string\" && options.color) || \"red\";\r\n const haloColor =\r\n (typeof options.haloColor === \"string\" && options.haloColor) || \"black\";\r\n const haloSize =\r\n typeof options.haloSize !== \"undefined\"\r\n ? String(options.haloSize)\r\n : \"1px\";\r\n const xoffset = isFinite(options.xoffset) ? Number(options.xoffset) : 3;\r\n const yoffset = isFinite(options.yoffset) ? Number(options.yoffset) : 3;\r\n return {\r\n type: \"text\",\r\n text: text || \"\",\r\n color: color,\r\n haloColor: haloColor,\r\n haloSize: haloSize,\r\n xoffset: xoffset,\r\n yoffset: yoffset,\r\n font: {\r\n size: fontSize,\r\n weight: \"bold\",\r\n },\r\n };\r\n } catch (e) {\r\n console.error(\"[getTextSymbol] 生成 symbol 失败,使用默认值:\", e);\r\n return {\r\n type: \"text\",\r\n text: \"暂无标注\",\r\n color: \"red\",\r\n haloColor: \"black\",\r\n haloSize: \"1px\",\r\n xoffset: 3,\r\n yoffset: 3,\r\n font: { size: 10, weight: \"bold\" },\r\n };\r\n }\r\n}\r\n/**\r\n * pictureSymbol 符号\r\n * @param {Object} options\r\n * @param {string} options.color 颜色\r\n * @param {number} options.size 直径\r\n * @param {string} options.lineColor 边框颜色\r\n * @param {number} options.lineWidth 边框大小\r\n * @param {string} options.style 形状\r\n * @param {number} options.angle 旋转角度\r\n * @returns\r\n */\r\nexport function getSimpleMarkerSymbol(options) {\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri || !window.jkEsri.SimpleMarkerSymbol) {\r\n console.error(\r\n \"[getSimpleMarkerSymbol] ArcGIS API-SimpleMarkerSymbol 未加载,跳过创建\"\r\n );\r\n return null;\r\n }\r\n // 关键:设置偏移(单位:屏幕像素)\r\n let color = \"red\",\r\n size = 12,\r\n lineColor = \"white\",\r\n lineWidth = 1,\r\n style = \"circle\",\r\n angle = 0;\r\n if (options) {\r\n if (!isEmpty(options.color)) color = options.color;\r\n if (isFinite(options.size) && Number(options.size))\r\n size = Number(options.size);\r\n if (!isEmpty(options.lineColor)) lineColor = options.lineColor;\r\n if (!isEmpty(options.style)) style = options.style;\r\n if (isFinite(options.lineWidth) && Number(options.lineWidth))\r\n lineWidth = Number(options.lineWidth);\r\n if (isFinite(options.angle) && Number(options.angle))\r\n angle = Number(options.angle);\r\n }\r\n return new window.jkEsri.SimpleMarkerSymbol({\r\n color, // 填充色(支持 hex, rgb, named color)\r\n size, // 直径(单位:屏幕像素 px)\r\n outline: {\r\n // 边框\r\n color: lineColor,\r\n width: lineWidth, // 边框宽度(px)\r\n },\r\n style, // 形状:'circle' | 'square' | 'cross' | 'diamond' | 'triangle' | 'x'\r\n angle, //仅'diamond' | 'triangle'有效\r\n });\r\n } catch (e) {\r\n console.error(\"[getSimpleMarkerSymbol] 生成 symbol 失败,\", e);\r\n return null;\r\n }\r\n}\r\n/**\r\n * pictureSymbol 符号\r\n * @param {Object} options\r\n * @param {string} options.url 图片地址\r\n * @param {number } options.width 宽度\r\n * @param {number } options.height 高度\r\n * @param {number } options.size 大小\r\n * @param {number } options.xoffset 偏移x轴\r\n * @param {number } options.yoffset 偏移y轴\r\n * @returns\r\n */\r\nexport function getPictureSymbol(options) {\r\n if (isEmpty(options) || isEmpty(options.url)) {\r\n return getSimpleMarkerSymbol(options);\r\n }\r\n try {\r\n if (isEmpty(options) || isEmpty(options.url)) {\r\n console.error(\"[getPictureSymbol] 生成 symbol\", options);\r\n return null;\r\n }\r\n // 关键:设置偏移(单位:屏幕像素)\r\n let offset = {\r\n x: 0, // 水平偏移:正数向右,负数向左\r\n y: 0, // 垂直偏移:正数向下,负数向上\r\n },\r\n width = 20,\r\n height = 20,\r\n size = 0,\r\n url = options.url;\r\n if (options) {\r\n if (isFinite(options.width) && Number(options.width))\r\n width = Number(options.width);\r\n if (isFinite(options.height) && Number(options.height))\r\n height = Number(options.height);\r\n if (isFinite(options.size) && Number(options.size))\r\n size = Number(options.size);\r\n if (isFinite(options.xoffset) && Number(options.xoffset))\r\n offset.x = Number(options.xoffset);\r\n if (isFinite(options.yoffset) && Number(options.yoffset))\r\n offset.y = Number(options.yoffset);\r\n }\r\n return {\r\n type: \"picture-marker\",\r\n url, // 图片地址\r\n width,\r\n height,\r\n size,\r\n offset,\r\n };\r\n } catch (e) {\r\n console.error(\"[getPictureSymbol] 生成 symbol 失败\", e);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * 线符号\r\n * @param {Object} options\r\n * @param {number | string} options.color 颜色\r\n * @param {number | string} options.width 线大小\r\n * @param {number } options.opacity 线颜色的透明度\r\n * @returns symbol\r\n */\r\nexport function getLineSymbol(options) {\r\n const { color = \"#fff\", width = 2, opacity = 100 } = options;\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri || !window.jkEsri.Color) {\r\n console.error(\"[getLineSymbol] ArcGIS API-Color 未加载,跳过创建\");\r\n return null;\r\n }\r\n const esriColor = new window.jkEsri.Color(color);\r\n esriColor.a = Math.min(1, Math.max(0, opacity / 100));\r\n return {\r\n type: \"simple-line\",\r\n color: esriColor,\r\n width: width,\r\n cap: \"round\",\r\n join: \"round\",\r\n };\r\n } catch (e) {\r\n console.error(\"getLineSymbol未传入symbol,使用默认:\", e);\r\n return {\r\n type: \"simple-line\",\r\n color: new window.jkEsri.Color(\"#1f77b4\").setAlpha(1),\r\n width: 2,\r\n cap: \"round\",\r\n join: \"round\",\r\n };\r\n }\r\n}\r\n/**\r\n * 填充符号\r\n * @param {object} options\r\n * @param { string} options.color 颜色\r\n * @param {number } options.opacity 填充颜色的透明度\r\n * @param {object} options.outline 填充边框\r\n * @param {string} options.outline.color 填充边框颜色\r\n * @param {number } options.outline.width 填充边框大小\r\n * @param {number} options.outline.opacity 填充边框颜色的透明度\r\n * @returns symbol\r\n */\r\nexport function getFillSymbol(options) {\r\n let color = \"#fff\",\r\n lineColor = \"#fff\",\r\n width = 1,\r\n opacity = 10,\r\n lineOpacity = 100;\r\n if (options) {\r\n if (options.color) color = options.color;\r\n if (options.opacity || options.opacity == 0) opacity = options.opacity;\r\n if (options.outline) {\r\n lineColor = options.outline.color || \"#fff\";\r\n width = options.outline.width || 1;\r\n lineOpacity = options.outline.opacity || 100;\r\n }\r\n }\r\n const colors = new window.jkEsri.Color(color);\r\n colors.a = opacity / 100;\r\n const outColor = new window.jkEsri.Color(lineColor);\r\n outColor.a = lineOpacity / 100;\r\n return {\r\n type: \"simple-fill\",\r\n color: colors,\r\n outline: { color: outColor, width: width },\r\n };\r\n}\r\n/**\r\n *\r\n * @param {*} options\r\n * @property {number|string} options.geometry\r\n */\r\nexport function drawLayer(options) {\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri || !window.jkEsri.Graphic) {\r\n console.error(\"[drawLayer] ArcGIS API 未加载,跳过创建\");\r\n return null;\r\n }\r\n if (isEmpty(options) || !options.geometry) {\r\n console.error(`[drawLayer] options.geometry格式不正确,${options}`);\r\n return null;\r\n }\r\n // 4. 构造安全 attributes(仅保留基本类型)\r\n const safeAttrs = options.attributes || options.properties || options || {};\r\n const json = {\r\n geometry: options.geometry,\r\n attributes: safeAttrs,\r\n };\r\n let graphic = window.jkEsri.Graphic.fromJSON(json),\r\n symbol = null;\r\n const geometry = options.geometry;\r\n if (\r\n geometry.x ||\r\n geometry.longitude ||\r\n (geometry.points && geometry.points.length > 0)\r\n ) {\r\n if (options.mapText) {\r\n symbol = getTextSymbol(options);\r\n } else {\r\n symbol = options.url\r\n ? getPictureSymbol(options)\r\n : getSimpleMarkerSymbol(options);\r\n }\r\n } else if (geometry.paths && geometry.paths.length > 0) {\r\n symbol = getLineSymbol(options);\r\n } else if (geometry.rings && geometry.rings.length > 0) {\r\n symbol = getFillSymbol(options);\r\n }\r\n graphic.symbol = symbol;\r\n return graphic;\r\n } catch (e) {\r\n console.error(\"[drawLayer]失败,\", e);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 安全创建文本标注 Graphic(任何错误均静默失败,返回 null)\r\n * @param {object} options attributes的数据\r\n * @param {string} options.mapText 文字标注\r\n * @param {String} options.url 图片地址,如不存在则加载pictureSymbol\r\n * @returns {__esri.Graphic | null}\r\n */\r\nexport function drawArcPoint(options) {\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri) {\r\n console.error(\"[createArcPoint] ArcGIS API 未加载,跳过创建\");\r\n throw new Error(\"[createArcPoint] ArcGIS API 未加载,跳过创建\");\r\n }\r\n\r\n // 2. 解析坐标\r\n const point = toArcGISPoint(options);\r\n if (!point || !isFinite(point.x) || !isFinite(point.y)) {\r\n console.error(\"[createText] 坐标无效,跳过创建:\", options);\r\n throw new Error(\"[createText] 坐标无效,跳过创建\");\r\n }\r\n const geometry = point;\r\n // 4. 构造安全 attributes(仅保留基本类型)\r\n\r\n // 5. 创建 symbol\r\n let symbol = null;\r\n if (options.mapText) {\r\n symbol = getTextSymbol(options);\r\n } else {\r\n symbol = options.url\r\n ? getPictureSymbol(options)\r\n : getSimpleMarkerSymbol(options);\r\n }\r\n // 6. 创建 Graphic\r\n const graphic = new window.jkEsri.Graphic({\r\n geometry,\r\n symbol: symbol,\r\n attributes: options,\r\n });\r\n return graphic;\r\n } catch (error) {\r\n // 任何异常都捕获,不中断流程\r\n console.error(\"[createText] 创建文本标注失败,已跳过:\", error);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 创建点\r\n * @param {object} options attributes的数据\r\n * @param {string} options.type 正确格式类型\r\n * @param {Array} options.coordinates 多点范围\r\n * @returns {__esri.Graphic | null}\r\n */\r\nexport function createArcPoint(options) {\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri) {\r\n console.error(\"[createArcPoint] ArcGIS API 未加载,跳过创建\");\r\n return null;\r\n }\r\n if (isEmpty(options) || typeof options != \"object\") {\r\n console.error(\"[createArcPoint] 数据格式不对,跳过创建\", options);\r\n return null;\r\n }\r\n // 情况 A: GeoJSON MultiPoint\r\n if (options.type === \"MultiPoint\" && Array.isArray(options.coordinates)) {\r\n let graphics = [];\r\n options.coordinates.map((coord) => {\r\n if (\r\n Array.isArray(coord) &&\r\n coord.length >= 2 &&\r\n isFinite(coord[0]) &&\r\n isFinite(coord[1])\r\n ) {\r\n let pointData = {\r\n ...options,\r\n longitude: coord[0],\r\n latitude: coord[1],\r\n };\r\n graphics.push(drawArcPoint(pointData));\r\n }\r\n });\r\n if (graphics && graphics.length > 0) return graphics;\r\n } else return drawArcPoint(options);\r\n } catch (error) {\r\n // 任何异常都捕获,不中断流程\r\n console.error(\"[createArcPoint] 创建文本标注失败,已跳过:\", error);\r\n return null;\r\n }\r\n}\r\n// ==================== 内部解析函数 ====================\r\n\r\n/**\r\n * 解析单个线数据项为 { geometry: Polyline, attributes: Object }\r\n */\r\nfunction parseLineItem(item, defaultWKID, index) {\r\n try {\r\n let geometry = null;\r\n let attributes = {};\r\n\r\n // 情况 1: 已是 Graphic 或 Feature 格式\r\n if (item.geometry) {\r\n const geom = item.geometry;\r\n if (geom.type === \"polyline\" && Array.isArray(geom.paths)) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths: geom.paths,\r\n spatialReference: geom.spatialReference || { wkid: defaultWKID },\r\n });\r\n } else if (geom.x !== undefined || geom.rings !== undefined) {\r\n // 非线几何,跳过\r\n return null;\r\n }\r\n attributes = { ...item.attributes, ...item }; // 合并属性\r\n }\r\n // 情况 2: WKT 字符串\r\n else if (typeof item === \"string\") {\r\n if (isWKTMultiLineString(item) || isWKTPolyline(item)) {\r\n const paths = parseWKTToPaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n }\r\n attributes = { wkt: item };\r\n }\r\n // 情况 3: GeoJSON\r\n else if (item.type) {\r\n if (item.type === \"Feature\") {\r\n return parseLineItem(item.geometry || item, defaultWKID, index); // 递归处理 geometry\r\n } else if ([\"LineString\", \"MultiLineString\"].includes(item.type)) {\r\n const paths = geoJSONToArcGISPaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { ...item.properties };\r\n }\r\n }\r\n // 情况 4: 纯坐标数组\r\n else if (Array.isArray(item)) {\r\n const paths = normalizePaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { input: \"array\" };\r\n }\r\n\r\n if (!geometry) {\r\n console.error(`Invalid line data at index ${index}:`, item);\r\n return null;\r\n }\r\n\r\n // 添加默认属性\r\n attributes = {\r\n sourceIndex: index,\r\n ...attributes,\r\n };\r\n\r\n return new window.jkEsri.Graphic({\r\n geometry,\r\n attributes,\r\n });\r\n } catch (e) {\r\n console.error(`Failed to parse line item at index ${index}:`, e);\r\n return null;\r\n }\r\n}\r\n\r\n// ==================== 工具函数 ====================\r\n/**\r\n * 判断类型MULTILINESTRING\r\n * @param {*} str\r\n * @returns\r\n */\r\nfunction isWKTMultiLineString(str) {\r\n return (\r\n typeof str === \"string\" &&\r\n str.trim().toUpperCase().startsWith(\"MULTILINESTRING\")\r\n );\r\n}\r\n/**\r\n * 判断LINESTRING\r\n * @param {*} str\r\n * @returns\r\n */\r\nfunction isWKTPolyline(str) {\r\n return (\r\n typeof str === \"string\" && str.trim().toUpperCase().startsWith(\"LINESTRING\")\r\n );\r\n}\r\n/**\r\n * 线转化\r\n * @param {*} wkt\r\n * @returns\r\n */\r\nfunction parseWKTToPaths(wkt) {\r\n try {\r\n const upper = wkt.trim().toUpperCase();\r\n let coordsPart;\r\n if (upper.startsWith(\"MULTILINESTRING\")) {\r\n coordsPart = wkt.match(/MULTILINESTRING\\s*\\(\\s*(.+)\\s*\\)/i)?.[1];\r\n if (!coordsPart) return null;\r\n const lines = coordsPart.split(/\\)\\s*,\\s*\\(/);\r\n return lines.map((line) => {\r\n line = line.replace(/^\\(/, \"\").replace(/\\)$/, \"\");\r\n return line.split(\",\").map((pt) => pt.trim().split(/\\s+/).map(Number));\r\n });\r\n } else if (upper.startsWith(\"LINESTRING\")) {\r\n coordsPart = wkt.match(/LINESTRING\\s*\\(\\s*(.+)\\s*\\)/i)?.[1];\r\n if (!coordsPart) return null;\r\n return [\r\n coordsPart.split(\",\").map((pt) => pt.trim().split(/\\s+/).map(Number)),\r\n ];\r\n }\r\n return null;\r\n } catch (e) {\r\n console.error(\"WKT parse error:\", e);\r\n return null;\r\n }\r\n}\r\n/**\r\n * geojson转arcgis\r\n * @param {*} geojson\r\n * @returns\r\n */\r\nfunction geoJSONToArcGISPaths(geojson) {\r\n if (!geojson.coordinates) return null;\r\n if (geojson.type === \"LineString\") {\r\n return [geojson.coordinates];\r\n } else if (geojson.type === \"MultiLineString\") {\r\n return geojson.coordinates;\r\n }\r\n return null;\r\n}\r\n/**\r\n * 格式化路径\r\n * @param {*} input\r\n * @returns\r\n */\r\nfunction normalizePaths(input) {\r\n if (!Array.isArray(input) || input.length === 0) return null;\r\n\r\n // 多段线:[[[x,y],...], [[x,y],...]]\r\n if (Array.isArray(input[0]) && Array.isArray(input[0][0])) {\r\n return input;\r\n }\r\n // 单段线:[[x,y], [x,y]]\r\n if (Array.isArray(input[0]) && typeof input[0][0] === \"number\") {\r\n return [input];\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * 创建兼容多源线数据的 FeatureLayer\r\n * @param {Array} lineDataList - 线数据数组,每项支持多种格式\r\n * @param {Object} [options] - 可选配置\r\n * @param {number} [options.defaultWKID=4326] - 默认空间参考\r\n * @param {string} [options.layerId] - 默认空间参考\r\n * @returns {Promise<FeatureLayer>} 返回 FeatureLayer 实例\r\n */\r\nexport async function createLineFeatureLayer(lineDataList = [], options = {}) {\r\n if (!Array.isArray(lineDataList) || lineDataList.length === 0) {\r\n console.error(\"No line data provided\");\r\n return null;\r\n }\r\n\r\n const { defaultWKID = 4326, layerId = \"lineFeatureId\" } = options;\r\n\r\n try {\r\n // 1. 解析所有线数据为统一格式:{ geometry: Polyline, attributes: Object }\r\n const features = lineDataList\r\n .map((item, index) => parseLineItem(item, defaultWKID, index))\r\n .filter(Boolean); // 过滤无效项\r\n\r\n if (features.length === 0) {\r\n console.error(\"No valid line features parsed\");\r\n return null;\r\n }\r\n\r\n // 2. 推断空间参考(优先使用第一个有效 geometry 的 WKID)\r\n const firstGeom = features[0].geometry;\r\n const spatialReference = firstGeom.spatialReference || {\r\n wkid: defaultWKID,\r\n };\r\n\r\n // 3. 创建 FeatureLayer 所需的 fields(自动推断属性字段)\r\n const allAttrs = features.map((f) => f.attributes).filter(Boolean);\r\n const fieldMap = new Set([\"OBJECTID\"]); // 必须包含 OBJECTID\r\n\r\n allAttrs.forEach((attrs) => {\r\n if (attrs && typeof attrs === \"object\") {\r\n Object.keys(attrs).forEach((key) => fieldMap.add(key));\r\n }\r\n });\r\n\r\n const fields = Array.from(fieldMap).map((name) => ({\r\n name,\r\n type: \"string\", // 简化处理,实际可按值类型判断\r\n alias: name,\r\n }));\r\n\r\n // 4. 确保每个 feature 有 OBJECTID\r\n features.forEach((feature, i) => {\r\n if (!feature.attributes) feature.attributes = {};\r\n if (feature.attributes.OBJECTID == null) {\r\n feature.attributes.OBJECTID = i + 1;\r\n }\r\n });\r\n\r\n // 5. 创建 FeatureLayer\r\n const layer = new window.jkEsri.FeatureLayer({\r\n source: features,\r\n fields: fields,\r\n objectIdField: \"OBJECTID\",\r\n geometryType: \"polyline\",\r\n spatialReference: spatialReference,\r\n renderer: {\r\n type: \"simple\",\r\n symbol: {\r\n type: \"simple-line\",\r\n color: \"#1f77b4\",\r\n width: 2,\r\n cap: \"round\",\r\n join: \"round\",\r\n },\r\n },\r\n title: \"Dynamic Line Layer\",\r\n id: layerId,\r\n });\r\n return layer;\r\n } catch (error) {\r\n console.error(\"Failed to create FeatureLayer:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * 将任意线数据项解析为 Graphic\r\n */\r\nfunction parseLineToGraphic(item, defaultWKID, defaultSymbol, index) {\r\n let geometry = null;\r\n let attributes = {};\r\n\r\n try {\r\n // 情况 1: 已是 Graphic 对象\r\n if (item instanceof window.jkEsri.Graphic) {\r\n const geom = item.geometry;\r\n if (geom && geom.type === \"polyline\") {\r\n return item; // 直接复用\r\n } else {\r\n console.error(\r\n `Item at index ${index} is a Graphic but not polyline, skipped`\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n // 情况 2: 包含 geometry 的对象(如 Feature 格式)\r\n if (item && typeof item === \"object\" && item.geometry) {\r\n const geom = item.geometry;\r\n if (\r\n Array.isArray(geom.paths) ||\r\n Array.isArray(geom.coordinates) ||\r\n Array.isArray(geom.rings)\r\n ) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths: geom.paths || geom.coordinates || geom.rings,\r\n spatialReference: geom.spatialReference || { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { ...item.attributes, ...item };\r\n }\r\n // 情况 3: GeoJSON\r\n if (item && typeof item === \"object\" && item.type) {\r\n if (judgeLayerType(item.type) == \"polyline\") {\r\n if (\r\n Array.isArray(item.paths) ||\r\n Array.isArray(item.coordinates) ||\r\n Array.isArray(item.rings)\r\n ) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths: item.paths || item.coordinates || item.rings,\r\n spatialReference: item.spatialReference || { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { ...item.attributes, ...item };\r\n } else if ([\"LineString\", \"MultiLineString\"].includes(item.type)) {\r\n const paths = geoJSONToArcGISPaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { ...item.properties, sourceIndex: index };\r\n } else if (item.type === \"Feature\") {\r\n return parseLineToGraphic(\r\n item.geometry || item,\r\n defaultWKID,\r\n defaultSymbol,\r\n index\r\n );\r\n }\r\n }\r\n // 情况 4: WKT 字符串\r\n if (typeof item === \"string\") {\r\n if (isWKTMultiLineString(item) || isWKTPolyline(item)) {\r\n const paths = parseWKTToPaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n }\r\n attributes = { wkt: item, sourceIndex: index };\r\n }\r\n // 情况 5: 纯坐标数组\r\n if (Array.isArray(item)) {\r\n const paths = normalizePaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { inputType: \"array\", sourceIndex: index };\r\n }\r\n\r\n if (!geometry) {\r\n console.error(`Invalid line data at index ${index}:`, item);\r\n return null;\r\n }\r\n\r\n // 合并符号配置:优先使用 item 中的 symbol 配置\r\n const symbolConfig = { ...defaultSymbol };\r\n if (item && typeof item === \"object\") {\r\n if (item.color !== undefined) symbolConfig.color = item.color;\r\n if (item.width !== undefined) symbolConfig.width = item.width;\r\n if (item.borderWidth !== undefined) symbolConfig.width = item.borderWidth;\r\n if (item.opacity !== undefined) symbolConfig.opacity = item.opacity;\r\n }\r\n\r\n const symbol = getLineSymbol(symbolConfig);\r\n\r\n return new window.jkEsri.Graphic({\r\n geometry,\r\n symbol,\r\n attributes: { ...attributes, sourceIndex: index },\r\n });\r\n } catch (e) {\r\n console.error(`Failed to parse line item at index ${index}:`, e);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 创建兼容多源线数据的 GraphicsLayer(使用 Graphic)\r\n * @param {Array} lineDataList - 线数据数组,每项支持多种格式\r\n * @param {Object} [options] - 可选配置\r\n * @param {number} [options.defaultWKID=4326] - 默认空间参考\r\n * @param {string} [options.layerId='lineGraphicsLayer'] - 图层 ID\r\n * @param {Object} [options.defaultSymbol] - 默认线符号配置\r\n * @param {Promise<GraphicsLayer>} [mapLayer] - 地图图层\r\n * @returns {Promise<GraphicsLayer>} 返回 GraphicsLayer 实例\r\n */\r\nexport async function createLineGraphicsLayer(\r\n lineDataList = [],\r\n options = {},\r\n mapLayer = null\r\n) {\r\n if (!Array.isArray(lineDataList) || lineDataList.length === 0) {\r\n console.error(\"createLineGraphicsLayer: No line data provided\");\r\n return null;\r\n }\r\n const {\r\n defaultWKID = 4326,\r\n layerId = \"lineGraphicsLayer\",\r\n defaultSymbol = {\r\n color: \"#1f77b4\",\r\n width: 2,\r\n opacity: 100, // 0-100\r\n },\r\n } = options;\r\n\r\n try {\r\n const graphics = [];\r\n for (let i = 0; i < lineDataList.length; i++) {\r\n const item = lineDataList[i];\r\n const graphic = parseLineToGraphic(item, defaultWKID, defaultSymbol, i);\r\n if (graphic) {\r\n graphics.push(graphic);\r\n }\r\n }\r\n\r\n if (graphics.length === 0) {\r\n console.error(\"createLineGraphicsLayer: No valid graphics created\");\r\n return null;\r\n }\r\n let layer = mapLayer;\r\n if (!layer)\r\n layer = new window.jkEsri.GraphicsLayer({\r\n id: layerId,\r\n title: \"Dynamic Line Graphics Layer\",\r\n });\r\n\r\n layer.addMany(graphics);\r\n return {\r\n layer,\r\n graphics,\r\n };\r\n } catch (error) {\r\n console.error(\"createLineGraphicsLayer failed:\", error);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 创建兼容多源面数据的 GraphicsLayer(支持正向显示 & 反遮罩)\r\n * @param {Array} polygonDataList - 面数据列表(每个元素可为 rings 数组、{rings} 或 {geometry: {rings}})\r\n * @param {Object} options - 配置项\r\n * @param {string} options.layerId - 层级id\r\n * @param {object} options.outerExtent - 遮罩外围\r\n * @param {__esri.GraphicsLayer | __esri.MapView | __esri.SceneView} context -\r\n * 推荐传入 view(MapView/SceneView),也可传入已有 GraphicsLayer(兼容模式)\r\n * @param {any} options.mapLayer - 地图图层\r\n * @returns {any} {layer,graphics}\r\n */\r\nexport async function createMaskLayer(\r\n polygonDataList = [],\r\n options,\r\n context = null,\r\n mapLayer\r\n) {\r\n const {\r\n layerId = \"createMaskLayer\",\r\n outerExtent = null, // { xmin, ymin, xmax, ymax, spatialReference }\r\n } = options || {};\r\n\r\n if (!Array.isArray(polygonDataList) || polygonDataList.length === 0) {\r\n console.warn(\"createMaskLayer: 范围是空的\");\r\n return null;\r\n }\r\n\r\n if (typeof window.jkEsri === \"undefined\") {\r\n console.error(\"ArcGIS API for JavaScript is not loaded\");\r\n return null;\r\n }\r\n\r\n const { Polygon, SpatialReference, GraphicsLayer, Graphic, geometryEngine } =\r\n window.jkEsri;\r\n\r\n // ========== 步骤 1:确定空间参考(spatialReference)==========\r\n let view = null;\r\n let spatialReference = null;\r\n let is3D = false;\r\n\r\n if (context && typeof context === \"object\") {\r\n if (context.type === \"2d\" || context.type === \"3d\") {\r\n view = context;\r\n is3D = context.type === \"3d\";\r\n spatialReference = view.spatialReference;\r\n if (!spatialReference) {\r\n console.error(\"View spatialReference is not ready\");\r\n return null;\r\n }\r\n } else if (context.declaredClass === \"esri.layers.GraphicsLayer\") {\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n } else {\r\n console.warn(\"Unknown context type, assuming WKID 4326\");\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n }\r\n } else {\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n }\r\n\r\n const sr = spatialReference;\r\n const wkid = sr.wkid;\r\n\r\n // ========== 辅助函数 ==========\r\n /**\r\n * 提取 rings 数据\r\n */\r\n function extractRawRings(item, index) {\r\n if (!item) return null;\r\n if (Array.isArray(item)) return item;\r\n if (item.rings) return item.rings;\r\n if (item.geometry.rings) return item.geometry.rings;\r\n console.warn(`Item ${index} has no valid rings`);\r\n return null;\r\n }\r\n\r\n /**\r\n * 判断环是否为顺时针(CW)\r\n */\r\n function isRingClockwise(ring) {\r\n let sum = 0;\r\n for (let i = 0; i < ring.length; i++) {\r\n const [x1, y1] = ring[i];\r\n const [x2, y2] = ring[(i + 1) % ring.length];\r\n sum += (x2 - x1) * (y2 + y1);\r\n }\r\n return sum > 0; // true = CW\r\n }\r\n\r\n /**\r\n * 确保环闭合\r\n */\r\n function ensureClosed(ring) {\r\n if (ring.length < 3) return null;\r\n const first = ring[0];\r\n const last = ring[ring.length - 1];\r\n if (first[0] !== last[0] || first[1] !== last[1]) {\r\n return [...ring, [first[0], first[1]]];\r\n }\r\n return ring;\r\n }\r\n\r\n // ========== 核心:3D 反遮罩几何裁剪 ==========\r\n /**\r\n * 3D 反遮罩几何裁剪\r\n * @param {*} outerRing\r\n * @param {*} holes\r\n * @param {*} sr\r\n * @returns\r\n */\r\n function compute3DDifference(outerRing, holes, sr) {\r\n const outerPoly = new Polygon({\r\n rings: [outerRing],\r\n spatialReference: sr,\r\n });\r\n\r\n if (holes.length === 0) return outerPoly;\r\n\r\n // 合并所有 holes\r\n let unionHole = null;\r\n for (const hole of holes) {\r\n const holePoly = new Polygon({\r\n rings: [hole],\r\n spatialReference: sr,\r\n });\r\n if (!unionHole) {\r\n unionHole = holePoly;\r\n } else {\r\n try {\r\n unionHole = geometryEngine.union(unionHole, holePoly);\r\n } catch (e) {\r\n console.warn(\"Union hole failed, skipping:\", e);\r\n }\r\n }\r\n }\r\n\r\n if (!unionHole) return outerPoly;\r\n\r\n // 执行差集\r\n try {\r\n const result = geometryEngine.difference(outerPoly, unionHole);\r\n return result || outerPoly;\r\n } catch (e) {\r\n console.error(\"Geometry difference failed:\", e);\r\n return outerPoly;\r\n }\r\n }\r\n\r\n // ========== 主逻辑 ==========\r\n try {\r\n // ========== 反遮罩模式 ==========\r\n // 构建 outerRing\r\n let outerRing;\r\n if (outerExtent && outerExtent.spatialReference.wkid === wkid) {\r\n outerRing = [\r\n [outerExtent.xmin, outerExtent.ymin],\r\n [outerExtent.xmax, outerExtent.ymin],\r\n [outerExtent.xmax, outerExtent.ymax],\r\n [outerExtent.xmin, outerExtent.ymax],\r\n [outerExtent.xmin, outerExtent.ymin],\r\n ];\r\n } else {\r\n if (wkid === 4326) {\r\n outerRing = [\r\n [-180, -90],\r\n [180, -90],\r\n [180, 90],\r\n [-180, 90],\r\n [-180, -90],\r\n ];\r\n } else if (wkid === 3857) {\r\n const halfWorld = 20037508.342789244;\r\n outerRing = [\r\n [-halfWorld, -halfWorld],\r\n [halfWorld, -halfWorld],\r\n [halfWorld, halfWorld],\r\n [-halfWorld, halfWorld],\r\n [-halfWorld, -halfWorld],\r\n ];\r\n } else {\r\n // 默认中国范围(WKID 4490 近似)\r\n outerRing = [\r\n [105.0019, 19.9696],\r\n [121.0131, 19.9696],\r\n [121.0131, 26.933],\r\n [105.0019, 26.933],\r\n [105.0019, 19.9696],\r\n ];\r\n }\r\n }\r\n\r\n // 提取 holes(支持多个环)\r\n const holes = [];\r\n for (let i = 0; i < polygonDataList.length; i++) {\r\n const item = polygonDataList[i];\r\n const rawRings = extractRawRings(item, i);\r\n if (!rawRings || !Array.isArray(rawRings[0]) || rawRings[0].length < 3)\r\n continue;\r\n\r\n rawRings.forEach((ring, idx) => {\r\n idx;\r\n ring = ensureClosed(ring);\r\n if (!ring) return;\r\n\r\n // 2D 要求 hole 为 CW;3D 不关心(后续会裁剪)\r\n if (!is3D && !isRingClockwise(ring)) {\r\n ring = ring.slice().reverse();\r\n }\r\n\r\n holes.push(ring);\r\n });\r\n }\r\n\r\n let finalGeometry;\r\n\r\n if (is3D) {\r\n // ✅ 3D:使用 geometryEngine 裁剪\r\n finalGeometry = await compute3DDifference(outerRing, holes, sr);\r\n } else {\r\n // ✅ 2D:使用多环 Polygon(holes 必须 CW)\r\n if (holes.length === 0) {\r\n finalGeometry = new Polygon({\r\n rings: [outerRing],\r\n spatialReference: sr,\r\n });\r\n } else {\r\n finalGeometry = new Polygon({\r\n rings: [outerRing, ...holes],\r\n spatialReference: sr,\r\n });\r\n }\r\n }\r\n\r\n const maskSymbol = {\r\n type: \"simple-fill\",\r\n color: [0, 0, 0, 0.8],\r\n outline: null,\r\n };\r\n const maskGraphic = new Graphic({\r\n geometry: finalGeometry,\r\n symbol: maskSymbol,\r\n });\r\n\r\n let layer = mapLayer;\r\n if (!layer) {\r\n layer = new GraphicsLayer({ id: layerId });\r\n if (view) view.map.add(layer);\r\n } else {\r\n layer.removeAll();\r\n }\r\n layer.add(maskGraphic);\r\n\r\n return { layer, graphics: [maskGraphic] };\r\n } catch (error) {\r\n console.error(\"createMaskLayer failed:\", error);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 创建兼容多源面数据的 GraphicsLayer(支持正向显示 & 反遮罩)\r\n * @param {Array} polygonDataList - 面数据列表(每个元素可为 rings 数组、{rings} 或 {geometry: {rings}})\r\n * @param {Object} options - 配置项\r\n * @param {string} options.layerId - 层级id\r\n * @param {object} options.defaultSymbol - 默认样式\r\n * @param {number} options.defaultWKID - 地图层级\r\n * @param {Boolean} options.enableHoles - 是否镂空\r\n * @param {__esri.GraphicsLayer | __esri.MapView | __esri.SceneView} context -\r\n * 推荐传入 view(MapView/SceneView),也可传入已有 GraphicsLayer(兼容模式)\r\n * @param {any} options.mapLayer - 地图图层\r\n * @returns {any} {layer,graphics}\r\n */\r\nexport async function createPolygonGraphicsLayer(\r\n polygonDataList = [],\r\n options,\r\n context = null,\r\n mapLayer\r\n) {\r\n const {\r\n layerId = \"polygonGraphicsLayer\",\r\n defaultSymbol = {\r\n color: [255, 255, 255, 0.1],\r\n outline: { color: \"#0070ff\", width: 1 },\r\n },\r\n enableHoles = true,\r\n } = options;\r\n if (!Array.isArray(polygonDataList) || polygonDataList.length === 0) {\r\n console.warn(\"createPolygonGraphicsLayer: 范围是空的\");\r\n return null;\r\n }\r\n\r\n if (typeof window.jkEsri === \"undefined\") {\r\n console.error(\"ArcGIS API for JavaScript is not loaded\");\r\n return null;\r\n }\r\n\r\n const { Polygon, SpatialReference, GraphicsLayer, Graphic } = window.jkEsri;\r\n // ========== 步骤 1:确定空间参考(spatialReference)==========\r\n let view = null;\r\n let spatialReference = null;\r\n\r\n if (context && typeof context === \"object\") {\r\n if (context.type === \"2d\" || context.type === \"3d\") {\r\n view = context;\r\n spatialReference = view.spatialReference;\r\n if (!spatialReference) {\r\n console.error(\"View spatialReference is not ready\");\r\n return null;\r\n }\r\n } else if (context.declaredClass === \"esri.layers.GraphicsLayer\") {\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n } else {\r\n console.warn(\"Unknown context type, assuming WKID 4326\");\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n }\r\n } else {\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n }\r\n\r\n const sr = spatialReference;\r\n\r\n // ========== 辅助函数 ==========\r\n /**\r\n * 提取 rings 数据\r\n */\r\n function extractRawRings(item, index) {\r\n if (!item) return null;\r\n if (Array.isArray(item)) return item;\r\n if (item.rings) return item.rings;\r\n if (item.geometry.rings) return item.geometry.rings;\r\n console.warn(`Item ${index} has no valid rings`);\r\n return null;\r\n }\r\n\r\n /**\r\n * 确保环闭合\r\n */\r\n function ensureClosed(ring) {\r\n if (ring.length < 3) return null;\r\n const first = ring[0];\r\n const last = ring[ring.length - 1];\r\n if (first[0] !== last[0] || first[1] !== last[1]) {\r\n return [...ring, [first[0], first[1]]];\r\n }\r\n return ring;\r\n }\r\n // ========== 主逻辑 ==========\r\n try {\r\n // ========== 正向显示模式(2D/3D 通用)==========\r\n const graphics = [];\r\n for (let i = 0; i < polygonDataList.length; i++) {\r\n const item = polygonDataList[i];\r\n const rawRings = extractRawRings(item, i);\r\n if (!rawRings) continue;\r\n const symbolConfig = { ...defaultSymbol };\r\n if (item && typeof item === \"object\") {\r\n if (Array.isArray(item.color)) symbolConfig.color = item.color;\r\n if (typeof item.opacity === \"number\") {\r\n const alpha = Math.min(1, Math.max(0, item.opacity));\r\n const baseColor = Array.isArray(symbolConfig.color)\r\n ? symbolConfig.color.slice(0, 3)\r\n : [255, 255, 255];\r\n symbolConfig.color = [...baseColor, alpha];\r\n }\r\n if (item.outlineColor) symbolConfig.outline.color = item.outlineColor;\r\n if (typeof item.outlineWidth === \"number\")\r\n symbolConfig.outline.width = item.outlineWidth;\r\n }\r\n const symbol = {\r\n type: \"simple-fill\",\r\n color: symbolConfig.color,\r\n outline: symbolConfig.outline,\r\n };\r\n const attributes = { ...(item || {}), sourceIndex: i };\r\n if (enableHoles) {\r\n const poly = new Polygon({\r\n rings: rawRings,\r\n spatialReference: sr,\r\n });\r\n graphics.push(new Graphic({ geometry: poly, symbol, attributes }));\r\n } else {\r\n const outerRing = ensureClosed(rawRings[0]);\r\n if (outerRing) {\r\n const poly = new Polygon({\r\n rings: [outerRing],\r\n spatialReference: sr,\r\n });\r\n graphics.push(new Graphic({ geometry: poly, symbol, attributes }));\r\n }\r\n }\r\n }\r\n\r\n if (graphics.length === 0) {\r\n console.warn(\"No valid graphics created\");\r\n return null;\r\n }\r\n let layer = mapLayer;\r\n if (!layer) {\r\n layer = new GraphicsLayer({ id: layerId, title: \"Polygon Layer\" });\r\n if (view) view.map.add(layer);\r\n } else {\r\n layer.removeAll();\r\n }\r\n layer.addMany(graphics);\r\n return { layer, graphics };\r\n } catch (error) {\r\n console.error(\"createPolygonGraphicsLayer failed:\", error);\r\n return null;\r\n }\r\n}\r\n","// import { judgmentMapDataType, isValidArcGISPoint } from './comstom'\r\n/**\r\n * ArcGIS用于 ArcGIS JSON ⇄ GeoJSON 互转\r\n * ArcGIS.parse(arcgisJson) → 用于将 ArcGIS JSON 转为 GeoJSON { x: 30, y: 10 }==>{type: \"Point\",coordinates: [30, 10]}\r\n * ArcGIS.convert({geojson,options}) → 将 GeoJSON 转为 ArcGIS 格式。{type: \"Point\",coordinates: [30, 10]}==>{ x: 30, y: 10 }\r\n * options ==>{idAttribute: 'OBJECTID', // 指定 ID 字段名(默认 \"id\")\r\n * spatialReference: { wkid: 4326 } // 添加空间参考\r\n * } ==> {x: 30,y: 10,spatialReference: { wkid: 4326 }}\r\n */\r\nimport ArcGIS from 'terraformer-arcgis-parser'\r\n/**\r\n * ArcGIS 转 GeoJSON\r\n * @param {Object} data - 对象\r\n * @param {Object} data.geometry- 点:{x,y},线:{paths:[]},面:{rings:[]}\r\n * @returns {GeoJSON} GeoJSON 对象\r\n */\r\nfunction arcGISTranformGeoJson(data) {\r\n try {\r\n if (!data || !data.geometry) {\r\n throw new Error(\r\n `${JSON.stringify(\r\n data\r\n )}-arcGISTranformGeoJson对象包含geometry:{点:{x,y},线:{paths:[]},面:{rings:[]}}`\r\n )\r\n }\r\n return ArcGIS.parse(data.geometry)\r\n } catch (error) {\r\n throw new Error(`arcGISTranformGeoJson: ${error}`)\r\n }\r\n}\r\n/**\r\n * GeoJSON 转 ArcGIS\r\n * @param {Object} data - 对象\r\n * @param {Object} data.geometry {type:Point|MultiPoint|LineString|Polygon|MultiPolygon,coordinates:[]}\r\n * @returns {ArcGIS} ArcGIS 对象\r\n */\r\nfunction geoJsonTranformArcgis(data) {\r\n const errorText = `geoJsonTranformArcgis数据格式=>{geometry:{type:Point|MultiPoint|LineString|Polygon|MultiPolygon,coordinates:[]}}<=>错误对象${JSON.stringify(\r\n data\r\n )}`\r\n try {\r\n if (\r\n !data ||\r\n !data.geometry ||\r\n !data.geometry.coordinates ||\r\n data.geometry.coordinates.length === 0\r\n ) {\r\n console.error(errorText)\r\n return null\r\n }\r\n let geometry = data.geometry,\r\n jsonData = geometry\r\n if (!geometry.type) {\r\n console.error(errorText)\r\n return null\r\n }\r\n if (geometry.type == 'Point') {\r\n jsonData = {\r\n type: 'Feature',\r\n geometry: geometry,\r\n properties: {}\r\n }\r\n }\r\n const arcgisData = ArcGIS.convert(jsonData)\r\n if (arcgisData && JSON.stringify(arcgisData) != '{}') {\r\n return arcgisData.geometry ? arcgisData.geometry : arcgisData\r\n } else throw new Error(errorText)\r\n } catch (error) {\r\n throw new Error(error)\r\n }\r\n}\r\nimport { drawLayer } from '../utils/index.js'\r\n\r\n/**\r\n * WKT用于 WKT ⇄ GeoJSON 互转\r\n * WKT支持格式-POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION\r\n * WKT.parse(wktString) → 将WKT字符串解析为 GeoJSON 对象。'POINT (30 10)'==>{type: \"Point\",coordinates: [30, 10]}\r\n * WKT.convert(geojson) → 将 GeoJSON 对象转换为 WKT 字符串。{type: \"Point\",coordinates: [30, 10]}==>POINT (30 10)\r\n */\r\nimport WKT from 'terraformer-wkt-parser'\r\n\r\n/**\r\n * 安全判断是否为非空字符串\r\n */\r\nfunction isValidString(str) {\r\n return str && typeof str === 'string' && str.trim() !== '' && str != 'null' && str != 'undefined'\r\n}\r\n/**\r\n * 判断点\r\n * @param {*} value\r\n * @returns\r\n */\r\nfunction isNumeric(value) {\r\n // 排除 null 和 boolean(因为 typeof null === 'object',但 Number(null) = 0)\r\n if (value === null || !value || typeof value === 'boolean') {\r\n return false\r\n }\r\n\r\n // 如果是 number 类型,必须是有限数(排除 NaN, Infinity)\r\n if (typeof value === 'number') {\r\n return isFinite(value)\r\n }\r\n\r\n // 如果是 string 类型,尝试转换\r\n if (typeof value === 'string') {\r\n // 去除首尾空格\r\n const trimmed = value.trim()\r\n // 空字符串直接返回 false\r\n if (trimmed === '') return false\r\n // 使用 isFinite 检查是否可转为有效数字\r\n return isFinite(trimmed) && !isNaN(Number(trimmed))\r\n }\r\n\r\n // 其他类型(object, array, undefined 等)一律 false\r\n return false\r\n}\r\n/**\r\n * 粗略判断是否为 ArcGIS JSON 对象(至少包含 x/y 或 paths/rings)\r\n */\r\nfunction isValidArcGIS(obj) {\r\n if (typeof obj !== 'object' || obj === null) return false\r\n // Point: {x, y}\r\n if (isNumeric(obj.x) && isNumeric(obj.y)) return true\r\n // Point: {longitude, latitude}\r\n if (isNumeric(obj.longitude) && isNumeric(obj.latitude)) return true\r\n // Multipoint: {points: [...]}\r\n if (Array.isArray(obj.points)) return true\r\n\r\n // Polyline: {paths: [...]}\r\n if (Array.isArray(obj.paths)) return true\r\n\r\n // Polygon: {rings: [...]}\r\n if (Array.isArray(obj.rings)) return true\r\n\r\n return false\r\n}\r\n/**\r\n * geojson转wkt\r\n * @param {*} geojson\r\n * @returns\r\n */\r\nfunction geoJsonTranformWkt(geojson) {\r\n try {\r\n if (!geojson && !geojson.type) {\r\n throw new Error(`[geoJsonTranformWkt] 期望字符串,但收到: ${geojson}`)\r\n }\r\n return WKT.convert(geojson)\r\n } catch (error) {\r\n throw new Error(`geojson解析失败: ${error.message}`)\r\n }\r\n}\r\n\r\n/**\r\n * WKT 转 ArcGIS(安全版)\r\n * @param {string} wktString - WKT 字符串,如 \"POINT (30 10)\"\r\n * @returns {Object|null} ArcGIS JSON 对象,失败返回 null\r\n */\r\nfunction wktTranformArcgis(wktString) {\r\n try {\r\n if (!isValidString(wktString)) {\r\n throw new Error(`[wktTranformArcgis] 期望字符串,但收到: ${typeof wktString}`)\r\n }\r\n\r\n const geojson = WKT.parse(wktString.trim())\r\n const arcgis = ArcGIS.convert(geojson)\r\n return arcgis\r\n } catch (error) {\r\n throw new Error(`WKT 解析失败: ${error.message}`)\r\n }\r\n}\r\n/**\r\n * ArcGIS 转 WKT(安全版)\r\n * @param {Object} arcgisJson - ArcGIS 格式对象\r\n * @returns {string|null} WKT 字符串,失败返回 null\r\n */\r\nfunction arcgisTranformWkt(arcgisJson) {\r\n try {\r\n if (!isValidArcGIS(arcgisJson)) {\r\n throw new Error(`[arcgisTranformWkt] 期望字符串,但收到: ${arcgisJson}`)\r\n }\r\n const geojson = ArcGIS.parse(arcgisJson)\r\n const wkt = WKT.convert(geojson)\r\n return wkt\r\n } catch (error) {\r\n throw new Error(`[arcgisTranformWkt] ArcGIS 解析失败:${error.message}输入:${arcgisJson}`)\r\n }\r\n}\r\n/**\r\n * 绘制项目图层\r\n * @param {*} data\r\n * @returns\r\n */\r\nfunction drawWktAsset(data) {\r\n let graphic = null\r\n let arcgis = wktTranformArcgis(data.sub_range)\r\n graphic = drawLayer({\r\n geometry: arcgis,\r\n ...data\r\n })\r\n return graphic\r\n}\r\nexport {\r\n arcGISTranformGeoJson,\r\n geoJsonTranformArcgis,\r\n geoJsonTranformWkt,\r\n wktTranformArcgis,\r\n arcgisTranformWkt,\r\n drawWktAsset\r\n}\r\n","/* eslint-disable require-jsdoc */\r\nimport { loadWmsLayer } from \"../config/loadLayers.js\";\r\nimport { toArcGISPoint, mapJump } from \"../config/toArcGISPoint.js\";\r\nimport {\r\n getTextSymbol,\r\n getSimpleMarkerSymbol,\r\n getPictureSymbol,\r\n getLineSymbol,\r\n getFillSymbol,\r\n drawArcPoint,\r\n createArcPoint,\r\n createLineGraphicsLayer,\r\n createMaskLayer,\r\n createPolygonGraphicsLayer,\r\n drawLayer,\r\n} from \"../config/drawLayer.js\";\r\n\r\n/**\r\n * 加载2D地图\r\n * @param String mapId 地图容器id\r\n * @param Object params 地图参数\r\n * @return Promise\r\n */\r\nvar arcgisCoreView = null,\r\n arcgisCoreMap = null;\r\n/**\r\n * 返回地图容器\r\n * @param {*} data\r\n */\r\nexport function initMapPack(data) {\r\n if (!arcgisCoreView && data.view) arcgisCoreView = data.view;\r\n if (!arcgisCoreMap && data.map) arcgisCoreMap = data.map;\r\n}\r\n\r\n/**\r\n * 创建自定义底图\r\n * @param {*} mapId\r\n * @param {*} layer\r\n * @param {*} params\r\n * @returns\r\n */\r\nexport function createBase(mapId, layer, params) {\r\n return new Promise((resolve) => {\r\n arcgisCoreMap = new window.jkEsri.Map({ layers: [layer] }); // 添加动态图层\r\n const { minZoom = 6, maxZoom = 17 } = params;\r\n const viewOptions = {\r\n container: mapId,\r\n map: arcgisCoreMap,\r\n ui: {\r\n logo: false,\r\n components: [\"zoom\"],\r\n },\r\n };\r\n Object.assign(viewOptions, params || {});\r\n viewOptions.constraints = {\r\n minZoom,\r\n maxZoom,\r\n };\r\n arcgisCoreView = new window.jkEsri.MapView(viewOptions);\r\n arcgisCoreView.when(function () {\r\n if (params.extent) {\r\n goToViewExtent(params.extent);\r\n }\r\n resolve({ map: arcgisCoreMap, view: arcgisCoreView });\r\n });\r\n });\r\n}\r\n/**\r\n * 创建基础地图\r\n * @param {*} mapId\r\n * @param {*} params\r\n * @returns\r\n */\r\nexport function createMapView(mapId, params) {\r\n return new Promise((resolve) => {\r\n /*天地图-影像(CGCS2000)*/\r\n const layersType =\r\n params && params.layersType ? params.layersType : \"tdtYxt\";\r\n var tiandituDtLayer = loadWmsLayer({\r\n id: layersType,\r\n title: \"天地图-影像\",\r\n url: \"http://{subDomain}.tianditu.gov.cn/img_c/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=img&STYLE=default&FORMAT=tiles&TILEMATRIXSET=c&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}&tk=4267820f43926eaf808d61dc07269beb\",\r\n subDomains: [\"t0\", \"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\"],\r\n loadInfo: true,\r\n // fullExtent: {\r\n // xmin: 109.613990783691,\r\n // xmax: 117.323570251465,\r\n // ymin: 20.131498336792,\r\n // ymax: 25.5443782806396,\r\n // spatialReference: 4490\r\n // },\r\n }),\r\n tiandituDtBz = loadWmsLayer({\r\n id: \"tiandituDtBz\",\r\n title: \"天地图-影像注记\",\r\n url: \"http://{subDomain}.tianditu.gov.cn/cia_c/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=cia&STYLE=default&FORMAT=tiles&TILEMATRIXSET=c&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}&tk=4267820f43926eaf808d61dc07269beb\",\r\n subDomains: [\"t0\", \"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\"],\r\n loadInfo: true,\r\n // fullExtent: {\r\n // xmin: 109.613990783691,\r\n // xmax: 117.323570251465,\r\n // ymin: 20.131498336792,\r\n // ymax: 25.5443782806396,\r\n // spatialReference: 4490\r\n // }\r\n });\r\n if (layersType == \"tdtDxt\") {\r\n tiandituDtLayer = loadWmsLayer({\r\n id: layersType,\r\n title: \"天地图-地形图\",\r\n url: \"http://{subDomain}.tianditu.gov.cn/ter_c/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=ter&STYLE=default&FORMAT=tiles&TILEMATRIXSET=c&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}&tk=4267820f43926eaf808d61dc07269beb\",\r\n subDomains: [\"t0\", \"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\"],\r\n loadInfo: true,\r\n // fullExtent: {\r\n // xmin: 109.613990783691,\r\n // xmax: 117.323570251465,\r\n // ymin: 20.131498336792,\r\n // ymax: 25.5443782806396,\r\n // spatialReference: 4490\r\n // },\r\n });\r\n } else if (layersType == \"tdtSlt\") {\r\n tiandituDtLayer = loadWmsLayer({\r\n id: \"tdtSlt\",\r\n title: \"天地图-矢量图\",\r\n url: \"https://{subDomain}.tianditu.gov.cn/vec_c/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=vec&STYLE=default&FORMAT=tiles&TILEMATRIXSET=c&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}&tk=4267820f43926eaf808d61dc07269beb\",\r\n subDomains: [\"t0\", \"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\"],\r\n loadInfo: true,\r\n // fullExtent: {\r\n // xmin: 109.613990783691,\r\n // xmax: 117.323570251465,\r\n // ymin: 20.131498336792,\r\n // ymax: 25.5443782806396,\r\n // spatialReference: 4490\r\n // },\r\n });\r\n }\r\n arcgisCoreMap = new window.jkEsri.Map();\r\n arcgisCoreMap.layers.add(tiandituDtLayer, 0);\r\n\r\n arcgisCoreMap.layers.add(tiandituDtBz, 1);\r\n const { minZoom = 6, maxZoom = 17 } = params;\r\n const param = {\r\n map: arcgisCoreMap,\r\n container: mapId,\r\n };\r\n if (params && params.mapType && params.mapType == \"3d\") {\r\n arcgisCoreView = new window.jkEsri.SceneView(param);\r\n // arcgisCoreView.watch('zoom', (newZoom) => {\r\n // if (newZoom < minZoom || newZoom > maxZoom) {\r\n // arcgisCoreView.goTo(\r\n // { zoom: Math.min(maxZoom, Math.max(minZoom, newZoom)) },\r\n // { animate: false } // 禁用动画,避免闪烁\r\n // )\r\n // }\r\n // })\r\n } else {\r\n Object.assign(param, params || {});\r\n param.constraints = {\r\n minZoom,\r\n maxZoom,\r\n };\r\n arcgisCoreView = new window.jkEsri.MapView(param);\r\n }\r\n arcgisCoreView.when(function () {\r\n if (param.extent) {\r\n goToViewExtent(param.extent);\r\n }\r\n resolve({ map: arcgisCoreMap, view: arcgisCoreView });\r\n });\r\n });\r\n}\r\n/**\r\n * 跳转点\r\n * @param String mapId 地图容器id\r\n * @param Object params 地图参数\r\n * @return Promise\r\n */\r\nfunction goToPoint(point, zoom = 17) {\r\n arcgisCoreView.goTo(\r\n {\r\n target: toArcGISPoint(point), // 跳转目标点\r\n tilt: 60, // 可选,目标视角倾斜角度\r\n heading: 30, // 可选,目标视角方向角度\r\n zoom, // 可选,目标视角缩放级别\r\n },\r\n { duration: 1000 }\r\n );\r\n}\r\n/**\r\n * 跳转extent\r\n * @param Object extent 地图参数\r\n */\r\nfunction goToViewExtent(extent) {\r\n if (extent.xmin && extent.ymin && extent.xmax && extent.ymax) {\r\n let wkid = extent.xmin > 1000 ? 102100 : 4326;\r\n arcgisCoreView.goTo(\r\n new window.jkEsri.Extent(\r\n extent.xmin,\r\n extent.ymin,\r\n extent.xmax,\r\n extent.ymax,\r\n new window.jkEsri.SpatialReference({\r\n wkid: wkid,\r\n })\r\n ),\r\n { duration: 1000 }\r\n );\r\n }\r\n}\r\n/**\r\n * 地图跳转\r\n * @param {*} target\r\n * @param {*} options\r\n * @returns\r\n */\r\nfunction goToMap(target, options = { zoom: 16 }) {\r\n if (target && arcgisCoreView) {\r\n if (\r\n (target.x && target.y) ||\r\n (target.longitude && target.latitude) ||\r\n (target.jd && target.wd) ||\r\n (target.length == 2 && target[0] && target[1]) ||\r\n (target.lng && target.lat)\r\n ) {\r\n goToPoint(target, options.zoom);\r\n return;\r\n }\r\n if (target.xmin && target.ymin && target.xmax && target.ymax) {\r\n goToViewExtent(target);\r\n return;\r\n }\r\n mapJump(arcgisCoreView, target, options);\r\n }\r\n}\r\n/**\r\n * 获取面积\r\n * @param geometry\r\n */\r\nfunction getArea(geometry) {\r\n const outSpatialReference = {\r\n wkid: 4326,\r\n };\r\n outSpatialReference;\r\n const newGeometry = window.jkEsri.projection.project(\r\n geometry,\r\n outSpatialReference\r\n );\r\n newGeometry;\r\n // 平方米\r\n return window.jkEsri.geometryEngine.geodesicArea(\r\n newGeometry,\r\n \"square-meters\"\r\n ); //返回平方米\r\n}\r\n/**\r\n * 绘制缓冲区\r\n * @param {*} val\r\n * @param {*} myDrawGeometry\r\n * @returns\r\n */\r\nfunction drawBuffer(val = 10, myDrawGeometry) {\r\n return new Promise((resolve) => {\r\n const outSpatialReference = {\r\n wkid: 4326,\r\n };\r\n const myDrawGeometryNew = window.jkEsri.projection.project(\r\n myDrawGeometry,\r\n outSpatialReference\r\n );\r\n //公里-meters kilometers\r\n const geometry = window.jkEsri.geometryEngine.geodesicBuffer(\r\n myDrawGeometryNew,\r\n val,\r\n \"kilometers\"\r\n );\r\n let lineColor = new window.jkEsri.Color(\"red\");\r\n const color = new window.jkEsri.Color(\"red\");\r\n color.a = 0.1;\r\n const symbol = {\r\n type: \"simple-fill\",\r\n color: color,\r\n outline: {\r\n color: lineColor,\r\n width: 2,\r\n style: \"solid\",\r\n },\r\n };\r\n let graphic = window.jkEsri.Graphic.fromJSON({\r\n geometry,\r\n attributes: null,\r\n });\r\n graphic.symbol = symbol;\r\n resolve(graphic);\r\n goToViewExtent(graphic.geometry.extent);\r\n });\r\n}\r\nimport { arcGISTranformGeoJson } from \"../config/wktMethods\";\r\nexport {\r\n getArea,\r\n goToMap,\r\n drawBuffer,\r\n getTextSymbol,\r\n getSimpleMarkerSymbol,\r\n getPictureSymbol,\r\n getLineSymbol,\r\n getFillSymbol,\r\n toArcGISPoint,\r\n drawArcPoint,\r\n createArcPoint,\r\n createLineGraphicsLayer,\r\n createMaskLayer,\r\n createPolygonGraphicsLayer,\r\n drawLayer,\r\n arcGISTranformGeoJson,\r\n};\r\n","'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from 'axios'\r\nlet gjData = [\r\n {\r\n latitude: 23.183327834,\r\n longitude: 113.403289721\r\n },\r\n {\r\n latitude: 23.183327705,\r\n longitude: 113.403289762\r\n },\r\n {\r\n latitude: 23.183445415,\r\n longitude: 113.403424905\r\n },\r\n {\r\n latitude: 23.183448298,\r\n longitude: 113.403421133\r\n },\r\n {\r\n latitude: 23.183272301,\r\n longitude: 113.403244761\r\n },\r\n {\r\n latitude: 23.18334142,\r\n longitude: 113.403288819\r\n },\r\n {\r\n latitude: 23.183385722,\r\n longitude: 113.403316791\r\n },\r\n {\r\n latitude: 23.18338681,\r\n longitude: 113.403316918\r\n },\r\n {\r\n latitude: 23.18342365,\r\n longitude: 113.403339142\r\n },\r\n {\r\n latitude: 23.183435695,\r\n longitude: 113.403368006\r\n },\r\n {\r\n latitude: 23.183458462,\r\n longitude: 113.40341566\r\n },\r\n {\r\n latitude: 23.1834767,\r\n longitude: 113.403450948\r\n },\r\n {\r\n latitude: 23.183487018,\r\n longitude: 113.403472978\r\n },\r\n {\r\n latitude: 23.183474702,\r\n longitude: 113.403519446\r\n },\r\n {\r\n latitude: 23.18346746,\r\n longitude: 113.403551614\r\n },\r\n {\r\n latitude: 23.183457553,\r\n longitude: 113.403593373\r\n },\r\n {\r\n latitude: 23.183446648,\r\n longitude: 113.403636364\r\n },\r\n {\r\n latitude: 23.183439113,\r\n longitude: 113.403677632\r\n },\r\n {\r\n latitude: 23.183436163,\r\n longitude: 113.403699473\r\n },\r\n {\r\n latitude: 23.183433538,\r\n longitude: 113.403713766\r\n },\r\n {\r\n latitude: 23.183430131,\r\n longitude: 113.403727555\r\n },\r\n {\r\n latitude: 23.183432256,\r\n longitude: 113.403753757\r\n },\r\n {\r\n latitude: 23.183435481,\r\n longitude: 113.403790737\r\n },\r\n {\r\n latitude: 23.183437181,\r\n longitude: 113.403830022\r\n },\r\n {\r\n latitude: 23.183438793,\r\n longitude: 113.4038605\r\n },\r\n {\r\n latitude: 23.183441243,\r\n longitude: 113.403883432\r\n },\r\n {\r\n latitude: 23.183506056,\r\n longitude: 113.403881087\r\n },\r\n {\r\n latitude: 23.183535315,\r\n longitude: 113.403878137\r\n },\r\n {\r\n latitude: 23.183576343,\r\n longitude: 113.40387476\r\n },\r\n {\r\n latitude: 23.183540015,\r\n longitude: 113.403878113\r\n },\r\n {\r\n latitude: 23.183532393,\r\n longitude: 113.403805058\r\n },\r\n {\r\n latitude: 23.18352621,\r\n longitude: 113.403743629\r\n },\r\n {\r\n latitude: 23.183521787,\r\n longitude: 113.403709945\r\n },\r\n {\r\n latitude: 23.18351811,\r\n longitude: 113.403660533\r\n },\r\n {\r\n latitude: 23.183514268,\r\n longitude: 113.403626867\r\n },\r\n {\r\n latitude: 23.183512565,\r\n longitude: 113.403597051\r\n },\r\n {\r\n latitude: 23.183509183,\r\n longitude: 113.403564486\r\n },\r\n {\r\n latitude: 23.183506912,\r\n longitude: 113.403547867\r\n },\r\n {\r\n latitude: 23.183503392,\r\n longitude: 113.403512886\r\n },\r\n {\r\n latitude: 23.183499576,\r\n longitude: 113.403477199\r\n },\r\n {\r\n latitude: 23.183496244,\r\n longitude: 113.403443952\r\n },\r\n {\r\n latitude: 23.183494047,\r\n longitude: 113.403421579\r\n },\r\n {\r\n latitude: 23.183492919,\r\n longitude: 113.403385444\r\n },\r\n {\r\n latitude: 23.183493365,\r\n longitude: 113.403351539\r\n },\r\n {\r\n latitude: 23.183492976,\r\n longitude: 113.403332441\r\n },\r\n {\r\n latitude: 23.183489731,\r\n longitude: 113.403299691\r\n },\r\n {\r\n latitude: 23.183486624,\r\n longitude: 113.403271692\r\n },\r\n {\r\n latitude: 23.183439628,\r\n longitude: 113.403254241\r\n },\r\n {\r\n latitude: 23.183418674,\r\n longitude: 113.403245809\r\n },\r\n {\r\n latitude: 23.183390747,\r\n longitude: 113.403234807\r\n },\r\n {\r\n latitude: 23.183345598,\r\n longitude: 113.403216483\r\n },\r\n {\r\n latitude: 23.183319579,\r\n longitude: 113.403204644\r\n },\r\n {\r\n latitude: 23.183342545,\r\n longitude: 113.403164238\r\n },\r\n {\r\n latitude: 23.183365598,\r\n longitude: 113.403128573\r\n },\r\n {\r\n latitude: 23.183382969,\r\n longitude: 113.403099251\r\n },\r\n {\r\n latitude: 23.183386971,\r\n longitude: 113.403100574\r\n },\r\n {\r\n latitude: 23.183449693,\r\n longitude: 113.403150908\r\n },\r\n {\r\n latitude: 23.183474457,\r\n longitude: 113.403170518\r\n },\r\n {\r\n latitude: 23.183500643,\r\n longitude: 113.403201166\r\n },\r\n {\r\n latitude: 23.183538599,\r\n longitude: 113.403249703\r\n },\r\n {\r\n latitude: 23.183561277,\r\n longitude: 113.403277425\r\n },\r\n {\r\n latitude: 23.183597481,\r\n longitude: 113.403325142\r\n },\r\n {\r\n latitude: 23.183625068,\r\n longitude: 113.40336022\r\n },\r\n {\r\n latitude: 23.183641735,\r\n longitude: 113.403379961\r\n },\r\n {\r\n latitude: 23.183567632,\r\n longitude: 113.403415609\r\n },\r\n {\r\n latitude: 23.183528837,\r\n longitude: 113.403432589\r\n },\r\n {\r\n latitude: 23.183572127,\r\n longitude: 113.403474834\r\n },\r\n {\r\n latitude: 23.183571451,\r\n longitude: 113.403503243\r\n },\r\n {\r\n latitude: 23.183565767,\r\n longitude: 113.403566032\r\n },\r\n {\r\n latitude: 23.183562411,\r\n longitude: 113.403613148\r\n },\r\n {\r\n latitude: 23.183567786,\r\n longitude: 113.403645951\r\n },\r\n {\r\n latitude: 23.183577532,\r\n longitude: 113.403680848\r\n },\r\n {\r\n latitude: 23.183584414,\r\n longitude: 113.40370146\r\n },\r\n {\r\n latitude: 23.183597703,\r\n longitude: 113.403754034\r\n },\r\n {\r\n latitude: 23.183611276,\r\n longitude: 113.403806426\r\n },\r\n {\r\n latitude: 23.18362028,\r\n longitude: 113.403844608\r\n },\r\n {\r\n latitude: 23.183663768,\r\n longitude: 113.403845759\r\n },\r\n {\r\n latitude: 23.183712307,\r\n longitude: 113.403831228\r\n },\r\n {\r\n latitude: 23.183724163,\r\n longitude: 113.403787393\r\n },\r\n {\r\n latitude: 23.183730158,\r\n longitude: 113.403746144\r\n },\r\n {\r\n latitude: 23.183735937,\r\n longitude: 113.403702431\r\n },\r\n {\r\n latitude: 23.183740693,\r\n longitude: 113.403667152\r\n },\r\n {\r\n latitude: 23.183742057,\r\n longitude: 113.403650173\r\n },\r\n {\r\n latitude: 23.183734177,\r\n longitude: 113.403618829\r\n },\r\n {\r\n latitude: 23.183725174,\r\n longitude: 113.403590992\r\n },\r\n {\r\n latitude: 23.183715724,\r\n longitude: 113.403552529\r\n },\r\n {\r\n latitude: 23.183703949,\r\n longitude: 113.403495103\r\n },\r\n {\r\n latitude: 23.183696404,\r\n longitude: 113.40344933\r\n },\r\n {\r\n latitude: 23.183687035,\r\n longitude: 113.403387525\r\n },\r\n {\r\n latitude: 23.183680307,\r\n longitude: 113.403339774\r\n },\r\n {\r\n latitude: 23.183674136,\r\n longitude: 113.403294958\r\n },\r\n {\r\n latitude: 23.183666043,\r\n longitude: 113.403247509\r\n },\r\n {\r\n latitude: 23.183658668,\r\n longitude: 113.403205447\r\n },\r\n {\r\n latitude: 23.183653676,\r\n longitude: 113.403176062\r\n },\r\n {\r\n latitude: 23.183648883,\r\n longitude: 113.403147174\r\n },\r\n {\r\n latitude: 23.183641813,\r\n longitude: 113.403112216\r\n },\r\n {\r\n latitude: 23.183631684,\r\n longitude: 113.403060803\r\n },\r\n {\r\n latitude: 23.183620288,\r\n longitude: 113.403011501\r\n },\r\n {\r\n latitude: 23.183610919,\r\n longitude: 113.402971483\r\n },\r\n {\r\n latitude: 23.183603933,\r\n longitude: 113.402930426\r\n },\r\n {\r\n latitude: 23.183644501,\r\n longitude: 113.402908973\r\n },\r\n {\r\n latitude: 23.183679087,\r\n longitude: 113.402903514\r\n },\r\n {\r\n latitude: 23.183710094,\r\n longitude: 113.402898431\r\n },\r\n {\r\n latitude: 23.183747309,\r\n longitude: 113.402900257\r\n },\r\n {\r\n latitude: 23.183747916,\r\n longitude: 113.402903264\r\n },\r\n {\r\n latitude: 23.183742208,\r\n longitude: 113.402950536\r\n },\r\n {\r\n latitude: 23.183737572,\r\n longitude: 113.402991024\r\n },\r\n {\r\n latitude: 23.183733539,\r\n longitude: 113.403024657\r\n },\r\n {\r\n latitude: 23.183730281,\r\n longitude: 113.403056637\r\n },\r\n {\r\n latitude: 23.183726123,\r\n longitude: 113.403095992\r\n },\r\n {\r\n latitude: 23.183723362,\r\n longitude: 113.403118331\r\n },\r\n {\r\n latitude: 23.183718653,\r\n longitude: 113.403151633\r\n },\r\n {\r\n latitude: 23.183713543,\r\n longitude: 113.403198101\r\n },\r\n {\r\n latitude: 23.183708902,\r\n longitude: 113.403238777\r\n },\r\n {\r\n latitude: 23.183704083,\r\n longitude: 113.403280446\r\n },\r\n {\r\n latitude: 23.183701081,\r\n longitude: 113.403304699\r\n },\r\n {\r\n latitude: 23.18367984,\r\n longitude: 113.403264485\r\n },\r\n {\r\n latitude: 23.183665146,\r\n longitude: 113.403232299\r\n },\r\n {\r\n latitude: 23.183680248,\r\n longitude: 113.403182451\r\n },\r\n {\r\n latitude: 23.183694191,\r\n longitude: 113.403150625\r\n },\r\n {\r\n latitude: 23.183713817,\r\n longitude: 113.403109762\r\n },\r\n {\r\n latitude: 23.183729319,\r\n longitude: 113.403078686\r\n },\r\n {\r\n latitude: 23.183753524,\r\n longitude: 113.403027734\r\n },\r\n {\r\n latitude: 23.183772534,\r\n longitude: 113.402988712\r\n },\r\n {\r\n latitude: 23.183786938,\r\n longitude: 113.4029754\r\n },\r\n {\r\n latitude: 23.183804009,\r\n longitude: 113.402964282\r\n },\r\n {\r\n latitude: 23.183861869,\r\n longitude: 113.402965778\r\n },\r\n {\r\n latitude: 23.183878425,\r\n longitude: 113.402994549\r\n },\r\n {\r\n latitude: 23.183877443,\r\n longitude: 113.403022199\r\n },\r\n {\r\n latitude: 23.183875284,\r\n longitude: 113.403067226\r\n },\r\n {\r\n latitude: 23.183874527,\r\n longitude: 113.403094053\r\n },\r\n {\r\n latitude: 23.183873075,\r\n longitude: 113.403127552\r\n },\r\n {\r\n latitude: 23.183870968,\r\n longitude: 113.40315874\r\n },\r\n {\r\n latitude: 23.183860703,\r\n longitude: 113.40317117\r\n },\r\n {\r\n latitude: 23.183823963,\r\n longitude: 113.403205232\r\n },\r\n {\r\n latitude: 23.183781421,\r\n longitude: 113.403245149\r\n },\r\n {\r\n latitude: 23.183753537,\r\n longitude: 113.403270052\r\n },\r\n {\r\n latitude: 23.183724537,\r\n longitude: 113.403295718\r\n },\r\n {\r\n latitude: 23.183707588,\r\n longitude: 113.403309828\r\n },\r\n {\r\n latitude: 23.183706616,\r\n longitude: 113.403309781\r\n },\r\n {\r\n latitude: 23.183706602,\r\n longitude: 113.403309451\r\n },\r\n {\r\n latitude: 23.183705964,\r\n longitude: 113.403309663\r\n },\r\n {\r\n latitude: 23.183694647,\r\n longitude: 113.40331984\r\n },\r\n {\r\n latitude: 23.183681584,\r\n longitude: 113.403342833\r\n },\r\n {\r\n latitude: 23.183677603,\r\n longitude: 113.403372324\r\n },\r\n {\r\n latitude: 23.183684296,\r\n longitude: 113.403401845\r\n },\r\n {\r\n latitude: 23.183701266,\r\n longitude: 113.403425101\r\n },\r\n {\r\n latitude: 23.183706051,\r\n longitude: 113.40342848\r\n },\r\n {\r\n latitude: 23.183749774,\r\n longitude: 113.4034589\r\n },\r\n {\r\n latitude: 23.183809031,\r\n longitude: 113.403499452\r\n },\r\n {\r\n latitude: 23.183826268,\r\n longitude: 113.403510612\r\n },\r\n {\r\n latitude: 23.183868604,\r\n longitude: 113.403527711\r\n },\r\n {\r\n latitude: 23.183914992,\r\n longitude: 113.403532835\r\n },\r\n {\r\n latitude: 23.183916843,\r\n longitude: 113.40353279\r\n },\r\n {\r\n latitude: 23.18391646,\r\n longitude: 113.403532749\r\n },\r\n {\r\n latitude: 23.183922909,\r\n longitude: 113.403504753\r\n },\r\n {\r\n latitude: 23.183944255,\r\n longitude: 113.403434947\r\n },\r\n {\r\n latitude: 23.183952118,\r\n longitude: 113.403399867\r\n },\r\n {\r\n latitude: 23.183948062,\r\n longitude: 113.403333473\r\n },\r\n {\r\n latitude: 23.18391638,\r\n longitude: 113.403274187\r\n },\r\n {\r\n latitude: 23.183910703,\r\n longitude: 113.403269006\r\n },\r\n {\r\n latitude: 23.18391073,\r\n longitude: 113.403267803\r\n },\r\n {\r\n latitude: 23.183876459,\r\n longitude: 113.40328313\r\n },\r\n {\r\n latitude: 23.183812288,\r\n longitude: 113.403322957\r\n },\r\n {\r\n latitude: 23.183761031,\r\n longitude: 113.403369712\r\n },\r\n {\r\n latitude: 23.183708457,\r\n longitude: 113.40342629\r\n },\r\n {\r\n latitude: 23.183701975,\r\n longitude: 113.403432692\r\n },\r\n {\r\n latitude: 23.183700843,\r\n longitude: 113.403432815\r\n },\r\n {\r\n latitude: 23.183719515,\r\n longitude: 113.403456823\r\n },\r\n {\r\n latitude: 23.183740884,\r\n longitude: 113.403475796\r\n },\r\n {\r\n latitude: 23.183782589,\r\n longitude: 113.403506954\r\n },\r\n {\r\n latitude: 23.183802428,\r\n longitude: 113.403521746\r\n },\r\n {\r\n latitude: 23.183808793,\r\n longitude: 113.403527574\r\n },\r\n {\r\n latitude: 23.18384306,\r\n longitude: 113.40357\r\n },\r\n {\r\n latitude: 23.183868552,\r\n longitude: 113.403611229\r\n },\r\n {\r\n latitude: 23.183864236,\r\n longitude: 113.403612119\r\n },\r\n {\r\n latitude: 23.183808253,\r\n longitude: 113.403601498\r\n },\r\n {\r\n latitude: 23.183790246,\r\n longitude: 113.403610983\r\n },\r\n {\r\n latitude: 23.183796961,\r\n longitude: 113.403612889\r\n },\r\n {\r\n latitude: 23.183797604,\r\n longitude: 113.403612671\r\n },\r\n {\r\n latitude: 23.183823752,\r\n longitude: 113.403617652\r\n },\r\n {\r\n latitude: 23.18384693,\r\n longitude: 113.403632835\r\n },\r\n {\r\n latitude: 23.183839916,\r\n longitude: 113.403679376\r\n },\r\n {\r\n latitude: 23.183837127,\r\n longitude: 113.403692234\r\n },\r\n {\r\n latitude: 23.183823132,\r\n longitude: 113.403766378\r\n },\r\n {\r\n latitude: 23.183808008,\r\n longitude: 113.403843895\r\n },\r\n {\r\n latitude: 23.183801648,\r\n longitude: 113.40387446\r\n },\r\n {\r\n latitude: 23.183801726,\r\n longitude: 113.403875089\r\n },\r\n {\r\n latitude: 23.183801356,\r\n longitude: 113.40387548\r\n },\r\n {\r\n latitude: 23.183801199,\r\n longitude: 113.403875693\r\n },\r\n {\r\n latitude: 23.183799982,\r\n longitude: 113.403875082\r\n },\r\n {\r\n latitude: 23.183761855,\r\n longitude: 113.40384525\r\n },\r\n {\r\n latitude: 23.183701196,\r\n longitude: 113.403796093\r\n },\r\n {\r\n latitude: 23.183685878,\r\n longitude: 113.403784816\r\n },\r\n {\r\n latitude: 23.183680286,\r\n longitude: 113.403780887\r\n },\r\n {\r\n latitude: 23.183679922,\r\n longitude: 113.403780478\r\n },\r\n {\r\n latitude: 23.183699797,\r\n longitude: 113.403767551\r\n },\r\n {\r\n latitude: 23.183723761,\r\n longitude: 113.403715465\r\n },\r\n {\r\n latitude: 23.183754876,\r\n longitude: 113.403601332\r\n },\r\n {\r\n latitude: 23.183763831,\r\n longitude: 113.403581842\r\n },\r\n {\r\n latitude: 23.183816615,\r\n longitude: 113.403551211\r\n },\r\n {\r\n latitude: 23.183823964,\r\n longitude: 113.403559712\r\n },\r\n {\r\n latitude: 23.183824086,\r\n longitude: 113.403561691\r\n },\r\n {\r\n latitude: 23.183851736,\r\n longitude: 113.403551962\r\n },\r\n {\r\n latitude: 23.183894994,\r\n longitude: 113.403548796\r\n }\r\n]\r\n\r\n/**\r\n * 获取轨迹数据\r\n * @param {*} USE_MOCK\r\n * @returns\r\n */\r\nexport async function fetchGjData(url, params, USE_MOCK = false) {\r\n return new Promise((resolve, reject) => {\r\n if (!USE_MOCK) {\r\n // 真实接口\r\n axios\r\n .get(url, params)\r\n .then((res) => {\r\n let data = res.data && res.data.data ? res.data.data : res.data\r\n if (res.status == 200 && data && data.length > 0) resolve(data)\r\n else resolve([])\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n } else {\r\n resolve(gjData)\r\n }\r\n })\r\n}\r\n","/**\r\n * 计算两点之间的方位角(Forward Azimuth)\r\n * 支持输入:\r\n * - [lon, lat] 坐标数组\r\n * - { type: 'Point', coordinates: [lon, lat] }\r\n * - { type: 'Feature', geometry: { type: 'Point', coordinates: [lon, lat] } }\r\n *\r\n * @param {Array|Object} start - 起点\r\n * @param {Array|Object} end - 终点\r\n * @returns {number} 方位角(度,范围 [0, 360))\r\n */\r\nexport function bearing(start, end) {\r\n // 提取坐标的辅助函数\r\n function getCoordinates(obj) {\r\n if (Array.isArray(obj)) {\r\n // 直接是 [lon, lat]\r\n return obj\r\n }\r\n if (obj.type === 'Feature') {\r\n // GeoJSON Feature\r\n return obj.geometry.coordinates\r\n }\r\n if (obj.type === 'Point') {\r\n // GeoJSON Point Geometry\r\n return obj.coordinates\r\n }\r\n throw new Error('Invalid input: expected [lon, lat], Point geometry, or Feature<Point>')\r\n }\r\n\r\n const coord1 = getCoordinates(start)\r\n const coord2 = getCoordinates(end)\r\n\r\n const [lon1, lat1] = coord1\r\n const [lon2, lat2] = coord2\r\n\r\n // 转弧度\r\n const φ1 = (lat1 * Math.PI) / 180\r\n const φ2 = (lat2 * Math.PI) / 180\r\n const Δλ = ((lon2 - lon1) * Math.PI) / 180\r\n\r\n // 球面三角公式\r\n const y = Math.sin(Δλ) * Math.cos(φ2)\r\n const x = Math.cos(φ1) * Math.sin(φ2) - Math.sin(φ1) * Math.cos(φ2) * Math.cos(Δλ)\r\n\r\n let θ = Math.atan2(y, x) // 弧度\r\n let brng = (θ * 180) / Math.PI\r\n return (brng + 360) % 360 // 归一化到 [0, 360)\r\n}\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.name == 'point')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742351514971\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"3951\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M506.885115 1.022977c-193.342657 1.534466-348.835165 159.584416-347.812188 352.927073 0.511489 91.556444 37.338661 179.532468 101.786214 244.491508L506.885115 845.490509l246.025974-247.560439c136.055944-137.078921 135.544456-359.064935-1.534466-495.120879C686.417582 38.361638 598.441558 2.045954 506.885115 1.022977zM506.885115 506.373626c-85.418581 0-154.981019-69.562438-154.469531-155.492507 0-85.418581 69.050949-154.981019 154.469531-155.492508 85.418581 0 154.981019 69.562438 154.46953 155.492508 0.511489 85.418581-69.050949 154.981019-154.46953 155.492507z m-154.469531 452.667333c0 35.804196 69.050949 64.959041 154.469531 64.959041s154.46953-29.154845 154.46953-64.959041c0-35.804196-69.050949-64.959041-154.46953-64.959041s-154.46953 29.154845-154.469531 64.959041z\",\"p-id\":\"3952\",\"fill\":_vm.color}})]):(_vm.name == 'line')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742353681074\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"4947\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M419.2 102.4c51.2 0 92.8 41.6 92.8 96 0 25.6-9.6 51.2-28.8 70.4l166.4 416c19.2-12.8 44.8-16 67.2-9.6l172.8-272c-19.2-32-12.8-76.8 19.2-99.2 32-22.4 73.6-12.8 96 22.4 19.2 32 12.8 76.8-19.2 99.2-9.6 6.4-25.6 12.8-38.4 12.8l-176 275.2c28.8 41.6 19.2 102.4-19.2 131.2-41.6 32-99.2 22.4-128-22.4-16-22.4-19.2-48-16-73.6L422.4 291.2h-3.2c-12.8 0-22.4-3.2-32-6.4l-208 243.2c25.6 44.8 6.4 102.4-38.4 128s-99.2 6.4-124.8-38.4-6.4-102.4 38.4-128c22.4-12.8 51.2-16 76.8-6.4l208-243.2c-25.6-44.8-6.4-102.4 38.4-128 12.8-6.4 28.8-9.6 41.6-9.6z\",\"p-id\":\"4948\",\"fill\":_vm.color}})]):(_vm.name == 'polygon')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742353743548\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"5913\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M928.381303 0.002274a91.333624 91.333624 0 0 1 91.939988 91.939988 91.333624 91.333624 0 0 1-91.939988 91.939988 92.849535 92.849535 0 0 1-84.891003-56.581369H212.265055c-8.83018 21.222751-26.528439 40.664306-49.494487 49.532384v634.787636c21.222751 8.868078 40.664306 26.528439 49.494487 49.532384h97.245676c19.479453 0 35.396517 15.917063 35.396516 35.358619 0 19.441556-15.917063 35.358619-35.396516 35.358619H212.265055c-12.392571 33.615321-45.969994 56.58137-84.891004 56.581369a91.333624 91.333624 0 0 1-91.939988-91.939988c0-38.883111 23.003946-70.717237 56.58137-84.891003V176.833265C58.400111 164.440695 35.396165 130.863271 35.396165 91.942262A91.333624 91.333624 0 0 1 127.374051 0.002274c37.139814 0 70.755135 22.966048 84.891004 56.581369h631.263143C855.88287 22.968322 889.498192 0.002274 928.381303 0.002274zM443.858323 760.345219l127.336505 127.336505-146.778061 40.664306c-12.354673 3.524493-24.747243-8.83018-21.222751-21.22275l40.664307-146.778061z m344.831803-339.488217l123.774114 123.774114-305.910794 298.823911-120.249622-127.336505 302.386302-295.26152z m97.245676-97.283574c17.698258-15.917063 44.226697-17.66036 60.143759-1.743297l65.41155 65.411549c15.917063 15.917063 15.917063 42.445502-1.781195 60.14376l-61.887057 61.887058-123.774115-123.774115z\",\"p-id\":\"5914\",\"fill\":_vm.color}})]):(_vm.name == 'perv')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742353858894\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"7700\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M365.44 112.32v133.76h237.888a340.928 340.928 0 0 1 340.928 335.36v5.632a340.928 340.928 0 0 1-335.296 340.864l-5.632 0.064h-324.48a16 16 0 0 1-16-16v-64a16 16 0 0 1 16-16h324.48a244.928 244.928 0 0 0 5.12-489.856H130.432a16 16 0 0 1-11.136-27.52l218.88-213.76a16 16 0 0 1 27.2 11.456z\",\"fill\":_vm.color,\"p-id\":\"7701\"}})]):(_vm.name == 'next')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742353895510\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"2267\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M670.08 112.32v133.76H432.192a340.928 340.928 0 0 0-340.928 335.36v5.632a340.928 340.928 0 0 0 335.296 340.864l5.632 0.064h324.48a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16h-324.48a244.928 244.928 0 0 1-5.12-489.856h477.952a16 16 0 0 0 11.2-27.52l-219.008-213.76a16 16 0 0 0-27.136 11.456z\",\"fill\":_vm.color,\"p-id\":\"2268\"}})]):(_vm.name == 'close')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1763603732402\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"2437\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M566.97558594 521.09667969L856.8828125 231.18945312c14.63378906-14.63378906 14.63378906-38.75976563 0-53.39355468l-1.58203125-1.58203125c-14.63378906-14.63378906-38.75976563-14.63378906-53.39355469 0L512 466.51660156 222.09277344 176.21386719c-14.63378906-14.63378906-38.75976563-14.63378906-53.39355469 0l-1.58203125 1.58203125c-15.02929688 14.63378906-15.02929688 38.75976563 0 53.39355469l289.90722656 289.90722656L167.1171875 811.00390625c-14.63378906 14.63378906-14.63378906 38.75976563 0 53.39355469l1.58203125 1.58203125c14.63378906 14.63378906 38.75976563 14.63378906 53.39355469 0L512 576.07226563 801.90722656 865.97949219c14.63378906 14.63378906 38.75976563 14.63378906 53.39355469 0l1.58203125-1.58203125c14.63378906-14.63378906 14.63378906-38.75976563 0-53.39355469L566.97558594 521.09667969z\",\"fill\":_vm.color,\"p-id\":\"2438\"}})]):(_vm.name == 'del')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1763604252947\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"3453\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M928.16 144H736V64a32 32 0 0 0-32-32H320a32 32 0 0 0-32 32v80H95.84a32 32 0 0 0 0 64H129.6l77.92 698.656A96 96 0 0 0 302.912 992h418.144a96.032 96.032 0 0 0 95.424-85.344L894.4 208h33.728a32 32 0 0 0 0.032-64zM352 96h320v48H352V96z m400.896 803.552a32 32 0 0 1-31.808 28.448H302.912a32 32 0 0 1-31.808-28.448L193.984 208h636.032l-77.12 691.552z\",\"p-id\":\"3454\",\"fill\":_vm.color}}),_c('path',{attrs:{\"d\":\"M608 820.928a32 32 0 0 0 32-32V319.104a32 32 0 0 0-64 0v469.824a32 32 0 0 0 32 32zM432 820.928a32 32 0 0 0 32-32V319.104a32 32 0 0 0-64 0v469.824a32 32 0 0 0 32 32z\",\"p-id\":\"3455\",\"fill\":_vm.color}})]):(_vm.name == 'full')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1763604352213\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"4438\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M128 266.666667v490.666666a53.393333 53.393333 0 0 0 53.333333 53.333334h661.333334a53.393333 53.393333 0 0 0 53.333333-53.333334V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H181.333333a53.393333 53.393333 0 0 0-53.333333 53.333334z m725.333333 0v490.666666a10.666667 10.666667 0 0 1-10.666666 10.666667H181.333333a10.666667 10.666667 0 0 1-10.666666-10.666667V266.666667a10.666667 10.666667 0 0 1 10.666666-10.666667h661.333334a10.666667 10.666667 0 0 1 10.666666 10.666667z m-597.333333 608a21.333333 21.333333 0 0 1-21.333333 21.333333H96a53.393333 53.393333 0 0 1-53.333333-53.333333v-138.666667a21.333333 21.333333 0 0 1 42.666666 0v138.666667a10.666667 10.666667 0 0 0 10.666667 10.666666h138.666667a21.333333 21.333333 0 0 1 21.333333 21.333334zM42.666667 320V181.333333a53.393333 53.393333 0 0 1 53.333333-53.333333h138.666667a21.333333 21.333333 0 0 1 0 42.666667H96a10.666667 10.666667 0 0 0-10.666667 10.666666v138.666667a21.333333 21.333333 0 0 1-42.666666 0z m938.666666-138.666667v138.666667a21.333333 21.333333 0 0 1-42.666666 0V181.333333a10.666667 10.666667 0 0 0-10.666667-10.666666h-138.666667a21.333333 21.333333 0 0 1 0-42.666667h138.666667a53.393333 53.393333 0 0 1 53.333333 53.333333z m0 522.666667v138.666667a53.393333 53.393333 0 0 1-53.333333 53.333333h-138.666667a21.333333 21.333333 0 0 1 0-42.666667h138.666667a10.666667 10.666667 0 0 0 10.666667-10.666666v-138.666667a21.333333 21.333333 0 0 1 42.666666 0z\",\"fill\":_vm.color,\"p-id\":\"4439\"}})]):(_vm.name == 'loading')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1766044858654\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"2820\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M512 64a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04v192a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96 31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04v-192a31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96z m0 640a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04v192a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96 31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04v-192a31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96zM960 512a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96h-192a31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04 31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96h192a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04z m-640 0a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96h-192a31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04 31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96h192a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04zM194.986667 194.986667a33.450667 33.450667 0 0 1 23.04-8.96c8.661333 0 16 2.986667 22.016 8.96l135.978666 136.021333a32.853333 32.853333 0 0 1 9.002667 22.485333 30.293333 30.293333 0 0 1-9.514667 22.016 30.037333 30.037333 0 0 1-22.016 9.514667 32.938667 32.938667 0 0 1-22.485333-8.96L194.986667 240a29.952 29.952 0 0 1-8.96-22.016c0-8.704 2.986667-16.384 8.96-23.04z m452.992 452.992a31.104 31.104 0 0 1 22.528-9.984c8.32 0 15.786667 3.328 22.485333 10.026666l136.021333 135.978667c5.973333 5.973333 8.96 13.354667 8.96 22.016a30.72 30.72 0 0 1-9.514666 22.485333 30.933333 30.933333 0 0 1-22.485334 9.514667 29.866667 29.866667 0 0 1-22.016-8.96l-135.978666-136.021333a31.146667 31.146667 0 0 1-10.026667-22.485334c0-8.32 3.328-15.829333 10.026667-22.528zM829.013333 194.986667c5.973333 6.698667 8.96 14.378667 8.96 23.04s-2.986667 16-8.96 22.016l-136.021333 135.978666a32.853333 32.853333 0 0 1-22.485333 9.002667 30.293333 30.293333 0 0 1-22.016-9.514667 30.037333 30.037333 0 0 1-9.514667-22.016c0-8.32 2.986667-15.829333 8.96-22.485333l136.021333-136.021333c5.973333-5.973333 13.354667-8.96 22.016-8.96 8.704 0 16.341333 2.986667 23.04 8.96zM376.021333 648.021333a31.104 31.104 0 0 1 9.984 22.528c0 8.32-3.328 15.786667-10.026666 22.485334L240.042667 829.013333a29.952 29.952 0 0 1-22.016 8.96 30.72 30.72 0 0 1-22.485334-9.514666 30.890667 30.890667 0 0 1-9.514666-22.485334 29.866667 29.866667 0 0 1 8.96-22.016l136.021333-135.978666a31.104 31.104 0 0 1 22.485333-10.026667c8.32 0 15.829333 3.328 22.528 10.026667z\",\"fill\":_vm.color,\"p-id\":\"2821\"}})]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <svg\r\n t=\"1742351514971\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"3951\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-if=\"name == 'point'\"\r\n >\r\n <path\r\n d=\"M506.885115 1.022977c-193.342657 1.534466-348.835165 159.584416-347.812188 352.927073 0.511489 91.556444 37.338661 179.532468 101.786214 244.491508L506.885115 845.490509l246.025974-247.560439c136.055944-137.078921 135.544456-359.064935-1.534466-495.120879C686.417582 38.361638 598.441558 2.045954 506.885115 1.022977zM506.885115 506.373626c-85.418581 0-154.981019-69.562438-154.469531-155.492507 0-85.418581 69.050949-154.981019 154.469531-155.492508 85.418581 0 154.981019 69.562438 154.46953 155.492508 0.511489 85.418581-69.050949 154.981019-154.46953 155.492507z m-154.469531 452.667333c0 35.804196 69.050949 64.959041 154.469531 64.959041s154.46953-29.154845 154.46953-64.959041c0-35.804196-69.050949-64.959041-154.46953-64.959041s-154.46953 29.154845-154.469531 64.959041z\"\r\n p-id=\"3952\"\r\n :fill=\"color\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1742353681074\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"4947\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'line'\"\r\n >\r\n <path\r\n d=\"M419.2 102.4c51.2 0 92.8 41.6 92.8 96 0 25.6-9.6 51.2-28.8 70.4l166.4 416c19.2-12.8 44.8-16 67.2-9.6l172.8-272c-19.2-32-12.8-76.8 19.2-99.2 32-22.4 73.6-12.8 96 22.4 19.2 32 12.8 76.8-19.2 99.2-9.6 6.4-25.6 12.8-38.4 12.8l-176 275.2c28.8 41.6 19.2 102.4-19.2 131.2-41.6 32-99.2 22.4-128-22.4-16-22.4-19.2-48-16-73.6L422.4 291.2h-3.2c-12.8 0-22.4-3.2-32-6.4l-208 243.2c25.6 44.8 6.4 102.4-38.4 128s-99.2 6.4-124.8-38.4-6.4-102.4 38.4-128c22.4-12.8 51.2-16 76.8-6.4l208-243.2c-25.6-44.8-6.4-102.4 38.4-128 12.8-6.4 28.8-9.6 41.6-9.6z\"\r\n p-id=\"4948\"\r\n :fill=\"color\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1742353743548\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"5913\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'polygon'\"\r\n >\r\n <path\r\n d=\"M928.381303 0.002274a91.333624 91.333624 0 0 1 91.939988 91.939988 91.333624 91.333624 0 0 1-91.939988 91.939988 92.849535 92.849535 0 0 1-84.891003-56.581369H212.265055c-8.83018 21.222751-26.528439 40.664306-49.494487 49.532384v634.787636c21.222751 8.868078 40.664306 26.528439 49.494487 49.532384h97.245676c19.479453 0 35.396517 15.917063 35.396516 35.358619 0 19.441556-15.917063 35.358619-35.396516 35.358619H212.265055c-12.392571 33.615321-45.969994 56.58137-84.891004 56.581369a91.333624 91.333624 0 0 1-91.939988-91.939988c0-38.883111 23.003946-70.717237 56.58137-84.891003V176.833265C58.400111 164.440695 35.396165 130.863271 35.396165 91.942262A91.333624 91.333624 0 0 1 127.374051 0.002274c37.139814 0 70.755135 22.966048 84.891004 56.581369h631.263143C855.88287 22.968322 889.498192 0.002274 928.381303 0.002274zM443.858323 760.345219l127.336505 127.336505-146.778061 40.664306c-12.354673 3.524493-24.747243-8.83018-21.222751-21.22275l40.664307-146.778061z m344.831803-339.488217l123.774114 123.774114-305.910794 298.823911-120.249622-127.336505 302.386302-295.26152z m97.245676-97.283574c17.698258-15.917063 44.226697-17.66036 60.143759-1.743297l65.41155 65.411549c15.917063 15.917063 15.917063 42.445502-1.781195 60.14376l-61.887057 61.887058-123.774115-123.774115z\"\r\n p-id=\"5914\"\r\n :fill=\"color\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1742353858894\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"7700\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'perv'\"\r\n >\r\n <path\r\n d=\"M365.44 112.32v133.76h237.888a340.928 340.928 0 0 1 340.928 335.36v5.632a340.928 340.928 0 0 1-335.296 340.864l-5.632 0.064h-324.48a16 16 0 0 1-16-16v-64a16 16 0 0 1 16-16h324.48a244.928 244.928 0 0 0 5.12-489.856H130.432a16 16 0 0 1-11.136-27.52l218.88-213.76a16 16 0 0 1 27.2 11.456z\"\r\n :fill=\"color\"\r\n p-id=\"7701\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1742353895510\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"2267\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'next'\"\r\n >\r\n <path\r\n d=\"M670.08 112.32v133.76H432.192a340.928 340.928 0 0 0-340.928 335.36v5.632a340.928 340.928 0 0 0 335.296 340.864l5.632 0.064h324.48a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16h-324.48a244.928 244.928 0 0 1-5.12-489.856h477.952a16 16 0 0 0 11.2-27.52l-219.008-213.76a16 16 0 0 0-27.136 11.456z\"\r\n :fill=\"color\"\r\n p-id=\"2268\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1763603732402\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"2437\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'close'\"\r\n >\r\n <path\r\n d=\"M566.97558594 521.09667969L856.8828125 231.18945312c14.63378906-14.63378906 14.63378906-38.75976563 0-53.39355468l-1.58203125-1.58203125c-14.63378906-14.63378906-38.75976563-14.63378906-53.39355469 0L512 466.51660156 222.09277344 176.21386719c-14.63378906-14.63378906-38.75976563-14.63378906-53.39355469 0l-1.58203125 1.58203125c-15.02929688 14.63378906-15.02929688 38.75976563 0 53.39355469l289.90722656 289.90722656L167.1171875 811.00390625c-14.63378906 14.63378906-14.63378906 38.75976563 0 53.39355469l1.58203125 1.58203125c14.63378906 14.63378906 38.75976563 14.63378906 53.39355469 0L512 576.07226563 801.90722656 865.97949219c14.63378906 14.63378906 38.75976563 14.63378906 53.39355469 0l1.58203125-1.58203125c14.63378906-14.63378906 14.63378906-38.75976563 0-53.39355469L566.97558594 521.09667969z\"\r\n :fill=\"color\"\r\n p-id=\"2438\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1763604252947\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"3453\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'del'\"\r\n >\r\n <path\r\n d=\"M928.16 144H736V64a32 32 0 0 0-32-32H320a32 32 0 0 0-32 32v80H95.84a32 32 0 0 0 0 64H129.6l77.92 698.656A96 96 0 0 0 302.912 992h418.144a96.032 96.032 0 0 0 95.424-85.344L894.4 208h33.728a32 32 0 0 0 0.032-64zM352 96h320v48H352V96z m400.896 803.552a32 32 0 0 1-31.808 28.448H302.912a32 32 0 0 1-31.808-28.448L193.984 208h636.032l-77.12 691.552z\"\r\n p-id=\"3454\"\r\n :fill=\"color\"\r\n />\r\n <path\r\n d=\"M608 820.928a32 32 0 0 0 32-32V319.104a32 32 0 0 0-64 0v469.824a32 32 0 0 0 32 32zM432 820.928a32 32 0 0 0 32-32V319.104a32 32 0 0 0-64 0v469.824a32 32 0 0 0 32 32z\"\r\n p-id=\"3455\"\r\n :fill=\"color\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1763604352213\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"4438\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'full'\"\r\n >\r\n <path\r\n d=\"M128 266.666667v490.666666a53.393333 53.393333 0 0 0 53.333333 53.333334h661.333334a53.393333 53.393333 0 0 0 53.333333-53.333334V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H181.333333a53.393333 53.393333 0 0 0-53.333333 53.333334z m725.333333 0v490.666666a10.666667 10.666667 0 0 1-10.666666 10.666667H181.333333a10.666667 10.666667 0 0 1-10.666666-10.666667V266.666667a10.666667 10.666667 0 0 1 10.666666-10.666667h661.333334a10.666667 10.666667 0 0 1 10.666666 10.666667z m-597.333333 608a21.333333 21.333333 0 0 1-21.333333 21.333333H96a53.393333 53.393333 0 0 1-53.333333-53.333333v-138.666667a21.333333 21.333333 0 0 1 42.666666 0v138.666667a10.666667 10.666667 0 0 0 10.666667 10.666666h138.666667a21.333333 21.333333 0 0 1 21.333333 21.333334zM42.666667 320V181.333333a53.393333 53.393333 0 0 1 53.333333-53.333333h138.666667a21.333333 21.333333 0 0 1 0 42.666667H96a10.666667 10.666667 0 0 0-10.666667 10.666666v138.666667a21.333333 21.333333 0 0 1-42.666666 0z m938.666666-138.666667v138.666667a21.333333 21.333333 0 0 1-42.666666 0V181.333333a10.666667 10.666667 0 0 0-10.666667-10.666666h-138.666667a21.333333 21.333333 0 0 1 0-42.666667h138.666667a53.393333 53.393333 0 0 1 53.333333 53.333333z m0 522.666667v138.666667a53.393333 53.393333 0 0 1-53.333333 53.333333h-138.666667a21.333333 21.333333 0 0 1 0-42.666667h138.666667a10.666667 10.666667 0 0 0 10.666667-10.666666v-138.666667a21.333333 21.333333 0 0 1 42.666666 0z\"\r\n :fill=\"color\"\r\n p-id=\"4439\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1766044858654\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"2820\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'loading'\"\r\n >\r\n <path\r\n d=\"M512 64a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04v192a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96 31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04v-192a31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96z m0 640a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04v192a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96 31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04v-192a31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96zM960 512a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96h-192a31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04 31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96h192a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04z m-640 0a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96h-192a31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04 31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96h192a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04zM194.986667 194.986667a33.450667 33.450667 0 0 1 23.04-8.96c8.661333 0 16 2.986667 22.016 8.96l135.978666 136.021333a32.853333 32.853333 0 0 1 9.002667 22.485333 30.293333 30.293333 0 0 1-9.514667 22.016 30.037333 30.037333 0 0 1-22.016 9.514667 32.938667 32.938667 0 0 1-22.485333-8.96L194.986667 240a29.952 29.952 0 0 1-8.96-22.016c0-8.704 2.986667-16.384 8.96-23.04z m452.992 452.992a31.104 31.104 0 0 1 22.528-9.984c8.32 0 15.786667 3.328 22.485333 10.026666l136.021333 135.978667c5.973333 5.973333 8.96 13.354667 8.96 22.016a30.72 30.72 0 0 1-9.514666 22.485333 30.933333 30.933333 0 0 1-22.485334 9.514667 29.866667 29.866667 0 0 1-22.016-8.96l-135.978666-136.021333a31.146667 31.146667 0 0 1-10.026667-22.485334c0-8.32 3.328-15.829333 10.026667-22.528zM829.013333 194.986667c5.973333 6.698667 8.96 14.378667 8.96 23.04s-2.986667 16-8.96 22.016l-136.021333 135.978666a32.853333 32.853333 0 0 1-22.485333 9.002667 30.293333 30.293333 0 0 1-22.016-9.514667 30.037333 30.037333 0 0 1-9.514667-22.016c0-8.32 2.986667-15.829333 8.96-22.485333l136.021333-136.021333c5.973333-5.973333 13.354667-8.96 22.016-8.96 8.704 0 16.341333 2.986667 23.04 8.96zM376.021333 648.021333a31.104 31.104 0 0 1 9.984 22.528c0 8.32-3.328 15.786667-10.026666 22.485334L240.042667 829.013333a29.952 29.952 0 0 1-22.016 8.96 30.72 30.72 0 0 1-22.485334-9.514666 30.890667 30.890667 0 0 1-9.514666-22.485334 29.866667 29.866667 0 0 1 8.96-22.016l136.021333-135.978666a31.104 31.104 0 0 1 22.485333-10.026667c8.32 0 15.829333 3.328 22.528 10.026667z\"\r\n :fill=\"color\"\r\n p-id=\"2821\"\r\n />\r\n </svg>\r\n</template>\r\n<script>\r\nexport default {\r\n props: {\r\n name: {\r\n type: String,\r\n default: 'point'\r\n },\r\n width: {\r\n type: String,\r\n default: '20'\r\n },\r\n color: {\r\n type: String,\r\n default: '#6a6a6a'\r\n }\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./svgIcon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./svgIcon.vue?vue&type=script&lang=js\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./svgIcon.vue?vue&type=template&id=670bdcdf\"\nimport script from \"./svgIcon.vue?vue&type=script&lang=js\"\nexport * from \"./svgIcon.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"loading-wrapper\"},[_c('div',{staticClass:\"loading-main-box\"},[(_vm.loading)?_c('div',{staticClass:\"loading-box\"},[_vm._v(\"地图加载中...\")]):_vm._e(),_vm._t(\"default\")],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"loading-wrapper\">\r\n <div class=\"loading-main-box\">\r\n <div class=\"loading-box\" v-if=\"loading\">地图加载中...</div>\r\n <slot></slot>\r\n </div>\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n name: 'loadingIndex',\r\n props: {\r\n loading: {\r\n type: Boolean,\r\n default: true\r\n }\r\n }\r\n}\r\n</script>\r\n<style>\r\n@import '../css/styles.css';\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./loading.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./loading.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./loading.vue?vue&type=style&index=0&id=5cce13c8&prod&lang=css\"","import { render, staticRenderFns } from \"./loading.vue?vue&type=template&id=5cce13c8\"\nimport script from \"./loading.vue?vue&type=script&lang=js\"\nexport * from \"./loading.vue?vue&type=script&lang=js\"\nimport style0 from \"./loading.vue?vue&type=style&index=0&id=5cce13c8&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Teleport',{attrs:{\"to\":\"body\"}},[(_vm.visible)?_c('div',{ref:\"tooltipRef\",staticClass:\"arcgis-custom-tooltip\",style:(_vm.tooltipStyle)},[_vm._t(\"default\",null,{\"data\":_vm.showData})],2):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- CustomTooltip.vue -->\r\n<template>\r\n <Teleport to=\"body\">\r\n <div v-if=\"visible\" ref=\"tooltipRef\" class=\"arcgis-custom-tooltip\" :style=\"tooltipStyle\">\r\n <slot :data=\"showData\">\r\n <!-- 默认内容 -->\r\n </slot>\r\n </div>\r\n </Teleport>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'CustomTooltip',\r\n computed: {\r\n tooltipStyle() {\r\n let tooltipRef = this.$refs.tooltipRef\r\n if (!tooltipRef) return { left: this.x + 'px', top: this.y + 'px' }\r\n const rect = tooltipRef.getBoundingClientRect()\r\n const width = rect.width\r\n const height = rect.height\r\n // 水平居中:鼠标位置 - 宽度一半\r\n const left = this.x - width / 2 + 'px'\r\n // 正上方:鼠标 y 坐标 - 高度 - 10px(留点间距)\r\n const top = this.y - height - 10 + 'px'\r\n return { left, top, position: 'absolute' }\r\n }\r\n },\r\n data() {\r\n return {\r\n visible: false,\r\n x: 0,\r\n y: 0,\r\n showData: null\r\n }\r\n },\r\n methods: {\r\n show(point, contentData) {\r\n this.x = point.x\r\n this.y = point.y\r\n this.showData = contentData\r\n this.visible = true\r\n // ⚠️ 强制重绘以确保 getBoundingClientRect 正确(可选)\r\n this.$nextTick(() => {\r\n // 宽高会在渲染后更新,computed 会自动响应\r\n })\r\n },\r\n hide() {\r\n this.visible = false\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.arcgis-custom-tooltip {\r\n /* 固定定位或绝对定位 */\r\n position: absolute;\r\n background: white;\r\n border: 1px solid #ccc;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n padding: 12px;\r\n border-radius: 6px;\r\n z-index: 10000;\r\n font-size: 14px;\r\n pointer-events: auto;\r\n max-width: 240px;\r\n word-wrap: break-word;\r\n text-align: center; /* 内容居中 */\r\n white-space: nowrap; /* 可选:禁止换行,看需求 */\r\n}\r\n\r\n/* 可选:添加小箭头(指向鼠标) */\r\n.arcgis-custom-tooltip::after {\r\n content: '';\r\n position: absolute;\r\n top: 100%;\r\n left: 50%;\r\n margin-left: -5px;\r\n border: 5px solid transparent;\r\n border-top-color: #ccc;\r\n filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.1));\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./customTooltip.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./customTooltip.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./customTooltip.vue?vue&type=style&index=0&id=533a75ed&prod&scoped=true&lang=css\"","import { render, staticRenderFns } from \"./customTooltip.vue?vue&type=template&id=533a75ed&scoped=true\"\nimport script from \"./customTooltip.vue?vue&type=script&lang=js\"\nexport * from \"./customTooltip.vue?vue&type=script&lang=js\"\nimport style0 from \"./customTooltip.vue?vue&type=style&index=0&id=533a75ed&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"533a75ed\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <loading-box :loading=\"isLoading\">\r\n <div class=\"arcgisMap-box\">\r\n <div class=\"arcgisMapBox\" :id=\"mapId\"></div>\r\n <div class=\"controls\" v-if=\"pathCoordinates.length > 0 && noAbleMoving\">\r\n <div\r\n class=\"controls-item\"\r\n @click=\"changeMove\"\r\n :class=\"{ 'controls-active': currentPathIndex > 0 }\"\r\n >\r\n {{ currentPathIndex == 0 ? '开始' : isPaused ? '继续' : '暂停' }}\r\n </div>\r\n <div class=\"controls-item\" @click=\"changeSpeed\">\r\n <p>{{ speedNum }} <svgIcon name=\"close\" width=\"14\" color=\"#000\" /></p>\r\n <p>加速</p>\r\n </div>\r\n <div class=\"controls-item\" @click=\"stopAnimation\">重置</div>\r\n\r\n <div class=\"controls-item\" @click=\"drawMeasurement('distance')\"> 测距 </div>\r\n <div class=\"controls-item\" @click=\"drawMeasurement('area')\">测面积</div>\r\n <div class=\"controls-item\" @click=\"clearMeasurement\">清除</div>\r\n </div>\r\n <CustomTooltip ref=\"tooltip\" v-slot=\"{ data }\">\r\n <div>\r\n 经纬度: <b>{{ data.longitude }}-{{ data.latitude }}</b>\r\n </div>\r\n <div>\r\n 时间: <b>{{ data.time }}</b>\r\n </div>\r\n </CustomTooltip>\r\n </div>\r\n </loading-box>\r\n</template>\r\n<script>\r\nimport { loadCss, loadModules } from 'esri-loader'\r\nimport mapConfig from '../config/map.config.js'\r\nimport { createMapView, toArcGISPoint, goToMap } from '../utils/index.js'\r\nimport { fetchGjData } from '../mock/api'\r\nimport { bearing } from '../utils/bearing.js'\r\nimport cardLeftPng from '../image/wrj.png'\r\nimport svgIcon from '../svgIcon.vue'\r\nimport cardRightPng from '../image/wrj.png'\r\nimport endIcon from '../image/end-icon.png'\r\nimport gjPoint from '../image/gjPoint.png'\r\nimport startIcon from '../image/start-icon.png'\r\nimport loadingBox from './loading.vue'\r\nimport CustomTooltip from './customTooltip.vue' //自定义弹框\r\nvar jk_map,\r\n jk_view,\r\n measurement,\r\n esri = [],\r\n startLayer, //起点\r\n endLayer, //终点\r\n pointLayer, //点位数据\r\n pointGraphic, //轨迹点车辆样式\r\n trailPolylineGraphic, //轨迹点\r\n lastMoveTime = 0, //最好操作时间戳\r\n animationFrameId = null //动画容器\r\n/**\r\n * 防抖\r\n */\r\nfunction debounce(fn, delay) {\r\n let timer\r\n return (...args) => {\r\n clearTimeout(timer)\r\n timer = setTimeout(() => fn.apply(this, args), delay)\r\n }\r\n}\r\nexport default {\r\n name: 'gjMap',\r\n components: { CustomTooltip, svgIcon, loadingBox },\r\n props: {\r\n mapParams: {\r\n type: Object,\r\n default: mapConfig\r\n },\r\n load: {\r\n type: Function,\r\n default: null\r\n },\r\n center: {\r\n type: Array,\r\n default: () => {\r\n return [113.15333645218509, 22.708905783449126]\r\n }\r\n }\r\n },\r\n computed: {},\r\n data() {\r\n return {\r\n //地图容器\r\n mapId: 'map' + Math.round(Math.random() * 10000),\r\n //地图加载loading\r\n isLoading: true,\r\n gjParams: null,\r\n gjData: null,\r\n apiToken: null,\r\n currentPathIndex: 0,\r\n //轨迹点\r\n pathCoordinates: [],\r\n //点位\r\n pointCoordinates: [],\r\n isPaused: false,\r\n speedNum: 1,\r\n speed: 500,\r\n noAbleMoving: false\r\n }\r\n },\r\n activated() {\r\n let route = this.$route\r\n this.gjParams = route.query\r\n this.noAbleMoving = route.query && route.query.cannotMove ? false : true\r\n this.isLoading = true\r\n if (route.query.token) {\r\n this.apiToken = route.query.token\r\n }\r\n },\r\n mounted() {\r\n this.isLoading = true\r\n this.init(this.mapParams)\r\n },\r\n methods: {\r\n returnLineSymbol(symbol) {\r\n return new window.jkEsri.SimpleLineSymbol({\r\n color: symbol.color,\r\n width: symbol.width\r\n })\r\n },\r\n /**\r\n * 返回marker样式\r\n */\r\n returnMarkerSymbol(marker) {\r\n return new window.jkEsri.PictureMarkerSymbol({\r\n url: marker.url, // 替换为你自己的图标\r\n width: marker.width,\r\n height: marker.height\r\n })\r\n },\r\n returnPolyLine(paths = []) {\r\n return new window.jkEsri.Polyline({\r\n paths\r\n })\r\n },\r\n changeSpeed() {\r\n if (this.speedNum < 3) this.speedNum++\r\n else this.speedNum = 1\r\n switch (this.speedNum) {\r\n case 1:\r\n this.speed = 1000\r\n break\r\n case 2:\r\n this.speed = 550\r\n break\r\n case 3:\r\n this.speed = 300\r\n break\r\n default:\r\n break\r\n }\r\n },\r\n pauseAnimation() {\r\n this.isPaused = true\r\n cancelAnimationFrame(animationFrameId)\r\n animationFrameId = null\r\n },\r\n stopAnimation() {\r\n this.currentPathIndex = 0\r\n // this.updatePosition(this.pathCoordinates[0])\r\n pointGraphic.geometry = new window.jkEsri.Point({\r\n x: this.pathCoordinates[0][0],\r\n y: this.pathCoordinates[0][1]\r\n })\r\n this.updateTrail([], true)\r\n this.pauseAnimation()\r\n setTimeout(() => {\r\n this.startAnimation()\r\n }, 200)\r\n },\r\n resumeAnimation() {\r\n if (!this.isPaused || animationFrameId) return\r\n this.isPaused = false\r\n lastMoveTime = performance.now()\r\n this.animate()\r\n },\r\n startAnimation() {\r\n if (animationFrameId !== null) return\r\n this.currentPathIndex = 0\r\n lastMoveTime = performance.now() // 统一使用 performance.now()\r\n this.isPaused = false\r\n this.animate(lastMoveTime)\r\n },\r\n changeMove() {\r\n if (this.currentPathIndex == 0) {\r\n this.startAnimation()\r\n } else if (!this.isPaused) this.pauseAnimation()\r\n else this.resumeAnimation()\r\n },\r\n animate(timestamp) {\r\n if (this.isPaused) return\r\n const elapsed = timestamp - lastMoveTime\r\n if (elapsed >= this.speed && this.currentPathIndex < this.pathCoordinates.length) {\r\n const coord = this.pathCoordinates[this.currentPathIndex]\r\n this.updatePosition(coord)\r\n const newPath = this.pathCoordinates.slice(0, this.currentPathIndex + 1)\r\n this.updateTrail(newPath)\r\n lastMoveTime = performance.now() // 每次更新都用 performance.now()\r\n this.currentPathIndex++\r\n }\r\n if (this.currentPathIndex < this.pathCoordinates.length) {\r\n animationFrameId = requestAnimationFrame((time) => this.animate(time))\r\n } else {\r\n animationFrameId = null\r\n }\r\n },\r\n updatePosition(coord) {\r\n if (this.isPaused) return\r\n let angle = this.getBearingForPath(coord)\r\n if (angle < -90) angle = -180 + angle\r\n pointGraphic.symbol.angle =\r\n this.getBearingForPath(coord) < 0 && this.getBearingForPath(coord) > -90\r\n ? angle\r\n : Math.abs(angle)\r\n pointGraphic.symbol.url = this.getBearingForPath(coord) >= 0 ? cardLeftPng : cardRightPng\r\n pointGraphic.geometry = new window.jkEsri.Point({\r\n x: coord[0],\r\n y: coord[1]\r\n })\r\n },\r\n updateTrail(coords, isClear = false) {\r\n if (isClear) {\r\n trailPolylineGraphic.geometry = this.returnPolyLine()\r\n return\r\n }\r\n if (coords.length < 2) return\r\n trailPolylineGraphic.geometry = this.returnPolyLine([coords.map(([x, y]) => [x, y])])\r\n },\r\n getBearingForPath(coord) {\r\n coord\r\n if (this.currentPathIndex <= 1) return 0\r\n\r\n const prev = this.pathCoordinates[this.currentPathIndex - 2]\r\n const curr = this.pathCoordinates[this.currentPathIndex - 1]\r\n const from = {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: prev }\r\n }\r\n const to = {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: curr }\r\n }\r\n return bearing(from, to)\r\n },\r\n returnGraphic(point, symbol) {\r\n return new window.jkEsri.Graphic({\r\n geometry: toArcGISPoint(point),\r\n symbol: symbol\r\n })\r\n },\r\n initGraphics() {\r\n this.isLoading = false\r\n if (this.pathCoordinates.length > 0) {\r\n startLayer = new window.jkEsri.GraphicsLayer({ id: 'startLayer' })\r\n startLayer.add(\r\n this.returnGraphic(\r\n this.pathCoordinates[0],\r\n this.returnMarkerSymbol({ url: startIcon, width: 24, height: 30 })\r\n )\r\n )\r\n endLayer = new window.jkEsri.GraphicsLayer({ id: 'endLayer' })\r\n endLayer.add(\r\n this.returnGraphic(\r\n this.pathCoordinates[this.pathCoordinates.length - 1],\r\n this.returnMarkerSymbol({ url: endIcon, width: 24, height: 30 })\r\n )\r\n )\r\n pointGraphic = new window.jkEsri.Graphic({\r\n geometry: null,\r\n symbol: this.returnMarkerSymbol({\r\n url: cardLeftPng,\r\n width: 32,\r\n height: 32\r\n })\r\n })\r\n trailPolylineGraphic = new window.jkEsri.Graphic({\r\n geometry: this.returnPolyLine(),\r\n symbol: this.returnLineSymbol({ color: '#c8c8c8', width: 2 })\r\n })\r\n\r\n let polylineInit = new window.jkEsri.GraphicsLayer({\r\n id: 'polylineInit'\r\n }),\r\n polyGraphic = new window.jkEsri.Graphic({\r\n geometry: this.returnPolyLine(this.pathCoordinates),\r\n symbol: this.returnLineSymbol({ color: '#176415', width: 2 })\r\n })\r\n polylineInit.add(polyGraphic)\r\n jk_map.add(polylineInit)\r\n jk_map.add(pointLayer, 18)\r\n jk_map.add(startLayer, 19)\r\n jk_map.add(endLayer, 19)\r\n jk_view.graphics.add(trailPolylineGraphic, 11)\r\n jk_view.graphics.add(pointGraphic, 10)\r\n goToMap(polyGraphic.geometry.extent)\r\n } else {\r\n startLayer = new window.jkEsri.Graphic({\r\n geometry: toArcGISPoint(this.center),\r\n symbol: this.returnMarkerSymbol({\r\n url: gjPoint,\r\n width: 32,\r\n height: 32\r\n })\r\n })\r\n jk_view.graphics.add(startLayer, 8)\r\n goToMap(this.center)\r\n }\r\n },\r\n loadMapData() {\r\n this.gjData = []\r\n this.pathCoordinates = []\r\n this.pointCoordinates = []\r\n\r\n let isLoad = !(this.gjParams && this.gjParams.url)\r\n const headers = {\r\n 'Content-Type': 'application/json'\r\n }\r\n if (this.apiToken) {\r\n headers.Authorization = 'Bearer ' + this.apiToken\r\n }\r\n let params = {}\r\n for (const key in this.gjParams) {\r\n if (\r\n Object.prototype.hasOwnProperty.call(this.gjParams, key) &&\r\n key != 'url' &&\r\n key != 'move'\r\n ) {\r\n params[key] = this.gjParams[key]\r\n }\r\n }\r\n\r\n fetchGjData(\r\n this.gjParams.url, //window._$config.gjUrl ||\r\n {\r\n params,\r\n headers\r\n },\r\n isLoad\r\n ).then((responeData) => {\r\n if (responeData && responeData.length > 0) {\r\n this.gjData = responeData\r\n let paths = []\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: 'pointLayer' })\r\n responeData.map((item) => {\r\n item.longitude = item[window._$config.jd || 'jd'] || item.longitude || ''\r\n item.latitude = item[window._$config.wd || 'wd'] || item.latitude || ''\r\n if (item.longitude && item.latitude) {\r\n item.point = toArcGISPoint([item.longitude, item.latitude])\r\n paths.push([item.longitude, item.latitude])\r\n item.longitude = Number(item.longitude)\r\n ? Number(item.longitude).toFixed(2)\r\n : item.longitude\r\n item.latitude = Number(item.latitude)\r\n ? Number(item.latitude).toFixed(2)\r\n : item.latitude\r\n const graphic = new window.jkEsri.Graphic({\r\n geometry: item.point,\r\n attributes: item,\r\n symbol: {\r\n type: 'simple-marker',\r\n size: '8px',\r\n color: '#98fe33'\r\n }\r\n })\r\n pointLayer.add(graphic)\r\n this.pointCoordinates.push(item)\r\n }\r\n })\r\n this.pathCoordinates = paths\r\n this.initGraphics()\r\n } else this.initGraphics()\r\n })\r\n },\r\n TDTinstance(mapSet, args) {\r\n for (const k in args) {\r\n const name = mapSet.modules[k].split('/').pop()\r\n if (name === 'geometryEngine') {\r\n esri.geometryEngine = args[k]\r\n }\r\n if (name === 'webMercatorUtils') {\r\n esri.webMercatorToGeographic = args[k].webMercatorToGeographic\r\n esri.geographicToWebMercator = args[k].geographicToWebMercator\r\n }\r\n esri[name] = args[k]\r\n }\r\n window.jkEsri = esri\r\n },\r\n init(param) {\r\n // 加载CSS;\r\n loadCss(param.initCss)\r\n // 加载JS模块\r\n loadModules(param.modules || [], {\r\n url: param.initJs\r\n })\r\n .then(this.TDTinstance.bind(this, this.mapParams)) // 依赖初始化\r\n .then(this.initMap.bind(this)) // 地图初始化\r\n },\r\n hideDefaulte() {\r\n jk_view.container.style.cursor = 'default'\r\n this.$refs.tooltip.hide()\r\n },\r\n async debouncedHover(event) {\r\n const hitData = await jk_view.hitTest(event)\r\n if (hitData && hitData.results && hitData.screenPoint) {\r\n if (hitData.results.length > 0) {\r\n let hoverData = null\r\n hitData.results.some((item) => {\r\n if (\r\n item.graphic &&\r\n item.graphic.layer &&\r\n item.graphic.layer.id &&\r\n item.graphic.layer.id == 'pointLayer'\r\n ) {\r\n hoverData = item.graphic\r\n return\r\n }\r\n })\r\n if (hoverData) {\r\n jk_view.container.style.cursor = 'pointer'\r\n this.$refs.tooltip.show(\r\n { x: hitData.screenPoint.x, y: hitData.screenPoint.y },\r\n hoverData.attributes\r\n )\r\n } else this.hideDefaulte()\r\n } else this.hideDefaulte()\r\n } else {\r\n this.hideDefaulte()\r\n }\r\n },\r\n initMap() {\r\n createMapView(this.mapId, {\r\n mapType: this.mapParams.mapType,\r\n layersType: this.mapParams.layersType,\r\n center: this.center,\r\n zoom: 7\r\n }).then((res) => {\r\n jk_map = res.map\r\n jk_view = res.view\r\n\r\n this.isLoading = false\r\n // 3. 创建 Measurement 小部件\r\n measurement = new window.jkEsri.Measurement({\r\n view: jk_view\r\n })\r\n jk_view.on('pointer-move', debounce(this.debouncedHover, 300))\r\n this.loadMapData()\r\n })\r\n },\r\n drawMeasurement(type) {\r\n if (!measurement) return\r\n measurement.clear()\r\n measurement.activeTool = null\r\n setTimeout(() => {\r\n // 激活 Measurement 的测距工具\r\n measurement.activeTool = type\r\n }, 500)\r\n },\r\n clearMeasurement() {\r\n if (!measurement) return\r\n measurement.clear()\r\n }\r\n }\r\n}\r\n</script>\r\n<style scoped>\r\n.arcgisMap-box {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 10;\r\n}\r\n.arcgisMapBox {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.map-view {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.controls {\r\n position: absolute;\r\n left: 0;\r\n bottom: 0;\r\n width: 100%;\r\n z-index: 10;\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.controls-item {\r\n width: 52px;\r\n height: 52px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n cursor: pointer;\r\n color: #000;\r\n border: 2px solid #1ab393;\r\n background: #a3d1be;\r\n border-radius: 50%;\r\n margin-right: 12px;\r\n}\r\n.controls-item p {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.controls-item p i {\r\n font-size: 15px;\r\n}\r\n.controls-item.controls-active {\r\n background: #c4cf8b;\r\n color: #000;\r\n}\r\n</style>\r\n<style>\r\n.arcgisMap-box .esri-ui .esri-component.esri-attribution.esri-widget,\r\n.arcgisMap-box .esri-component.esri-zoom.esri-widget {\r\n display: none;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineGjMap.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineGjMap.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineGjMap.vue?vue&type=style&index=0&id=4294e38e&prod&scoped=true&lang=css\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineGjMap.vue?vue&type=style&index=1&id=4294e38e&prod&lang=css\"","import { render, staticRenderFns } from \"./augustineGjMap.vue?vue&type=template&id=4294e38e&scoped=true\"\nimport script from \"./augustineGjMap.vue?vue&type=script&lang=js\"\nexport * from \"./augustineGjMap.vue?vue&type=script&lang=js\"\nimport style0 from \"./augustineGjMap.vue?vue&type=style&index=0&id=4294e38e&prod&scoped=true&lang=css\"\nimport style1 from \"./augustineGjMap.vue?vue&type=style&index=1&id=4294e38e&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4294e38e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('loading-box',{attrs:{\"loading\":_vm.isLoading}},[_c('div',{staticClass:\"arcgisMap-box\"},[_c('div',{staticClass:\"map-canvans\",attrs:{\"id\":_vm.mapId}}),(!_vm.isLoading && _vm.isSearch)?_c('searchMap',{ref:\"searchRef\",on:{\"select-point\":_vm.refreshPoint,\"clearSearchMap\":_vm.clearSearchMap}}):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"arcgis-search-wrapper\"},[_c('div',{staticClass:\"arcigs-search-box\"},[_c('CustomSearchInput',{on:{\"checked-point\":_vm.changeCheckedPoint,\"search\":_vm.searchMap,\"clear\":_vm.clearSearch},model:{value:(_vm.keyWord),callback:function ($$v) {_vm.keyWord=$$v},expression:\"keyWord\"}}),(_vm.keyWord && _vm.isSearch && !_vm.checkedPoint)?_c('div',{staticClass:\"search-item-box\"},[_c('div',{staticClass:\"arcgis-line\"}),_c('div',{staticClass:\"search-item-wrapper\"},[(_vm.mapNameList.length > 0)?[_vm._l((_vm.mapNameList),function(item,idx){return _c('div',{key:idx,staticClass:\"search-item\",on:{\"click\":function($event){$event.stopPropagation();return _vm.goDetail(item)}}},[_c('div',{staticClass:\"search-name\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"search-address\"},[_vm._v(_vm._s(item.address))])])}),(_vm.loadPage)?_c('div',{staticClass:\"loaded-box\"},[_vm._v(\" \"+_vm._s(_vm.finished ? '数据加载中...' : '数据已到底!!!')+\" \")]):_vm._e()]:_c('div',{staticClass:\"search-no-data\"},[_vm._v(\" \"+_vm._s(_vm.loadSearch ? '数据加载中...' : '暂无数据')+\" \")])],2)]):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('transition',{attrs:{\"name\":\"message-fade\"}},[(_vm.localVisible)?_c('div',{staticClass:\"custom-message\",class:`custom-message--${_vm.type}`,on:{\"click\":_vm.handleClick}},[(_vm.showIcon && false)?_c('span',{staticClass:\"custom-message__icon\"},[_vm._v(_vm._s(_vm.iconMap[_vm.type]))]):_vm._e(),_c('span',{staticClass:\"custom-message__content\"},[_vm._v(_vm._s(_vm.message))]),(_vm.closable)?_c('button',{staticClass:\"custom-message__close\",attrs:{\"type\":\"button\",\"aria-label\":\"关闭提示\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.close.apply(null, arguments)}}},[_vm._v(\" × \")]):_vm._e()]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- CustomMessage.vue -->\r\n<template>\r\n <transition name=\"message-fade\">\r\n <div\r\n v-if=\"localVisible\"\r\n class=\"custom-message\"\r\n :class=\"`custom-message--${type}`\"\r\n @click=\"handleClick\"\r\n >\r\n <!-- 图标 -->\r\n <span v-if=\"showIcon && false\" class=\"custom-message__icon\">{{ iconMap[type] }}</span>\r\n <!-- 内容 -->\r\n <span class=\"custom-message__content\">{{ message }}</span>\r\n <!-- 关闭按钮(仅在可关闭时显示) -->\r\n <button\r\n v-if=\"closable\"\r\n type=\"button\"\r\n class=\"custom-message__close\"\r\n @click.stop=\"close\"\r\n aria-label=\"关闭提示\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </transition>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'CustomMessage',\r\n props: {\r\n // 是否可手动关闭\r\n closable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 点击消息体是否关闭(仅当 closable=false 时有效)\r\n closeOnClick: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n data() {\r\n return {\r\n timer: null,\r\n message: '',\r\n showIcon: false,\r\n localVisible: false,\r\n duration: 3000,\r\n type: 'info' //'success', 'error', 'warning', 'info'\r\n }\r\n },\r\n computed: {\r\n iconMap() {\r\n return {\r\n success: '✓',\r\n error: '✗',\r\n warning: '⚠',\r\n info: 'ℹ'\r\n }\r\n }\r\n },\r\n\r\n mounted() {\r\n if (this.localVisible) {\r\n this.startTimer()\r\n }\r\n },\r\n beforeUnmount() {\r\n this.clearTimer()\r\n },\r\n methods: {\r\n startTimer() {\r\n this.clearTimer()\r\n if (this.duration > 0 && !this.closable) {\r\n this.timer = setTimeout(() => {\r\n this.close()\r\n }, this.duration)\r\n }\r\n },\r\n clearTimer() {\r\n if (this.timer) {\r\n clearTimeout(this.timer)\r\n this.timer = null\r\n }\r\n },\r\n close() {\r\n this.localVisible = false\r\n },\r\n handleClick() {\r\n if (this.closeOnClick && !this.closable) {\r\n this.close()\r\n }\r\n },\r\n // 对外暴露的 show 方法(用于 ref 调用)\r\n show(options = {}) {\r\n const { message, type = 'info', duration = 3000, closable, closeOnClick } = options\r\n if (message !== undefined) this.message = message\r\n this.type = type\r\n if (duration !== undefined) this.duration = duration\r\n if (closable !== undefined) this.$props.closable = closable\r\n if (closeOnClick !== undefined) this.$props.closeOnClick = closeOnClick\r\n\r\n this.localVisible = true\r\n this.startTimer()\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.custom-message {\r\n position: fixed;\r\n top: 20px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n z-index: 9999;\r\n display: flex;\r\n align-items: center;\r\n padding: 12px 16px;\r\n border-radius: 6px;\r\n color: #000;\r\n font-size: 14px;\r\n max-width: 90%;\r\n word-break: break-word;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n backdrop-filter: blur(4px);\r\n -webkit-backdrop-filter: blur(4px);\r\n}\r\n\r\n/* 移动端优化:更大点击区域 */\r\n@media (max-width: 768px) {\r\n .custom-message {\r\n top: 16px;\r\n padding: 14px 18px;\r\n font-size: 15px;\r\n max-width: 94%;\r\n }\r\n}\r\n\r\n/* 类型背景色 */\r\n.custom-message--success {\r\n background-color: #e6f4ec;\r\n}\r\n.custom-message--error {\r\n background-color: #fceded;\r\n}\r\n.custom-message--warning {\r\n background-color: #fff4e7;\r\n}\r\n.custom-message--info {\r\n background-color: #ecf3ff;\r\n}\r\n\r\n/* 图标 */\r\n.custom-message__icon {\r\n margin-right: 8px;\r\n font-weight: bold;\r\n font-style: normal;\r\n}\r\n\r\n/* 关闭按钮 */\r\n.custom-message__close {\r\n margin-left: auto;\r\n margin-left: 12px;\r\n background: none;\r\n border: none;\r\n color: white;\r\n font-size: 20px;\r\n cursor: pointer;\r\n padding: 2px;\r\n opacity: 0.8;\r\n}\r\n.custom-message__close:hover,\r\n.custom-message__close:active {\r\n opacity: 1;\r\n}\r\n\r\n/* 动画 */\r\n.message-fade-enter-active,\r\n.message-fade-leave-active {\r\n transition:\r\n opacity 0.3s,\r\n transform 0.3s;\r\n}\r\n.message-fade-enter {\r\n opacity: 0;\r\n transform: translate(-50%, -10px);\r\n}\r\n.message-fade-leave-to {\r\n opacity: 0;\r\n transform: translate(-50%, -10px);\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomModal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomModal.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomModal.vue?vue&type=style&index=0&id=5b0941a0&prod&scoped=true&lang=css\"","import { render, staticRenderFns } from \"./CustomModal.vue?vue&type=template&id=5b0941a0&scoped=true\"\nimport script from \"./CustomModal.vue?vue&type=script&lang=js\"\nexport * from \"./CustomModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./CustomModal.vue?vue&type=style&index=0&id=5b0941a0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5b0941a0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"search-input-wrapper\"},[_c('div',{staticClass:\"input-container\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.localValue),expression:\"localValue\"}],ref:\"input\",staticClass:\"custom-input\",attrs:{\"type\":\"text\",\"placeholder\":_vm.computedPlaceholder},domProps:{\"value\":(_vm.localValue)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.handleSearch.apply(null, arguments)},\"input\":[function($event){if($event.target.composing)return;_vm.localValue=$event.target.value},_vm.onInput],\"focus\":function($event){_vm.isFocused = true},\"blur\":function($event){_vm.isFocused = false}}}),(_vm.localValue && (_vm.isFocused || !_vm.isMobile))?_c('button',{staticClass:\"clear-btn\",attrs:{\"type\":\"button\",\"aria-label\":\"清除内容\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleClear.apply(null, arguments)}}},[_vm._v(\" × \")]):_vm._e(),_c('button',{staticClass:\"search-btn\",attrs:{\"type\":\"button\",\"aria-label\":\"搜索\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleSearch.apply(null, arguments)}}},[_c('svg',{attrs:{\"width\":\"14\",\"height\":\"14\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\"}},[_c('circle',{attrs:{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"}}),_c('path',{attrs:{\"d\":\"m21 21-4.35-4.35\"}})])])]),_c('label',{staticClass:\"custom-checkbox\"},[_c('input',{staticClass:\"checkbox-input\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.localCheckedPoint},on:{\"change\":_vm.toggleCheckedPoint}}),_c('span',{staticClass:\"checkbox-box\"},[_c('svg',{staticClass:\"check-icon\",attrs:{\"width\":\"10\",\"height\":\"8\",\"viewBox\":\"0 0 10 8\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\"}},[_c('path',{attrs:{\"d\":\"M1 4L3.5 6.5L9 1\",\"stroke\":\"white\",\"stroke-width\":\"1.5\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}})])]),_c('span',{staticClass:\"checkbox-label\",style:({ color: _vm.localCheckedPoint ? '#409eff' : '#fff' })},[_vm._v(\"坐标反查\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- SearchInputWithCheckbox.vue -->\r\n<template>\r\n <div class=\"search-input-wrapper\">\r\n <!-- 输入框容器 -->\r\n <div class=\"input-container\">\r\n <input\r\n ref=\"input\"\r\n v-model=\"localValue\"\r\n type=\"text\"\r\n class=\"custom-input\"\r\n :placeholder=\"computedPlaceholder\"\r\n @keyup.enter=\"handleSearch\"\r\n @input=\"onInput\"\r\n @focus=\"isFocused = true\"\r\n @blur=\"isFocused = false\"\r\n />\r\n\r\n <!-- 清除按钮 -->\r\n <button\r\n v-if=\"localValue && (isFocused || !isMobile)\"\r\n type=\"button\"\r\n class=\"clear-btn\"\r\n @click.stop=\"handleClear\"\r\n aria-label=\"清除内容\"\r\n >\r\n ×\r\n </button>\r\n\r\n <!-- 搜索按钮(append) -->\r\n <button type=\"button\" class=\"search-btn\" @click.stop=\"handleSearch\" aria-label=\"搜索\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <path d=\"m21 21-4.35-4.35\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- 自定义 Checkbox -->\r\n <label class=\"custom-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n :checked=\"localCheckedPoint\"\r\n @change=\"toggleCheckedPoint\"\r\n class=\"checkbox-input\"\r\n />\r\n <span class=\"checkbox-box\">\r\n <svg\r\n class=\"check-icon\"\r\n width=\"10\"\r\n height=\"8\"\r\n viewBox=\"0 0 10 8\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1 4L3.5 6.5L9 1\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"checkbox-label\" :style=\"{ color: localCheckedPoint ? '#409eff' : '#fff' }\"\r\n >坐标反查</span\r\n >\r\n </label>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'SearchInputWithCheckbox',\r\n props: {\r\n value: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n data() {\r\n return {\r\n localValue: this.value,\r\n localCheckedPoint: false,\r\n isFocused: false\r\n }\r\n },\r\n computed: {\r\n computedPlaceholder() {\r\n return this.localCheckedPoint ? '输入经纬度(115.83,23.43)' : '输入地址'\r\n },\r\n isMobile() {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\r\n navigator.userAgent\r\n )\r\n }\r\n },\r\n watch: {\r\n value(newVal) {\r\n this.localValue = newVal\r\n }\r\n },\r\n methods: {\r\n handleSearch() {\r\n this.$emit('search', this.localValue)\r\n },\r\n handleClear() {\r\n this.localValue = ''\r\n this.$emit('clear', this.localValue)\r\n this.$refs.input.focus()\r\n },\r\n toggleCheckedPoint(e) {\r\n const newVal = e.target.checked\r\n this.localCheckedPoint = newVal\r\n this.$emit('checkedPoint', newVal)\r\n },\r\n onInput() {\r\n // 可用于后续扩展(如防抖搜索)\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.search-input-wrapper {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n flex-wrap: wrap;\r\n padding: 8px 0;\r\n}\r\n\r\n/* ========== 输入框区域 ========== */\r\n.input-container {\r\n position: relative;\r\n display: inline-flex;\r\n align-items: center;\r\n width: 240px;\r\n border: 1px solid #dcdfe6;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n transition: border-color 0.2s;\r\n background: #fff;\r\n}\r\n\r\n.input-container:hover,\r\n.input-container:focus-within {\r\n border-color: #409eff;\r\n}\r\n\r\n.custom-input {\r\n flex: 1;\r\n padding: 8px 32px 8px 12px;\r\n border: none;\r\n outline: none;\r\n font-size: 14px;\r\n color: #000;\r\n background: transparent;\r\n min-width: 0;\r\n}\r\n\r\n.custom-input::placeholder {\r\n color: #000;\r\n}\r\n\r\n.clear-btn {\r\n position: absolute;\r\n right: 36px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: none;\r\n border: none;\r\n font-size: 18px;\r\n color: #c0c4cc;\r\n cursor: pointer;\r\n padding: 2px;\r\n opacity: 0.8;\r\n z-index: 1;\r\n}\r\n\r\n.clear-btn:hover {\r\n color: #909399;\r\n}\r\n\r\n.search-btn {\r\n position: absolute;\r\n right: 0;\r\n top: 0;\r\n width: 32px;\r\n height: 100%;\r\n background: #ecf5ff;\r\n border: none;\r\n border-left: 1px solid #dcdfe6;\r\n cursor: pointer;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #409eff;\r\n}\r\n\r\n.search-btn:hover {\r\n background: #ecf5ff;\r\n}\r\n\r\n/* ========== 自定义 Checkbox ========== */\r\n.custom-checkbox {\r\n display: flex;\r\n align-items: center;\r\n cursor: pointer;\r\n user-select: none;\r\n font-size: 14px;\r\n color: #606266;\r\n}\r\n\r\n.checkbox-input {\r\n position: absolute;\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\n.checkbox-box {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 16px;\r\n height: 16px;\r\n border: 1px solid #dcdfe6;\r\n border-radius: 2px;\r\n background: white;\r\n margin-right: 6px;\r\n transition: all 0.2s ease;\r\n position: relative;\r\n}\r\n\r\n.checkbox-input:checked + .checkbox-box {\r\n background-color: #409eff;\r\n border-color: #409eff;\r\n}\r\n\r\n.check-icon {\r\n opacity: 0;\r\n transform: scale(0.8);\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.checkbox-input:checked + .checkbox-box .check-icon {\r\n opacity: 1;\r\n transform: scale(1);\r\n}\r\n\r\n.checkbox-input:focus + .checkbox-box {\r\n outline: 2px solid #409eff;\r\n outline-offset: 2px;\r\n}\r\n\r\n@media (hover: hover) {\r\n .checkbox-box:hover {\r\n border-color: #409eff;\r\n }\r\n}\r\n\r\n/* ========== 移动端适配 ========== */\r\n@media (max-width: 768px) {\r\n .input-container {\r\n width: 100%;\r\n max-width: 280px;\r\n }\r\n\r\n .search-input-wrapper {\r\n justify-content: center;\r\n }\r\n\r\n .checkbox-box {\r\n width: 18px;\r\n height: 18px;\r\n }\r\n\r\n .checkbox-label {\r\n font-size: 15px;\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomSearchInput.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomSearchInput.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomSearchInput.vue?vue&type=style&index=0&id=3e01720b&prod&scoped=true&lang=css\"","import { render, staticRenderFns } from \"./CustomSearchInput.vue?vue&type=template&id=3e01720b&scoped=true\"\nimport script from \"./CustomSearchInput.vue?vue&type=script&lang=js\"\nexport * from \"./CustomSearchInput.vue?vue&type=script&lang=js\"\nimport style0 from \"./CustomSearchInput.vue?vue&type=style&index=0&id=3e01720b&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3e01720b\",\n null\n \n)\n\nexport default component.exports","// utils/tianditu.js\r\nimport axios from 'axios'\r\n// 替换为你的实际密钥\r\nconst TDT_KEY = 'f04ece8bf0ff9c1117526a29a96bb2e1'\r\n/**\r\n * 逆地理编码查询 - 根据名称模糊匹配\r\n * @param {Object} data\r\n * @param {string} data.keyWord - 关键字\r\n * @param {string} data.level - 级别\r\n * @param {string} data.mapBound - 范围\r\n * @param {string} data.currentPage - 页码\r\n * @param {string} data.pageSize - 页数\r\n * @returns {Promise}\r\n */\r\nexport function getGeocoderList(data) {\r\n return new Promise((reslove, reject) => {\r\n if (!data || !data.keyWord) {\r\n reject()\r\n return\r\n }\r\n let {\r\n keyWord,\r\n level = 12,\r\n mapBound = '108.38512072748536,20.999700722178734,118.92018884189694,26.042267179024694',\r\n currentPage = 0,\r\n pageSize = 20\r\n } = data\r\n axios\r\n .get('http://api.tianditu.gov.cn/v2/search', {\r\n params: {\r\n postStr: JSON.stringify({\r\n keyWord: keyWord,\r\n level,\r\n mapBound,\r\n queryType: 2,\r\n start: currentPage,\r\n count: pageSize\r\n }),\r\n type: 'query',\r\n tk: TDT_KEY\r\n },\r\n timeout: 10000\r\n })\r\n .then((res) => {\r\n console.log('reject', res)\r\n\r\n if (res && res.status && res.status == 200 && res.data && res.data.pois) {\r\n reslove({\r\n list: res.data.pois || [],\r\n total: res.data.count || 0\r\n })\r\n } else {\r\n reject(res.data)\r\n }\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * 逆地理编码查询 - 经纬度解析成地址\r\n * @param {Object} data\r\n * @param {string} data.longitude - 经度\r\n * @param {string} data.latitude - 维度\r\n * @returns {Promise}\r\n */\r\nexport function getGeocoderLg(data) {\r\n return new Promise((reslove, reject) => {\r\n if (!data) {\r\n reject()\r\n return\r\n }\r\n // 构造 postStr 对象\r\n let postObj = { lon: data.longitude, lat: data.latitude }\r\n // 转为 JSON 字符串(注意:不能有空格,天地图严格校验)\r\n const postStr = JSON.stringify(postObj)\r\n axios\r\n .get('https://api.tianditu.gov.cn/geocoder', {\r\n params: {\r\n postStr,\r\n type: 'geocode',\r\n tk: TDT_KEY\r\n },\r\n // 天地图要求 Content-Type 不重要(GET 请求),但需注意跨域\r\n timeout: 10000\r\n })\r\n .then((res) => {\r\n if (res && res.status && res.status == 200 && res.data && res.data.msg && res.data.result) {\r\n reslove(res.data.result)\r\n } else {\r\n reject(res.data)\r\n }\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n}\r\n/**\r\n * 地理编码接口-地址解析成经纬度\r\n * @param {string} keyWord - 地址\r\n * @returns {Promise}\r\n */\r\nexport function getGeocoderAddress(keyWord) {\r\n return new Promise((reslove, reject) => {\r\n if (!keyWord) {\r\n reject()\r\n return\r\n }\r\n axios\r\n .get('https://api.tianditu.gov.cn/geocoder', {\r\n params: {\r\n ds: JSON.stringify({ keyWord: keyWord }),\r\n tk: TDT_KEY\r\n },\r\n // 天地图要求 Content-Type 不重要(GET 请求),但需注意跨域\r\n timeout: 10000\r\n })\r\n .then((res) => {\r\n if (\r\n res &&\r\n res.status &&\r\n res.status == 200 &&\r\n res.data &&\r\n res.data.msg &&\r\n res.data.location\r\n ) {\r\n reslove(res.data.location)\r\n } else {\r\n reject(res.data)\r\n }\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * 天地图 - 驾车路径规划\r\n * @param {Object} data\r\n * @param {string} data.orig - 起点 \"lng,lat\"\r\n * @param {string} data.dest - 终点 \"lng,lat\"\r\n * @param {string} [data.mid] - 途经点 \"lng1,lat1;lng2,lat2\"\r\n * @param {string} [data.style='0'] - 路线风格:0-速度优先,1-少收费,2-不走高速,3-高速优先\r\n * @returns {Promise}\r\n */\r\nexport function getDriveRoute(data) {\r\n if (!data) return\r\n // 构造 postStr 对象\r\n let postObj = { orig: data.orig, dest: data.dest, style: data.style || 0 }\r\n if (data.mid) {\r\n postObj.mid = data.mid\r\n }\r\n // 转为 JSON 字符串(注意:不能有空格,天地图严格校验)\r\n const postStr = JSON.stringify(postObj)\r\n return axios.get('https://api.tianditu.gov.cn/drive', {\r\n params: {\r\n postStr,\r\n type: 'search',\r\n tk: TDT_KEY\r\n },\r\n // 天地图要求 Content-Type 不重要(GET 请求),但需注意跨域\r\n timeout: 10000\r\n })\r\n}\r\n","<template>\r\n <div class=\"arcgis-search-wrapper\">\r\n <div class=\"arcigs-search-box\">\r\n <CustomSearchInput\r\n v-model=\"keyWord\"\r\n @checked-point=\"changeCheckedPoint\"\r\n @search=\"searchMap\"\r\n @clear=\"clearSearch\"\r\n />\r\n <div class=\"search-item-box\" v-if=\"keyWord && isSearch && !checkedPoint\">\r\n <div class=\"arcgis-line\"></div>\r\n <div class=\"search-item-wrapper\">\r\n <template v-if=\"mapNameList.length > 0\">\r\n <div\r\n class=\"search-item\"\r\n v-for=\"(item, idx) in mapNameList\"\r\n :key=\"idx\"\r\n @click.stop=\"goDetail(item)\"\r\n >\r\n <div class=\"search-name\">{{ item.name }}</div>\r\n <div class=\"search-address\">{{ item.address }}</div>\r\n </div>\r\n <div class=\"loaded-box\" v-if=\"loadPage\">\r\n {{ finished ? '数据加载中...' : '数据已到底!!!' }}\r\n </div>\r\n </template>\r\n <div class=\"search-no-data\" v-else>\r\n {{ loadSearch ? '数据加载中...' : '暂无数据' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <CustomModal ref=\"message\" :z-index=\"2000\" animation=\"fade\" width=\"400px\">\r\n <p>这是淡入弹框</p>\r\n </CustomModal>\r\n</template>\r\n<script>\r\nimport CustomModal from './CustomModal.vue'\r\nimport CustomSearchInput from './CustomSearchInput.vue'\r\nimport { getGeocoderList } from '../utils/tianditu.js'\r\nvar search_Map = null\r\nexport default {\r\n name: 'SearchMap',\r\n components: { CustomModal, CustomSearchInput },\r\n data() {\r\n return {\r\n keyWord: '',\r\n isSearch: false,\r\n loadSearch: false,\r\n currentPage: 1,\r\n finished: false,\r\n loadPage: false,\r\n pageSize: 20,\r\n total: 0,\r\n mapNameList: [],\r\n checkedPoint: false\r\n }\r\n },\r\n methods: {\r\n onShowDialog(text) {\r\n this.$refs.message.show({\r\n message: text,\r\n type: 'warning',\r\n duration: 3000\r\n })\r\n },\r\n clearSearch() {\r\n this.keyWord = ''\r\n this.mapNameList = []\r\n this.clearMap()\r\n },\r\n changeCheckedPoint(val) {\r\n this.checkedPoint = val\r\n },\r\n initMap(data) {\r\n search_Map = data.map\r\n this.isSearch = false\r\n this.checkedPoint = false\r\n this.clearSearch()\r\n search_Map\r\n },\r\n goDetail(item) {\r\n if (item.lonlat) {\r\n let point = typeof item.lonlat == 'string' ? item.lonlat.split(',') : []\r\n if (point && point.length > 1) {\r\n this.$emit('selectPoint', { ...item, longitude: point[0], latitude: point[1] })\r\n } else this.onShowDialog('坐标格式不正确!!!')\r\n }\r\n },\r\n loadMapList() {\r\n if (this.mapNameList.length > 0 && this.total > this.currentPage * this.pageSize) {\r\n this.currentPage++\r\n this.postMapList()\r\n }\r\n if (this.total > 0 && this.total <= this.currentPage * this.pageSize) {\r\n this.finished = true\r\n }\r\n },\r\n postMapList() {\r\n this.loadSearch = true\r\n getGeocoderList({\r\n keyWord: this.keyWord,\r\n currentPage: this.currentPage,\r\n pageSize: this.pageSize\r\n })\r\n .then((res) => {\r\n this.loadSearch = false\r\n this.total = 0\r\n if (res && res.list && res.list.length > 0)\r\n this.mapNameList = this.mapNameList.concat(res.list)\r\n if (res.total && Number(res.total)) {\r\n this.total = Number(res.total)\r\n this.loadPage = true\r\n }\r\n })\r\n .catch((err) => {\r\n console.log('定位失败', err)\r\n this.loadSearch = false\r\n })\r\n },\r\n searchMap(val) {\r\n if (!val) {\r\n this.onShowDialog('请输入搜索内容!!!')\r\n return\r\n }\r\n this.keyWord = val\r\n if (!this.mapNameList) return\r\n this.mapNameList = []\r\n this.isSearch = true\r\n this.total = 0\r\n this.finished = false\r\n this.loadPage = false\r\n this.currentPage = 1\r\n if (!this.checkedPoint) this.postMapList()\r\n else {\r\n let point = this.keyWord\r\n let pointArr = typeof point == 'string' ? point.split(',') : []\r\n if (pointArr.length > 1) {\r\n this.$emit('selectPoint', { longitude: pointArr[0], latitude: pointArr[1] })\r\n } else {\r\n this.onShowDialog('坐标格式不正确!!!')\r\n }\r\n }\r\n },\r\n clearMap() {\r\n this.$emit('clearSearchMap')\r\n }\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./search_map.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./search_map.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./search_map.vue?vue&type=template&id=e0bc6834\"\nimport script from \"./search_map.vue?vue&type=script&lang=js\"\nexport * from \"./search_map.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import \"../css/styles.css\";\r\nimport mapConfig from \"../config/map.config.js\";\r\nimport searchMap from \"../vue2/search_map.vue\";\r\nimport loadingBox from \"../vue2/loading.vue\";\r\nimport localImg from \"../image/ico_location.png\";\r\nimport svgIcon from \"../svgIcon.vue\";\r\nimport {\r\n initMapPack,\r\n drawArcPoint,\r\n goToPoint,\r\n getPictureSymbol,\r\n} from \"../utils/index.js\";\r\nimport { getGeocoderLg, getGeocoderAddress } from \"../utils/tianditu.js\";\r\nvar arcgisMap = null,\r\n arcgisView = null,\r\n currentAbortController,\r\n isClickLocked = false,\r\n pointLayer = null,\r\n searchViewModel = null;\r\nlet markerData = {\r\n url: localImg,\r\n width: 20,\r\n height: 18,\r\n};\r\nexport const mapLocationMixin = {\r\n components: { loadingBox, searchMap, svgIcon },\r\n props: {\r\n mapParams: {\r\n type: Object,\r\n default: mapConfig,\r\n },\r\n defaultCenter: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n isSearch: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n computed: {\r\n isShowPoint() {\r\n return !this.disabled && this.isSearch;\r\n },\r\n mapCenter() {},\r\n },\r\n data() {\r\n return {\r\n mapId: \"map\" + Math.round(Math.random() * 10000),\r\n isLoading: true, //地图加载loading\r\n center: [],\r\n address: \"\",\r\n pointCenter: [113.536308532987, 23.3450945634734],\r\n pointData: {\r\n longitude: \"\",\r\n latitude: \"\",\r\n address: \"\",\r\n },\r\n };\r\n },\r\n methods: {\r\n /**\r\n * 返回地图容器\r\n */\r\n getMap() {\r\n return arcgisMap;\r\n },\r\n /**\r\n * 返回地图容器\r\n */\r\n getView() {\r\n return arcgisView;\r\n },\r\n setupMapEvents(view) {\r\n // 点击\r\n this._clickHandler = view.on(\r\n \"click\",\r\n this.debounce(this.handleMapClick, 300)\r\n );\r\n // 悬浮\r\n this._hoverHandler = view.on(\r\n \"pointer-move\",\r\n this.debounce(this.handleMapHover, 80)\r\n );\r\n },\r\n\r\n handleMapClick(e) {\r\n // 处理点击逻辑\r\n if (isClickLocked) return;\r\n // 取消上一次未完成的 hitTest\r\n if (currentAbortController) {\r\n currentAbortController.abort();\r\n }\r\n currentAbortController = new AbortController();\r\n isClickLocked = true;\r\n const eventData = {\r\n mapPoint: e.mapPoint,\r\n type: \"click\",\r\n };\r\n const hitTestPromise = arcgisView.hitTest(e); // 注意:ArcGIS hitTest 不支持 signal,此为未来兼容\r\n hitTestPromise\r\n .then((hitResult) => {\r\n if (currentAbortController.signal.aborted) return; // 已取消\r\n eventData.event = hitResult;\r\n if (this.isShowPoint && searchViewModel) {\r\n let point = e.mapPoint;\r\n if (point) {\r\n this.pointData.longitude = point.x;\r\n this.pointData.latitude = point.y;\r\n pointLayer.graphics._items[0].geometry.longitude = point.x;\r\n pointLayer.graphics._items[0].geometry.latitude = point.y;\r\n this.pointData.address = \"\";\r\n searchViewModel.update(pointLayer.graphics._items[0]);\r\n }\r\n }\r\n this.$emit(\"mapEventClick\", eventData);\r\n })\r\n .catch((err) => {\r\n if (err.name === \"AbortError\") return;\r\n console.warn(\"hitTest error\", err);\r\n })\r\n .finally(() => {\r\n setTimeout(() => {\r\n isClickLocked = false;\r\n currentAbortController = null;\r\n }, 300);\r\n });\r\n },\r\n\r\n async handleMapHover(event) {\r\n // 处理 hover 逻辑\r\n const hitData = await arcgisView.hitTest(event);\r\n if (hitData && hitData.results && hitData.screenPoint) {\r\n arcgisView.container.style.cursor = \"pointer\";\r\n\r\n this.$emit(\"mapEventMouse\", hitData);\r\n } else arcgisView.container.style.cursor = \"default\";\r\n },\r\n\r\n debounce(fn, delay) {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => fn.apply(this, args), delay);\r\n };\r\n },\r\n\r\n cleanupMapEvents() {\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n /**\r\n * 地图加载完成\r\n */\r\n loadEdMap(data) {\r\n arcgisMap = data.map;\r\n arcgisView = data.view;\r\n initMapPack(data);\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: \"pointLayer\" });\r\n arcgisMap.add(pointLayer, 10);\r\n if (this.isShowPoint) {\r\n this.setSearchVm();\r\n } else {\r\n this.moveCenterPoint();\r\n }\r\n this.setupMapEvents(data.view);\r\n if (this.center && this.center.length == 2) {\r\n goToPoint({\r\n longitude: this.center[0],\r\n latitude: this.center[1],\r\n });\r\n }\r\n this.$emit(\"loadEdMap\", data);\r\n },\r\n moveCenterPoint() {\r\n if (\r\n this.center &&\r\n this.center.length == 2 &&\r\n this.center[0] &&\r\n this.center[1]\r\n ) {\r\n this.refreshPoint({\r\n longitude: this.center[0],\r\n latitude: this.center[1],\r\n });\r\n } else if (this.address) {\r\n getGeocoderAddress(this.address)\r\n .then((resData) => {\r\n if (resData && resData.lon && resData.lat) {\r\n this.refreshPoint({\r\n longitude: resData.lon || \"\",\r\n latitude: resData.lat,\r\n });\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(\"err\", err);\r\n });\r\n } else if (\r\n this.defaultCenter &&\r\n this.defaultCenter.length == 2 &&\r\n this.defaultCenter[0] &&\r\n this.defaultCenter[1]\r\n ) {\r\n this.refreshPoint({\r\n longitude: this.defaultCenter[0],\r\n latitude: this.defaultCenter[1],\r\n });\r\n } else\r\n this.refreshPoint({\r\n longitude: this.pointCenter[0],\r\n latitude: this.pointCenter[1],\r\n });\r\n },\r\n /**\r\n * 设置搜索的可编辑图层\r\n */\r\n setSearchVm() {\r\n if (!this.disabled) {\r\n let pointSymbol = {\r\n type: \"picture-marker\", // autocasts as new PictureFillSymbol()\r\n ...markerData,\r\n img: markerData.url,\r\n };\r\n searchViewModel = new window.jkEsri.SketchViewModel({\r\n view: arcgisView, // view 是你的地图视图\r\n layer: pointLayer,\r\n pointSymbol: pointSymbol,\r\n polylineSymbol: {\r\n type: \"simple-line\",\r\n color: \"#8A2BE2\",\r\n width: \"4\",\r\n style: \"dash\",\r\n spatialReference: {\r\n wkid: 4326,\r\n },\r\n },\r\n polygonSymbol: {\r\n type: \"simple-fill\",\r\n color: \"rgba(0, 45, 99,0.4)\",\r\n style: \"solid\",\r\n outline: {\r\n color: \"white\",\r\n width: 2,\r\n },\r\n spatialReference: {\r\n wkid: 4326,\r\n },\r\n },\r\n spatialReference: {\r\n wkid: 4326,\r\n },\r\n });\r\n this.moveCenterPoint();\r\n searchViewModel.on(\"update\", (event) => {\r\n if (\r\n event &&\r\n event.graphics &&\r\n event.graphics.length > 0 &&\r\n event.graphics[0].geometry\r\n ) {\r\n let geometry = event.graphics[0].geometry;\r\n event.graphics[0].symbol = getPictureSymbol({\r\n ...markerData,\r\n });\r\n if (this.isSearch) {\r\n this.pointData.longitude = geometry.longitude;\r\n this.pointData.latitude = geometry.latitude;\r\n this.pointData.address = \"\";\r\n }\r\n event.graphic = event.graphics[0];\r\n }\r\n });\r\n } else this.moveCenterPoint();\r\n },\r\n\r\n clearSearchMap() {\r\n console.log(\"\");\r\n },\r\n clearSketch() {\r\n pointLayer && pointLayer.removeAll();\r\n if (this.$refs.searchRef && this.$refs.searchRef.clearSearch)\r\n this.$refs.searchRef.clearSearch();\r\n },\r\n /**\r\n * 搜索绘图\r\n * @param data\r\n */\r\n refreshPoint(data) {\r\n pointLayer && pointLayer.removeAll();\r\n this.pointData = { ...data, ...markerData };\r\n pointLayer.add(drawArcPoint(this.pointData));\r\n if (this.isShowPoint)\r\n setTimeout(() => {\r\n searchViewModel.update(pointLayer.graphics._items[0]);\r\n }, 200);\r\n goToPoint(data);\r\n },\r\n /**\r\n * 初始化点\r\n * @param {*} options\r\n * @param {Array} options.center 经纬度\r\n * @param {String} options.address 中文地址\r\n */\r\n initPoint(options) {\r\n this.center = [];\r\n this.address = \"\";\r\n this.pointData.address = \"\";\r\n if (options) {\r\n if (options.address) {\r\n this.address = data.address;\r\n }\r\n if (\r\n options.center &&\r\n options.center.length == 2 &&\r\n options.center[0] &&\r\n options.center[1]\r\n ) {\r\n this.center = data.center;\r\n }\r\n if (arcgisMap && arcgisView) {\r\n setTimeout(() => {\r\n this.moveCenterPoint();\r\n }, 200);\r\n }\r\n }\r\n },\r\n /**\r\n * 搜索回调\r\n */\r\n async returnPoint() {\r\n let datas = this.pointData;\r\n if (datas && datas.longitude && datas.latitude) {\r\n if (!datas.address) {\r\n let resData = await getGeocoderLg({\r\n longitude: this.pointData.longitude,\r\n latitude: this.pointData.latitude,\r\n });\r\n if (resData && resData.addressComponent) {\r\n let address = \"\";\r\n address = resData.addressComponent.address\r\n ? resData.addressComponent.address\r\n : \"\";\r\n datas = {\r\n ...this.pointData,\r\n ...resData.addressComponent,\r\n address,\r\n };\r\n }\r\n }\r\n return datas;\r\n } else return datas;\r\n },\r\n },\r\n beforeUnmount() {\r\n this.clearSketch();\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n};\r\n","/**\r\n * 高性能事件管理器\r\n * @param {Function} [originalFn] - 原始回调函数(可选)\r\n * @param {Object} [options] - 配置项\r\n * @param {boolean} [options.executeOriginalFirst=true] - 是否先执行原始函数\r\n * @param {number} [options.debounce] - 防抖延迟(毫秒)\r\n * @param {boolean} [options.throttle] - 节流间隔(毫秒)\r\n * @returns {Function} 可扩展的事件处理器\r\n */\r\nexport function createEventManager(originalFn, options = {}) {\r\n const { executeOriginalFirst = true, debounce: debounceDelay, throttle: throttleDelay } = options\r\n\r\n let listeners = []\r\n let isSorted = true // 懒排序标志\r\n let lastTriggerTime = 0\r\n let debounceTimer = null\r\n\r\n // 错误处理包装\r\n const safeCall = (fn, context, args) => {\r\n try {\r\n return fn.apply(context, args)\r\n } catch (error) {\r\n console.error('EventManager listener error:', error)\r\n return null\r\n }\r\n }\r\n\r\n // 执行所有监听器\r\n const executeListeners = (context, args) => {\r\n // 懒排序:仅当有新监听器加入且未排序时才排序\r\n if (!isSorted) {\r\n listeners.sort((a, b) => a.index - b.index)\r\n isSorted = true\r\n }\r\n\r\n // 先执行原始函数(如果需要)\r\n if (executeOriginalFirst && originalFn) {\r\n safeCall(originalFn, context, args)\r\n }\r\n\r\n // 安全遍历(避免修改数组导致的问题)\r\n const snapshot = [...listeners] // 创建快照\r\n for (let i = 0; i < snapshot.length; i++) {\r\n const listener = snapshot[i]\r\n\r\n // 检查是否仍存在于当前列表(防止重复移除)\r\n if (!listeners.includes(listener)) continue\r\n\r\n const result = safeCall(listener, context, args)\r\n\r\n // 支持返回 'remove' 自动移除\r\n if (result === 'remove') {\r\n removeListener(listener)\r\n }\r\n }\r\n\r\n // 后执行原始函数(如果配置了)\r\n if (!executeOriginalFirst && originalFn) {\r\n safeCall(originalFn, context, args)\r\n }\r\n }\r\n\r\n // 移除监听器\r\n const removeListener = (listener) => {\r\n const index = listeners.indexOf(listener)\r\n if (index > -1) {\r\n listeners.splice(index, 1)\r\n }\r\n }\r\n\r\n // 主事件处理器\r\n let eventHandler = function (...args) {\r\n const now = Date.now()\r\n\r\n // 节流:限制最小触发间隔\r\n if (throttleDelay && now - lastTriggerTime < throttleDelay) {\r\n return\r\n }\r\n\r\n // 防抖:延迟执行\r\n if (debounceDelay) {\r\n if (debounceTimer) clearTimeout(debounceTimer)\r\n debounceTimer = setTimeout(() => {\r\n lastTriggerTime = Date.now()\r\n executeListeners(this, args)\r\n }, debounceDelay)\r\n return\r\n }\r\n\r\n // 正常执行\r\n lastTriggerTime = now\r\n executeListeners(this, args)\r\n }\r\n\r\n // 添加监听器\r\n eventHandler.addListener = function (fn, index = 0) {\r\n if (typeof fn !== 'function') {\r\n throw new Error('Listener must be a function')\r\n }\r\n\r\n fn.index = index\r\n fn.remove = () => removeListener(fn)\r\n\r\n listeners.push(fn)\r\n isSorted = false // 标记需要重新排序\r\n\r\n return fn\r\n }\r\n\r\n // 清空所有监听器\r\n eventHandler.clear = function () {\r\n listeners = []\r\n isSorted = true\r\n if (debounceTimer) {\r\n clearTimeout(debounceTimer)\r\n debounceTimer = null\r\n }\r\n }\r\n\r\n // 获取监听器列表(只读)\r\n eventHandler.getListeners = function () {\r\n return [...listeners] // 返回副本,防止外部修改\r\n }\r\n\r\n // 销毁(清理定时器)\r\n eventHandler.destroy = function () {\r\n this.clear()\r\n if (debounceTimer) {\r\n clearTimeout(debounceTimer)\r\n debounceTimer = null\r\n }\r\n }\r\n\r\n return eventHandler\r\n}\r\n","// map.js\r\nimport { loadCss, loadModules } from \"esri-loader\";\r\nimport { createEventManager } from \"./eventManager\";\r\nimport { createMapView, createBase } from \"../utils/index\";\r\nlet esri = {}; // 全局 esri 缓存(可选,用于调试)\r\nimport mapConfig from \"../config/map.config.js\";\r\n\r\nclass MapWrapper {\r\n /**\r\n * 构造\r\n * @param {*} id\r\n * @param {*} params\r\n * @returns\r\n */\r\n constructor(id, params = {}) {\r\n this.id = id;\r\n let param = { ...mapConfig, ...params };\r\n this.param = param;\r\n this.__config = param.config || {};\r\n this.layersType = param.layersType;\r\n // 存储原始参数,供 TDTinstance 使用\r\n this.mapParams = { ...param };\r\n\r\n // ✅ 使用 createEventManager 替代 eventBox\r\n this.onloadMap = createEventManager();\r\n\r\n this.createMap(id, param);\r\n return this;\r\n }\r\n /**\r\n * 创建地图\r\n * @param {*} id\r\n * @param {*} param\r\n */\r\n createMap(id, param) {\r\n this.init(param);\r\n }\r\n /**\r\n * 加载js和css\r\n * @param {*} param\r\n */\r\n init(param) {\r\n if (!window.jkEsri) {\r\n if (param.initCss) {\r\n loadCss(param.initCss);\r\n }\r\n const modules = param.modules || [\r\n \"esri/Map\",\r\n \"esri/views/MapView\",\r\n \"esri/layers/WebTileLayer\",\r\n \"esri/geometry/Extent\",\r\n \"esri/geometry/SpatialReference\",\r\n \"esri/geometry/support/webMercatorUtils\",\r\n \"esri/geometry/geometryEngine\",\r\n ];\r\n // 更新 mapParams.modules 用于 TDTinstance 解析\r\n this.mapParams.modules = modules;\r\n loadModules(modules, { url: param.initJs })\r\n .then(this.TDTinstance.bind(this, this.mapParams))\r\n .then(this.initMap.bind(this))\r\n .catch((err) => {\r\n console.error(\"地图模块加载失败:\", err);\r\n throw err;\r\n });\r\n } else this.initMap();\r\n }\r\n\r\n /**\r\n * 动态解析模块并挂载到 esri 对象\r\n * @param {Object} mapSet - 包含 modules 配置的对象\r\n * @param {Array} args - loadModules 返回的模块实例数组\r\n */\r\n TDTinstance(mapSet, args) {\r\n esri = {}; // 重置\r\n for (const k in args) {\r\n if (!args.hasOwnProperty(k)) continue;\r\n\r\n // 获取模块短名称(如 'esri/Map' → 'Map')\r\n const name = mapSet.modules[k].split(\"/\").pop();\r\n\r\n // 特殊处理 webMercatorUtils\r\n if (name === \"webMercatorUtils\") {\r\n esri.webMercatorToGeographic = args[k].webMercatorToGeographic;\r\n esri.geographicToWebMercator = args[k].geographicToWebMercator;\r\n }\r\n\r\n // 特殊处理 geometryEngine(直接挂载整个对象)\r\n if (name === \"geometryEngine\") {\r\n esri.geometryEngine = args[k];\r\n }\r\n\r\n // 通用挂载:esri.Map, esri.MapView 等\r\n esri[name] = args[k];\r\n }\r\n\r\n // 暴露到 window(便于调试,生产环境可移除)\r\n window.jkEsri = esri;\r\n\r\n // 同时保存到实例,避免全局依赖\r\n this.esri = esri;\r\n }\r\n /**\r\n * 初始化地图\r\n * @returns\r\n */\r\n initMap() {\r\n let layer = null;\r\n if (\r\n (this.layersType == \"dynamic\" || this.layersType == \"TileLayer\") &&\r\n this.param.baseMapUrl\r\n ) {\r\n var layerApi =\r\n this.layersType == \"dynamic\"\r\n ? window.jkEsri.MapImageLayer\r\n : window.jkEsri.TileLayer;\r\n layer = new layerApi({\r\n url: this.param.baseMapUrl,\r\n title: this.layersType,\r\n opacity: 1,\r\n visible: true,\r\n });\r\n createBase(this.id, layer, this.param).then((res) => {\r\n this.onloadMap(res);\r\n });\r\n } else\r\n createMapView(this.id, this.param).then((res) => {\r\n this.onloadMap(res);\r\n });\r\n }\r\n\r\n /**\r\n * 销毁\r\n */\r\n destroy() {\r\n this.onloadMap.destroy();\r\n if (this.view) {\r\n this.view.container = null;\r\n this.view = null;\r\n }\r\n this.map = null;\r\n this.esri = null;\r\n }\r\n}\r\n\r\nexport default MapWrapper;\r\n","<template>\r\n <loading-box :loading=\"isLoading\">\r\n <div class=\"arcgisMap-box\">\r\n <div :id=\"mapId\" class=\"map-canvans\"></div>\r\n <searchMap\r\n ref=\"searchRef\"\r\n v-if=\"!isLoading && isSearch\"\r\n @select-point=\"refreshPoint\"\r\n @clearSearchMap=\"clearSearchMap\"\r\n />\r\n </div>\r\n </loading-box>\r\n</template>\r\n\r\n<script>\r\nimport { mapLocationMixin } from '../mixins/mapLocationMixin.js'\r\nimport MapWrapper from '../lib/MapWrapper.js'\r\nexport default {\r\n name: 'JKMapEdit',\r\n mixins: [mapLocationMixin],\r\n mounted() {\r\n this.isLoading = true\r\n this.map = new MapWrapper(this.mapId, this.mapParams)\r\n // 监听地图加载完成\r\n this.map.onloadMap.addListener((data) => {\r\n this.isLoading = false\r\n this.loadEdMap(data)\r\n if (this.isShowPoint || this.isSearch || this.isLocation)\r\n setTimeout(() => {\r\n this.$nextTick(() => {\r\n this.$refs.searchRef.initMap(data)\r\n })\r\n }, 200)\r\n })\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./locationMap.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./locationMap.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./locationMap.vue?vue&type=template&id=65ceeabc\"\nimport script from \"./locationMap.vue?vue&type=script&lang=js\"\nexport * from \"./locationMap.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('loading-box',{attrs:{\"loading\":_vm.isLoading}},[_c('div',{staticClass:\"arcgisMap-box\"},[_c('div',{staticClass:\"map-canvans\",attrs:{\"id\":_vm.mapId}}),(!_vm.isLoading && _vm.isSearch)?_c('searchMap',{ref:\"searchRef\",on:{\"select-point\":_vm.refreshPoint,\"clearSearchMap\":_vm.clearSearchMap}}):_vm._e(),(_vm.isShowBtnBox)?_c('div',{staticClass:\"edit-btn-box\"},[(_vm.drawIngArea)?_c('div',{staticClass:\"edit-area\"},[_vm._v(\" \"+_vm._s(_vm.drawIngArea)+\"(平方米) \")]):_vm._e(),(_vm.module.indexOf('screen') > -1)?_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"全屏\"},on:{\"click\":_vm.changeFull}},[_c('svgIcon',{attrs:{\"name\":\"full\",\"width\":\"24\",\"color\":\"#000\"}})],1):_vm._e(),(_vm.isUseSketch)?[(_vm.type && _vm.type.indexOf('point') > -1)?_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"点\"},on:{\"click\":function($event){return _vm.drawLayerType('point')}}},[_c('svgIcon')],1):_vm._e(),(_vm.type && _vm.type.indexOf('polyline') > -1)?_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"线\"},on:{\"click\":function($event){return _vm.drawLayerType('polyline')}}},[_c('svgIcon',{attrs:{\"name\":\"line\"}})],1):_vm._e(),(_vm.type && _vm.type.indexOf('polygon') > -1)?_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"面\"},on:{\"click\":function($event){return _vm.drawLayerType('polygon')}}},[_c('svgIcon',{attrs:{\"name\":\"polygon\"}})],1):_vm._e(),_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"关闭\"},on:{\"click\":_vm.closeLayer}},[_c('svgIcon',{attrs:{\"name\":\"close\",\"width\":\"22\",\"color\":\"#000\"}})],1),_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"删除\"},on:{\"click\":_vm.delDraw}},[_c('svgIcon',{attrs:{\"name\":\"del\"}})],1),_c('div',{staticClass:\"edit-btn\",class:{ 'btn-disable': !_vm.isPerv },attrs:{\"title\":\"上一步\"},on:{\"click\":_vm.undo}},[_c('svgIcon',{attrs:{\"name\":\"perv\",\"width\":\"22\",\"color\":_vm.isPerv ? '#6a6a6a' : '#dadada'}})],1),_c('div',{staticClass:\"edit-btn\",class:{ 'btn-disable': _vm.isNextList.length == 0 },attrs:{\"title\":\"下一步\"},on:{\"click\":_vm.redo}},[_c('svgIcon',{attrs:{\"name\":\"next\",\"width\":\"22\",\"color\":_vm.isNextList.length > 0 ? '#6a6a6a' : '#dadada'}})],1)]:_vm._e()],2):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import \"../css/styles.css\";\r\nimport searchMap from \"../vue2/search_map.vue\";\r\nimport loadingBox from \"../vue2/loading.vue\";\r\nimport localImg from \"../image/ico_location.png\";\r\nimport svgIcon from \"../svgIcon.vue\";\r\nimport {\r\n initMapPack,\r\n drawArcPoint,\r\n getPictureSymbol,\r\n getArea,\r\n goToMap,\r\n drawLayer,\r\n} from \"../utils/index.js\";\r\nimport { arcGISTranformGeoJson } from \"../config/wktMethods\";\r\n\r\nlet arcgisMap = null,\r\n arcgisView = null,\r\n currentAbortController = null,\r\n isClickLocked = false,\r\n pointLayer = null,\r\n sketchDemo = null,\r\n editGraphic = null,\r\n sketchLayer = null,\r\n sketchTextLayer = null,\r\n drawingText = null,\r\n layerDraw = null,\r\n layerDrawText = null,\r\n drawEnd = 0;\r\n\r\nconst markerData = {\r\n url: localImg,\r\n width: 20,\r\n height: 18,\r\n};\r\n\r\nexport const mapMixin = {\r\n components: { searchMap, svgIcon, loadingBox },\r\n props: {\r\n mapParams: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n module: {\r\n type: Array,\r\n default: () => {\r\n return [\"search\", \"edit\", \"screen\"]; //edit:编辑,screen:全屏,search:搜索-'search', 'edit', 'screen'\r\n },\r\n },\r\n isUseMore: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n center: {\r\n type: Array,\r\n default: () => [115.837683, 23.43353],\r\n },\r\n type: {\r\n type: Array,\r\n default: () => [\"point\", \"polyline\", \"polygon\"], //'point', 'polyline', 'polygon'\r\n },\r\n },\r\n computed: {\r\n isShowPoint() {\r\n return this.type && this.type.includes(\"point\");\r\n },\r\n isSearch() {\r\n return (\r\n this.module &&\r\n this.module.length > 0 &&\r\n this.module.indexOf(\"search\") > -1\r\n );\r\n },\r\n isUseSketch() {\r\n return (\r\n this.module &&\r\n this.module.length > 0 &&\r\n this.module.indexOf(\"edit\") > -1\r\n );\r\n },\r\n isShowBtnBox() {\r\n return (\r\n this.module &&\r\n this.module.length > 0 &&\r\n (this.module.indexOf(\"edit\") > -1 || this.module.indexOf(\"screen\") > -1)\r\n );\r\n },\r\n },\r\n data() {\r\n return {\r\n mapId: \"map\" + Math.round(Math.random() * 10000),\r\n isLoading: true,\r\n pointData: null,\r\n isPerv: false,\r\n isNextList: [],\r\n drawIngArea: 0,\r\n };\r\n },\r\n methods: {\r\n getMap() {\r\n return arcgisMap;\r\n },\r\n getView() {\r\n return arcgisView;\r\n },\r\n setupMapEvents(view) {\r\n this._clickHandler = view.on(\r\n \"click\",\r\n this.debounce(this.handleMapClick, 300)\r\n );\r\n this._hoverHandler = view.on(\r\n \"pointer-move\",\r\n this.debounce(this.handleMapHover, 80)\r\n );\r\n },\r\n async handleMapClick(e) {\r\n if (isClickLocked) return;\r\n if (currentAbortController) {\r\n currentAbortController.abort();\r\n }\r\n currentAbortController = new AbortController();\r\n isClickLocked = true;\r\n const eventData = {\r\n mapPoint: e.mapPoint,\r\n type: \"click\",\r\n };\r\n try {\r\n const hitResult = await arcgisView.hitTest(e);\r\n if (currentAbortController.signal.aborted) return;\r\n this.$emit(\"mapEventClick\", { ...eventData, ...hitResult });\r\n } catch (err) {\r\n if (err.name !== \"AbortError\") {\r\n console.warn(\"hitTest error\", err);\r\n }\r\n } finally {\r\n setTimeout(() => {\r\n isClickLocked = false;\r\n currentAbortController = null;\r\n }, 300);\r\n }\r\n },\r\n\r\n async handleMapHover(event) {\r\n const hitData = await arcgisView.hitTest(event);\r\n hitData.results = hitData.results.filter(\r\n (item) =>\r\n item.layer && item.layer.id && item.layer.id.indexOf(\"map-mask\") == -1\r\n );\r\n if (\r\n hitData &&\r\n hitData.results &&\r\n hitData.results.length > 0 &&\r\n hitData.screenPoint\r\n ) {\r\n // arcgisView.container.style.cursor = 'pointer'\r\n this.$emit(\"mapEventMouse\", hitData);\r\n } else {\r\n arcgisView.container.style.cursor = \"default\";\r\n }\r\n },\r\n\r\n debounce(fn, delay) {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => fn.apply(this, args), delay);\r\n };\r\n },\r\n\r\n cleanupMapEvents() {\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n\r\n loadEdMap(data) {\r\n arcgisMap = data.map;\r\n arcgisView = data.view;\r\n initMapPack(data);\r\n this.setupMapEvents(data.view);\r\n if (this.isSearch) {\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: \"pointLayer\" });\r\n arcgisMap.add(pointLayer, 10);\r\n }\r\n if (this.isUseSketch) {\r\n this.loadSketch();\r\n }\r\n if (this.center && this.center.length === 2) {\r\n goToMap({\r\n longitude: this.center[0],\r\n latitude: this.center[1],\r\n });\r\n }\r\n this.$emit(\"loadEdMap\", data);\r\n },\r\n\r\n clearSearchMap() {\r\n pointLayer.removeAll();\r\n },\r\n\r\n refreshPoint(data) {\r\n pointLayer.removeAll();\r\n this.pointData = {\r\n ...data,\r\n ...markerData,\r\n };\r\n pointLayer.add(drawArcPoint(this.pointData));\r\n goToMap(data);\r\n },\r\n uuidGenerator() {\r\n const originStr = \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\r\n const originChar = \"ABCDEFGHJKMNPQRSTWXYZ0123456789\";\r\n const len = originChar.length;\r\n return originStr.replace(/x/g, () =>\r\n originChar.charAt(Math.floor(Math.random() * len))\r\n );\r\n },\r\n\r\n drawLayerType(type) {\r\n editGraphic = null;\r\n sketchDemo.create(type);\r\n sketchDemo.on(\"create\", (event) => {\r\n this.isPerv = true;\r\n\r\n if (event.graphic) this.drawLayerNames(event.graphic);\r\n if (event.state === \"complete\") {\r\n if (!this.isUseMore) sketchDemo.cancel();\r\n this.isPerv = false;\r\n this.isNextList = [];\r\n this.drawIngArea = 0;\r\n editGraphic = null;\r\n drawEnd = 1;\r\n\r\n if (event.graphic && !event.graphic.attributes) {\r\n const baseAttr = {\r\n typeId: this.uuidGenerator(),\r\n name: \"\",\r\n describe: \"\",\r\n area: 0,\r\n };\r\n if (event.graphic.symbol.type === \"simple-fill\") {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"polygon\",\r\n };\r\n } else if (event.graphic.symbol.type === \"simple-line\") {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"polyline\",\r\n };\r\n } else {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"point\",\r\n };\r\n }\r\n } else if (event.graphics[0]) {\r\n const g = event.graphics[0];\r\n if ([\"simple-marker\", \"picture-marker\"].includes(g.symbol.type)) {\r\n g.symbol = getPictureSymbol({\r\n url: g.attributes.url || localImg,\r\n width: g.attributes.width || 20,\r\n height: g.attributes.height || 18,\r\n });\r\n }\r\n }\r\n this.drawcomplete(event);\r\n }\r\n });\r\n },\r\n undo() {\r\n if (!this.isPerv) return;\r\n sketchDemo.undo();\r\n this.isNextList.push(\"1\");\r\n if (editGraphic) this.drawLayerNames(editGraphic);\r\n },\r\n redo() {\r\n if (this.isNextList.length === 0) return;\r\n this.isPerv = true;\r\n sketchDemo.redo();\r\n if (editGraphic) this.drawLayerNames(editGraphic);\r\n this.isNextList.pop();\r\n },\r\n\r\n closeLayer() {\r\n if (sketchDemo.viewModel) sketchDemo.viewModel.cancel();\r\n this.isPerv = false;\r\n this.isNextList = [];\r\n },\r\n\r\n delDraw() {\r\n this.clearSketch();\r\n },\r\n\r\n changeFull() {\r\n this.$emit(\"changeFull\");\r\n },\r\n\r\n completeSketch() {\r\n editGraphic = null;\r\n sketchDemo.viewModel.complete();\r\n },\r\n\r\n clearSketch() {\r\n this.closeLayer();\r\n editGraphic = null;\r\n sketchLayer.removeAll();\r\n sketchTextLayer.removeAll();\r\n layerDraw.removeAll();\r\n layerDrawText.removeAll();\r\n drawingText.removeAll();\r\n pointLayer.removeAll();\r\n\r\n if (\r\n (this.isShowPoint || this.isSearch) &&\r\n this.$refs.searchRef &&\r\n this.$refs.searchRef.clearSearch\r\n ) {\r\n this.$nextTick(() => {\r\n this.$refs.searchRef.clearSearch();\r\n });\r\n }\r\n },\r\n\r\n addGeometryLayer(graphic) {\r\n sketchLayer.add(graphic);\r\n },\r\n\r\n loadSketch() {\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: \"pointLayer\" });\r\n layerDraw = new window.jkEsri.GraphicsLayer({ id: \"layerDraw\" });\r\n layerDrawText = new window.jkEsri.GraphicsLayer({ id: \"layerDrawText\" });\r\n sketchLayer = new window.jkEsri.GraphicsLayer({ id: \"sketchLayer\" });\r\n sketchTextLayer = new window.jkEsri.GraphicsLayer({\r\n id: \"sketchTextLayer\",\r\n });\r\n drawingText = new window.jkEsri.GraphicsLayer({ id: \"drawingText\" });\r\n arcgisMap.add(pointLayer, 10);\r\n arcgisMap.add(layerDraw, 1);\r\n arcgisMap.add(layerDrawText, 2);\r\n arcgisMap.add(sketchLayer, 4);\r\n arcgisMap.add(sketchTextLayer, 5);\r\n arcgisMap.add(drawingText, 5);\r\n sketchDemo = new window.jkEsri.SketchViewModel({\r\n layer: sketchLayer,\r\n view: arcgisView,\r\n polylineSymbol: {\r\n type: \"simple-line\",\r\n color: \"#fff\",\r\n width: \"4\",\r\n style: \"dash\",\r\n },\r\n polygonSymbol: {\r\n type: \"simple-fill\",\r\n color: \"rgba(0, 45, 99,0.01)\",\r\n style: \"solid\",\r\n outline: {\r\n color: \"white\",\r\n width: 2,\r\n },\r\n },\r\n });\r\n sketchDemo.on(\"delete\", (event) => {\r\n if (event.graphics.length > 0) event.graphic = event.graphics[0];\r\n this.drawIngArea = 0;\r\n editGraphic = null;\r\n this.drawcomplete(event);\r\n });\r\n sketchDemo.on(\"update\", (event) => {\r\n if (event.graphics[0]) {\r\n this.drawLayerNames(event.graphics[0]);\r\n }\r\n if (event.state === \"start\") {\r\n drawEnd = 0;\r\n event.graphic = event.graphics[0];\r\n if (event.graphic && !event.graphic.attributes) {\r\n const baseAttr = {\r\n typeId: this.uuidGenerator(),\r\n name: \"\",\r\n describe: \"\",\r\n area: 0,\r\n rings: [],\r\n };\r\n if (event.graphic.symbol.type === \"simple-fill\") {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"polygon\",\r\n color: \"#cef5ff\",\r\n opacity: 20,\r\n outline: {\r\n opacity: 100,\r\n color: \"#0ccfff\",\r\n width: 2,\r\n style: \"solid\",\r\n },\r\n };\r\n } else if (event.graphic.symbol.type === \"simple-line\") {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"polyline\",\r\n outline: {\r\n opacity: 100,\r\n color: \"#0ccfff\",\r\n width: 2,\r\n style: \"solid\",\r\n },\r\n };\r\n } else {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"point\",\r\n };\r\n }\r\n }\r\n } else if (event.state === \"active\") {\r\n this.isPerv = true;\r\n } else if (event.state === \"complete\") {\r\n this.isPerv = false;\r\n this.isNextList = [];\r\n drawEnd = 1;\r\n this.drawIngArea = 0;\r\n editGraphic = null;\r\n event.graphic = event.graphics[0];\r\n this.drawcomplete(event);\r\n }\r\n });\r\n },\r\n\r\n drawLayerNames(event) {\r\n if (\r\n event.geometry.type === \"polygon\" &&\r\n event.geometry.rings.length > 0\r\n ) {\r\n this.drawIngArea = 0;\r\n editGraphic = event;\r\n const lastRing = event.geometry.rings[event.geometry.rings.length - 1];\r\n const isDraw = lastRing.length > 2;\r\n const draw_Area = getArea(event.geometry);\r\n if (isDraw && draw_Area && Number(draw_Area) > 0) {\r\n this.drawIngArea = Number(draw_Area).toFixed(2);\r\n }\r\n if (event.attributes.uuid && sketchTextLayer.graphics.items) {\r\n const textItem = sketchTextLayer.graphics.items.find(\r\n (item) => item.attributes.uuid === event.attributes.uuid\r\n );\r\n if (textItem) {\r\n textItem.geometry = event.geometry.centroid;\r\n }\r\n }\r\n }\r\n },\r\n\r\n async retuanGraphics() {\r\n let area = 0;\r\n let form = {\r\n drawEnd,\r\n area: \"\",\r\n mArea: \"\",\r\n hectareArea: \"\",\r\n latitude: \"\",\r\n longitude: \"\",\r\n ringsList: [],\r\n };\r\n\r\n if (sketchLayer.graphics.items.length > 0) {\r\n for (const item of sketchLayer.graphics.items) {\r\n const geomType = this.judgeLayerType(item.geometry.type);\r\n let geometry = arcGISTranformGeoJson(item);\r\n if (geomType === \"point\") {\r\n form.longitude = item.geometry.longitude;\r\n form.latitude = item.geometry.latitude;\r\n form.ringsList.push({\r\n type: \"Point\",\r\n geometry,\r\n });\r\n } else if (geomType === \"polyline\") {\r\n form.ringsList.push({\r\n type: \"Polyline\",\r\n geometry,\r\n latitude: \"\",\r\n longitude: \"\",\r\n area: 0,\r\n });\r\n } else if (geomType === \"polygon\") {\r\n const itemArea = getArea(item.geometry);\r\n\r\n let polygonArea = 0;\r\n if (itemArea && Number(itemArea))\r\n polygonArea = Math.abs(Number(itemArea).toFixed(2));\r\n area += polygonArea;\r\n form.longitude = item.geometry.centroid.longitude;\r\n form.latitude = item.geometry.centroid.latitude;\r\n form.ringsList.push({\r\n type: \"polygon\",\r\n geometry,\r\n longitude: item.geometry.centroid.longitude,\r\n latitude: item.geometry.centroid.latitude,\r\n area: polygonArea,\r\n });\r\n }\r\n }\r\n }\r\n if (area > 0) {\r\n form.area = area;\r\n form.mArea = Number(area) * 0.0015; // 亩\r\n form.hectareArea = Number(area) * 0.0001; // 公顷\r\n }\r\n console.log(\"formatMapData00\", form, sketchLayer.graphics.items);\r\n return form;\r\n },\r\n async drawcomplete(event) {\r\n if (event.type == \"delete\") {\r\n if (event.graphic.attributes.uuid && sketchTextLayer.graphics.items) {\r\n const idx = sketchTextLayer.graphics.items.findIndex(\r\n (item) => item.attributes.uuid === event.graphic.attributes.uuid\r\n );\r\n if (idx >= 0) {\r\n sketchTextLayer.remove(sketchTextLayer.graphics.items[idx]);\r\n }\r\n }\r\n }\r\n const form = await this.retuanGraphics();\r\n this.$emit(\"drawcomplete\", form);\r\n },\r\n\r\n judgeLayerType(type) {\r\n if (!type) return;\r\n if (type.includes(\"oint\")) return \"point\";\r\n if (type.includes(\"olygon\")) return \"polygon\";\r\n if (type.includes(\"ine\")) return \"polyline\";\r\n },\r\n batchDraw(layers, type = \"edit\") {\r\n let layer = type == \"edit\" ? sketchLayer : layerDraw;\r\n let graphics = [];\r\n if (layers.length > 0) {\r\n for (const item of layers) {\r\n let graphic = drawLayer(item, item.drawType);\r\n if (graphics) graphics.push(graphic);\r\n }\r\n if (graphics.length > 0) {\r\n layer.addMany(graphics);\r\n }\r\n goToMap(layer);\r\n }\r\n },\r\n },\r\n beforeUnmount() {\r\n this.clearSketch();\r\n this.cleanupMapEvents();\r\n },\r\n};\r\n","<template>\r\n <loading-box :loading=\"isLoading\">\r\n <div class=\"arcgisMap-box\">\r\n <div :id=\"mapId\" class=\"map-canvans\"></div>\r\n <searchMap\r\n ref=\"searchRef\"\r\n v-if=\"!isLoading && isSearch\"\r\n @select-point=\"refreshPoint\"\r\n @clearSearchMap=\"clearSearchMap\"\r\n />\r\n <div class=\"edit-btn-box\" v-if=\"isShowBtnBox\">\r\n <div class=\"edit-area\" v-if=\"drawIngArea\"> {{ drawIngArea }}(平方米) </div>\r\n <div class=\"edit-btn\" v-if=\"module.indexOf('screen') > -1\" @click=\"changeFull\" title=\"全屏\">\r\n <svgIcon name=\"full\" width=\"24\" color=\"#000\" />\r\n </div>\r\n <template v-if=\"isUseSketch\">\r\n <div\r\n class=\"edit-btn\"\r\n @click=\"drawLayerType('point')\"\r\n v-if=\"type && type.indexOf('point') > -1\"\r\n title=\"点\"\r\n >\r\n <svgIcon />\r\n </div>\r\n <div\r\n class=\"edit-btn\"\r\n @click=\"drawLayerType('polyline')\"\r\n v-if=\"type && type.indexOf('polyline') > -1\"\r\n title=\"线\"\r\n >\r\n <svgIcon name=\"line\" />\r\n </div>\r\n <div\r\n class=\"edit-btn\"\r\n @click=\"drawLayerType('polygon')\"\r\n v-if=\"type && type.indexOf('polygon') > -1\"\r\n title=\"面\"\r\n >\r\n <svgIcon name=\"polygon\" />\r\n </div>\r\n <div class=\"edit-btn\" @click=\"closeLayer\" title=\"关闭\">\r\n <svgIcon name=\"close\" width=\"22\" color=\"#000\" />\r\n </div>\r\n <div class=\"edit-btn\" @click=\"delDraw\" title=\"删除\">\r\n <svgIcon name=\"del\" />\r\n </div>\r\n <div class=\"edit-btn\" @click=\"undo\" :class=\"{ 'btn-disable': !isPerv }\" title=\"上一步\">\r\n <svgIcon name=\"perv\" width=\"22\" :color=\"isPerv ? '#6a6a6a' : '#dadada'\" />\r\n </div>\r\n <div\r\n class=\"edit-btn\"\r\n @click=\"redo\"\r\n :class=\"{ 'btn-disable': isNextList.length == 0 }\"\r\n title=\"下一步\"\r\n >\r\n <svgIcon\r\n name=\"next\"\r\n width=\"22\"\r\n :color=\"isNextList.length > 0 ? '#6a6a6a' : '#dadada'\"\r\n />\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </loading-box>\r\n</template>\r\n\r\n<script>\r\nimport MapWrapper from '../lib/MapWrapper.js'\r\nimport { mapMixin } from '../mixins/mapMixin.js'\r\nexport default {\r\n name: 'JKMapEdit',\r\n mixins: [mapMixin],\r\n mounted() {\r\n this.isLoading = true\r\n this.map = new MapWrapper(this.mapId, this.mapParams)\r\n // 监听地图加载完成\r\n this.map.onloadMap.addListener((data) => {\r\n this.isLoading = false\r\n this.loadEdMap(data)\r\n if (this.isShowPoint || this.isSearch || this.isLocation)\r\n setTimeout(() => {\r\n this.$nextTick(() => {\r\n this.$refs.searchRef.initMap(data)\r\n })\r\n }, 200)\r\n })\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineMap.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineMap.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./augustineMap.vue?vue&type=template&id=786fd786\"\nimport script from \"./augustineMap.vue?vue&type=script&lang=js\"\nexport * from \"./augustineMap.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('loading-box',{attrs:{\"loading\":_vm.isLoading}},[_c('div',{staticClass:\"arcgisMap-box\"},[_c('div',{staticClass:\"map-canvans\",attrs:{\"id\":_vm.mapId}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import \"../css/styles.css\";\r\nimport mapConfig from \"../config/map.config.js\";\r\nimport loadingBox from \"../vue2/loading.vue\";\r\nimport { createArcPoint, getPictureSymbol, goToMap } from \"../utils/index.js\";\r\n\r\nvar arcgisMap = null,\r\n arcgisView = null,\r\n currentAbortController,\r\n isClickLocked = false,\r\n pointLayer = null;\r\nexport const mapListMixin = {\r\n components: { loadingBox },\r\n props: {\r\n mapParams: {\r\n type: Object,\r\n default: mapConfig,\r\n },\r\n\r\n load: {\r\n type: Function,\r\n default: null,\r\n },\r\n defaultCenter: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n computed: {\r\n mapCenter() {},\r\n },\r\n data() {\r\n return {\r\n mapId: \"map\" + Math.round(Math.random() * 10000),\r\n isLoading: true, //地图加载loading\r\n center: [],\r\n address: \"\",\r\n pointCenter: [113.536308532987, 23.3450945634734],\r\n pointsList: [],\r\n };\r\n },\r\n methods: {\r\n /**\r\n * 返回地图容器\r\n */\r\n getMap() {\r\n return arcgisMap;\r\n },\r\n /**\r\n * 返回地图容器\r\n */\r\n getView() {\r\n return arcgisView;\r\n },\r\n setupMapEvents(view) {\r\n // 点击\r\n this._clickHandler = view.on(\r\n \"click\",\r\n this.debounce(this.handleMapClick, 300)\r\n );\r\n // 悬浮\r\n this._hoverHandler = view.on(\r\n \"pointer-move\",\r\n this.debounce(this.handleMapHover, 80)\r\n );\r\n },\r\n changeGraphic(data) {\r\n if (pointLayer && pointLayer.graphics && pointLayer.graphics._items) {\r\n pointLayer.graphics._items.map((item) => {\r\n let url = item.attributes.url,\r\n width = item.attributes.width,\r\n height = item.attributes.height;\r\n if (\r\n data &&\r\n item &&\r\n item.attributes &&\r\n item.attributes.name == data.name\r\n ) {\r\n url = data.activeUrl ? data.activeUrl : data.url;\r\n width = data.width + 5;\r\n height = (data.height * width) / data.width;\r\n }\r\n item.symbol = getPictureSymbol({\r\n url: url,\r\n width: width,\r\n height: height,\r\n });\r\n return item;\r\n });\r\n }\r\n },\r\n handleMapClick(e) {\r\n // 处理点击逻辑\r\n if (isClickLocked) return;\r\n // 取消上一次未完成的 hitTest\r\n if (currentAbortController) {\r\n currentAbortController.abort();\r\n }\r\n currentAbortController = new AbortController();\r\n isClickLocked = true;\r\n const eventData = {\r\n mapPoint: e.mapPoint,\r\n type: \"click\",\r\n };\r\n const hitTestPromise = arcgisView.hitTest(e); // 注意:ArcGIS hitTest 不支持 signal,此为未来兼容\r\n hitTestPromise\r\n .then((hitResult) => {\r\n if (currentAbortController.signal.aborted) return; // 已取消\r\n eventData.event = hitResult;\r\n if (hitResult && hitResult.results && hitResult.results.length > 0) {\r\n const graphics = hitResult.results.filter(\r\n (item) =>\r\n item.layer &&\r\n item.layer.id &&\r\n item.layer.id.indexOf(\"pointLayer\") > -1\r\n );\r\n if (graphics && graphics.length > 0) {\r\n const graphic = graphics[0].graphic,\r\n attributes = graphic.attributes;\r\n this.changeGraphic(attributes);\r\n }\r\n console.log(\"eventData\", hitResult.results, graphics);\r\n } else {\r\n this.changeGraphic(null);\r\n }\r\n this.$emit(\"mapEventClick\", eventData);\r\n })\r\n .catch((err) => {\r\n if (err.name === \"AbortError\") return;\r\n console.warn(\"hitTest error\", err);\r\n })\r\n .finally(() => {\r\n setTimeout(() => {\r\n isClickLocked = false;\r\n currentAbortController = null;\r\n }, 300);\r\n });\r\n },\r\n\r\n async handleMapHover(event) {\r\n // 处理 hover 逻辑\r\n const hitData = await arcgisView.hitTest(event);\r\n if (hitData && hitData.results && hitData.screenPoint) {\r\n arcgisView.container.style.cursor = \"pointer\";\r\n this.$emit(\"mapEventMouse\", hitData);\r\n } else arcgisView.container.style.cursor = \"default\";\r\n },\r\n\r\n debounce(fn, delay) {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => fn.apply(this, args), delay);\r\n };\r\n },\r\n\r\n cleanupMapEvents() {\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n /**\r\n * 地图加载完成\r\n */\r\n loadEdMap(data) {\r\n arcgisMap = data.map;\r\n arcgisView = data.view;\r\n setTimeout(() => {\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: \"pointLayer\" });\r\n arcgisMap.add(pointLayer, 10);\r\n this.drawPoints();\r\n this.setupMapEvents(data.view);\r\n this.$emit(\"loadEdMap\", data);\r\n }, 500);\r\n },\r\n moveCenterPoint() {\r\n if (\r\n this.defaultCenter &&\r\n this.defaultCenter.length == 2 &&\r\n this.defaultCenter[0] &&\r\n this.defaultCenter[1]\r\n ) {\r\n goToMap(this.defaultCenter);\r\n } else goToMap(this.pointCenter);\r\n },\r\n drawPoints() {\r\n if (this.pointsList && this.pointsList.length > 0) {\r\n const validGraphics = this.pointsList\r\n .map((item) => createArcPoint(item))\r\n .filter((g) => g !== null); // 过滤掉失败项\r\n pointLayer.addMany(validGraphics);\r\n goToMap(pointLayer.graphics.items);\r\n }\r\n },\r\n /**\r\n * 初始化点\r\n * @param {*} data\r\n */\r\n initPoint(data = []) {\r\n this.pointsList = data || [];\r\n if (arcgisMap && arcgisView) {\r\n if (pointLayer) pointLayer.removeAll();\r\n this.drawPoints();\r\n }\r\n },\r\n },\r\n beforeUnmount() {\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n};\r\n","<template>\r\n <loading-box :loading=\"isLoading\">\r\n <div class=\"arcgisMap-box\">\r\n <div :id=\"mapId\" class=\"map-canvans\"></div>\r\n </div>\r\n </loading-box>\r\n</template>\r\n\r\n<script>\r\nimport { mapListMixin } from '../mixins/mapListMixin.js'\r\nimport MapWrapper from '../lib/MapWrapper.js'\r\nexport default {\r\n name: 'JKMapList',\r\n mixins: [mapListMixin],\r\n mounted() {\r\n this.isLoading = true\r\n this.map = new MapWrapper(this.mapId, this.mapParams)\r\n // 监听地图加载完成\r\n this.map.onloadMap.addListener((data) => {\r\n this.isLoading = false\r\n this.loadEdMap(data)\r\n })\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./mapList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./mapList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./mapList.vue?vue&type=template&id=a8621cc6\"\nimport script from \"./mapList.vue?vue&type=script&lang=js\"\nexport * from \"./mapList.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import augustineGjMap from \"./vue2/augustineGjMap.vue\";\r\nimport locationMap from \"./vue2/locationMap.vue\";\r\nimport augustineMap from \"./vue2/augustineMap.vue\";\r\nimport mapList from \"./vue2/mapList.vue\";\r\nexport { augustineGjMap, augustineMap, locationMap, mapList };\r\n// 所有组件列表\r\nconst components = [augustineGjMap, augustineMap, locationMap, mapList];\r\n// install 方法\r\nconst install = (Vue) => {\r\n if (install.installed) return;\r\n install.installed = true;\r\n components.forEach((comp) => {\r\n Vue.component(comp.name, comp);\r\n });\r\n};\r\n\r\n// 支持 Vue.use(MyLib)\r\nexport default {\r\n install,\r\n ...components,\r\n};\r\nimport {\r\n getArea,\r\n goToMap,\r\n drawBuffer,\r\n getTextSymbol,\r\n getSimpleMarkerSymbol,\r\n getPictureSymbol,\r\n getLineSymbol,\r\n getFillSymbol,\r\n toArcGISPoint,\r\n drawArcPoint,\r\n createArcPoint,\r\n createLineGraphicsLayer,\r\n createMaskLayer,\r\n createPolygonGraphicsLayer,\r\n drawLayer,\r\n arcGISTranformGeoJson,\r\n} from \"./utils/index.js\";\r\nexport {\r\n getArea,\r\n goToMap,\r\n drawBuffer,\r\n getTextSymbol,\r\n getSimpleMarkerSymbol,\r\n getPictureSymbol,\r\n getLineSymbol,\r\n getFillSymbol,\r\n toArcGISPoint,\r\n drawArcPoint,\r\n createArcPoint,\r\n createLineGraphicsLayer,\r\n createMaskLayer,\r\n createPolygonGraphicsLayer,\r\n drawLayer,\r\n arcGISTranformGeoJson,\r\n};\r\n// 浏览器环境自动安装\r\nif (typeof window !== \"undefined\" && window.Vue) {\r\n install(window.Vue);\r\n}\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"names":[],"ignoreList":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"augustine-jkmap.umd.js","mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;;;;;;ACVA;AACA,CAAC,KAA4D;AAC7D,CAAC,CACwD;AACzD,CAAC,6BAA6B;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,gDAAgD;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,uBAAuB;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,iCAAiC;AACjG;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,+CAA+C,aAAa;;AAE5D,CAAC;AACD;;;;;;;;ACpSA;;AAEA;AACA,KAAK,KAA0B;AAC/B,uCAAuC,mBAAO,CAAC,GAAa;AAC5D,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA,cAAc,4BAA4B;AAC1C,MAAM;AACN,WAAW,4bAA4b;AACvc,aAAa,2LAA2L;AACxM;AACA;AACA;;AAEA;AACA;AACA;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB,iEAAiE;AACrF;AACA,oBAAoB,iEAAiE;AACrF;AACA,oBAAoB,iEAAiE;AACrF;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA,oBAAoB,oEAAoE;AACxF;AACA,oBAAoB,oEAAoE;AACxF;AACA,oBAAoB,oEAAoE;AACxF;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB,mEAAmE;AACvF;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA,oBAAoB,4EAA4E;AAChG;AACA,oBAAoB,4EAA4E;AAChG;AACA,oBAAoB,4EAA4E;AAChG;AACA,oBAAoB;AACpB;AACA,oBAAoB;AACpB;AACA,oBAAoB,yEAAyE;AAC7F;AACA,oBAAoB,yEAAyE;AAC7F;AACA,oBAAoB,yEAAyE;AAC7F;AACA,oBAAoB;AACpB;AACA;AACA,CAAC;AACD,SAAS,uFAAuF,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,kDAAkD,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sCAAsC,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sCAAsC,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,sBAAsB,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,UAAU,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,sCAAsC,EAAE,sCAAsC,EAAE,sCAAsC,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,uCAAuC,EAAE,uCAAuC,EAAE,uCAAuC,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,SAAS,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,iCAAiC,EAAE,WAAW,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB;AACn3F,iBAAiB,uXAAuX;AACxY;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;AAC/D;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,yCAAyC,4HAA4H;AACrK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,qBAAqB,2CAA2C;AAChE;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AAAM;AACN;AACA;AACA;AACA,oBAAoB,WAAW;AAC/B,cAAc;AACd;AACA,qBAAqB,eAAe,0BAA0B;AAC9D;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,2BAA2B;AAC/C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,sBAAsB;AAC1C;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,sBAAsB;AAC1C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,gBAAgB;AACpC;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;AACA,sBAAsB,qCAAqC;AAC3D;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iCAAiC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;AC7vBD;;AAEA;AACA,KAAK,KAA0B;AAC/B;AACA;;AAEA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,kBAAkB;AACtC;;AAEA,sBAAsB,kBAAkB;AACxC;;AAEA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,kBAAkB;AACtC;;AAEA,sBAAsB,kBAAkB;AACxC;AACA,wBAAwB,uBAAuB;AAC/C;;AAEA;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,kBAAkB;AACtC;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wDAAwD,QAAQ;AAChE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,2DAA2D,QAAQ;AACnE;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN,sBAAsB,6BAA6B;AACnD;AACA;AACA,MAAM;AACN,sBAAsB,+BAA+B;AACrD;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,uBAAuB;AAC3C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uDAAuD,SAAS;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAkC;AAClC;AACA,QAAQ,OAAO;AACf;AACA,0BAA0B,oBAAoB;AAC9C;AACA,4BAA4B;AAC5B;AACA;;AAEA;AACA,UAAU;AACV;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C,0BAA0B,kBAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,wBAAwB,cAAc;AACtC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,sBAAsB,cAAc;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,oBAAoB,wBAAwB;AAC5C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,cAAc;;AAElC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA,oBAAoB,6BAA6B;AACjD,sBAAsB,gCAAgC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,kCAAkC;AACtD,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,kCAAkC;AACtD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;AAEA;AACA,QAAQ;AACR;;AAEA;AACA,QAAQ;AACR;AACA;AACA;;AAEA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;;AAEA;;AAEA;AACA,QAAQ;AACR,oBAAoB,6BAA6B;AACjD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,QAAQ;AACR,oBAAoB,6BAA6B;AACjD,mCAAmC,mDAAmD;;AAEtF;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,sBAAsB,kCAAkC;AACxD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ;AACR,oBAAoB,6BAA6B;AACjD;AACA,wBAAwB,6BAA6B;AACrD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAwB,kCAAkC;AAC1D;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,QAAQ;AACR,oBAAoB,kCAAkC;AACtD,oBAAoB;;AAEpB;AACA;AACA;;AAEA;AACA;;AAEA;AACA,QAAQ;AACR,oBAAoB,6BAA6B;AACjD;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,QAAQ;AACR,oBAAoB,kCAAkC;AACtD,wBAAwB;;AAExB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,6BAA6B;AACnD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,6BAA6B;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,0BAA0B;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,UAAU;AAC3B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,CAAC;;;;;;;;AC34CD;AACA;;AAEA;AACA,KAAK,KAA0B;AAC/B,uCAAuC,mBAAO,CAAC,GAAa;AAC5D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB,cAAc;AAClC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,iBAAiB;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,sBAAsB,oBAAoB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kBAAkB;AACtC;AACA,uCAAuC,QAAQ;AAC/C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,mBAAmB;AACnB,cAAc;;AAEd;AACA,oBAAoB,kBAAkB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD,kCAAkC;AAClC,QAAQ;AACR,4CAA4C;AAC5C;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC,QAAQ;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAA2B;AAC3B,MAAM;AACN;AACA,MAAM;AACN,2BAA2B;AAC3B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,6BAA6B;AAC/C;AACA;AACA;AACA;AACA;AACA,kBAAkB,+BAA+B;AACjD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;UCnaD;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA,E;;;;;WCPA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC,I;;;;;WCPD,wF;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D,E;;;;;WCNA,2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;AACA;;AAEA;AACA;AACA,MAAM,KAAuC,EAAE;AAAA,yBAQ5C;;AAEH;AACA;AACA,IAAI,qBAAuB;AAC3B;AACA;;AAEA;AACA,oDAAe,IAAI;;;ACtBnB,+BAA+B,6BAA6B,yBAAyB,OAAO,yBAAyB,YAAY,4BAA4B,YAAY,kCAAkC,gBAAgB,iEAAiE,uBAAuB,YAAY,oCAAoC,6CAA6C,KAAK,wBAAwB,oGAAoG,gCAAgC,yBAAyB,yDAAyD,OAAO,4CAA4C,yCAAyC,gCAAgC,2BAA2B,2BAA2B,gCAAgC,yBAAyB,yCAAyC,6BAA6B,gCAAgC,yBAAyB,qCAAqC,4BAA4B,gCAAgC,8BAA8B,gDAAgD,mCAAmC,4BAA4B,MAAM,EAAE,0KAA0K,GAAG;AACh5C;AACA;;;;;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAe,SAAS;;;ACvDxB;AACA;AACA,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,wBAAwB,mBAAmB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,EAAE;AAAY;AACd;AACA;AACA;AACA,+BAA+B,cAAc;AAC7C;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA,GAAG;AACH,iBAAiB,YAAY,gFAAgF,WAAW,8BAA8B,EAAE,qDAAqD,EAAE,UAAU,EAAE;AAC3N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;ACxJA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,SAAS;AACpB;AACA;AACA,aAAa,SAAS;AACtB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,eAAe;AACf;AACO;AACP;AACA;AACA,oCAAoC,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,gCAAgC,KAAK,GAAG,KAAK;AAC7C;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,8BAA8B,KAAK,GAAG,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,KAAK,GAAG,KAAK;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,4BAA4B,KAAK,GAAG,KAAK;AACzC,IAAI;AACJ,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACO;AACP;AACA,kEAAkE,KAAK;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4D,KAAK;AACjE;AACA,IAAI;AACJ,2CAA2C,MAAM;AACjD;AACA;;;ACzJuC;AACvC;AACA;AACA,aAAa;AACb,WAAW,KAAK;AAChB,cAAc,8CAA8C;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA,SAAS,MAAM,GAAG;AAClB;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,MAAM;AACN,+CAA+C,MAAM;AACrD;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,eAAe,uBAAuB;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA,MAAM;AACN;AACA;AACA;AACA,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA,4BAA4B,MAAM;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,mCAAmC;AAC9C,WAAW,KAAK;AAChB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,aAAa;AACb;AACA,2CAA2C,UAAU;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,mBAAmB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,iBAAiB;AAC9B,eAAe,iBAAiB;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,MAAM;AACN,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,IAAI,EAAE,IAAI;AAC5B,aAAa,GAAG;AAChB,eAAe;AACf;AACA;AACA;AACA;AACA,QAAQ,IAAI;AACZ;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,iCAAiC;AAC9C,aAAa,SAAS;AACtB,aAAa,QAAQ;AACrB,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,sCAAsC,UAAU;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,aAAa,oCAAoC;AACjD,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,oBAAoB;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,KAAK;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,0CAA0C,UAAU;AACpD;AACA,GAAG;AACH;AACA;AACkC;;;AClwBK;AACY;AACnD;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,0BAA0B;AACxC;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA;AACO;AACP,MAAM,OAAO,aAAa,OAAO;AACjC;AACA;AACA;AACA,QAAQ,OAAO,aAAa,OAAO;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,iBAAiB;AAC5B,WAAW,iBAAiB;AAC5B,WAAW,SAAS;AACpB;AACA;AACO;AACP,UAAU,2CAA2C;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,QAAQ;AACpB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB;AACA;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,+BAA+B;AAC9C;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,cAAc,eAAe;AAC7B;AACO,SAAS,mBAAS;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf,yDAAyD,QAAQ;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ;AACpB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,OAAO;AAClB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mBAAmB;AAC1E,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,WAAW;AACX;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,yEAAyE;AACzE,QAAQ;AACR;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,WAAW;AACX;AACA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD,SAAS;AACT;AACA,qBAAqB;AACrB;AACA;AACA;AACA,kDAAkD,MAAM;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ,wDAAwD,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa,uBAAuB;AACpC;AACO,qEAAqE;AAC5E;AACA;AACA;AACA;AACA;AACA,UAAU,gDAAgD;AAC1D;AACA;AACA,yBAAyB;AACzB;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,QAAQ;AACR;AACA,2BAA2B,OAAO;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,mBAAmB;AAC1E,SAAS;AACT;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,mBAAmB;AAC5E,WAAW;AACX;AACA,uBAAuB;AACvB,QAAQ;AACR;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,WAAW;AACX;AACA,uBAAuB;AACvB,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAmB;AACnD,WAAW;AACX;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,mBAAmB;AACjD,SAAS;AACT;AACA,qBAAqB;AACrB;AACA;AACA;AACA,kDAAkD,MAAM;AACxD;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,mCAAmC;AACvD,KAAK;AACL,IAAI;AACJ,wDAAwD,MAAM;AAC9D;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,wBAAwB;AACnC,aAAa,wBAAwB;AACrC;AACO;AACP;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,IAAI;AACJ;AACA;AACA;AACA,oBAAoB,yBAAyB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO,yCAAyC,OAAO,GAAG,WAAW,OAAO;AACvF,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,0DAA0D;AACrE;AACA,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oEAAoE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,gDAAgD,YAAY;AAC5D,MAAM;AACN;AACA,gDAAgD,YAAY;AAC5D;AACA,IAAI;AACJ,8CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,aAAa,GAAG;AAChB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,QAAQ;AACR;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,kCAAkC,aAAa;AAC/C;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO,yCAAyC,OAAO,GAAG,WAAW,OAAO;AACvF,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,0DAA0D;AACrE;AACA,WAAW,KAAK;AAChB,aAAa,MAAM;AACnB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,4BAA4B;AAC7C,KAAK;AACL;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,oDAAoD;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,gDAAgD,YAAY;AAC5D,MAAM;AACN;AACA,gDAAgD,YAAY;AAC5D;AACA,IAAI;AACJ,8CAA8C,YAAY;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,OAAO;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,cAAc;AACzC;AACA;AACA;AACA;AACA,SAAS;AACT,oCAAoC,oCAAoC;AACxE,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,sCAAsC,oCAAoC;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,qCAAqC;AACvE;AACA,MAAM;AACN;AACA;AACA;AACA,aAAa;AACb,IAAI;AACJ;AACA;AACA;AACA;;;;;;;;AC1sCA,YAAY,0CAA0C;AACtD;AACA;AACA,2DAA2D,cAAc,IAAI;AAC7E,mBAAmB,gBAAgB,4BAA4B,oCAAoC,KAAK;AACxG,eAAe;AACf,uBAAuB,aAAa;AACpC,KAAK,KAAK,gCAAgC;AAC1C;AAC8C;AAC9C;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ,kBAAkB,IAAI,IAAI,SAAS,IAAI;AAC1D,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,UAAU,oCAAoC,GAAG,IAAI,IAAI,SAAS,IAAI,UAAU;AAChF;AACA;AACA,WAAW,yCAAY;AACvB,IAAI;AACJ,8CAA8C,MAAM;AACpD;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS,eAAe;AACnC,aAAa,QAAQ;AACrB;AACA;AACA,iDAAiD,UAAU,sEAAsE,SAAS;AAC1I;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD;AACvD;AACA,MAAM;AACN,IAAI;AACJ;AACA;AACA;AAC6C;AAC7C;AACA;AACA;AACA;AACA,mEAAmE;AACnE,oDAAoD,oCAAoC;AACxF;AACwC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,aAAa;AACb;AACA,kBAAkB;AAClB;AACA;AACA,gBAAgB;AAChB;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA,yDAAyD,QAAQ;AACjE;AACA;AACA,IAAI;AACJ,oCAAoC,cAAc;AAClD;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ,iCAAiC,cAAc;AAC/C;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA,wDAAwD,WAAW;AACnE;AACA;AACA;AACA;AACA,IAAI;AACJ,uDAAuD,cAAc,KAAK,WAAW;AACrF;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AAQC;;;AChND;AACuD;AACa;AAapC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA,4CAA4C,iBAAiB,GAAG;AAChE,YAAY,4BAA4B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0CAA0C;AAC1D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA;AACA,0BAA0B,YAAY;AACtC;AACA;AACA,sBAAsB,UAAU,wIAAwI,MAAM,UAAU,IAAI,UAAU,IAAI;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,OAAO;AACP,qBAAqB,YAAY;AACjC;AACA;AACA,sBAAsB,UAAU,wIAAwI,MAAM,UAAU,IAAI,UAAU,IAAI;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,wBAAwB,YAAY;AACpC;AACA;AACA,sBAAsB,UAAU,wIAAwI,MAAM,UAAU,IAAI,UAAU,IAAI;AAC1M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,OAAO;AACP,MAAM;AACN,wBAAwB,YAAY;AACpC;AACA;AACA,uBAAuB,UAAU,wIAAwI,MAAM,UAAU,IAAI,UAAU,IAAI;AAC3M;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,YAAY,4BAA4B;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qDAAqD;AACtE,iBAAiB,iBAAiB;AAClC;AACA;AACA,UAAU;AACV,MAAM;AACN,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,0CAA0C;AAC1D,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,aAAa;AAC3B;AACA;AACA;AACA,KAAK;AACL,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACA,qCAAqC,UAAU;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,WAAW,GAAG;AACd,WAAW,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AAC6D;AAkB3D;;;AC3TW;;AAEb;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,GAAG;AACd,aAAa,UAAU;AACvB;AACe;AACf;AACA;AACA;AACA;;;ACba;;AAEwB;;AAErC;;AAEA,OAAO,QAAQ,kBAAE;AACjB,OAAO,gBAAgB;AACvB,OAAO,uBAAuB;;AAE9B;AACA,gBAAgB,cAAQ;AACxB;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACA,OAAO,SAAS;;AAEhB;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;;AAGA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,UAAU;AACrB;AACA,WAAW,SAAS;AACpB,aAAa;AACb;AACA,2BAA2B,oBAAoB,IAAI;AACnD;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,gCAAgC,OAAO;AACvC;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wFAAwF,qBAAM;AAC9F,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,SAAS,GAAG,SAAS;AAC5C,4BAA4B;AAC5B;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,yBAAyB;AAClC;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,kCAAkC;AAClC,MAAM;AACN;AACA,MAAM;AACN;AACA;AACA;;AAEA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA,gCAAgC,WAAW,IAAI;AAC/C;AACA;AACA,eAAe,IAAI;AACnB,MAAM;AACN;AACA;AACA,GAAG,GAAG,WAAW;AACjB;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,kBAAkB;AAC7B,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,oBAAc,MAAM,eAAe;;AAEzC;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,WAAW,QAAQ;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;;;AAIA;AACA;AACA;AACA,WAAW,SAAS;AACpB;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;;AAET;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,aAAa;AACvD;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,GAAG,WAAW,cAAc;AAC5B,CAAC;AACD;AACA;AACA;;AAEA;AACA;;AAEA;;;AAGA;;;AAGA,4CAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,cAAc,oBAAc;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,EAAC;;;AC7wBW;;AAEmB;;AAEhC;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,OAAO;AACpB;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,KAAK;AACnB;AACA;AACA;AACA;AACA,CAAC;;AAED,MAAM,oBAAS;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB;AACvB,CAAC;;AAED;AACA,sBAAsB,oBAAS,mBAAmB,YAAY;;AAE9D;AACA;AACA,mCAAmC,oBAAS;;AAE5C,EAAE,KAAK;AACP;AACA,GAAG;AACH;AACA,GAAG;;AAEH;;AAEA,2BAA2B;AAC3B;AACA;;AAEA,qDAAqD;AACrD;AACA,iDAAiD,kCAAkC;AACnF;;AAEA;;AAEA;;AAEA;AACA;;AAEA,sDAAe,UAAU,EAAC;;;AC7G1B;AACA,mDAAe,IAAI,EAAC;;;ACDP;;AAEmB;AACe;AAC/C;AACoE;;AAEpE;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA,SAAS,KAAK,yBAAyB,KAAK;AAC5C;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA,SAAS,KAAK;AACd;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA,aAAa;AACb;AACA;AACA,SAAS,KAAK;AACd;;AAEA,mBAAmB,KAAK,cAAc,KAAK,IAAI;AAC/C;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,UAAU;AACrB;AACA,aAAa;AACb;;AAEA;AACA;AACA;AACA,WAAW,kBAAkB;AAC7B,WAAW,QAAQ;AACnB,WAAW,qBAAqB;AAChC;AACA;AACA;AACA;AACA,OAAO,KAAK;AACZ;AACA;;AAEA;AACA,8BAA8B,YAAgB;;AAE9C;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA,GAAG;AACH;AACA,YAAY,KAAK;AACjB,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,KAAK;;AAEhC,OAAO,KAAK;AACZ;AACA;;AAEA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA,oBAAoB,KAAK;AACzB,gBAAgB,eAAU;AAC1B;;AAEA,QAAQ,KAAK,yBAAyB,KAAK;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAa,GAAG;AAChB,aAAa,eAAe;AAC5B,aAAa,sBAAsB;AACnC,YAAY;AACZ;AACA,eAAe,SAAS;AACxB;AACA;AACA;;AAEA;AACA,UAAU,KAAK,kBAAkB;AACjC;AACA;AACA;AACA;AACA,QAAQ;AACR,SAAS,KAAK;AACd,UAAU,KAAK,sBAAsB,KAAK,gCAAgC,KAAK;AAC/E;AACA;AACA;;AAEA;AACA,YAAY,KAAK;AACjB;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,QAAQ,KAAK;;AAEb;AACA;AACA;;AAEA;;AAEA,IAAI,KAAK;AACT,uBAAuB,KAAK;AAC5B,sBAAsB,KAAK;AAC3B;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA,OAAO,KAAK;AACZ;AACA;;AAEA;;AAEA;AACA;;AAEA,yDAAe,UAAU,EAAC;;;AC9Nb;;AAE4B;;AAEzC;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,WAAW,qBAAqB;AAChC;AACA,aAAa;AACb;AACA;AACA;;AAEA,YAAY,kBAAU;AACtB;;AAEA,MAAM,8BAAS;;AAEf,8BAAS;AACT;AACA;;AAEA,8BAAS;AACT;AACA;AACA,IAAI;;AAEJ;AACA;AACA,GAAG;AACH;;AAEA,mEAAe,oBAAoB,EAAC;;;ACzDvB;;AAEmB;AACsC;;AAEtE;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA,SAAS,eAAM;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,oBAAoB;AAC/B;AACA,aAAa,QAAQ;AACrB;AACe;AACf;AACA;AACA;AACA;AACA;AACA,+CAA+C,eAAM;;AAErD,MAAM,KAAK;AACX;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,IAAI;AACJ,uBAAuB,KAAK;AAC5B;AACA,UAAU,4BAAoB;AAC9B;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AClEa;;AAEqB;;AAElC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,UAAU;AACvB,aAAa,UAAU;AACvB;AACA,cAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,UAAU;AACvB;AACA,eAAe;AACf;AACA;AACA,IAAI,KAAK;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA,8DAAe,kBAAkB,EAAC;;;ACtErB;;AAEb,4DAAe;AACf;AACA;AACA;AACA,CAAC,EAAC;;;ACNW;;AAE+D;AAC5E,8DAAe,2DAA2D,4BAAoB,EAAC;;;ACHlF;;AAEb,uDAAe,iDAAiD,EAAC;;;ACFrD;;AAEZ,mDAAe,yCAAyC;;;ACFE;AACd;AACR;;AAEpC,8CAAe;AACf;AACA;AACA,mBAAmB;AACnB,YAAY;AACZ,QAAQ;AACR,GAAG;AACH;AACA,CAAC,EAAC;;;ACZF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAQC;;;AClDsC;AACI;;AAE3C,+CAAe;AACf,KAAK,4BAAK;AACV,KAAK,OAAQ;AACb,CAAC;;;ACNY;;AAEmB;AACS;AACG;;AAE7B;AACf,SAAS,kBAAU,WAAW,QAAQ;AACtC;AACA,UAAU,QAAQ,WAAW,KAAK;AAClC;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA,GAAG;AACH;;;AClBa;;AAEmB;;AAEhC;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK;AACd;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,WAAW,YAAY;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,4BAA4B;AACzC;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,oBAAoB,KAAK;;AAEzB;AACA,UAAU,KAAK;AACf;AACA,QAAQ;AACR;AACA;;AAEA;AACA;;AAEA,0BAA0B,KAAK;AAC/B;AACA;;AAEA;;AAEA,kBAAkB,KAAK;AACvB;AACA;;AAEA;AACA;;AAEA,MAAM,KAAK,yBAAyB,KAAK;AACzC;;AAEA,IAAI,KAAK;AACT;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA,6DAAe,cAAc,EAAC;;;AC9FjB;;AAEmB;AACe;AACM;AACH;AACY;AAClB;AACc;;AAE1D;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB;AACA,aAAa,QAAQ;AACrB;AACA;AACA,MAAM,KAAK;AACX;AACA;AACA,aAAa,KAAK;AAClB,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA,gBAAgB,qBAAoB;;AAEpC;;AAEA;AACA;AACA;AACA,4BAA4B,KAAK;;AAEjC,2BAA2B,KAAK;AAChC;AACA;;AAEA,uBAAuB,KAAK;;AAE5B;AACA,iDAAiD,sBAAc;AAC/D;;AAEA,QAAQ,KAAK;AACb,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,KAAK;AACX;AACA;AACA;AACA,QAAQ,KAAK;AACb;AACA;AACA,QAAQ,KAAK;AACb,gEAAgE;AAChE;AACA;;AAEA;;AAEA;AACA;AACA,eAAe,gBAAgB;AAC/B;;AAEA,wBAAwB,KAAK;AAC7B;;AAEA,eAAe,kBAAU;AACzB,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA,QAAQ,KAAK,qBAAqB,KAAK;AACvC;AACA;;AAEA,gBAAgB,KAAK;AACrB;AACA;;AAEA;AACA;AACA,QAAQ;AACR;AACA;AACA,kBAAkB,eAAU,SAAS,eAAU;AAC/C;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,cAAc,QAAQ;AACtB,UAAU,QAAQ;AAClB,GAAG;;AAEH;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA,CAAC;;AAED,mDAAe,QAAQ,EAAC;;;AChKX;;AAEqB;;AAElC;AACA;AACA,0BAA0B,KAAK;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACA,mDAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA,MAAM;AACN;AACA;AACA,GAAG;;AAEH;AACA,CAAC,EAAC;;;ACtDW;;AAEmB;AACsB;;AAEtD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,SAAS,KAAK;AACd;;AAEA;AACA;AACA,2BAA2B,mBAAmB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,MAAM,KAAK;AACX;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,KAAK;;AAEZ,MAAM,KAAK;AACX;AACA;;AAEA,MAAM,KAAK;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,uBAAuB,KAAK;;AAE5B;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,KAAK;AACL,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,KAAK;;AAEvB;AACA;AACA;AACA;;AAEA;AACA,MAAM,KAAK;;AAEX,QAAQ,KAAK;AACb;AACA,MAAM,QAAQ,KAAK;AACnB,iBAAiB,YAAY;AAC7B,MAAM,SAAS,KAAK,qBAAqB,KAAK;AAC9C,kBAAkB;AAClB;AACA,aAAa,KAAK;AAClB;AACA;;AAEA;AACA,WAAW,KAAK;AAChB;;AAEA;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,KAAK;;AAEvB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,YAAY,KAAK;AACjB;AACA;;AAEA,YAAY,KAAK;AACjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kBAAkB,KAAK;;AAEvB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oBAAoB,KAAK;;AAEzB;AACA;;AAEA;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,IAAI,KAAK;AACT,kBAAkB,KAAK;;AAEvB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA,IAAI,KAAK;AACT,sEAAsE,KAAK;AAC3E,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,IAAI,KAAK;;AAET;AACA;AACA;;AAEA;;AAEA;AACA,KAAK,6CAA6C,MAAM;AACxD,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED,KAAK;;AAEL,wDAAe,YAAY,EAAC;;;ACzTf;;AAEqB;AACU;AACO;;AAEnD;AACA;AACA;AACA,WAAW,gBAAgB;AAC3B,WAAW,SAAS;AACpB;AACA,aAAa,GAAG;AAChB;AACe;AACf,yBAAyB,YAAQ;AACjC;AACA,kBAAkB,iBAAY;AAC9B;;AAEA,EAAE,KAAK;AACP;AACA,GAAG;;AAEH;;AAEA;AACA;;;AC3Ba;;AAEE;AACf;AACA;;;ACJa;;AAEkC;AACf;;AAEhC;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,aAAa,eAAe;AAC5B;AACA;AACA;AACA,EAAE,eAAU,oDAAoD,eAAU;AAC1E;AACA;;AAEA,KAAK,yBAAyB,eAAU;AACxC;AACA,CAAC;;AAED,2DAAe,aAAa,EAAC;;;ACxBhB;;AAE4B;;AAEzC;AACA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf;AACA;AACA;AACA,IAAI;AACJ,eAAe,eAAU;AACzB;AACA,OAAO,eAAU,kBAAkB,eAAU;AAC7C;AACA;AACA;AACA;AACA;AACA;;;AC1Ba;;AAEE;AACf,0BAA0B,KAAK;AAC/B;AACA;;;ACLa;;AAEb;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA,0DAAe,WAAW,EAAC;;;ACtD3B;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA,uDAAe,QAAQ,EAAC;;;AC3CmB;AACN;AACL;;AAEzB;AACP;AACA,uBAAuB,mBAAW;;AAElC,SAAS,gBAAQ;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEO;AACP;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEO,4CAA4C,KAAK;;;AC3CZ;;AAE5C,sDAAe,QAAQ;AACvB,qBAAqB,QAAQ;;AAE7B;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,UAAU,QAAQ;AAClB,EAAE,QAAQ,qCAAqC,QAAQ;AACvD,cAAc,EAAC;;;ACbmB;AACU;;AAE5C,8CAAe,QAAQ;;AAEvB;AACA;AACA;AACA;;AAEA,yBAAyB,KAAK,GAAG,0BAA0B;;AAE3D,UAAU,KAAK;AACf,+BAA+B,gCAAgC;AAC/D;AACA,UAAU,KAAK;AACf,4BAA4B,KAAK;AACjC;AACA,UAAU,KAAK;AACf,8BAA8B,OAAO;AACrC;AACA;AACA;AACA;AACA,UAAU,KAAK;AACf,gCAAgC,SAAS;AACzC;;AAEA,uCAAuC;AACvC,KAAK;;AAEL;AACA;AACA,6DAA6D,kBAAkB;AAC/E;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,cAAc;AACd;AACA;AACA,KAAK;AACL;AACA,GAAG,EAAC;;;;ACnDS;;AAEb;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACe;AACf;AACA;AACA;AACA;AACA;;;ACda;;AAEb;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf;AACA;AACA;AACA;;;ACda;;AAE2C;AACJ;;AAEpD;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf,uBAAuB,aAAa;AACpC;AACA,WAAW,WAAW;AACtB;AACA;AACA;;;ACrBa;;AAEmB;AACa;;AAE7C,oDAAoD,iBAAY,KAAK,WAAW;;AAEhF;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB;AACA,aAAa,QAAQ;AACrB;AACe;AACf;AACA;AACA;;AAEA;AACA,QAAQ,KAAK,0BAA0B,KAAK;AAC5C,aAAa,KAAK,aAAa,SAAS;AACxC,MAAM,SAAS,KAAK;AACpB,aAAa,KAAK,SAAS;AAC3B,MAAM,SAAS,KAAK;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS,KAAK;AACd;AACA,MAAM,UAAU,KAAK;AACrB;AACA;AACA;;AAEA;AACA;AACA,SAAS,KAAK;AACd;AACA;AACA;;AAEA;AACA;AACA,SAAS,KAAK;AACd;AACA,MAAM,UAAU,KAAK;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAE,KAAK,sBAAsB,uBAAuB;AACpD;AACA;AACA,KAAK,KAAK;AACV,GAAG;;AAEH;AACA;;;ACzG4C;AACZ;AACmB;AAChB;AACkB;AACJ;AACE;AACd;;AAErC,oDAAe;AACf,oBAAoB,WAAW,GAAG;;AAElC,QAAQ,qEAAqE;;AAE7E,gCAAgC,iBAAY;;AAE5C,kBAAkB,QAAQ,CAAC,aAAa;;AAExC;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,KAAK;AACX,QAAQ,QAAQ,0BAA0B,QAAQ;AAClD,yCAAyC;AACzC,MAAM,SAAS,KAAK;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA,MAAM,QAAQ;AACd,qBAAqB,KAAK;;AAE1B,qDAAqD,eAAe;AACpE;AACA,4DAA4D,OAAO;;AAEnE;AACA;AACA;AACA;AACA;;AAEA;AACA,CAAC;;;;AC3DiC;AACO;AACsB;AAChB;AACQ;AACC;AACZ;AACO;AACqB;AAChB;;AAExD;;AAEA,0CAAe;AACf;AACA,oBAAoB,aAAa;AACjC;AACA,2BAA2B,iBAAY;AACvC,SAAS,oDAAoD;AAC7D;AACA;AACA;;AAEA;AACA,oCAAoC;AACpC,wCAAwC;;AAExC;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,8BAA8B,iBAAY;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,MAAM;AACZ;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAiB,eAAU,oBAAoB,eAAU;;AAEzD;AACA;AACA;;AAEA;AACA;AACA;AACA,iCAAiC;AACjC;AACA;AACA,uBAAuB,eAAU,MAAM,eAAU;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,qBAAoB;AACvE;AACA;AACA;AACA,iBAAiB,eAAU;AAC3B;AACA,2CAA2C,eAAU,aAAa,eAAU;AAC5E;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,MAAM,KAAK;AACX;AACA,OAAO;AACP;;AAEA;AACA,SAAS,KAAK;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C,oBAAoB;AAChE;AACA;;AAEA;AACA;AACA,wCAAwC,oBAAoB;;AAE5D;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAa;AACzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,aAAa;;AAElC,oBAAoB,QAAQ;AAC5B,iBAAiB,eAAU,2CAA2C,eAAU;AAChF;AACA;;;AAGA;AACA;AACA,GAAG;AACH,CAAC;;;ACvMsD;AACR;AACf;;AAEhC;AACA,SAAS,QAAQ;;AAEjB;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,eAAU,aAAa,oBAAa;AAC5E;AACA;;AAEA;AACA;AACA,kBAAkB,eAAU,YAAY,SAAS,iBAAiB,eAAU;AAC5E,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA,WAAW,QAAQ;;AAEnB,+BAA+B,KAAK;;AAEpC;AACA;AACA;;AAEA,6DAAe,cAAc,EAAC;;;;AC9CvB;AACP;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW;AACX,aAAa,aAAa;AAC1B;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe,aAAa;;AAE5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;;;ACtF4C;AACZ;AACe;AACW;AACJ;AACH;AAC6D;AACxD;AACjB;;AAEvC;;AAEA,OAAO,UAAU,oBAAE,EAAE,KAAK;;AAE1B,0BAA0B,kBAAkB;AAC5C;AACA,CAAC,GAAG,KAAK;;AAET;AACA,gBAAgB;AAChB,EAAE,EAAE,KAAK;;;AAGT;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA,QAAQ,KAAK;AACb;AACA,GAAG;;AAEH,SAAS,oCAAoC;AAC7C,sCAAsC,gBAAU;AAChD,6BAA6B,gBAAU;AACvC,8BAA8B,gBAAU;;AAExC;AACA;AACA;;AAEA,wDAAwD,gBAAU,CAAC,oBAAc;;AAEjF;AACA;AACA;AACA;;AAEA;AACA;;AAEA,uCAAuC,QAAQ;AAC/C,gBAAgB,oBAAc;AAC9B;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;;AAEL;AACA,GAAG;;AAEH;AACA,eAAe,KAAK;;AAEpB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,eAAU,mBAAmB,KAAK,qBAAqB,eAAU;AACnF,OAAO;AACP,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA,QAAQ,KAAK;AACb,mCAAmC,QAAQ;AAC3C;AACA;AACA,OAAO;AACP;AACA;;AAEA,QAAQ,KAAK,4BAA4B,KAAK;AAC9C;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;;AAEA,QAAQ,KAAK;AACb;AACA;AACA;;AAEA;AACA,mBAAmB,KAAK;;AAExB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,EAAE,aAAa;;AAErB;;AAEA;;AAEA,yBAAyB,sBAAc;;AAEvC;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;;AAEA,YAAY,KAAK;AACjB;AACA;;AAEA;AACA,sCAAsC,sBAAsB;AAC5D;AACA,YAAY,oBAAoB,CAAC,cAAc;AAC/C;;AAEA,iBAAiB,WAAW;AAC5B;AACA;;AAEA,WAAW,KAAK;AAChB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET,sCAAsC,KAAK;;AAE3C,0DAA0D,sBAAsB;AAChF;AACA,UAAU,oBAAoB,CAAC,cAAc;AAC7C;;AAEA;AACA,UAAU,WAAW;AACrB;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;;AAEA,yCAAyC,KAAK;;AAE9C;;AAEA;AACA,QAAQ,MAAM;AACd;AACA,mBAAmB,iBAAY;AAC/B;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP,MAAM;AACN;;AAEA;AACA;AACA,cAAc,eAAU,kBAAkB,eAAU;AACpD;AACA;AACA;AACA;AACA;;AAEA,YAAY,eAAU;AACtB;AACA;AACA;;AAEA;;AAEO;AACP;AACA,SAAS,0BAA0B;AACnC;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA,qDAAe,uDAAO,IAAC;;;AC/RS;AACI;AACF;AACS;AACI;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,QAAQ,YAAW;AACnB,OAAO,GAAU;AACjB;AACA,SAAS,QAAqB;AAC9B;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA,0CAA0C,OAAO;AACjD,MAAM;AACN;AACA;AACA,+CAA+C,OAAO;AACtD;AACA,CAAC;;AAED;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACA,sCAAsC,OAAO;;AAE7C;AACA;AACA;AACA,WAAW,qBAAqB;AAChC,aAAa;AACb;AACA,sCAAsC,KAAK;;AAE3C;AACA;AACA;AACA;AACA;AACA,WAAW,wCAAwC;AACnD,WAAW,QAAQ;AACnB,YAAY,YAAY;AACxB,aAAa,UAAU;AACvB;AACA;AACA,aAAa,KAAK;;AAElB,UAAU,SAAS;AACnB;AACA;;AAEA;;AAEA,kBAAkB,YAAY;AAC9B;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,kBAAkB,eAAU,qBAAqB,GAAG;AACpD;AACA;;AAEA,oBAAoB,KAAK;AACzB;AACA;;AAEA;AACA;;AAEA;AACA;AACA,uCAAuC,IAAI;AAC3C;AACA;;AAEA;AACA;AACA;;AAEA,cAAc,eAAU;AACxB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,+CAAe;AACf;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA,YAAY;AACZ;AACA;AACA,CAAC,EAAC;;;AC7HW;;AAEkC;AACF;AACD;AACW;AACJ;AACJ;;AAE/C;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,oBAAa;AAC3B;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,SAAS;AACtB;AACe;AACf;;AAEA,mBAAmB,iBAAY;;AAE/B;AACA,gBAAgB,aAAa;AAC7B;AACA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,QAAQ,8BAA8B,YAAQ;;AAEhE;AACA;;AAEA;AACA,oBAAoB,aAAa;AACjC;AACA;AACA;AACA;;AAEA,uBAAuB,iBAAY;;AAEnC;AACA,GAAG;AACH,SAAS,QAAQ;AACjB;;AAEA;AACA;AACA,+BAA+B,aAAa;AAC5C;AACA;AACA;AACA;AACA,kCAAkC,iBAAY;AAC9C;AACA;;AAEA;AACA,GAAG;AACH;;;AChFO,yB;;ACAM;;AAE0B;AACQ;;AAE/C;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA,WAAW,mBAAmB;AAC9B,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB;AACA,aAAa;AACb;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B;;AAEA;AACA;AACA;AACA,gBAAgB,eAAU;AAC1B;AACA,QAAQ,eAAU;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,KAAK,6BAA6B,gBAAgB;AACtE;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,UAAU;AACrB;AACA,aAAa;AACb;;AAEA;AACA;AACA,cAAc,eAAU,8BAA8B,eAAU;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,eAAU,yCAAyC,eAAU;AAC/E;AACA;AACA;AACA;AACA,gBAAgB,eAAU,0BAA0B,eAAU;AAC9D;AACA;AACA;;AAEA,gDAAe;AACf;AACA;AACA,CAAC,EAAC;;;AClGW;;AAEqB;AACY;AACW;AACN;AACR;AACI;AACC;AACH;;AAE7C,MAAM,gBAAU,GAAG,SAAS;;AAE5B;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,YAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA,mBAAmB,uBAAkB;AACrC,oBAAoB,uBAAkB;AACtC;AACA;;AAEA;AACA;AACA;AACA,aAAa,eAAe;AAC5B,aAAa,SAAS;AACtB;AACA,eAAe,SAAS;AACxB;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,UAAU;AACV;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA,aAAa,WAAW;;AAExB,WAAW,yCAAyC;;AAEpD;AACA,MAAM,SAAS;AACf,2BAA2B,gBAAU,cAAc,gBAAU;AAC7D,2BAA2B,gBAAU,cAAc,gBAAU;AAC7D,6BAA6B,gBAAU,cAAc,gBAAU;AAC/D,OAAO;AACP;;AAEA;AACA,UAAU,KAAK;AACf;AACA;AACA;AACA,QAAQ;AACR,QAAQ,SAAS;AACjB,kBAAkB,gBAAU;AAC5B,qBAAqB,gBAAU;AAC/B,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA,MAAM;AACN;AACA;;AAEA,IAAI,SAAS;AACb,eAAe,gBAAU;AACzB,qBAAqB,gBAAU;AAC/B,KAAK;;AAEL;AACA;;AAEA;AACA,oCAAoC,KAAK;AACzC;AACA;AACA;;AAEA,eAAe,KAAK;AACpB;AACA;AACA;AACA;AACA;;AAEA,qBAAqB,iBAAY;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA,qBAAqB,eAAe;AACpC;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;;AAEA;AACA,gBAAgB,eAAe;AAC/B,MAAM;AACN;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,aAAa,WAAW;AACxB,qBAAqB,aAAa;AAClC,WAAW,QAAQ;AACnB;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA,wBAAwB,WAAW,aAAa;AAChD;AACA;AACA,yBAAyB;AACzB,KAAK;AACL;AACA,CAAC;;AAED,KAAK;AACL;;AAEA;AACA;AACA,0BAA0B,WAAW,aAAa;AAClD;AACA;AACA;AACA,UAAU,IAAI;AACd;AACA;AACA,OAAO;AACP;AACA;;AAEA;;AAEA;AACA,CAAC;;AAED,iDAAe,KAAK,EAAC;;;AC/OR;;AAEkC;;AAE/C;AACA;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,oBAAa;AACtC;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA,yDAAe,WAAW,EAAC;;;ACtId;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA,WAAW,UAAU;AACrB;AACA,aAAa;AACb;AACe;AACf;AACA;AACA;AACA;;;AC3Ba;;AAEqB;;AAElC;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA,aAAa,SAAS;AACtB;AACe;AACf,SAAS,KAAK;AACd;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED,6DAAe,cAAc,EAAC;;;AC5EjB;;AAEkB;AACM;AACD;AACY;AACL;AACc;AACH;AACJ;AACN;AACN;AACW;AACH;AACL;AACY;AACH;AACJ;AACW;;AAEzD;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,aAAa,OAAO;AACpB;AACA;AACA,sBAAsB,UAAK;AAC3B,mBAAmB,IAAI,CAAC,UAAK;;AAE7B;AACA,EAAE,KAAK,kBAAkB,UAAK,sBAAsB,iBAAiB;;AAErE;AACA,EAAE,KAAK,kCAAkC,iBAAiB;;AAE1D;AACA;AACA,0BAA0B,WAAW;AACrC;;AAEA;AACA;;AAEA;AACA,MAAM,WAAK,kBAAkB,YAAQ;;AAErC;AACA,WAAK,SAAS,UAAK;;AAEnB;AACA,WAAK,iBAAiB,oBAAa;AACnC,WAAK,eAAe,kBAAW;AAC/B,WAAK,YAAY,QAAQ;AACzB,WAAK,WAAW,OAAO;AACvB,WAAK,cAAc,kBAAU;;AAE7B;AACA,WAAK,cAAc,eAAU;;AAE7B;AACA,WAAK,UAAU,WAAK;;AAEpB;AACA,WAAK;AACL;AACA;;AAEA,WAAK,UAAU,MAAM;;AAErB;AACA,WAAK,gBAAgB,YAAY;;AAEjC;AACA,WAAK,eAAe,WAAW;;AAE/B,WAAK,gBAAgB,iBAAY;;AAEjC,WAAK,uBAAuB,sBAAc,CAAC,KAAK;;AAEhD,WAAK,cAAc,QAAQ;;AAE3B,WAAK,kBAAkB,sBAAc;;AAErC,WAAK,WAAW,WAAK;;AAErB;AACA,gDAAe,WAAK;;;ACxFK;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd;AACA;AACO;AACP;AACA;AACA;AACA,MAAM,SAAK;AACX;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT,MAAM;AACN;AACA;AACA,GAAG;AACH;;;AC/0BA;AACA;AACA;AACA;AACA,SAAS;AACT,SAAS,6BAA6B;AACtC;AACA,WAAW,cAAc;AACzB,WAAW,cAAc;AACzB,aAAa,QAAQ;AACrB;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC/CA,IAAI,2CAAM,qBAAqB,6BAA6B,uCAAuC,0BAA0B,uJAAuJ,aAAa,OAAO,izBAAizB,mCAAmC,0BAA0B,uJAAuJ,aAAa,OAAO,0jBAA0jB,sCAAsC,0BAA0B,uJAAuJ,aAAa,OAAO,qyCAAqyC,mCAAmC,0BAA0B,uJAAuJ,aAAa,OAAO,oUAAoU,mCAAmC,0BAA0B,uJAAuJ,aAAa,OAAO,qUAAqU,oCAAoC,0BAA0B,uJAAuJ,aAAa,OAAO,40BAA40B,kCAAkC,0BAA0B,uJAAuJ,aAAa,OAAO,+XAA+X,aAAa,OAAO,2MAA2M,mCAAmC,0BAA0B,uJAAuJ,aAAa,OAAO,g9CAAg9C,sCAAsC,0BAA0B,uJAAuJ,aAAa,OAAO,qwFAAqwF;AACtgW;AACA,IAAI,oDAAe;;;;;AC+JnB,qEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AChL8H,CAAC,yEAAe,8BAAG,EAAC,C;;ACAnJ;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AC/FqF;AAC3B;AACL;;;AAGrD;AACA,CAAgG;AAChG,gBAAgB,kBAAU;AAC1B,EAAE,kCAAM;AACR,EAAE,2CAAM;AACR,EAAE,oDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAAe,iB;;;;;;;;AClBf,IAAI,2CAAM,qBAAqB,6BAA6B,iBAAiB,8BAA8B,YAAY,+BAA+B,0BAA0B,0BAA0B;AAC1M;AACA,IAAI,oDAAe;;;;;ACOnB,qEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACjBiI,CAAC,0EAAe,8BAAG,EAAC,C;;ACAtJ;;;;;AEAqF;AAC3B;AACL;AACrD,CAAmF;;;AAGnF;AACmG;AACnG,IAAI,iBAAS,GAAG,kBAAU;AAC1B,EAAE,mCAAM;AACR,EAAE,2CAAM;AACR,EAAE,oDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAAe,iBAAS,Q;;ACnBxB,IAAI,6DAAM,qBAAqB,6BAA6B,sBAAsB,OAAO,aAAa,0BAA0B,8EAA8E,yBAAyB,oBAAoB;AAC3P;AACA,IAAI,sEAAe;;;;;ACUnB,2EAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACnDuI,CAAC,gFAAe,oCAAG,EAAC,C;;ACA5J;;;;;AEAuG;AACvC;AACL;AAC3D,CAAqG;;;AAGrG;AACmG;AACnG,IAAI,uBAAS,GAAG,kBAAU;AAC1B,EAAE,yCAAM;AACR,EAAE,6DAAM;AACR,EAAE,sEAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,oDAAe,uBAAS,Q;;;ACe0B;AACH;AAC0B;AAChC;AACI;AACH;AACN;AACO;AACA;AACD;AACK;AACT;AACS;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4EAAe;AACf;AACA,6BAA6B,wBAAS,qBAAY;AAClD;AACA;AACA;AACA,eAAe,UAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAqE,mBAAW,GAAG,mBAAY;AAC/F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,OAAO;AACpB;AACA;AACA;AACA,kBAAkB,aAAa;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,0BAAS;AACpD;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,wBAAO;AAClD;AACA;AACA;AACA;AACA;AACA,iBAAiB,mBAAW;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA,oBAAoB,aAAa;AACjC;AACA,iBAAiB,uBAAO;AACxB;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM,WAAW;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,aAAa;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,uBAAO;AACb;AACA,MAAM,4BAAW;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACtdwI,CAAC,iFAAe,qCAAG,EAAC,C;;ACA7J;;;;;AEAA;;;;;AEAwG;AACvC;AACL;AAC5D,CAAsG;AACZ;;;AAG1F;AACmG;AACnG,IAAI,wBAAS,GAAG,kBAAU;AAC1B,EAAE,0CAAM;AACR,EAAE,MAAM;AACR,EAAE,eAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,qDAAe,wBAAS,Q;;ACpBxB,IAAI,+CAAM,qBAAqB,6BAA6B,yBAAyB,OAAO,yBAAyB,YAAY,4BAA4B,YAAY,iCAAiC,gBAAgB,mDAAmD,oBAAoB,qEAAqE;AACtW;AACA,IAAI,wDAAe;;;;ACFnB,IAAI,8CAAM,qBAAqB,6BAA6B,iBAAiB,oCAAoC,YAAY,gCAAgC,0BAA0B,IAAI,sFAAsF,QAAQ,6CAA6C,gBAAgB,uBAAuB,+DAA+D,8BAA8B,YAAY,0BAA0B,YAAY,kCAAkC,4EAA4E,iBAAiB,sCAAsC,yBAAyB,yBAAyB,4BAA4B,YAAY,0BAA0B,wCAAwC,6BAA6B,mCAAmC,2BAA2B,yBAAyB,uFAAuF,6BAA6B;AACriC;AACA,IAAI,uDAAe;;;;ACFnB,IAAI,2DAAM,qBAAqB,6BAA6B,wBAAwB,OAAO,uBAAuB,+BAA+B,sDAAsD,SAAS,MAAM,yBAAyB,0BAA0B,CAAuF,qBAAqB,sCAAsC,4DAA4D,2CAA2C,oCAAoC,KAAK,yBAAyB,yBAAyB,0CAA0C;AACvoB;AACA,IAAI,oEAAe;;;;;AC0BnB,yEAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;;AC3GqI,CAAC,8EAAe,kCAAG,EAAC,C;;ACA1J;;;;;AEAqG;AACvC;AACL;AACzD,CAAmG;;;AAGnG;AACmG;AACnG,IAAI,qBAAS,GAAG,kBAAU;AAC1B,EAAE,uCAAM;AACR,EAAE,2DAAM;AACR,EAAE,oEAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAe,qBAAS,Q;;ACnBxB,IAAI,iEAAM,qBAAqB,6BAA6B,iBAAiB,mCAAmC,YAAY,8BAA8B,cAAc,aAAa,8EAA8E,gDAAgD,oDAAoD,WAAW,yBAAyB,KAAK,yBAAyB,iGAAiG,+CAA+C,2BAA2B,kCAAkC,mCAAmC,uCAAuC,qBAAqB,yBAAyB,wBAAwB,oEAAoE,+BAA+B,oCAAoC,KAAK,yBAAyB,yBAAyB,gDAAgD,wCAAwC,gCAAgC,kCAAkC,KAAK,yBAAyB,yBAAyB,iDAAiD,YAAY,OAAO,wFAAwF,eAAe,OAAO,6BAA6B,aAAa,OAAO,wBAAwB,oBAAoB,8BAA8B,cAAc,oCAAoC,kBAAkB,WAAW,gCAAgC,KAAK,iCAAiC,aAAa,2BAA2B,YAAY,gCAAgC,mGAAmG,aAAa,OAAO,iHAAiH,iBAAiB,sCAAsC,mDAAmD,EAAE;AAC//D;AACA,IAAI,0EAAe;;;;;ACqEnB,+EAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACvH2I,CAAC,oFAAe,wCAAG,EAAC,C;;ACAhK;;;;;AEA2G;AACvC;AACL;AAC/D,CAAyG;;;AAGzG;AACmG;AACnG,IAAI,2BAAS,GAAG,kBAAU;AAC1B,EAAE,6CAAM;AACR,EAAE,iEAAM;AACR,EAAE,0EAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,wDAAe,2BAAS,Q;;ACnBxB;AACyB;AACzB;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN,IAAI,SAAK;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,IAAI,SAAK;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,GAAG;AACH;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA;AACA;AACA;AACA,IAAI,SAAK;AACT;AACA;AACA,+BAA+B,kBAAkB;AACjD;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,QAAQ,4BAA4B;AAC/C,WAAW,QAAQ;AACnB,aAAa;AACb;AACO;AACP;AACA;AACA,kBAAkB;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;;;ACjI2C;AACY;AACD;AACtD;AACA,wEAAe;AACf;AACA,2BAA2B,gCAAmB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACrJoI,CAAC,6EAAe,iCAAG,EAAC,C;;ACAjE;AAC3B;AACL;;;AAGxD;AACA,CAAmG;AACnG,IAAI,oBAAS,GAAG,kBAAU;AAC1B,EAAE,sCAAM;AACR,EAAE,8CAAM;AACR,EAAE,uDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,iDAAe,oBAAS,Q;;;;AClBG;AACqB;AACD;AACF;AACI;AACZ;AAMV;AAC8C;AACzE;AACA;AACA;AACA;AACA,EAAE,2BAAU;AACZ;AACA;AACA,OAAO,4BAAQ;AACf;AACA;AACA;AACO;AACP,gBAAgB,UAAU,oBAAW,qBAAS,WAAE;AAChD;AACA;AACA;AACA,eAAe,UAAS;AACxB,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL,kBAAkB;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA,6DAA6D;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,2BAAU;AACxB,cAAc,2BAAU;AACxB;AACA,qCAAqC,2BAAU;AAC/C;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW;AACjB,MAAM,2BAAU,qCAAqC,kBAAkB;AACvE,oBAAoB,2BAAU;AAC9B;AACA;AACA,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,mCAAS;AACjB;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR,QAAQ,kBAAkB;AAC1B;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA,WAAW;AACX;AACA;AACA,WAAW;AACX,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,2BAAU;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,gBAAgB;AACvD;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,QAAQ;AACR,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA,MAAM,2BAAU,IAAI,2BAAU;AAC9B;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,MAAM,2BAAU,IAAI,2BAAU;AAC9B,yBAAyB;AACzB,MAAM,2BAAU,KAAK,YAAY;AACjC;AACA;AACA,iCAAiC,2BAAU;AAC3C,SAAS;AACT,MAAM,mCAAS;AACf,KAAK;AACL;AACA;AACA,eAAe,GAAG;AAClB,eAAe,OAAO;AACtB,eAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,aAAa;AAC3C;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;;;AC7WA;AACA;AACA,WAAW,UAAU;AACrB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,WAAW,QAAQ;AACnB,WAAW,SAAS;AACpB,aAAa,UAAU;AACvB;AACO,oDAAoD;AAC3D,UAAU,gFAAgF;AAC1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,qBAAqB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;ACtIA;AACmD;AACC;AACO;AAC3D,IAAI,eAAI,OAAO;AACiC;AAChD;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,aAAa,GAAG;AAChB;AACA;AACA,6BAA6B;AAC7B;AACA,kBAAkB,GAAG,UAAS;AAC9B;AACA;AACA;AACA;AACA,uBAAuB;AACvB;AACA;AACA,qBAAqB,kBAAkB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,GAAG;AAChB;AACA;AACA;AACA;AACA,QAAQ,uBAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,2BAAW,YAAY,mBAAmB;AAChD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,MAAM;AACN;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB,aAAa,OAAO;AACpB;AACA;AACA,IAAI,eAAI,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,eAAI;AACZ,QAAQ,eAAI;AACZ;AACA;AACA;AACA;AACA,QAAQ,eAAI;AACZ;AACA;AACA;AACA,MAAM,eAAI;AACV;AACA;AACA;AACA,oBAAoB,eAAI;AACxB;AACA;AACA,gBAAgB,eAAI;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM,UAAU;AAChB;AACA,OAAO;AACP,MAAM;AACN,MAAM,aAAa;AACnB;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAe,UAAU,EAAC;;;;ACjIsC;AACnB;AAC7C,yEAAe;AACf;AACA,WAAW,gBAAgB;AAC3B;AACA;AACA,mBAAmB,cAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACnCqI,CAAC,8EAAe,kCAAG,EAAC,C;;ACAjE;AAC3B;AACL;;;AAGzD;AACA,CAAmG;AACnG,IAAI,qBAAS,GAAG,kBAAU;AAC1B,EAAE,uCAAM;AACR,EAAE,+CAAM;AACR,EAAE,wDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAe,qBAAS,Q;;AClBxB,IAAI,gDAAM,qBAAqB,6BAA6B,yBAAyB,OAAO,yBAAyB,YAAY,4BAA4B,YAAY,iCAAiC,gBAAgB,mDAAmD,oBAAoB,qEAAqE,wCAAwC,2BAA2B,8BAA8B,wBAAwB,wGAAwG,8BAA8B,aAAa,KAAK,wBAAwB,gBAAgB,OAAO,2CAA2C,yFAAyF,8BAA8B,YAAY,KAAK,yBAAyB,oCAAoC,uFAAuF,8BAA8B,YAAY,KAAK,yBAAyB,uCAAuC,gBAAgB,OAAO,eAAe,wEAAwE,8BAA8B,YAAY,KAAK,yBAAyB,sCAAsC,gBAAgB,OAAO,kBAAkB,yBAAyB,8BAA8B,aAAa,KAAK,wBAAwB,gBAAgB,OAAO,4CAA4C,gBAAgB,8BAA8B,aAAa,KAAK,qBAAqB,gBAAgB,OAAO,cAAc,gBAAgB,+BAA+B,4BAA4B,QAAQ,cAAc,KAAK,kBAAkB,gBAAgB,OAAO,uEAAuE,gBAAgB,+BAA+B,2CAA2C,QAAQ,cAAc,KAAK,kBAAkB,gBAAgB,OAAO,sFAAsF;AACzkE;AACA,IAAI,yDAAe;;;;ACFQ;AACoB;AACF;AACI;AACZ;AAQV;AACkC;AAC7D;AACA,IAAI,kBAAS;AACb,EAAE,mBAAU;AACZ,EAAE,+BAAsB;AACxB,EAAE,sBAAa;AACf,EAAE,mBAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAU;AAChB,OAAO,4BAAQ;AACf;AACA;AACA;AACA;AACO;AACP,gBAAgB,SAAS,qBAAS,qBAAY,WAAE;AAChD;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,6CAA6C;AAC7C,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,aAAa,kBAAS;AACtB,KAAK;AACL;AACA,aAAa,mBAAU;AACvB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,UAAU,sBAAa;AACvB,UAAU,+BAAsB;AAChC,QAAQ,+BAAsB;AAC9B;AACA,MAAM,+BAAsB;AAC5B,MAAM,sBAAa;AACnB;AACA;AACA;AACA;AACA;AACA,gCAAgC,mBAAU;AAC1C,YAAY,+BAAsB;AAClC,sCAAsC,4BAA4B;AAClE,QAAQ;AACR;AACA;AACA;AACA,QAAQ;AACR;AACA,UAAU,sBAAa;AACvB,UAAU,+BAAsB;AAChC,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,4BAA4B,mBAAU;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ;AACR,QAAQ,mBAAU;AAClB;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM,kBAAS;AACf,MAAM,mBAAU;AAChB,MAAM,WAAW;AACjB;AACA;AACA,QAAQ,mBAAU,qCAAqC,kBAAkB;AACzE,QAAQ,kBAAS,KAAK,mBAAU;AAChC;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM,mBAAU;AAChB,KAAK;AACL;AACA;AACA,MAAM,mBAAU;AAChB;AACA;AACA,WAAW,mBAAU;AACrB;AACA,MAAM,mBAAU,KAAK,YAAY;AACjC,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,yBAAyB,gBAAgB;AACzC,yCAAyC,4BAAQ;AACjD;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAU;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,MAAM,mBAAU,qCAAqC,kBAAkB;AACvE,oDAAoD,iBAAiB;AACrE,wDAAwD,qBAAqB;AAC7E,sDAAsD,mBAAmB;AACzE;AACA;AACA,OAAO;AACP,sDAAsD,mBAAmB;AACzE,MAAM,kBAAS,KAAK,mBAAU;AAC9B,MAAM,kBAAS;AACf,MAAM,kBAAS;AACf,MAAM,kBAAS;AACf,MAAM,kBAAS;AACf,MAAM,kBAAS;AACf;AACA;AACA,cAAc,mBAAU;AACxB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,YAAY;AACZ,6BAA6B,OAAO;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C,kDAAkD;AAClD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,wBAAwB,mBAAS;AACjC;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;;;ACle6C;AACG;AAChD,0EAAe;AACf;AACA,WAAW,QAAQ;AACnB;AACA;AACA,mBAAmB,cAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACxFsI,CAAC,+EAAe,mCAAG,EAAC,C;;ACAjE;AAC3B;AACL;;;AAG1D;AACA,CAAmG;AACnG,IAAI,sBAAS,GAAG,kBAAU;AAC1B,EAAE,wCAAM;AACR,EAAE,gDAAM;AACR,EAAE,yDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,mDAAe,sBAAS,Q;;AClBxB,IAAI,2CAAM,qBAAqB,6BAA6B,yBAAyB,OAAO,yBAAyB,YAAY,4BAA4B,YAAY,iCAAiC,gBAAgB;AAC1N;AACA,IAAI,oDAAe;;;;ACFQ;AACqB;AACH;AACiC;AAC9E;AACA,IAAI,sBAAS;AACb,EAAE,uBAAU;AACZ,EAAE,mCAAsB;AACxB,EAAE,0BAAa;AACf,EAAE,uBAAU;AACL;AACP,gBAAgB,UAAU,WAAE;AAC5B;AACA;AACA;AACA,eAAe,UAAS;AACxB,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA,kBAAkB;AAClB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,aAAa,sBAAS;AACtB,KAAK;AACL;AACA;AACA;AACA;AACA,aAAa,uBAAU;AACvB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,UAAU,uBAAU,IAAI,uBAAU,aAAa,uBAAU;AACzD,QAAQ,uBAAU;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA,UAAU,0BAAa;AACvB;AACA,UAAU,mCAAsB;AAChC,QAAQ,mCAAsB;AAC9B;AACA,MAAM,mCAAsB;AAC5B,MAAM,0BAAa;AACnB;AACA;AACA;AACA;AACA,6BAA6B,uBAAU,aAAa;AACpD;AACA;AACA,cAAc,mCAAsB,yBAAyB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,YAAY,0BAAa;AACzB,YAAY,mCAAsB;AAClC,WAAW;AACX,SAAS;AACT,KAAK;AACL;AACA;AACA;AACA,4BAA4B,uBAAU;AACtC;AACA,QAAQ,uBAAU;AAClB;AACA,QAAQ,KAAK,uBAAU;AACvB,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,MAAM,sBAAS;AACf,MAAM,uBAAU;AAChB;AACA,QAAQ,uBAAU,qCAAqC,kBAAkB;AACzE,QAAQ,sBAAS,KAAK,uBAAU;AAChC;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,OAAO;AACf,QAAQ,KAAK,OAAO;AACpB,KAAK;AACL;AACA;AACA;AACA,yBAAyB,cAAc;AACvC,sCAAsC;AACtC,QAAQ,uBAAU;AAClB,QAAQ,OAAO,CAAC,uBAAU;AAC1B;AACA,KAAK;AACL;AACA;AACA,eAAe,GAAG;AAClB;AACA;AACA;AACA,UAAU,sBAAS,IAAI,uBAAU;AACjC,YAAY,uBAAU,EAAE,uBAAU;AAClC;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;;;AC7MwD;AACX;AAC7C,qEAAe;AACf;AACA,WAAW,YAAY;AACvB;AACA;AACA,mBAAmB,cAAU;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;ACvBiI,CAAC,0EAAe,8BAAG,EAAC,C;;ACAjE;AAC3B;AACL;;;AAGrD;AACA,CAAmG;AACnG,IAAI,iBAAS,GAAG,kBAAU;AAC1B,EAAE,mCAAM;AACR,EAAE,2CAAM;AACR,EAAE,oDAAe;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAAe,iBAAS,Q;;AClB+B;AACN;AACE;AACV;AACqB;AAC9D;AACA,oBAAoB,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,4CAAe;AACf;AACA;AACA,CAAC,EAAC;AAkBwB;AAkBxB;AACF;AACA;AACA;AACA;;;AC5DwB;AACA;AACxB,gDAAe,KAAG;AACI","sources":["webpack://augustine-jkmap/webpack/universalModuleDefinition","webpack://augustine-jkmap/./node_modules/esri-loader/dist/umd/esri-loader.js","webpack://augustine-jkmap/./node_modules/terraformer-wkt-parser/terraformer-wkt-parser.js","webpack://augustine-jkmap/./node_modules/terraformer/terraformer.js","webpack://augustine-jkmap/./node_modules/terraformer-arcgis-parser/terraformer-arcgis-parser.js","webpack://augustine-jkmap/webpack/bootstrap","webpack://augustine-jkmap/webpack/runtime/compat get default export","webpack://augustine-jkmap/webpack/runtime/define property getters","webpack://augustine-jkmap/webpack/runtime/global","webpack://augustine-jkmap/webpack/runtime/hasOwnProperty shorthand","webpack://augustine-jkmap/webpack/runtime/make namespace object","webpack://augustine-jkmap/webpack/runtime/publicPath","webpack://augustine-jkmap/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?ae56","webpack://augustine-jkmap/./src/config/map.config.js","webpack://augustine-jkmap/./src/config/loadLayers.js","webpack://augustine-jkmap/./src/config/comstom.js","webpack://augustine-jkmap/./src/config/toArcGISPoint.js","webpack://augustine-jkmap/./src/config/drawLayer.js","webpack://augustine-jkmap/./src/config/wktMethods.js","webpack://augustine-jkmap/./src/utils/index.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/bind.js","webpack://augustine-jkmap/./node_modules/axios/lib/utils.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/AxiosError.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/null.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/toFormData.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/buildURL.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/InterceptorManager.js","webpack://augustine-jkmap/./node_modules/axios/lib/defaults/transitional.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/browser/classes/Blob.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/browser/index.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/common/utils.js","webpack://augustine-jkmap/./node_modules/axios/lib/platform/index.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://augustine-jkmap/./node_modules/axios/lib/defaults/index.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/transformData.js","webpack://augustine-jkmap/./node_modules/axios/lib/cancel/isCancel.js","webpack://augustine-jkmap/./node_modules/axios/lib/cancel/CanceledError.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/settle.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/speedometer.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/throttle.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/progressEventReducer.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/cookies.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/combineURLs.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/buildFullPath.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/mergeConfig.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/resolveConfig.js","webpack://augustine-jkmap/./node_modules/axios/lib/adapters/xhr.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/composeSignals.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/trackStream.js","webpack://augustine-jkmap/./node_modules/axios/lib/adapters/fetch.js","webpack://augustine-jkmap/./node_modules/axios/lib/adapters/adapters.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/dispatchRequest.js","webpack://augustine-jkmap/./node_modules/axios/lib/env/data.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/validator.js","webpack://augustine-jkmap/./node_modules/axios/lib/core/Axios.js","webpack://augustine-jkmap/./node_modules/axios/lib/cancel/CancelToken.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/spread.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/isAxiosError.js","webpack://augustine-jkmap/./node_modules/axios/lib/helpers/HttpStatusCode.js","webpack://augustine-jkmap/./node_modules/axios/lib/axios.js","webpack://augustine-jkmap/./src/mock/api.js","webpack://augustine-jkmap/./src/utils/bearing.js","webpack://augustine-jkmap/./src/svgIcon.vue?8031","webpack://augustine-jkmap/src/svgIcon.vue","webpack://augustine-jkmap/./src/svgIcon.vue?eb42","webpack://augustine-jkmap/./node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js","webpack://augustine-jkmap/./src/svgIcon.vue","webpack://augustine-jkmap/./src/vue2/loading.vue?51c5","webpack://augustine-jkmap/src/vue2/loading.vue","webpack://augustine-jkmap/./src/vue2/loading.vue?e8e5","webpack://augustine-jkmap/./src/vue2/loading.vue?bb4f","webpack://augustine-jkmap/./src/vue2/loading.vue?4572","webpack://augustine-jkmap/./src/vue2/loading.vue","webpack://augustine-jkmap/./src/vue2/customTooltip.vue?8745","webpack://augustine-jkmap/src/vue2/customTooltip.vue","webpack://augustine-jkmap/./src/vue2/customTooltip.vue?966b","webpack://augustine-jkmap/./src/vue2/customTooltip.vue?dde6","webpack://augustine-jkmap/./src/vue2/customTooltip.vue?487a","webpack://augustine-jkmap/./src/vue2/customTooltip.vue","webpack://augustine-jkmap/src/vue2/augustineGjMap.vue","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?d092","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?73fc","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?5c54","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?dc18","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue?993e","webpack://augustine-jkmap/./src/vue2/augustineGjMap.vue","webpack://augustine-jkmap/./src/vue2/locationMap.vue?3606","webpack://augustine-jkmap/./src/vue2/search_map.vue?d0cf","webpack://augustine-jkmap/./src/vue2/CustomModal.vue?2ceb","webpack://augustine-jkmap/src/vue2/CustomModal.vue","webpack://augustine-jkmap/./src/vue2/CustomModal.vue?ffd1","webpack://augustine-jkmap/./src/vue2/CustomModal.vue?4d51","webpack://augustine-jkmap/./src/vue2/CustomModal.vue?f83d","webpack://augustine-jkmap/./src/vue2/CustomModal.vue","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue?5ebf","webpack://augustine-jkmap/src/vue2/CustomSearchInput.vue","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue?b4a2","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue?485a","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue?9042","webpack://augustine-jkmap/./src/vue2/CustomSearchInput.vue","webpack://augustine-jkmap/./src/utils/tianditu.js","webpack://augustine-jkmap/src/vue2/search_map.vue","webpack://augustine-jkmap/./src/vue2/search_map.vue?73d2","webpack://augustine-jkmap/./src/vue2/search_map.vue","webpack://augustine-jkmap/./src/mixins/mapLocationMixin.js","webpack://augustine-jkmap/./src/lib/eventManager.js","webpack://augustine-jkmap/./src/lib/MapWrapper.js","webpack://augustine-jkmap/src/vue2/locationMap.vue","webpack://augustine-jkmap/./src/vue2/locationMap.vue?6a1c","webpack://augustine-jkmap/./src/vue2/locationMap.vue","webpack://augustine-jkmap/./src/vue2/augustineMap.vue?48fc","webpack://augustine-jkmap/./src/mixins/mapMixin.js","webpack://augustine-jkmap/src/vue2/augustineMap.vue","webpack://augustine-jkmap/./src/vue2/augustineMap.vue?bdf0","webpack://augustine-jkmap/./src/vue2/augustineMap.vue","webpack://augustine-jkmap/./src/vue2/mapList.vue?7590","webpack://augustine-jkmap/./src/mixins/mapListMixin.js","webpack://augustine-jkmap/src/vue2/mapList.vue","webpack://augustine-jkmap/./src/vue2/mapList.vue?b572","webpack://augustine-jkmap/./src/vue2/mapList.vue","webpack://augustine-jkmap/./src/index.js","webpack://augustine-jkmap/./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"augustine-jkmap\"] = factory();\n\telse\n\t\troot[\"augustine-jkmap\"] = factory();\n})((typeof self !== 'undefined' ? self : this), () => {\nreturn ","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.esriLoader = global.esriLoader || {})));\n}(this, (function (exports) { 'use strict';\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar isBrowser = typeof window !== 'undefined';\n// allow consuming libraries to provide their own Promise implementations\nvar utils = {\n Promise: isBrowser ? window['Promise'] : undefined\n};\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar DEFAULT_VERSION = '4.25';\nvar NEXT = 'next';\nfunction parseVersion(version) {\n if (version.toLowerCase() === NEXT) {\n return NEXT;\n }\n var match = version && version.match(/^(\\d)\\.(\\d+)/);\n return match && {\n major: parseInt(match[1], 10),\n minor: parseInt(match[2], 10)\n };\n}\n/**\n * Get the CDN url for a given version\n *\n * @param version Ex: '4.25' or '3.42'. Defaults to the latest 4.x version.\n */\nfunction getCdnUrl(version) {\n if (version === void 0) { version = DEFAULT_VERSION; }\n return \"https://js.arcgis.com/\".concat(version, \"/\");\n}\n/**\n * Get the CDN url for a the CSS for a given version and/or theme\n *\n * @param version Ex: '4.25', '3.42', or 'next'. Defaults to the latest 4.x version.\n */\nfunction getCdnCssUrl(version) {\n if (version === void 0) { version = DEFAULT_VERSION; }\n var baseUrl = getCdnUrl(version);\n var parsedVersion = parseVersion(version);\n if (parsedVersion !== NEXT && parsedVersion.major === 3) {\n // NOTE: at 3.11 the CSS moved from the /js folder to the root\n var path = parsedVersion.minor <= 10 ? 'js/' : '';\n return \"\".concat(baseUrl).concat(path, \"esri/css/esri.css\");\n }\n else {\n // assume 4.x\n return \"\".concat(baseUrl, \"esri/themes/light/main.css\");\n }\n}\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nfunction createStylesheetLink(href) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n return link;\n}\nfunction insertLink(link, before) {\n if (before) {\n // the link should be inserted before a specific node\n var beforeNode = document.querySelector(before);\n beforeNode.parentNode.insertBefore(link, beforeNode);\n }\n else {\n // append the link to then end of the head tag\n document.head.appendChild(link);\n }\n}\n// check if the css url has been injected or added manually\nfunction getCss(url) {\n return document.querySelector(\"link[href*=\\\"\".concat(url, \"\\\"]\"));\n}\nfunction getCssUrl(urlOrVersion) {\n return !urlOrVersion || parseVersion(urlOrVersion)\n // if it's a valid version string return the CDN URL\n ? getCdnCssUrl(urlOrVersion)\n // otherwise assume it's a URL and return that\n : urlOrVersion;\n}\n// lazy load the CSS needed for the ArcGIS API\nfunction loadCss(urlOrVersion, before) {\n var url = getCssUrl(urlOrVersion);\n var link = getCss(url);\n if (!link) {\n // create & load the css link\n link = createStylesheetLink(url);\n insertLink(link, before);\n }\n return link;\n}\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\nvar defaultOptions = {};\nfunction createScript(url) {\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.setAttribute('data-esri-loader', 'loading');\n return script;\n}\n// add a one-time load handler to script\n// and optionally add a one time error handler as well\nfunction handleScriptLoad(script, callback, errback) {\n var onScriptError;\n if (errback) {\n // set up an error handler as well\n onScriptError = handleScriptError(script, errback);\n }\n var onScriptLoad = function () {\n // pass the script to the callback\n callback(script);\n // remove this event listener\n script.removeEventListener('load', onScriptLoad, false);\n if (onScriptError) {\n // remove the error listener as well\n script.removeEventListener('error', onScriptError, false);\n }\n };\n script.addEventListener('load', onScriptLoad, false);\n}\n// add a one-time error handler to the script\nfunction handleScriptError(script, callback) {\n var onScriptError = function (e) {\n // reject the promise and remove this event listener\n callback(e.error || new Error(\"There was an error attempting to load \".concat(script.src)));\n // remove this event listener\n script.removeEventListener('error', onScriptError, false);\n };\n script.addEventListener('error', onScriptError, false);\n return onScriptError;\n}\n// allow the user to configure default script options rather than passing options to `loadModules` each time\nfunction setDefaultOptions(options) {\n if (options === void 0) { options = {}; }\n defaultOptions = options;\n}\n// get the script injected by this library\nfunction getScript() {\n return document.querySelector('script[data-esri-loader]');\n}\n// has ArcGIS API been loaded on the page yet?\nfunction isLoaded() {\n var globalRequire = window['require'];\n // .on() ensures that it's Dojo's AMD loader\n return globalRequire && globalRequire.on;\n}\n// load the ArcGIS API on the page\nfunction loadScript(options) {\n if (options === void 0) { options = {}; }\n // we would have liked to use spread like { ...defaultOptions, ...options }\n // but TS would inject a polyfill that would require use to configure rollup w content: 'window'\n // if we have another occasion to use spread, let's do that and replace this for...in\n var opts = {};\n [defaultOptions, options].forEach(function (obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n opts[prop] = obj[prop];\n }\n }\n });\n // URL to load\n var version = opts.version;\n var url = opts.url || getCdnUrl(version);\n return new utils.Promise(function (resolve, reject) {\n var script = getScript();\n if (script) {\n // the API is already loaded or in the process of loading...\n // NOTE: have to test against scr attribute value, not script.src\n // b/c the latter will return the full url for relative paths\n var src = script.getAttribute('src');\n if (src !== url) {\n // potentially trying to load a different version of the API\n reject(new Error(\"The ArcGIS API for JavaScript is already loaded (\".concat(src, \").\")));\n }\n else {\n if (isLoaded()) {\n // the script has already successfully loaded\n resolve(script);\n }\n else {\n // wait for the script to load and then resolve\n handleScriptLoad(script, resolve, reject);\n }\n }\n }\n else {\n if (isLoaded()) {\n // the API has been loaded by some other means\n // potentially trying to load a different version of the API\n reject(new Error(\"The ArcGIS API for JavaScript is already loaded.\"));\n }\n else {\n // this is the first time attempting to load the API\n var css = opts.css;\n if (css) {\n var useVersion = css === true;\n // load the css before loading the script\n loadCss(useVersion ? version : css, opts.insertCssBefore);\n }\n // create a script object whose source points to the API\n script = createScript(url);\n // _currentUrl = url;\n // once the script is loaded...\n handleScriptLoad(script, function () {\n // update the status of the script\n script.setAttribute('data-esri-loader', 'loaded');\n // return the script\n resolve(script);\n }, reject);\n // load the script\n document.body.appendChild(script);\n }\n }\n });\n}\n\n/* Copyright (c) 2022 Environmental Systems Research Institute, Inc.\n * Apache-2.0 */\n// wrap Dojo's require() in a promise\nfunction requireModules(modules) {\n return new utils.Promise(function (resolve, reject) {\n // If something goes wrong loading the esri/dojo scripts, reject with the error.\n var errorHandler = window['require'].on('error', reject);\n window['require'](modules, function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n // remove error handler\n errorHandler.remove();\n // Resolve with the parameters from dojo require as an array.\n resolve(args);\n });\n });\n}\n// returns a promise that resolves with an array of the required modules\n// also will attempt to lazy load the ArcGIS API if it has not already been loaded\nfunction loadModules(modules, loadScriptOptions) {\n if (loadScriptOptions === void 0) { loadScriptOptions = {}; }\n if (!isLoaded()) {\n // script is not yet loaded, is it in the process of loading?\n var script = getScript();\n var src = script && script.getAttribute('src');\n if (!loadScriptOptions.url && src) {\n // script is still loading and user did not specify a URL\n // in this case we want to default to the URL that's being loaded\n // instead of defaulting to the latest 4.x URL\n loadScriptOptions.url = src;\n }\n // attempt to load the script then load the modules\n return loadScript(loadScriptOptions).then(function () { return requireModules(modules); });\n }\n else {\n // script is already loaded, just load the modules\n return requireModules(modules);\n }\n}\n\n/*\n Copyright (c) 2022 Esri\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n// re-export the functions that are part of the public API\n\nexports.utils = utils;\nexports.loadModules = loadModules;\nexports.getScript = getScript;\nexports.isLoaded = isLoaded;\nexports.loadScript = loadScript;\nexports.setDefaultOptions = setDefaultOptions;\nexports.loadCss = loadCss;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=esri-loader.js.map\n","(function (root, factory) {\n\n // Node.\n if(typeof module === 'object' && typeof module.exports === 'object') {\n exports = module.exports = factory(require(\"terraformer\"));\n } else if(typeof navigator === \"object\") {\n // Browser Global.\n if (!root.Terraformer){\n throw new Error(\"Terraformer.WKT requires the core Terraformer library. http://github.com/esri/terraformer\")\n }\n root.Terraformer.WKT = factory(root.Terraformer);\n }\n\n}(this, function(Terraformer) {\n var exports = { };\n\n /* Jison generated parser */\nvar parser = (function(){\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"expressions\":3,\"point\":4,\"EOF\":5,\"linestring\":6,\"polygon\":7,\"multipoint\":8,\"multilinestring\":9,\"multipolygon\":10,\"coordinate\":11,\"DOUBLE_TOK\":12,\"ptarray\":13,\"COMMA\":14,\"ring_list\":15,\"ring\":16,\"(\":17,\")\":18,\"POINT\":19,\"Z\":20,\"ZM\":21,\"M\":22,\"EMPTY\":23,\"point_untagged\":24,\"polygon_list\":25,\"polygon_untagged\":26,\"point_list\":27,\"LINESTRING\":28,\"POLYGON\":29,\"MULTIPOINT\":30,\"MULTILINESTRING\":31,\"MULTIPOLYGON\":32,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",12:\"DOUBLE_TOK\",14:\"COMMA\",17:\"(\",18:\")\",19:\"POINT\",20:\"Z\",21:\"ZM\",22:\"M\",23:\"EMPTY\",28:\"LINESTRING\",29:\"POLYGON\",30:\"MULTIPOINT\",31:\"MULTILINESTRING\",32:\"MULTIPOLYGON\"},\nproductions_: [0,[3,2],[3,2],[3,2],[3,2],[3,2],[3,2],[11,2],[11,3],[11,4],[13,3],[13,1],[15,3],[15,1],[16,3],[4,4],[4,5],[4,5],[4,5],[4,2],[24,1],[24,3],[25,3],[25,1],[26,3],[27,3],[27,1],[6,4],[6,5],[6,5],[6,5],[6,2],[7,4],[7,5],[7,5],[7,5],[7,2],[8,4],[8,5],[8,5],[8,5],[8,2],[9,4],[9,5],[9,5],[9,5],[9,2],[10,4],[10,5],[10,5],[10,5],[10,2]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$,_$\n) {\n\nvar $0 = $.length - 1;\nswitch (yystate) {\ncase 1: return $[$0-1]; \nbreak;\ncase 2: return $[$0-1]; \nbreak;\ncase 3: return $[$0-1]; \nbreak;\ncase 4: return $[$0-1]; \nbreak;\ncase 5: return $[$0-1]; \nbreak;\ncase 6: return $[$0-1]; \nbreak;\ncase 7: this.$ = new PointArray([ Number($[$0-1]), Number($[$0]) ]); \nbreak;\ncase 8: this.$ = new PointArray([ Number($[$0-2]), Number($[$0-1]), Number($[$0]) ]); \nbreak;\ncase 9: this.$ = new PointArray([ Number($[$0-3]), Number($[$0-2]), Number($[$0-1]), Number($[$0]) ]); \nbreak;\ncase 10: this.$ = $[$0-2].addPoint($[$0]); \nbreak;\ncase 11: this.$ = $[$0]; \nbreak;\ncase 12: this.$ = $[$0-2].addRing($[$0]); \nbreak;\ncase 13: this.$ = new RingList($[$0]); \nbreak;\ncase 14: this.$ = new Ring($[$0-1]); \nbreak;\ncase 15: this.$ = { \"type\": \"Point\", \"coordinates\": $[$0-1].data[0] }; \nbreak;\ncase 16: this.$ = { \"type\": \"Point\", \"coordinates\": $[$0-1].data[0], \"properties\": { z: true } }; \nbreak;\ncase 17: this.$ = { \"type\": \"Point\", \"coordinates\": $[$0-1].data[0], \"properties\": { z: true, m: true } }; \nbreak;\ncase 18: this.$ = { \"type\": \"Point\", \"coordinates\": $[$0-1].data[0], \"properties\": { m: true } }; \nbreak;\ncase 19: this.$ = { \"type\": \"Point\", \"coordinates\": [ ] }; \nbreak;\ncase 20: this.$ = $[$0]; \nbreak;\ncase 21: this.$ = $[$0-1]; \nbreak;\ncase 22: this.$ = $[$0-2].addPolygon($[$0]); \nbreak;\ncase 23: this.$ = new PolygonList($[$0]); \nbreak;\ncase 24: this.$ = $[$0-1]; \nbreak;\ncase 25: this.$ = $[$0-2].addPoint($[$0]); \nbreak;\ncase 26: this.$ = $[$0]; \nbreak;\ncase 27: this.$ = { \"type\": \"LineString\", \"coordinates\": $[$0-1].data }; \nbreak;\ncase 28: this.$ = { \"type\": \"LineString\", \"coordinates\": $[$0-1].data, \"properties\": { z: true } }; \nbreak;\ncase 29: this.$ = { \"type\": \"LineString\", \"coordinates\": $[$0-1].data, \"properties\": { m: true } }; \nbreak;\ncase 30: this.$ = { \"type\": \"LineString\", \"coordinates\": $[$0-1].data, \"properties\": { z: true, m: true } }; \nbreak;\ncase 31: this.$ = { \"type\": \"LineString\", \"coordinates\": [ ] }; \nbreak;\ncase 32: this.$ = { \"type\": \"Polygon\", \"coordinates\": $[$0-1].toJSON() }; \nbreak;\ncase 33: this.$ = { \"type\": \"Polygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true } }; \nbreak;\ncase 34: this.$ = { \"type\": \"Polygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { m: true } }; \nbreak;\ncase 35: this.$ = { \"type\": \"Polygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true, m: true } }; \nbreak;\ncase 36: this.$ = { \"type\": \"Polygon\", \"coordinates\": [ ] }; \nbreak;\ncase 37: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": $[$0-1].data }; \nbreak;\ncase 38: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": $[$0-1].data, \"properties\": { z: true } }; \nbreak;\ncase 39: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": $[$0-1].data, \"properties\": { m: true } }; \nbreak;\ncase 40: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": $[$0-1].data, \"properties\": { z: true, m: true } }; \nbreak;\ncase 41: this.$ = { \"type\": \"MultiPoint\", \"coordinates\": [ ] } \nbreak;\ncase 42: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": $[$0-1].toJSON() }; \nbreak;\ncase 43: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true } }; \nbreak;\ncase 44: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { m: true } }; \nbreak;\ncase 45: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true, m: true } }; \nbreak;\ncase 46: this.$ = { \"type\": \"MultiLineString\", \"coordinates\": [ ] }; \nbreak;\ncase 47: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": $[$0-1].toJSON() }; \nbreak;\ncase 48: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true } }; \nbreak;\ncase 49: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { m: true } }; \nbreak;\ncase 50: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": $[$0-1].toJSON(), \"properties\": { z: true, m: true } }; \nbreak;\ncase 51: this.$ = { \"type\": \"MultiPolygon\", \"coordinates\": [ ] }; \nbreak;\n}\n},\ntable: [{3:1,4:2,6:3,7:4,8:5,9:6,10:7,19:[1,8],28:[1,9],29:[1,10],30:[1,11],31:[1,12],32:[1,13]},{1:[3]},{5:[1,14]},{5:[1,15]},{5:[1,16]},{5:[1,17]},{5:[1,18]},{5:[1,19]},{17:[1,20],20:[1,21],21:[1,22],22:[1,23],23:[1,24]},{17:[1,25],20:[1,26],21:[1,28],22:[1,27],23:[1,29]},{17:[1,30],20:[1,31],21:[1,33],22:[1,32],23:[1,34]},{17:[1,35],20:[1,36],21:[1,38],22:[1,37],23:[1,39]},{17:[1,40],20:[1,41],21:[1,43],22:[1,42],23:[1,44]},{17:[1,45],20:[1,46],21:[1,48],22:[1,47],23:[1,49]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4]},{1:[2,5]},{1:[2,6]},{11:51,12:[1,52],13:50},{17:[1,53]},{17:[1,54]},{17:[1,55]},{5:[2,19]},{11:58,12:[1,52],17:[1,59],24:57,27:56},{17:[1,60]},{17:[1,61]},{17:[1,62]},{5:[2,31]},{15:63,16:64,17:[1,65]},{17:[1,66]},{17:[1,67]},{17:[1,68]},{5:[2,36]},{11:58,12:[1,52],17:[1,59],24:57,27:69},{17:[1,70]},{17:[1,71]},{17:[1,72]},{5:[2,41]},{15:73,16:64,17:[1,65]},{17:[1,74]},{17:[1,75]},{17:[1,76]},{5:[2,46]},{17:[1,79],25:77,26:78},{17:[1,80]},{17:[1,81]},{17:[1,82]},{5:[2,51]},{14:[1,84],18:[1,83]},{14:[2,11],18:[2,11]},{12:[1,85]},{11:51,12:[1,52],13:86},{11:51,12:[1,52],13:87},{11:51,12:[1,52],13:88},{14:[1,90],18:[1,89]},{14:[2,26],18:[2,26]},{14:[2,20],18:[2,20]},{11:91,12:[1,52]},{11:58,12:[1,52],17:[1,59],24:57,27:92},{11:58,12:[1,52],17:[1,59],24:57,27:93},{11:58,12:[1,52],17:[1,59],24:57,27:94},{14:[1,96],18:[1,95]},{14:[2,13],18:[2,13]},{11:51,12:[1,52],13:97},{15:98,16:64,17:[1,65]},{15:99,16:64,17:[1,65]},{15:100,16:64,17:[1,65]},{14:[1,90],18:[1,101]},{11:58,12:[1,52],17:[1,59],24:57,27:102},{11:58,12:[1,52],17:[1,59],24:57,27:103},{11:58,12:[1,52],17:[1,59],24:57,27:104},{14:[1,96],18:[1,105]},{15:106,16:64,17:[1,65]},{15:107,16:64,17:[1,65]},{15:108,16:64,17:[1,65]},{14:[1,110],18:[1,109]},{14:[2,23],18:[2,23]},{15:111,16:64,17:[1,65]},{17:[1,79],25:112,26:78},{17:[1,79],25:113,26:78},{17:[1,79],25:114,26:78},{5:[2,15]},{11:115,12:[1,52]},{12:[1,116],14:[2,7],18:[2,7]},{14:[1,84],18:[1,117]},{14:[1,84],18:[1,118]},{14:[1,84],18:[1,119]},{5:[2,27]},{11:58,12:[1,52],17:[1,59],24:120},{18:[1,121]},{14:[1,90],18:[1,122]},{14:[1,90],18:[1,123]},{14:[1,90],18:[1,124]},{5:[2,32]},{16:125,17:[1,65]},{14:[1,84],18:[1,126]},{14:[1,96],18:[1,127]},{14:[1,96],18:[1,128]},{14:[1,96],18:[1,129]},{5:[2,37]},{14:[1,90],18:[1,130]},{14:[1,90],18:[1,131]},{14:[1,90],18:[1,132]},{5:[2,42]},{14:[1,96],18:[1,133]},{14:[1,96],18:[1,134]},{14:[1,96],18:[1,135]},{5:[2,47]},{17:[1,79],26:136},{14:[1,96],18:[1,137]},{14:[1,110],18:[1,138]},{14:[1,110],18:[1,139]},{14:[1,110],18:[1,140]},{14:[2,10],18:[2,10]},{12:[1,141],14:[2,8],18:[2,8]},{5:[2,16]},{5:[2,17]},{5:[2,18]},{14:[2,25],18:[2,25]},{14:[2,21],18:[2,21]},{5:[2,28]},{5:[2,29]},{5:[2,30]},{14:[2,12],18:[2,12]},{14:[2,14],18:[2,14]},{5:[2,33]},{5:[2,34]},{5:[2,35]},{5:[2,38]},{5:[2,39]},{5:[2,40]},{5:[2,43]},{5:[2,44]},{5:[2,45]},{14:[2,22],18:[2,22]},{14:[2,24],18:[2,24]},{5:[2,48]},{5:[2,49]},{5:[2,50]},{14:[2,9],18:[2,9]}],\ndefaultActions: {14:[2,1],15:[2,2],16:[2,3],17:[2,4],18:[2,5],19:[2,6],24:[2,19],29:[2,31],34:[2,36],39:[2,41],44:[2,46],49:[2,51],83:[2,15],89:[2,27],95:[2,32],101:[2,37],105:[2,42],109:[2,47],117:[2,16],118:[2,17],119:[2,18],122:[2,28],123:[2,29],124:[2,30],127:[2,33],128:[2,34],129:[2,35],130:[2,38],131:[2,39],132:[2,40],133:[2,43],134:[2,44],135:[2,45],138:[2,48],139:[2,49],140:[2,50]},\nparseError: function parseError (str, hash) {\n throw new Error(str);\n},\nparse: function parse(input) {\n var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n this.yy.parser = this;\n if (typeof this.lexer.yylloc == \"undefined\")\n this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n var ranges = this.lexer.options && this.lexer.options.ranges;\n if (typeof this.yy.parseError === \"function\")\n this.parseError = this.yy.parseError;\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = self.lexer.lex() || 1;\n if (typeof token !== \"number\") {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == \"undefined\") {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === \"undefined\" || !action.length || !action[0]) {\n var errStr = \"\";\n if (!recovering) {\n expected = [];\n for (p in table[state])\n if (this.terminals_[p] && p > 2) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n if (this.lexer.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1?\"end of input\":\"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n }\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0)\n recovering--;\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n if (typeof r !== \"undefined\") {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}\n};\nundefined/* Jison generated lexer */\nvar lexer = (function(){\nvar lexer = ({EOF:1,\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\nsetInput:function (input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n if (this.options.ranges) this.yylloc.range = [0,0];\n this.offset = 0;\n return this;\n },\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) this.yylloc.range[1]++;\n\n this._input = this._input.slice(1);\n return ch;\n },\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length-len-1);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length-1);\n this.matched = this.matched.substr(0, this.matched.length-1);\n\n if (lines.length-1) this.yylineno -= lines.length-1;\n var r = this.yylloc.range;\n\n this.yylloc = {first_line: this.yylloc.first_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n return this;\n },\nmore:function () {\n this._more = true;\n return this;\n },\nless:function (n) {\n this.unput(this.match.slice(n));\n },\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n },\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n },\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token,\n match,\n tempMatch,\n index,\n col,\n lines;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i=0;i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (!this.options.flex) break;\n }\n }\n if (match) {\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = {first_line: this.yylloc.last_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length};\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\n if (this.done && this._input) this.done = false;\n if (token) return token;\n else return;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n {text: \"\", token: null, line: this.yylineno});\n }\n },\nlex:function lex () {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\npopState:function popState () {\n return this.conditionStack.pop();\n },\n_currentRules:function _currentRules () {\n return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n },\ntopState:function () {\n return this.conditionStack[this.conditionStack.length-2];\n },\npushState:function begin (condition) {\n this.begin(condition);\n }});\nlexer.options = {};\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START\n) {\n\nvar YYSTATE=YY_START\nswitch($avoiding_name_collisions) {\ncase 0:// ignore\nbreak;\ncase 1:return 17\nbreak;\ncase 2:return 18\nbreak;\ncase 3:return 12\nbreak;\ncase 4:return 19\nbreak;\ncase 5:return 28\nbreak;\ncase 6:return 29\nbreak;\ncase 7:return 30\nbreak;\ncase 8:return 31\nbreak;\ncase 9:return 32\nbreak;\ncase 10:return 14\nbreak;\ncase 11:return 23\nbreak;\ncase 12:return 22\nbreak;\ncase 13:return 20\nbreak;\ncase 14:return 21\nbreak;\ncase 15:return 5\nbreak;\ncase 16:return \"INVALID\"\nbreak;\n}\n};\nlexer.rules = [/^(?:\\s+)/,/^(?:\\()/,/^(?:\\))/,/^(?:-?[0-9]+(\\.[0-9]+)?([eE][\\-\\+]?[0-9]+)?)/,/^(?:POINT\\b)/,/^(?:LINESTRING\\b)/,/^(?:POLYGON\\b)/,/^(?:MULTIPOINT\\b)/,/^(?:MULTILINESTRING\\b)/,/^(?:MULTIPOLYGON\\b)/,/^(?:,)/,/^(?:EMPTY\\b)/,/^(?:M\\b)/,/^(?:Z\\b)/,/^(?:ZM\\b)/,/^(?:$)/,/^(?:.)/];\nlexer.conditions = {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],\"inclusive\":true}};\nreturn lexer;})()\nparser.lexer = lexer;\nfunction Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n function PointArray (point) {\n this.data = [ point ];\n this.type = 'PointArray';\n }\n\n PointArray.prototype.addPoint = function (point) {\n if (point.type === 'PointArray') {\n this.data = this.data.concat(point.data);\n } else {\n this.data.push(point);\n }\n\n return this;\n };\n\n PointArray.prototype.toJSON = function () {\n return this.data;\n };\n\n function Ring (point) {\n this.data = point;\n this.type = 'Ring';\n }\n\n Ring.prototype.toJSON = function () {\n var data = [ ];\n\n for (var i = 0; i < this.data.data.length; i++) {\n data.push(this.data.data[i]);\n }\n\n return data;\n };\n\n function RingList (ring) {\n this.data = [ ring ];\n this.type = 'RingList';\n }\n\n RingList.prototype.addRing = function (ring) {\n this.data.push(ring);\n\n return this;\n };\n\n RingList.prototype.toJSON = function () {\n var data = [ ];\n\n for (var i = 0; i < this.data.length; i++) {\n data.push(this.data[i].toJSON());\n }\n\n if (data.length === 1) {\n return data;\n } else {\n return data;\n }\n };\n\n function PolygonList (polygon) {\n this.data = [ polygon ];\n this.type = 'PolygonList';\n }\n\n PolygonList.prototype.addPolygon = function (polygon) {\n this.data.push(polygon);\n\n return this;\n };\n\n PolygonList.prototype.toJSON = function () {\n var data = [ ];\n\n for (var i = 0; i < this.data.length; i++) {\n data = data.concat( [ this.data[i].toJSON() ] );\n }\n\n return data;\n };\n\n function _parse () {\n return parser.parse.apply(parser, arguments);\n }\n\n function parse (element) {\n var res, primitive;\n\n try {\n res = parser.parse(element);\n } catch (err) {\n throw Error(\"Unable to parse: \" + err);\n }\n\n return Terraformer.Primitive(res);\n }\n\n function arrayToRing (arr) {\n var parts = [ ], ret = '';\n\n for (var i = 0; i < arr.length; i++) {\n parts.push(arr[i].join(' '));\n }\n\n ret += '(' + parts.join(', ') + ')';\n\n return ret;\n\n }\n\n function pointToWKTPoint (primitive) {\n var ret = 'POINT ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates.length === 3) {\n // 3d or time? default to 3d\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates.length === 4) {\n // 3d and time\n ret += 'ZM ';\n }\n\n // include coordinates\n ret += '(' + primitive.coordinates.join(' ') + ')';\n\n return ret;\n }\n\n function lineStringToWKTLineString (primitive) {\n var ret = 'LINESTRING ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += arrayToRing(primitive.coordinates);\n\n return ret;\n }\n\n function polygonToWKTPolygon (primitive) {\n var ret = 'POLYGON ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0][0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0][0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += '(';\n var parts = [ ];\n for (var i = 0; i < primitive.coordinates.length; i++) {\n parts.push(arrayToRing(primitive.coordinates[i]));\n }\n\n ret += parts.join(', ');\n ret += ')';\n\n return ret;\n }\n\n function multiPointToWKTMultiPoint (primitive) {\n var ret = 'MULTIPOINT ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += arrayToRing(primitive.coordinates);\n\n return ret;\n }\n\n function multiLineStringToWKTMultiLineString (primitive) {\n var ret = 'MULTILINESTRING ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0][0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0][0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += '(';\n var parts = [ ];\n for (var i = 0; i < primitive.coordinates.length; i++) {\n parts.push(arrayToRing(primitive.coordinates[i]));\n }\n\n ret += parts.join(', ');\n ret += ')';\n\n return ret;\n }\n\n function multiPolygonToWKTMultiPolygon (primitive) {\n var ret = 'MULTIPOLYGON ';\n\n if (primitive.coordinates === undefined || primitive.coordinates.length === 0 || primitive.coordinates[0].length === 0 || primitive.coordinates[0][0].length === 0) {\n ret += 'EMPTY';\n\n return ret;\n } else if (primitive.coordinates[0][0][0].length === 3) {\n if (primitive.properties && primitive.properties.m === true) {\n ret += 'M ';\n } else {\n ret += 'Z ';\n }\n } else if (primitive.coordinates[0][0][0].length === 4) {\n ret += 'ZM ';\n }\n\n ret += '(';\n var inner = [ ];\n for (var c = 0; c < primitive.coordinates.length; c++) {\n var it = '(';\n var parts = [ ];\n for (var i = 0; i < primitive.coordinates[c].length; i++) {\n parts.push(arrayToRing(primitive.coordinates[c][i]));\n }\n\n it += parts.join(', ');\n it += ')';\n\n inner.push(it);\n }\n\n ret += inner.join(', ');\n ret += ')';\n\n return ret;\n }\n\n function convert (primitive) {\n switch (primitive.type) {\n case 'Point':\n return pointToWKTPoint(primitive);\n case 'LineString':\n return lineStringToWKTLineString(primitive);\n case 'Polygon':\n return polygonToWKTPolygon(primitive);\n case 'MultiPoint':\n return multiPointToWKTMultiPoint(primitive);\n case 'MultiLineString':\n return multiLineStringToWKTMultiLineString(primitive);\n case 'MultiPolygon':\n return multiPolygonToWKTMultiPolygon(primitive);\n case 'GeometryCollection':\n var ret = 'GEOMETRYCOLLECTION';\n var parts = [ ];\n for (i = 0; i < primitive.geometries.length; i++){\n parts.push(convert(primitive.geometries[i]));\n }\n return ret + '(' + parts.join(', ') + ')';\n default:\n throw Error (\"Unknown Type: \" + primitive.type);\n }\n }\n\n exports.parser = parser;\n exports.Parser = parser.Parser;\n exports.parse = parse;\n exports.convert = convert;\n\n return exports;\n}));\n","(function (root, factory) {\n\n // Node.\n if(typeof module === 'object' && typeof module.exports === 'object') {\n exports = module.exports = factory();\n }\n\n // Browser Global.\n if(typeof window === \"object\") {\n root.Terraformer = factory();\n }\n\n}(this, function(){\n \"use strict\";\n\n var exports = {},\n EarthRadius = 6378137,\n DegreesPerRadian = 57.295779513082320,\n RadiansPerDegree = 0.017453292519943,\n MercatorCRS = {\n \"type\": \"link\",\n \"properties\": {\n \"href\": \"http://spatialreference.org/ref/sr-org/6928/ogcwkt/\",\n \"type\": \"ogcwkt\"\n }\n },\n GeographicCRS = {\n \"type\": \"link\",\n \"properties\": {\n \"href\": \"http://spatialreference.org/ref/epsg/4326/ogcwkt/\",\n \"type\": \"ogcwkt\"\n }\n };\n\n /*\n Internal: isArray function\n */\n function isArray(obj) {\n return Object.prototype.toString.call(obj) === \"[object Array]\";\n }\n\n /*\n Internal: safe warning\n */\n function warn() {\n var args = Array.prototype.slice.apply(arguments);\n\n if (typeof console !== undefined && console.warn) {\n console.warn.apply(console, args);\n }\n }\n\n /*\n Internal: Extend one object with another.\n */\n function extend(destination, source) {\n for (var k in source) {\n if (source.hasOwnProperty(k)) {\n destination[k] = source[k];\n }\n }\n return destination;\n }\n\n /*\n Public: Calculate an bounding box for a geojson object\n */\n function calculateBounds (geojson) {\n if(geojson.type){\n switch (geojson.type) {\n case 'Point':\n return [ geojson.coordinates[0], geojson.coordinates[1], geojson.coordinates[0], geojson.coordinates[1]];\n\n case 'MultiPoint':\n return calculateBoundsFromArray(geojson.coordinates);\n\n case 'LineString':\n return calculateBoundsFromArray(geojson.coordinates);\n\n case 'MultiLineString':\n return calculateBoundsFromNestedArrays(geojson.coordinates);\n\n case 'Polygon':\n return calculateBoundsFromNestedArrays(geojson.coordinates);\n\n case 'MultiPolygon':\n return calculateBoundsFromNestedArrayOfArrays(geojson.coordinates);\n\n case 'Feature':\n return geojson.geometry? calculateBounds(geojson.geometry) : null;\n\n case 'FeatureCollection':\n return calculateBoundsForFeatureCollection(geojson);\n\n case 'GeometryCollection':\n return calculateBoundsForGeometryCollection(geojson);\n\n default:\n throw new Error(\"Unknown type: \" + geojson.type);\n }\n }\n return null;\n }\n\n /*\n Internal: Calculate an bounding box from an nested array of positions\n [\n [\n [ [lng, lat],[lng, lat],[lng, lat] ]\n ]\n [\n [lng, lat],[lng, lat],[lng, lat]\n ]\n [\n [lng, lat],[lng, lat],[lng, lat]\n ]\n ]\n */\n function calculateBoundsFromNestedArrays (array) {\n var x1 = null, x2 = null, y1 = null, y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var inner = array[i];\n\n for (var j = 0; j < inner.length; j++) {\n var lonlat = inner[j];\n\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n }\n\n return [x1, y1, x2, y2 ];\n }\n\n /*\n Internal: Calculate a bounding box from an array of arrays of arrays\n [\n [ [lng, lat],[lng, lat],[lng, lat] ]\n [ [lng, lat],[lng, lat],[lng, lat] ]\n [ [lng, lat],[lng, lat],[lng, lat] ]\n ]\n */\n function calculateBoundsFromNestedArrayOfArrays (array) {\n var x1 = null, x2 = null, y1 = null, y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var inner = array[i];\n\n for (var j = 0; j < inner.length; j++) {\n var innerinner = inner[j];\n for (var k = 0; k < innerinner.length; k++) {\n var lonlat = innerinner[k];\n\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n }\n }\n\n return [x1, y1, x2, y2];\n }\n\n /*\n Internal: Calculate a bounding box from an array of positions\n [\n [lng, lat],[lng, lat],[lng, lat]\n ]\n */\n function calculateBoundsFromArray (array) {\n var x1 = null, x2 = null, y1 = null, y2 = null;\n\n for (var i = 0; i < array.length; i++) {\n var lonlat = array[i];\n var lon = lonlat[0];\n var lat = lonlat[1];\n\n if (x1 === null) {\n x1 = lon;\n } else if (lon < x1) {\n x1 = lon;\n }\n\n if (x2 === null) {\n x2 = lon;\n } else if (lon > x2) {\n x2 = lon;\n }\n\n if (y1 === null) {\n y1 = lat;\n } else if (lat < y1) {\n y1 = lat;\n }\n\n if (y2 === null) {\n y2 = lat;\n } else if (lat > y2) {\n y2 = lat;\n }\n }\n\n return [x1, y1, x2, y2 ];\n }\n\n /*\n Internal: Calculate an bounding box for a feature collection\n */\n function calculateBoundsForFeatureCollection(featureCollection){\n var extents = [], extent;\n for (var i = featureCollection.features.length - 1; i >= 0; i--) {\n extent = calculateBounds(featureCollection.features[i].geometry);\n extents.push([extent[0],extent[1]]);\n extents.push([extent[2],extent[3]]);\n }\n\n return calculateBoundsFromArray(extents);\n }\n\n /*\n Internal: Calculate an bounding box for a geometry collection\n */\n function calculateBoundsForGeometryCollection(geometryCollection){\n var extents = [], extent;\n\n for (var i = geometryCollection.geometries.length - 1; i >= 0; i--) {\n extent = calculateBounds(geometryCollection.geometries[i]);\n extents.push([extent[0],extent[1]]);\n extents.push([extent[2],extent[3]]);\n }\n\n return calculateBoundsFromArray(extents);\n }\n\n function calculateEnvelope(geojson){\n var bounds = calculateBounds(geojson);\n return {\n x: bounds[0],\n y: bounds[1],\n w: Math.abs(bounds[0] - bounds[2]),\n h: Math.abs(bounds[1] - bounds[3])\n };\n }\n\n /*\n Internal: Convert radians to degrees. Used by spatial reference converters.\n */\n function radToDeg(rad) {\n return rad * DegreesPerRadian;\n }\n\n /*\n Internal: Convert degrees to radians. Used by spatial reference converters.\n */\n function degToRad(deg) {\n return deg * RadiansPerDegree;\n }\n\n /*\n Internal: Loop over each array in a geojson object and apply a function to it. Used by spatial reference converters.\n */\n function eachPosition(coordinates, func) {\n for (var i = 0; i < coordinates.length; i++) {\n // we found a number so lets convert this pair\n if(typeof coordinates[i][0] === \"number\"){\n coordinates[i] = func(coordinates[i]);\n }\n // we found an coordinates array it again and run THIS function against it\n if(typeof coordinates[i] === \"object\"){\n coordinates[i] = eachPosition(coordinates[i], func);\n }\n }\n return coordinates;\n }\n\n /*\n Public: Convert a GeoJSON Position object to Geographic (4326)\n */\n function positionToGeographic(position) {\n var x = position[0];\n var y = position[1];\n return [radToDeg(x / EarthRadius) - (Math.floor((radToDeg(x / EarthRadius) + 180) / 360) * 360), radToDeg((Math.PI / 2) - (2 * Math.atan(Math.exp(-1.0 * y / EarthRadius))))];\n }\n\n /*\n Public: Convert a GeoJSON Position object to Web Mercator (102100)\n */\n function positionToMercator(position) {\n var lng = position[0];\n var lat = Math.max(Math.min(position[1], 89.99999), -89.99999);\n return [degToRad(lng) * EarthRadius, EarthRadius/2.0 * Math.log( (1.0 + Math.sin(degToRad(lat))) / (1.0 - Math.sin(degToRad(lat))) )];\n }\n\n /*\n Public: Apply a function agaist all positions in a geojson object. Used by spatial reference converters.\n */\n function applyConverter(geojson, converter, noCrs){\n if(geojson.type === \"Point\") {\n geojson.coordinates = converter(geojson.coordinates);\n } else if(geojson.type === \"Feature\") {\n geojson.geometry = applyConverter(geojson.geometry, converter, true);\n } else if(geojson.type === \"FeatureCollection\") {\n for (var f = 0; f < geojson.features.length; f++) {\n geojson.features[f] = applyConverter(geojson.features[f], converter, true);\n }\n } else if(geojson.type === \"GeometryCollection\") {\n for (var g = 0; g < geojson.geometries.length; g++) {\n geojson.geometries[g] = applyConverter(geojson.geometries[g], converter, true);\n }\n } else {\n geojson.coordinates = eachPosition(geojson.coordinates, converter);\n }\n\n if(!noCrs){\n if(converter === positionToMercator){\n geojson.crs = MercatorCRS;\n }\n }\n\n if(converter === positionToGeographic){\n delete geojson.crs;\n }\n\n return geojson;\n }\n\n /*\n Public: Convert a GeoJSON object to ESRI Web Mercator (102100)\n */\n function toMercator(geojson) {\n return applyConverter(geojson, positionToMercator);\n }\n\n /*\n Convert a GeoJSON object to Geographic coordinates (WSG84, 4326)\n */\n function toGeographic(geojson) {\n return applyConverter(geojson, positionToGeographic);\n }\n\n\n /*\n Internal: -1,0,1 comparison function\n */\n function cmp(a, b) {\n if(a < b) {\n return -1;\n } else if(a > b) {\n return 1;\n } else {\n return 0;\n }\n }\n\n /*\n Internal: used for sorting\n */\n function compSort(p1, p2) {\n if (p1[0] > p2[0]) {\n return -1;\n } else if (p1[0] < p2[0]) {\n return 1;\n } else if (p1[1] > p2[1]) {\n return -1;\n } else if (p1[1] < p2[1]) {\n return 1;\n } else {\n return 0;\n }\n }\n\n\n /*\n Internal: used to determine turn\n */\n function turn(p, q, r) {\n // Returns -1, 0, 1 if p,q,r forms a right, straight, or left turn.\n return cmp((q[0] - p[0]) * (r[1] - p[1]) - (r[0] - p[0]) * (q[1] - p[1]), 0);\n }\n\n /*\n Internal: used to determine euclidean distance between two points\n */\n function euclideanDistance(p, q) {\n // Returns the squared Euclidean distance between p and q.\n var dx = q[0] - p[0];\n var dy = q[1] - p[1];\n\n return dx * dx + dy * dy;\n }\n\n function nextHullPoint(points, p) {\n // Returns the next point on the convex hull in CCW from p.\n var q = p;\n for(var r in points) {\n var t = turn(p, q, points[r]);\n if(t === -1 || t === 0 && euclideanDistance(p, points[r]) > euclideanDistance(p, q)) {\n q = points[r];\n }\n }\n return q;\n }\n\n function convexHull(points) {\n // implementation of the Jarvis March algorithm\n // adapted from http://tixxit.wordpress.com/2009/12/09/jarvis-march/\n\n if(points.length === 0) {\n return [];\n } else if(points.length === 1) {\n return points;\n }\n\n // Returns the points on the convex hull of points in CCW order.\n var hull = [points.sort(compSort)[0]];\n\n for(var p = 0; p < hull.length; p++) {\n var q = nextHullPoint(points, hull[p]);\n\n if(q !== hull[0]) {\n hull.push(q);\n }\n }\n\n return hull;\n }\n\n function isConvex(points) {\n var ltz;\n\n for (var i = 0; i < points.length - 3; i++) {\n var p1 = points[i];\n var p2 = points[i + 1];\n var p3 = points[i + 2];\n var v = [p2[0] - p1[0], p2[1] - p1[1]];\n\n // p3.x * v.y - p3.y * v.x + v.x * p1.y - v.y * p1.x\n var res = p3[0] * v[1] - p3[1] * v[0] + v[0] * p1[1] - v[1] * p1[0];\n\n if (i === 0) {\n if (res < 0) {\n ltz = true;\n } else {\n ltz = false;\n }\n } else {\n if (ltz && (res > 0) || !ltz && (res < 0)) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n function coordinatesContainPoint(coordinates, point) {\n var contains = false;\n for(var i = -1, l = coordinates.length, j = l - 1; ++i < l; j = i) {\n if (((coordinates[i][1] <= point[1] && point[1] < coordinates[j][1]) ||\n (coordinates[j][1] <= point[1] && point[1] < coordinates[i][1])) &&\n (point[0] < (coordinates[j][0] - coordinates[i][0]) * (point[1] - coordinates[i][1]) / (coordinates[j][1] - coordinates[i][1]) + coordinates[i][0])) {\n contains = !contains;\n }\n }\n return contains;\n }\n\n function polygonContainsPoint(polygon, point) {\n if (polygon && polygon.length) {\n if (polygon.length === 1) { // polygon with no holes\n return coordinatesContainPoint(polygon[0], point);\n } else { // polygon with holes\n if (coordinatesContainPoint(polygon[0], point)) {\n for (var i = 1; i < polygon.length; i++) {\n if (coordinatesContainPoint(polygon[i], point)) {\n return false; // found in hole\n }\n }\n\n return true;\n } else {\n return false;\n }\n }\n } else {\n return false;\n }\n }\n\n function edgeIntersectsEdge(a1, a2, b1, b2) {\n var ua_t = (b2[0] - b1[0]) * (a1[1] - b1[1]) - (b2[1] - b1[1]) * (a1[0] - b1[0]);\n var ub_t = (a2[0] - a1[0]) * (a1[1] - b1[1]) - (a2[1] - a1[1]) * (a1[0] - b1[0]);\n var u_b = (b2[1] - b1[1]) * (a2[0] - a1[0]) - (b2[0] - b1[0]) * (a2[1] - a1[1]);\n\n if ( u_b !== 0 ) {\n var ua = ua_t / u_b;\n var ub = ub_t / u_b;\n\n if ( 0 <= ua && ua <= 1 && 0 <= ub && ub <= 1 ) {\n return true;\n }\n }\n\n return false;\n }\n\n function isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function arraysIntersectArrays(a, b) {\n if (isNumber(a[0][0])) {\n if (isNumber(b[0][0])) {\n for (var i = 0; i < a.length - 1; i++) {\n for (var j = 0; j < b.length - 1; j++) {\n if (edgeIntersectsEdge(a[i], a[i + 1], b[j], b[j + 1])) {\n return true;\n }\n }\n }\n } else {\n for (var k = 0; k < b.length; k++) {\n if (arraysIntersectArrays(a, b[k])) {\n return true;\n }\n }\n }\n } else {\n for (var l = 0; l < a.length; l++) {\n if (arraysIntersectArrays(a[l], b)) {\n return true;\n }\n }\n }\n return false;\n }\n\n /*\n Internal: Returns a copy of coordinates for s closed polygon\n */\n function closedPolygon(coordinates) {\n var outer = [ ];\n\n for (var i = 0; i < coordinates.length; i++) {\n var inner = coordinates[i].slice();\n if (pointsEqual(inner[0], inner[inner.length - 1]) === false) {\n inner.push(inner[0]);\n }\n\n outer.push(inner);\n }\n\n return outer;\n }\n\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n\n if (a[i] !== b[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n function coordinatesEqual(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n\n var na = a.slice().sort(compSort);\n var nb = b.slice().sort(compSort);\n\n for (var i = 0; i < na.length; i++) {\n if (na[i].length !== nb[i].length) {\n return false;\n }\n for (var j = 0; j < na.length; j++) {\n if (na[i][j] !== nb[i][j]) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /*\n Internal: An array of variables that will be excluded form JSON objects.\n */\n var excludeFromJSON = [\"length\"];\n\n /*\n Internal: Base GeoJSON Primitive\n */\n function Primitive(geojson){\n if(geojson){\n switch (geojson.type) {\n case 'Point':\n return new Point(geojson);\n\n case 'MultiPoint':\n return new MultiPoint(geojson);\n\n case 'LineString':\n return new LineString(geojson);\n\n case 'MultiLineString':\n return new MultiLineString(geojson);\n\n case 'Polygon':\n return new Polygon(geojson);\n\n case 'MultiPolygon':\n return new MultiPolygon(geojson);\n\n case 'Feature':\n return new Feature(geojson);\n\n case 'FeatureCollection':\n return new FeatureCollection(geojson);\n\n case 'GeometryCollection':\n return new GeometryCollection(geojson);\n\n default:\n throw new Error(\"Unknown type: \" + geojson.type);\n }\n }\n }\n\n Primitive.prototype.toMercator = function(){\n return toMercator(this);\n };\n\n Primitive.prototype.toGeographic = function(){\n return toGeographic(this);\n };\n\n Primitive.prototype.envelope = function(){\n return calculateEnvelope(this);\n };\n\n Primitive.prototype.bbox = function(){\n return calculateBounds(this);\n };\n\n Primitive.prototype.convexHull = function(){\n var coordinates = [ ], i, j;\n if (this.type === 'Point') {\n return null;\n } else if (this.type === 'LineString' || this.type === 'MultiPoint') {\n if (this.coordinates && this.coordinates.length >= 3) {\n coordinates = this.coordinates;\n } else {\n return null;\n }\n } else if (this.type === 'Polygon' || this.type === 'MultiLineString') {\n if (this.coordinates && this.coordinates.length > 0) {\n for (i = 0; i < this.coordinates.length; i++) {\n coordinates = coordinates.concat(this.coordinates[i]);\n }\n if(coordinates.length < 3){\n return null;\n }\n } else {\n return null;\n }\n } else if (this.type === 'MultiPolygon') {\n if (this.coordinates && this.coordinates.length > 0) {\n for (i = 0; i < this.coordinates.length; i++) {\n for (j = 0; j < this.coordinates[i].length; j++) {\n coordinates = coordinates.concat(this.coordinates[i][j]);\n }\n }\n if(coordinates.length < 3){\n return null;\n }\n } else {\n return null;\n }\n } else if(this.type === \"Feature\"){\n var primitive = new Primitive(this.geometry);\n return primitive.convexHull();\n }\n\n return new Polygon({\n type: 'Polygon',\n coordinates: closedPolygon([convexHull(coordinates)])\n });\n };\n\n Primitive.prototype.toJSON = function(){\n var obj = {};\n for (var key in this) {\n if (this.hasOwnProperty(key) && excludeFromJSON.indexOf(key) === -1) {\n obj[key] = this[key];\n }\n }\n obj.bbox = calculateBounds(this);\n return obj;\n };\n\n Primitive.prototype.contains = function(primitive){\n return new Primitive(primitive).within(this);\n };\n\n Primitive.prototype.within = function(primitive) {\n var coordinates, i, j, contains;\n\n // if we are passed a feature, use the polygon inside instead\n if (primitive.type === 'Feature') {\n primitive = primitive.geometry;\n }\n\n // point.within(point) :: equality\n if (primitive.type === \"Point\") {\n if (this.type === \"Point\") {\n return pointsEqual(this.coordinates, primitive.coordinates);\n\n }\n }\n\n // point.within(multilinestring)\n if (primitive.type === \"MultiLineString\") {\n if (this.type === \"Point\") {\n for (i = 0; i < primitive.coordinates.length; i++) {\n var linestring = { type: \"LineString\", coordinates: primitive.coordinates[i] };\n\n if (this.within(linestring)) {\n return true;\n }\n }\n }\n }\n\n // point.within(linestring), point.within(multipoint)\n if (primitive.type === \"LineString\" || primitive.type === \"MultiPoint\") {\n if (this.type === \"Point\") {\n for (i = 0; i < primitive.coordinates.length; i++) {\n if (this.coordinates.length !== primitive.coordinates[i].length) {\n return false;\n }\n\n if (pointsEqual(this.coordinates, primitive.coordinates[i])) {\n return true;\n }\n }\n }\n }\n\n if (primitive.type === \"Polygon\") {\n // polygon.within(polygon)\n if (this.type === \"Polygon\") {\n // check for equal polygons\n if (primitive.coordinates.length === this.coordinates.length) {\n for (i = 0; i < this.coordinates.length; i++) {\n if (coordinatesEqual(this.coordinates[i], primitive.coordinates[i])) {\n return true;\n }\n }\n }\n\n if (this.coordinates.length && polygonContainsPoint(primitive.coordinates, this.coordinates[0][0])) {\n return !arraysIntersectArrays(closedPolygon(this.coordinates), closedPolygon(primitive.coordinates));\n } else {\n return false;\n }\n\n // point.within(polygon)\n } else if (this.type === \"Point\") {\n return polygonContainsPoint(primitive.coordinates, this.coordinates);\n\n // linestring/multipoint withing polygon\n } else if (this.type === \"LineString\" || this.type === \"MultiPoint\") {\n if (!this.coordinates || this.coordinates.length === 0) {\n return false;\n }\n\n for (i = 0; i < this.coordinates.length; i++) {\n if (polygonContainsPoint(primitive.coordinates, this.coordinates[i]) === false) {\n return false;\n }\n }\n\n return true;\n\n // multilinestring.within(polygon)\n } else if (this.type === \"MultiLineString\") {\n for (i = 0; i < this.coordinates.length; i++) {\n var ls = new LineString(this.coordinates[i]);\n\n if (ls.within(primitive) === false) {\n contains++;\n return false;\n }\n }\n\n return true;\n\n // multipolygon.within(polygon)\n } else if (this.type === \"MultiPolygon\") {\n for (i = 0; i < this.coordinates.length; i++) {\n var p1 = new Primitive({ type: \"Polygon\", coordinates: this.coordinates[i] });\n\n if (p1.within(primitive) === false) {\n return false;\n }\n }\n\n return true;\n }\n\n }\n\n if (primitive.type === \"MultiPolygon\") {\n // point.within(multipolygon)\n if (this.type === \"Point\") {\n if (primitive.coordinates.length) {\n for (i = 0; i < primitive.coordinates.length; i++) {\n coordinates = primitive.coordinates[i];\n if (polygonContainsPoint(coordinates, this.coordinates) && arraysIntersectArrays([this.coordinates], primitive.coordinates) === false) {\n return true;\n }\n }\n }\n\n return false;\n // polygon.within(multipolygon)\n } else if (this.type === \"Polygon\") {\n for (i = 0; i < this.coordinates.length; i++) {\n if (primitive.coordinates[i].length === this.coordinates.length) {\n for (j = 0; j < this.coordinates.length; j++) {\n if (coordinatesEqual(this.coordinates[j], primitive.coordinates[i][j])) {\n return true;\n }\n }\n }\n }\n\n if (arraysIntersectArrays(this.coordinates, primitive.coordinates) === false) {\n if (primitive.coordinates.length) {\n for (i = 0; i < primitive.coordinates.length; i++) {\n coordinates = primitive.coordinates[i];\n if (polygonContainsPoint(coordinates, this.coordinates[0][0]) === false) {\n contains = false;\n } else {\n contains = true;\n }\n }\n\n return contains;\n }\n }\n\n // linestring.within(multipolygon), multipoint.within(multipolygon)\n } else if (this.type === \"LineString\" || this.type === \"MultiPoint\") {\n for (i = 0; i < primitive.coordinates.length; i++) {\n var p = { type: \"Polygon\", coordinates: primitive.coordinates[i] };\n\n if (this.within(p)) {\n return true;\n }\n\n return false;\n }\n\n // multilinestring.within(multipolygon)\n } else if (this.type === \"MultiLineString\") {\n for (i = 0; i < this.coordinates.length; i++) {\n var lines = new LineString(this.coordinates[i]);\n\n if (lines.within(primitive) === false) {\n return false;\n }\n }\n\n return true;\n\n // multipolygon.within(multipolygon)\n } else if (this.type === \"MultiPolygon\") {\n for (i = 0; i < primitive.coordinates.length; i++) {\n var mpoly = { type: \"Polygon\", coordinates: primitive.coordinates[i] };\n\n if (this.within(mpoly) === false) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n // default to false\n return false;\n };\n\n Primitive.prototype.intersects = function(primitive) {\n // if we are passed a feature, use the polygon inside instead\n if (primitive.type === 'Feature') {\n primitive = primitive.geometry;\n }\n\n var p = new Primitive(primitive);\n if (this.within(primitive) || p.within(this)) {\n return true;\n }\n\n\n if (this.type !== 'Point' && this.type !== 'MultiPoint' &&\n primitive.type !== 'Point' && primitive.type !== 'MultiPoint') {\n return arraysIntersectArrays(this.coordinates, primitive.coordinates);\n } else if (this.type === 'Feature') {\n // in the case of a Feature, use the internal primitive for intersection\n var inner = new Primitive(this.geometry);\n return inner.intersects(primitive);\n }\n\n warn(\"Type \" + this.type + \" to \" + primitive.type + \" intersection is not supported by intersects\");\n return false;\n };\n\n\n /*\n GeoJSON Point Class\n new Point();\n new Point(x,y,z,wtf);\n new Point([x,y,z,wtf]);\n new Point([x,y]);\n new Point({\n type: \"Point\",\n coordinates: [x,y]\n });\n */\n function Point(input){\n var args = Array.prototype.slice.call(arguments);\n\n if(input && input.type === \"Point\" && input.coordinates){\n extend(this, input);\n } else if(input && isArray(input)) {\n this.coordinates = input;\n } else if(args.length >= 2) {\n this.coordinates = args;\n } else {\n throw \"Terraformer: invalid input for Terraformer.Point\";\n }\n\n this.type = \"Point\";\n }\n\n Point.prototype = new Primitive();\n Point.prototype.constructor = Point;\n\n /*\n GeoJSON MultiPoint Class\n new MultiPoint();\n new MultiPoint([[x,y], [x1,y1]]);\n new MultiPoint({\n type: \"MultiPoint\",\n coordinates: [x,y]\n });\n */\n function MultiPoint(input){\n if(input && input.type === \"MultiPoint\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.MultiPoint\";\n }\n\n this.type = \"MultiPoint\";\n }\n\n MultiPoint.prototype = new Primitive();\n MultiPoint.prototype.constructor = MultiPoint;\n MultiPoint.prototype.forEach = function(func){\n for (var i = 0; i < this.coordinates.length; i++) {\n func.apply(this, [this.coordinates[i], i, this.coordinates]);\n }\n return this;\n };\n MultiPoint.prototype.addPoint = function(point){\n this.coordinates.push(point);\n return this;\n };\n MultiPoint.prototype.insertPoint = function(point, index){\n this.coordinates.splice(index, 0, point);\n return this;\n };\n MultiPoint.prototype.removePoint = function(remove){\n if(typeof remove === \"number\"){\n this.coordinates.splice(remove, 1);\n } else {\n this.coordinates.splice(this.coordinates.indexOf(remove), 1);\n }\n return this;\n };\n MultiPoint.prototype.get = function(i){\n return new Point(this.coordinates[i]);\n };\n\n /*\n GeoJSON LineString Class\n new LineString();\n new LineString([[x,y], [x1,y1]]);\n new LineString({\n type: \"LineString\",\n coordinates: [x,y]\n });\n */\n function LineString(input){\n if(input && input.type === \"LineString\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.LineString\";\n }\n\n this.type = \"LineString\";\n }\n\n LineString.prototype = new Primitive();\n LineString.prototype.constructor = LineString;\n LineString.prototype.addVertex = function(point){\n this.coordinates.push(point);\n return this;\n };\n LineString.prototype.insertVertex = function(point, index){\n this.coordinates.splice(index, 0, point);\n return this;\n };\n LineString.prototype.removeVertex = function(remove){\n this.coordinates.splice(remove, 1);\n return this;\n };\n\n /*\n GeoJSON MultiLineString Class\n new MultiLineString();\n new MultiLineString([ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ]);\n new MultiLineString({\n type: \"MultiLineString\",\n coordinates: [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ]\n });\n */\n function MultiLineString(input){\n if(input && input.type === \"MultiLineString\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.MultiLineString\";\n }\n\n this.type = \"MultiLineString\";\n }\n\n MultiLineString.prototype = new Primitive();\n MultiLineString.prototype.constructor = MultiLineString;\n MultiLineString.prototype.forEach = function(func){\n for (var i = 0; i < this.coordinates.length; i++) {\n func.apply(this, [this.coordinates[i], i, this.coordinates ]);\n }\n };\n MultiLineString.prototype.get = function(i){\n return new LineString(this.coordinates[i]);\n };\n\n /*\n GeoJSON Polygon Class\n new Polygon();\n new Polygon([ [[x,y], [x1,y1], [x2,y2]] ]);\n new Polygon({\n type: \"Polygon\",\n coordinates: [ [[x,y], [x1,y1], [x2,y2]] ]\n });\n */\n function Polygon(input){\n if(input && input.type === \"Polygon\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.Polygon\";\n }\n\n this.type = \"Polygon\";\n }\n\n Polygon.prototype = new Primitive();\n Polygon.prototype.constructor = Polygon;\n Polygon.prototype.addVertex = function(point){\n this.insertVertex(point, this.coordinates[0].length - 1);\n return this;\n };\n Polygon.prototype.insertVertex = function(point, index){\n this.coordinates[0].splice(index, 0, point);\n return this;\n };\n Polygon.prototype.removeVertex = function(remove){\n this.coordinates[0].splice(remove, 1);\n return this;\n };\n Polygon.prototype.close = function() {\n this.coordinates = closedPolygon(this.coordinates);\n };\n Polygon.prototype.hasHoles = function() {\n return this.coordinates.length > 1;\n };\n Polygon.prototype.holes = function() {\n var holes = [];\n if (this.hasHoles()) {\n for (var i = 1; i < this.coordinates.length; i++) {\n holes.push(new Polygon([this.coordinates[i]]));\n }\n }\n return holes;\n };\n\n /*\n GeoJSON MultiPolygon Class\n new MultiPolygon();\n new MultiPolygon([ [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ] ]);\n new MultiPolygon({\n type: \"MultiPolygon\",\n coordinates: [ [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ] ]\n });\n */\n function MultiPolygon(input){\n if(input && input.type === \"MultiPolygon\" && input.coordinates){\n extend(this, input);\n } else if(isArray(input)) {\n this.coordinates = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.MultiPolygon\";\n }\n\n this.type = \"MultiPolygon\";\n }\n\n MultiPolygon.prototype = new Primitive();\n MultiPolygon.prototype.constructor = MultiPolygon;\n MultiPolygon.prototype.forEach = function(func){\n for (var i = 0; i < this.coordinates.length; i++) {\n func.apply(this, [this.coordinates[i], i, this.coordinates ]);\n }\n };\n MultiPolygon.prototype.get = function(i){\n return new Polygon(this.coordinates[i]);\n };\n MultiPolygon.prototype.close = function(){\n var outer = [];\n this.forEach(function(polygon){\n outer.push(closedPolygon(polygon));\n });\n this.coordinates = outer;\n return this;\n };\n\n /*\n GeoJSON Feature Class\n new Feature();\n new Feature({\n type: \"Feature\",\n geometry: {\n type: \"Polygon\",\n coordinates: [ [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ] ]\n }\n });\n new Feature({\n type: \"Polygon\",\n coordinates: [ [ [[x,y], [x1,y1]], [[x2,y2], [x3,y3]] ] ]\n });\n */\n function Feature(input){\n if(input && input.type === \"Feature\"){\n extend(this, input);\n } else if(input && input.type && input.coordinates) {\n this.geometry = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.Feature\";\n }\n\n this.type = \"Feature\";\n }\n\n Feature.prototype = new Primitive();\n Feature.prototype.constructor = Feature;\n\n /*\n GeoJSON FeatureCollection Class\n new FeatureCollection();\n new FeatureCollection([feature, feature1]);\n new FeatureCollection({\n type: \"FeatureCollection\",\n coordinates: [feature, feature1]\n });\n */\n function FeatureCollection(input){\n if(input && input.type === \"FeatureCollection\" && input.features){\n extend(this, input);\n } else if(isArray(input)) {\n this.features = input;\n } else {\n throw \"Terraformer: invalid input for Terraformer.FeatureCollection\";\n }\n\n this.type = \"FeatureCollection\";\n }\n\n FeatureCollection.prototype = new Primitive();\n FeatureCollection.prototype.constructor = FeatureCollection;\n FeatureCollection.prototype.forEach = function(func){\n for (var i = 0; i < this.features.length; i++) {\n func.apply(this, [this.features[i], i, this.features]);\n }\n };\n FeatureCollection.prototype.get = function(id){\n var found;\n this.forEach(function(feature){\n if(feature.id === id){\n found = feature;\n }\n });\n return new Feature(found);\n };\n\n /*\n GeoJSON GeometryCollection Class\n new GeometryCollection();\n new GeometryCollection([geometry, geometry1]);\n new GeometryCollection({\n type: \"GeometryCollection\",\n coordinates: [geometry, geometry1]\n });\n */\n function GeometryCollection(input){\n if(input && input.type === \"GeometryCollection\" && input.geometries){\n extend(this, input);\n } else if(isArray(input)) {\n this.geometries = input;\n } else if(input.coordinates && input.type){\n this.type = \"GeometryCollection\";\n this.geometries = [input];\n } else {\n throw \"Terraformer: invalid input for Terraformer.GeometryCollection\";\n }\n\n this.type = \"GeometryCollection\";\n }\n\n GeometryCollection.prototype = new Primitive();\n GeometryCollection.prototype.constructor = GeometryCollection;\n GeometryCollection.prototype.forEach = function(func){\n for (var i = 0; i < this.geometries.length; i++) {\n func.apply(this, [this.geometries[i], i, this.geometries]);\n }\n };\n GeometryCollection.prototype.get = function(i){\n return new Primitive(this.geometries[i]);\n };\n\n function createCircle(center, radius, interpolate){\n var mercatorPosition = positionToMercator(center);\n var steps = interpolate || 64;\n var polygon = {\n type: \"Polygon\",\n coordinates: [[]]\n };\n for(var i=1; i<=steps; i++) {\n var radians = i * (360/steps) * Math.PI / 180;\n polygon.coordinates[0].push([mercatorPosition[0] + radius * Math.cos(radians), mercatorPosition[1] + radius * Math.sin(radians)]);\n }\n polygon.coordinates = closedPolygon(polygon.coordinates);\n\n return toGeographic(polygon);\n }\n\n function Circle (center, radius, interpolate) {\n var steps = interpolate || 64;\n var rad = radius || 250;\n\n if(!center || center.length < 2 || !rad || !steps) {\n throw new Error(\"Terraformer: missing parameter for Terraformer.Circle\");\n }\n\n extend(this, new Feature({\n type: \"Feature\",\n geometry: createCircle(center, rad, steps),\n properties: {\n radius: rad,\n center: center,\n steps: steps\n }\n }));\n }\n\n Circle.prototype = new Primitive();\n Circle.prototype.constructor = Circle;\n Circle.prototype.recalculate = function(){\n this.geometry = createCircle(this.properties.center, this.properties.radius, this.properties.steps);\n return this;\n };\n Circle.prototype.center = function(coordinates){\n if(coordinates){\n this.properties.center = coordinates;\n this.recalculate();\n }\n return this.properties.center;\n };\n Circle.prototype.radius = function(radius){\n if(radius){\n this.properties.radius = radius;\n this.recalculate();\n }\n return this.properties.radius;\n };\n Circle.prototype.steps = function(steps){\n if(steps){\n this.properties.steps = steps;\n this.recalculate();\n }\n return this.properties.steps;\n };\n\n Circle.prototype.toJSON = function() {\n var output = Primitive.prototype.toJSON.call(this);\n return output;\n };\n\n exports.Primitive = Primitive;\n exports.Point = Point;\n exports.MultiPoint = MultiPoint;\n exports.LineString = LineString;\n exports.MultiLineString = MultiLineString;\n exports.Polygon = Polygon;\n exports.MultiPolygon = MultiPolygon;\n exports.Feature = Feature;\n exports.FeatureCollection = FeatureCollection;\n exports.GeometryCollection = GeometryCollection;\n exports.Circle = Circle;\n\n exports.toMercator = toMercator;\n exports.toGeographic = toGeographic;\n\n exports.Tools = {};\n exports.Tools.positionToMercator = positionToMercator;\n exports.Tools.positionToGeographic = positionToGeographic;\n exports.Tools.applyConverter = applyConverter;\n exports.Tools.toMercator = toMercator;\n exports.Tools.toGeographic = toGeographic;\n exports.Tools.createCircle = createCircle;\n\n exports.Tools.calculateBounds = calculateBounds;\n exports.Tools.calculateEnvelope = calculateEnvelope;\n\n exports.Tools.coordinatesContainPoint = coordinatesContainPoint;\n exports.Tools.polygonContainsPoint = polygonContainsPoint;\n exports.Tools.arraysIntersectArrays = arraysIntersectArrays;\n exports.Tools.coordinatesContainPoint = coordinatesContainPoint;\n exports.Tools.coordinatesEqual = coordinatesEqual;\n exports.Tools.convexHull = convexHull;\n exports.Tools.isConvex = isConvex;\n\n exports.MercatorCRS = MercatorCRS;\n exports.GeographicCRS = GeographicCRS;\n\n return exports;\n}));\n","/* globals Terraformer */\n(function (root, factory) {\n\n // Node.\n if(typeof module === 'object' && typeof module.exports === 'object') {\n exports = module.exports = factory(require('terraformer'));\n }\n\n // Browser Global.\n if(typeof root.navigator === \"object\") {\n if (!root.Terraformer){\n throw new Error(\"Terraformer.ArcGIS requires the core Terraformer library. https://github.com/esri/Terraformer\");\n }\n root.Terraformer.ArcGIS = factory(root.Terraformer);\n }\n\n}(this, function(Terraformer) {\n var exports = {};\n\n // https://github.com/Esri/terraformer-arcgis-parser/issues/10\n function decompressGeometry(str) {\n var xDiffPrev = 0;\n var yDiffPrev = 0;\n var points = [];\n var x, y;\n var strings;\n var coefficient;\n\n // Split the string into an array on the + and - characters\n strings = str.match(/((\\+|\\-)[^\\+\\-]+)/g);\n\n // The first value is the coefficient in base 32\n coefficient = parseInt(strings[0], 32);\n\n for (var j = 1; j < strings.length; j += 2) {\n // j is the offset for the x value\n // Convert the value from base 32 and add the previous x value\n x = (parseInt(strings[j], 32) + xDiffPrev);\n xDiffPrev = x;\n\n // j+1 is the offset for the y value\n // Convert the value from base 32 and add the previous y value\n y = (parseInt(strings[j + 1], 32) + yDiffPrev);\n yDiffPrev = y;\n\n points.push([x / coefficient, y / coefficient]);\n }\n\n return points;\n }\n\n // checks if the first and last points of a ring are equal and closes the ring\n function closeRing(coordinates) {\n if (!pointsEqual(coordinates[0], coordinates[coordinates.length - 1])) {\n coordinates.push(coordinates[0]);\n }\n return coordinates;\n }\n\n // checks if 2 x,y points are equal\n function pointsEqual(a, b) {\n for (var i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n\n // shallow object clone for feature properties and attributes\n // from http://jsperf.com/cloning-an-object/2\n function clone(obj) {\n var target = {};\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) {\n target[i] = obj[i];\n }\n }\n return target;\n }\n\n // determine if polygon ring coordinates are clockwise. clockwise signifies outer ring, counter-clockwise an inner ring\n // or hole. this logic was found at http://stackoverflow.com/questions/1165647/how-to-determine-if-a-list-of-polygon-\n // points-are-in-clockwise-order\n function ringIsClockwise(ringToTest) {\n var total = 0,i = 0;\n var rLength = ringToTest.length;\n var pt1 = ringToTest[i];\n var pt2;\n for (i; i < rLength - 1; i++) {\n pt2 = ringToTest[i + 1];\n total += (pt2[0] - pt1[0]) * (pt2[1] + pt1[1]);\n pt1 = pt2;\n }\n return (total >= 0);\n }\n\n // This function ensures that rings are oriented in the right directions\n // outer rings are clockwise, holes are counterclockwise\n function orientRings(poly){\n var output = [];\n var polygon = poly.slice(0);\n var outerRing = closeRing(polygon.shift().slice(0));\n if(outerRing.length >= 4){\n if(!ringIsClockwise(outerRing)){\n outerRing.reverse();\n }\n\n output.push(outerRing);\n\n for (var i = 0; i < polygon.length; i++) {\n var hole = closeRing(polygon[i].slice(0));\n if(hole.length >= 4){\n if(ringIsClockwise(hole)){\n hole.reverse();\n }\n output.push(hole);\n }\n }\n }\n\n return output;\n }\n\n // This function flattens holes in multipolygons to one array of polygons\n // [\n // [\n // [ array of outer coordinates ]\n // [ hole coordinates ]\n // [ hole coordinates ]\n // ],\n // [\n // [ array of outer coordinates ]\n // [ hole coordinates ]\n // [ hole coordinates ]\n // ],\n // ]\n // becomes\n // [\n // [ array of outer coordinates ]\n // [ hole coordinates ]\n // [ hole coordinates ]\n // [ array of outer coordinates ]\n // [ hole coordinates ]\n // [ hole coordinates ]\n // ]\n function flattenMultiPolygonRings(rings){\n var output = [];\n for (var i = 0; i < rings.length; i++) {\n var polygon = orientRings(rings[i]);\n for (var x = polygon.length - 1; x >= 0; x--) {\n var ring = polygon[x].slice(0);\n output.push(ring);\n }\n }\n return output;\n }\n\n function coordinatesContainCoordinates(outer, inner){\n var intersects = Terraformer.Tools.arraysIntersectArrays(outer, inner);\n var contains = Terraformer.Tools.coordinatesContainPoint(outer, inner[0]);\n if(!intersects && contains){\n return true;\n }\n return false;\n }\n\n // do any polygons in this array contain any other polygons in this array?\n // used for checking for holes in arcgis rings\n function convertRingsToGeoJSON(rings){\n var outerRings = [];\n var holes = [];\n var x; // iterator\n var outerRing; // current outer ring being evaluated\n var hole; // current hole being evaluated\n\n // for each ring\n for (var r = 0; r < rings.length; r++) {\n var ring = closeRing(rings[r].slice(0));\n if(ring.length < 4){\n continue;\n }\n // is this ring an outer ring? is it clockwise?\n if(ringIsClockwise(ring)){\n var polygon = [ ring.slice().reverse() ]; // wind outer rings counterclockwise for RFC 7946 compliance\n outerRings.push(polygon); // push to outer rings\n } else {\n holes.push(ring.slice().reverse()); // wind inner rings clockwise for RFC 7946 compliance\n }\n }\n\n var uncontainedHoles = [];\n\n // while there are holes left...\n while(holes.length){\n // pop a hole off out stack\n hole = holes.pop();\n\n // loop over all outer rings and see if they contain our hole.\n var contained = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(coordinatesContainCoordinates(outerRing, hole)){\n // the hole is contained push it into our polygon\n outerRings[x].push(hole);\n contained = true;\n break;\n }\n }\n\n // ring is not contained in any outer ring\n // sometimes this happens https://github.com/Esri/esri-leaflet/issues/320\n if(!contained){\n uncontainedHoles.push(hole);\n }\n }\n\n // if we couldn't match any holes using contains we can now try intersects...\n while(uncontainedHoles.length){\n // pop a hole off out stack\n hole = uncontainedHoles.pop();\n\n // loop over all outer rings and see if any intersect our hole.\n var intersects = false;\n for (x = outerRings.length - 1; x >= 0; x--) {\n outerRing = outerRings[x][0];\n if(Terraformer.Tools.arraysIntersectArrays(outerRing, hole)){\n // the hole intersects the outer ring push it into our polygon\n outerRings[x].push(hole);\n intersects = true;\n break;\n }\n }\n\n // hole does not intersect ANY outer ring at this point\n // make it an outer ring.\n if(!intersects) {\n outerRings.push([hole.reverse()]);\n }\n }\n\n if(outerRings.length === 1){\n return {\n type: 'Polygon',\n coordinates: outerRings[0]\n };\n } else {\n return {\n type: 'MultiPolygon',\n coordinates: outerRings\n };\n }\n }\n\n // ArcGIS -> GeoJSON\n function parse(arcgis, options){\n var geojson = {};\n\n options = options || {};\n options.idAttribute = options.idAttribute || undefined;\n\n if (arcgis.spatialReference && (arcgis.spatialReference.wkid === 3857 || arcgis.spatialReference.wkid === 102100)) {\n geojson.crs = Terraformer.MercatorCRS;\n }\n\n if(typeof arcgis.x === 'number' && typeof arcgis.y === 'number'){\n geojson.type = \"Point\";\n geojson.coordinates = [arcgis.x, arcgis.y];\n if (arcgis.z || arcgis.m){\n geojson.coordinates.push(arcgis.z);\n }\n if (arcgis.m){\n geojson.coordinates.push(arcgis.m);\n }\n }\n\n if(arcgis.points){\n geojson.type = \"MultiPoint\";\n geojson.coordinates = arcgis.points.slice(0);\n }\n\n if(arcgis.paths) {\n if(arcgis.paths.length === 1){\n geojson.type = \"LineString\";\n geojson.coordinates = arcgis.paths[0].slice(0);\n } else {\n geojson.type = \"MultiLineString\";\n geojson.coordinates = arcgis.paths.slice(0);\n }\n }\n\n if(arcgis.rings) {\n geojson = convertRingsToGeoJSON(arcgis.rings.slice(0));\n }\n\n if(\n typeof arcgis.xmin === \"number\" &&\n typeof arcgis.ymin === \"number\" &&\n typeof arcgis.xmax === \"number\" &&\n typeof arcgis.ymax === \"number\"\n ) {\n geojson.type = \"Polygon\";\n geojson.coordinates = [[\n [arcgis.xmax, arcgis.ymax],\n [arcgis.xmin, arcgis.ymax],\n [arcgis.xmin, arcgis.ymin],\n [arcgis.xmax, arcgis.ymin],\n [arcgis.xmax, arcgis.ymax]\n ]];\n }\n\n if(arcgis.compressedGeometry || arcgis.geometry || arcgis.attributes) {\n geojson.type = \"Feature\";\n\n if(arcgis.compressedGeometry){\n arcgis.geometry = {\n paths: [\n decompressGeometry(arcgis.compressedGeometry)\n ]\n };\n }\n\n geojson.geometry = (arcgis.geometry) ? parse(arcgis.geometry) : null;\n geojson.properties = (arcgis.attributes) ? clone(arcgis.attributes) : null;\n if(arcgis.attributes) {\n geojson.id = arcgis.attributes[options.idAttribute] || arcgis.attributes.OBJECTID || arcgis.attributes.FID;\n }\n }\n\n return new Terraformer.Primitive(geojson);\n }\n\n // GeoJSON -> ArcGIS\n function convert(geojson, options){\n var spatialReference;\n\n options = options || {};\n var idAttribute = options.idAttribute || \"OBJECTID\";\n\n if(options.sr){\n spatialReference = { wkid: options.sr };\n } else if (geojson && geojson.crs && geojson.crs.properties.name != \"urn:ogc:def:crs:OGC:1.3:CRS84\") {\n spatialReference = null;\n } else {\n spatialReference = { wkid: 4326 };\n }\n\n var result = {};\n var i;\n\n switch(geojson.type){\n case \"Point\":\n result.x = geojson.coordinates[0];\n result.y = geojson.coordinates[1];\n if(geojson.coordinates[2]) {\n result.z = geojson.coordinates[2];\n }\n if(geojson.coordinates[3]) {\n result.m = geojson.coordinates[3];\n }\n result.spatialReference = spatialReference;\n break;\n case \"MultiPoint\":\n result.points = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case \"LineString\":\n result.paths = [geojson.coordinates.slice(0)];\n result.spatialReference = spatialReference;\n break;\n case \"MultiLineString\":\n result.paths = geojson.coordinates.slice(0);\n result.spatialReference = spatialReference;\n break;\n case \"Polygon\":\n result.rings = orientRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case \"MultiPolygon\":\n result.rings = flattenMultiPolygonRings(geojson.coordinates.slice(0));\n result.spatialReference = spatialReference;\n break;\n case \"Feature\":\n if(geojson.geometry) {\n result.geometry = convert(geojson.geometry, options);\n }\n result.attributes = (geojson.properties) ? clone(geojson.properties) : {};\n if(geojson.id) {\n result.attributes[idAttribute] = geojson.id;\n }\n break;\n case \"FeatureCollection\":\n result = [];\n for (i = 0; i < geojson.features.length; i++){\n result.push(convert(geojson.features[i], options));\n }\n break;\n case \"GeometryCollection\":\n result = [];\n for (i = 0; i < geojson.geometries.length; i++){\n result.push(convert(geojson.geometries[i], options));\n }\n break;\n }\n\n return result;\n }\n\n function parseCompressedGeometry(string){\n return new Terraformer.LineString(decompressGeometry(string));\n }\n\n exports.parse = parse;\n exports.convert = convert;\n exports.toGeoJSON = parse;\n exports.fromGeoJSON = convert;\n exports.parseCompressedGeometry = parseCompressedGeometry;\n\n return exports;\n}));\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"\";","/* eslint-disable no-var */\n// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n var currentScript = window.document.currentScript\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n var getCurrentScript = require('@soda/get-current-script')\n currentScript = getCurrentScript()\n\n // for backward compatibility, because previously we directly included the polyfill\n if (!('currentScript' in document)) {\n Object.defineProperty(document, 'currentScript', { get: getCurrentScript })\n }\n }\n\n var src = currentScript && currentScript.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/)\n if (src) {\n __webpack_public_path__ = src[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('loading-box',{attrs:{\"loading\":_vm.isLoading}},[_c('div',{staticClass:\"arcgisMap-box\"},[_c('div',{staticClass:\"arcgisMapBox\",attrs:{\"id\":_vm.mapId}}),(_vm.pathCoordinates.length > 0 && _vm.noAbleMoving)?_c('div',{staticClass:\"controls\"},[_c('div',{staticClass:\"controls-item\",class:{ 'controls-active': _vm.currentPathIndex > 0 },on:{\"click\":_vm.changeMove}},[_vm._v(\" \"+_vm._s(_vm.currentPathIndex == 0 ? '开始' : _vm.isPaused ? '继续' : '暂停')+\" \")]),_c('div',{staticClass:\"controls-item\",on:{\"click\":_vm.changeSpeed}},[_c('p',[_vm._v(_vm._s(_vm.speedNum)+\" \"),_c('svgIcon',{attrs:{\"name\":\"close\",\"width\":\"14\",\"color\":\"#000\"}})],1),_c('p',[_vm._v(\"加速\")])]),_c('div',{staticClass:\"controls-item\",on:{\"click\":_vm.stopAnimation}},[_vm._v(\"重置\")]),_c('div',{staticClass:\"controls-item\",on:{\"click\":function($event){return _vm.drawMeasurement('distance')}}},[_vm._v(\" 测距 \")]),_c('div',{staticClass:\"controls-item\",on:{\"click\":function($event){return _vm.drawMeasurement('area')}}},[_vm._v(\"测面积\")]),_c('div',{staticClass:\"controls-item\",on:{\"click\":_vm.clearMeasurement}},[_vm._v(\"清除\")])]):_vm._e(),_c('CustomTooltip',{ref:\"tooltip\",scopedSlots:_vm._u([{key:\"default\",fn:function({ data }){return [_c('div',[_vm._v(\" 经纬度: \"),_c('b',[_vm._v(_vm._s(data.longitude)+\"-\"+_vm._s(data.latitude))])]),_c('div',[_vm._v(\" 时间: \"),_c('b',[_vm._v(_vm._s(data.time))])])]}}])})],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","const mapConfig = {\r\n initJs: 'https://web.joinken.cn:82/arcgis/4.30/init.js', // arcgis的JS地址\r\n initCss: 'https://web.joinken.cn:82/arcgis/4.30/esri/themes/light/main.css', // arcgis的CSS地址\r\n // initJs: 'https://js.arcgis.com/4.30/',\r\n // initCss: 'https://js.arcgis.com/4.30/esri/themes/light/main.css',\r\n config: null,\r\n //影像图-tdtYxt;地形图-tdtDxt;矢量图-tdtSlt(同时也是图层的id) 动态地图服务-dynamic 缓存瓦片地图服务-TileLayer\r\n //怎么判断-动态地图服务-dynamic(WMS) 缓存瓦片地图服务-TileLayer(WMTS)\r\n //访问-https://your-server/arcgis/rest/services/MyMap/MapServer(有Single Fused Map Cache: true且Tile Info:是瓦片服务用TileLayer)\r\n layersType: 'tdtYxt',\r\n baseMapUrl: 'https://sp.joinken.cn/arcgis2d/rest/services/base/china_04/MapServer',\r\n center: [113.15333645218509, 22.708905783449126], //广东省中心点\r\n extent: null,\r\n zoom: 1,\r\n minZoom: 1,\r\n maxZoom: 17,\r\n modules: [\r\n 'esri/config',\r\n 'esri/Map',\r\n 'esri/request',\r\n 'esri/views/MapView',\r\n 'esri/layers/BaseTileLayer',\r\n 'esri/views/SceneView',\r\n 'esri/Color',\r\n 'esri/geometry/Point',\r\n 'esri/geometry/Circle',\r\n 'esri/geometry/Polygon',\r\n 'esri/geometry/Polyline',\r\n 'esri/geometry/SpatialReference',\r\n 'esri/geometry/Extent',\r\n 'esri/layers/GraphicsLayer',\r\n 'esri/geometry/geometryEngine',\r\n 'esri/geometry/support/webMercatorUtils',\r\n 'esri/layers/BaseDynamicLayer',\r\n 'esri/layers/MapImageLayer', //ArcGIS 动态地图服务\r\n 'esri/layers/WebTileLayer', //第三方 XYZ/TMS 瓦片\r\n 'esri/layers/TileLayer', //已缓存的 ArcGIS MapServer 服务\r\n 'esri/layers/WMSLayer',\r\n 'esri/layers/WMTSLayer',\r\n 'esri/layers/FeatureLayer',\r\n // 'esri/layers/IntegratedMeshLayer',//三维模型\r\n 'esri/symbols/PictureMarkerSymbol',\r\n 'esri/symbols/SimpleMarkerSymbol',\r\n 'esri/symbols/SimpleLineSymbol',\r\n 'esri/symbols/SimpleFillSymbol',\r\n 'esri/layers/support/TileInfo',\r\n 'esri/widgets/Sketch/SketchViewModel',\r\n 'esri/Graphic',\r\n 'esri/Camera',\r\n 'esri/widgets/ScaleBar',\r\n 'esri/widgets/Swipe',\r\n 'esri/geometry/projection',\r\n 'esri/widgets/Measurement'\r\n ]\r\n}\r\nexport default mapConfig\r\n","/**\r\n * 返回roles\r\n * @param {*} maxLevel\r\n * @returns\r\n */\r\nexport function returnRole(maxLevel = 18, type = '2d') {\r\n const lods = [],\r\n isWebMercator = false\r\n if (isWebMercator) {\r\n // EPSG:3857(Web墨卡托)的LODs(单位:米/像素)\r\n // 级别从0开始(行业惯例),分辨率逐级减半\r\n const startResolution = 156543.03390625 // level 0的分辨率(米/像素)\r\n const startScale = 591657527.591555 // level 0的比例尺(1:591657527.591555)\r\n for (let level = 0; level <= maxLevel; level++) {\r\n const levelValue = type == '2d' ? level : level + 1\r\n // 0-20级(共21级)\r\n lods.push({\r\n level: level,\r\n levelValue,\r\n resolution: startResolution / Math.pow(2, level), // 逐级减半\r\n scale: startScale / Math.pow(2, level)\r\n })\r\n }\r\n } else {\r\n // EPSG:4490/4326(地理坐标系)的LODs(单位:度/像素)\r\n // 级别从1开始(保持原逻辑兼容)\r\n const startResolution = 0.703125 // level 1的分辨率(度/像素)\r\n const startScale = 295497593.05875003 // level 1的比例尺\r\n for (let level = 1; level <= maxLevel; level++) {\r\n // 1-20级(共20级)\r\n const levelValue = type == '2d' ? level - 1 : level\r\n lods.push({\r\n level: level - 1,\r\n levelValue,\r\n resolution: startResolution / Math.pow(2, level - 1), // 逐级减半(level 2是level 1的1/2)\r\n scale: startScale / Math.pow(2, level - 1)\r\n })\r\n }\r\n }\r\n return lods\r\n}\r\n/**\r\n * 加载\r\n * @param {*} options-传参\r\n * @param {*} url 服务地址\r\n * @param {*} subDomains 当瓦片服务器支持跨多个子域名请求以提高性能时使用。提供一个子域名数组\r\n * @param {*} title 服务标题\r\n * @param {*} id 为图层指定一个唯一的标识符\r\n * @param {*} tileInfo 图层的名称或标题,通常用于图例或图层列表中展示\r\n * @param {*} wkid 服务地图层级\r\n * @param {*} fullExtent 服务地图层级\r\n * @param {*} loadInfo 是否加载titleInfo\r\n * @param {*} visible 布尔值,决定图层是否可见,默认是 true。设置为 false 可隐藏图层\r\n * @param {*} opacity 图层的透明度,范围从0到1,默认是 1(完全不透明\r\n * @param {*} minScale | maxScale 分别定义了图层的最大和最小比例尺。超出这些范围的缩放级别,图层将不会显示\r\n * @param {*} popupTemplate 定义了点击图层上的要素时弹出窗口的内容模板\r\n * @param {*} copyright 版权信息字符串,用于声明数据来源或版权声明\r\n *\r\n */\r\nexport function loadWmsLayer(options) {\r\n if (!options) return ''\r\n let {\r\n url,\r\n subDomains,\r\n title,\r\n id,\r\n tileInfo,\r\n wkid,\r\n fullExtent,\r\n loadInfo = false,\r\n visible = true,\r\n opacity = 1,\r\n minScale = 1,\r\n maxScale = 22,\r\n popupTemplate,\r\n copyright = 'jk'\r\n } = options\r\n\r\n if (!url) return ''\r\n\r\n const isVisible = visible || false\r\n isVisible\r\n minScale\r\n maxScale\r\n copyright\r\n let params = {\r\n visible: isVisible,\r\n opacity,\r\n\r\n spatialReference: {\r\n wkid: 4490\r\n }\r\n }\r\n if (subDomains) params.subDomains = subDomains\r\n if (title) params.title = title\r\n if (id) params.id = id\r\n if (tileInfo) params.tileInfo = tileInfo\r\n if (loadInfo) {\r\n if (tileInfo) params.tileInfo = tileInfo\r\n else if (window.jkEsri && window.jkEsri.TileInfo)\r\n params.tileInfo = new window.jkEsri.TileInfo({\r\n dpi: '90.71428571427429',\r\n rows: 256,\r\n cols: 256,\r\n compressionQuality: 0,\r\n origin: {\r\n x: -180,\r\n y: 90\r\n },\r\n spatialReference: {\r\n wkid: 4490\r\n },\r\n lods: returnRole(28, '3d')\r\n })\r\n }\r\n if (wkid) params.spatialReference.wkid = wkid\r\n if (fullExtent) params.fullExtent = fullExtent\r\n if (popupTemplate) params.popupTemplate = popupTemplate\r\n return new window.jkEsri.WebTileLayer(url, params)\r\n\r\n return layer\r\n}\r\n/**\r\n * 加载wmts服务\r\n * @param Object options = {url,id,title} 参数\r\n */\r\nexport function WMTSlayer(options) {\r\n let tileInfo = new window.jkEsri.TileInfo({\r\n dpi: 90,\r\n rows: 256,\r\n cols: 256,\r\n compressionQuality: 0,\r\n origin: {\r\n x: -180,\r\n y: 90\r\n },\r\n spatialReference: {\r\n wkid: 4490\r\n },\r\n lods: returnRole(25)\r\n })\r\n const url = `${options.url}?layers=jk_map_server%3Atgzx&REQUEST=GetTile&SERVICE=WMTS&VERSION=1.0.0&LAYER=${options.id}&STYLE=&TILEMATRIX=EPSG:4490:{z}&TILEMATRIXSET=EPSG:4490&FORMAT=image%2Fpng&TILECOL={x}&TILEROW={y}&key=586f4e24c298419e9d76302147f98cca`\r\n const layer = new window.jkEsri.WebTileLayer({\r\n urlTemplate: url,\r\n id: options.id,\r\n title: options.title,\r\n tileInfo: tileInfo,\r\n spatialReference: {\r\n wkid: 4490\r\n }\r\n })\r\n return layer\r\n}\r\n","/**\r\n * 判断值是否为空\r\n * @param {any} value - 待检测的值\r\n * @param {boolean} [strict=false] - 是否启用严格模式:\r\n * - false(默认):0、false 视为非空;但 NaN、'NaN'、null、undefined、'' 等视为空\r\n * - true:0、false 也视为空\r\n * @returns {boolean} true 表示为空\r\n */\r\nexport function isEmpty(value, strict = false) {\r\n // 1. null / undefined → 空\r\n if (value == null) {\r\n return true\r\n }\r\n\r\n // 2. 字符串特殊处理:空、空白、'null'、'undefined'、'NaN' → 空\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim()\r\n if (trimmed === '' || trimmed === 'null' || trimmed === 'undefined' || trimmed === 'NaN') {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n // 4. 严格模式:0 和 false 也视为空\r\n if (strict) {\r\n if (value === 0 || value === false) {\r\n return true\r\n }\r\n }\r\n\r\n // 5. 其他所有类型(对象、数组、函数、日期、Symbol 等)→ 非空\r\n return false\r\n}\r\n\r\n/**\r\n * 反向函数\r\n * @param {*} value\r\n * @param {*} strict\r\n * @returns\r\n */\r\nexport function isNotEmpty(value, strict = false) {\r\n return !isEmpty(value, strict)\r\n}\r\n/**\r\n * 判断数值是否为有限数且在地理坐标范围内\r\n * @param {*} val - 待检测值\r\n * @param {'x'|'y'} type - 'x' 表示经度,'y' 表示纬度\r\n * @returns {boolean}\r\n */\r\nfunction isFiniteGeoNumber(val, type) {\r\n // 快速类型+范围检查(避免 isNaN 开销)\r\n if (typeof val !== 'number' || !isFinite(val)) {\r\n return false\r\n }\r\n if (type === 'x') {\r\n // 经度: -180 ~ 180\r\n return val >= -180 && val <= 180\r\n } else {\r\n // 纬度: -90 ~ 90\r\n return val >= -90 && val <= 90\r\n }\r\n}\r\n/**\r\n * 判断传入对象是否包含有效的 ArcGIS 点位坐标\r\n * 支持字段:x/y, longitude/latitude, lon/lat(大小写不敏感)\r\n * 要求:数值或可转为数值的字符串,且在地理范围内\r\n *\r\n * @param {Object} obj - 输入对象\r\n * @returns {{ valid: boolean, x?: number, y?: number }}\r\n */\r\nexport function isValidArcGISPoint(obj) {\r\n try {\r\n if (!obj || typeof obj !== 'object') {\r\n throw new Error(`解析错误,数据格式为空${obj}`)\r\n }\r\n // 尝试从常见字段提取原始值(不转换类型)\r\n let rawX = null\r\n let rawY = null\r\n\r\n // 优先级: longitude/latitude > lon/lat > jd/wd > x/y\r\n if ('longitude' in obj && 'latitude' in obj) {\r\n rawX = obj.longitude\r\n rawY = obj.latitude\r\n } else if ('lon' in obj && 'lat' in obj) {\r\n rawX = obj.lon\r\n rawY = obj.lat\r\n } else if ('jd' in obj && 'wd' in obj) {\r\n rawX = obj.jd\r\n rawY = obj.wd\r\n } else if ('x' in obj && 'y' in obj) {\r\n rawX = obj.x\r\n rawY = obj.y\r\n }\r\n // 可扩展:支持大小写(如 Longitude/Latitude)\r\n else if ('Longitude' in obj && 'Latitude' in obj) {\r\n rawX = obj.Longitude\r\n rawY = obj.Latitude\r\n } else if ('X' in obj && 'Y' in obj) {\r\n rawX = obj.X\r\n rawY = obj.Y\r\n }\r\n if (!isNotEmpty(rawX) || !isNotEmpty(rawY)) {\r\n throw new Error(`解析错误,数据${rawX},${rawX}`)\r\n }\r\n // 快速路径:已经是有效 number\r\n if (typeof rawX === 'number' && typeof rawY === 'number') {\r\n if (isFiniteGeoNumber(rawX, 'x') && isFiniteGeoNumber(rawY, 'y')) {\r\n return { x: rawX, y: rawY }\r\n }\r\n throw new Error(`解析错误,${rawX},${rawX}`)\r\n }\r\n\r\n // 字符串或可转字符串的情况\r\n const strX = String(rawX).trim()\r\n const strY = String(rawY).trim()\r\n\r\n // 快速排除明显无效(空、非数字字符开头)\r\n if (strX === '' || strY === '') {\r\n throw new Error(`解析错误,${strX},${strY}`)\r\n }\r\n\r\n // 使用 Number() 转换(比 parseFloat 更严格,拒绝 \"123abc\")\r\n const numX = Number(strX)\r\n const numY = Number(strY)\r\n\r\n if (isFiniteGeoNumber(numX, 'x') && isFiniteGeoNumber(numY, 'y')) {\r\n return { x: numX, y: numY, longitude: x, latitude: y }\r\n }\r\n throw new Error(`解析错误,${numX},${numY}`)\r\n } catch (error) {\r\n throw new Error(`geojson解析失败: ${error.message}`)\r\n }\r\n}\r\n/**\r\n * 判断地图数据类型\r\n * @param {*} type\r\n * @param {*} defaultType:点-1,线-2,面-3\r\n */\r\nexport function judgmentMapDataType(type = '') {\r\n try {\r\n if (isEmpty(type)) throw new Error(`judgmentMapDataType,数据错误${type}`)\r\n let isType = type.includes('oint')\r\n ? 'point'\r\n : type.includes('olygon')\r\n ? 'polygon'\r\n : type.includes('ine')\r\n ? 'polyline'\r\n : ''\r\n if (!isType) throw new Error(`judgmentMapDataType,类型为空${type}`)\r\n return isType\r\n } catch (error) {\r\n throw new Error(`judgmentMapDataType,${error}`)\r\n }\r\n}\r\n","import { isEmpty } from \"./comstom.js\";\r\n\r\n/**\r\n * 将原始坐标解析为 {x, y, spatialReference?}\r\n * @param {any} input\r\n * @returns {{x: number, y: number, spatialReference?: any} | null}\r\n */\r\nfunction parseToPoint(input) {\r\n if (!input) return null;\r\n\r\n // 字符串 \"lng,lat\"\r\n if (typeof input === \"string\") {\r\n const parts = input.split(\",\").map((s) => parseFloat(s.trim()));\r\n if (parts.length === 2 && !isNaN(parts[0]) && !isNaN(parts[1])) {\r\n return { x: parts[0], y: parts[1] };\r\n }\r\n }\r\n\r\n // 数组 [x, y]\r\n if (Array.isArray(input) && input.length >= 2) {\r\n const x = parseFloat(input[0]);\r\n const y = parseFloat(input[1]);\r\n if (!isNaN(x) && !isNaN(y)) {\r\n return { x, y };\r\n }\r\n }\r\n\r\n // 对象 {x, y} 或 {longitude, latitude}\r\n if (typeof input === \"object\") {\r\n let x, y;\r\n if (\"x\" in input && \"y\" in input) {\r\n x = parseFloat(input.x);\r\n y = parseFloat(input.y);\r\n } else if (\"longitude\" in input && \"latitude\" in input) {\r\n x = parseFloat(input.longitude);\r\n y = parseFloat(input.latitude);\r\n } else if (\"lng\" in input && \"lat\" in input) {\r\n x = parseFloat(input.lng);\r\n y = parseFloat(input.lat);\r\n }\r\n if (!isNaN(x) && !isNaN(y)) {\r\n return { x, y, spatialReference: input.spatialReference };\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n/**\r\n * 尝试将 esri/geometry/Point 转为普通对象\r\n */\r\nfunction tryConvertEsriPoint(obj) {\r\n // 检查是否有 toJSON 方法(esri geometry 标准)\r\n if (obj && typeof obj.toJSON === \"function\") {\r\n try {\r\n const json = obj.toJSON();\r\n // 验证是否为点(有 x 和 y)\r\n if (typeof json.x === \"number\" && typeof json.y === \"number\") {\r\n return obj; // 已是标准 ArcGIS JSON\r\n }\r\n } catch (error) {\r\n throw new Error(`esri.Point toJSON 失败: ${error}`);\r\n }\r\n }\r\n return null;\r\n}\r\n/**\r\n * 将任意变量尝试转换为 ArcGIS 点格式 { x, y }\r\n * 支持多种常见输入格式,严格校验经纬度范围\r\n * @param {*} crPoint - 任意输入\r\n * @param {boolean} [strict=true] - 是否启用经纬度范围校验(经度 [-180,180], 纬度 [-90,90])\r\n * @returns {{ x: number, y: number } | null}\r\n */\r\nfunction toArcGISPoint(crPoint, strict = true) {\r\n let x,\r\n y,\r\n result = null;\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri || !window.jkEsri.Point) {\r\n console.warn(\"[createText] ArcGIS API 未加载,跳过创建\");\r\n throw new Error(\"[createText] ArcGIS API 未加载,跳过创建\");\r\n }\r\n // 1. null / undefined\r\n if (isEmpty(crPoint)) {\r\n throw new Error(\"转换异常,无经纬度点位数据\");\r\n }\r\n // 2. 尝试作为 esri.Point 处理(优先级高)\r\n result = tryConvertEsriPoint(crPoint);\r\n if (result) {\r\n // 成功解析为 {x, y, ...}\r\n return result;\r\n } else {\r\n const transform_point = parseToPoint(crPoint);\r\n\r\n if (\r\n isEmpty(transform_point) ||\r\n isEmpty(transform_point.x) ||\r\n isEmpty(transform_point.y)\r\n ) {\r\n throw new Error(\"转换异常,无经纬度点位数据\");\r\n }\r\n x = transform_point.x;\r\n y = transform_point.y;\r\n }\r\n // 5. 仍未成功解析\r\n if (isNaN(x) || isNaN(y)) {\r\n throw new Error(\"转换异常,无经纬度点位数据\");\r\n }\r\n // 6. 【可选】经纬度范围校验\r\n if (strict) {\r\n if (x < -180 || x > 180) {\r\n throw new Error(\"转换异常,x < -180 || x > 180\");\r\n }\r\n if (y < -90 || y > 90) {\r\n throw new Error(\"转换异常,y < -90 || y > 90\");\r\n }\r\n }\r\n let wkid = crPoint.wkid ? crPoint.wkid : Number(x) > 1000 ? 102100 : 4326;\r\n // 7. 返回标准 ArcGIS 点\r\n return new window.jkEsri.Point(\r\n Number(x),\r\n Number(y),\r\n new window.jkEsri.SpatialReference({\r\n wkid,\r\n })\r\n );\r\n } catch (error) {\r\n console.warn(\"error\", error);\r\n throw new Error(`转换异常:${error}`);\r\n }\r\n}\r\n/**\r\n * 智能地图跳转(终极稳定版)\r\n * 新增能力:解决 Goto was interrupted 中断问题,强化单点跳转稳定性\r\n * 核心优化:视图就绪校验、防抖、空间参考强制转换、中断重试、参数合法性校验\r\n *\r\n * @param {__esri.MapView | __esri.SceneView} view - 地图/场景视图实例\r\n * @param {any} target - 跳转目标(单点JSON/线/面/图形数组等)\r\n * @param {Object} [options] - 跳转配置\r\n * @param {number} [options.padding=20] - 线/面边距(MapView)\r\n * @param {boolean} [options.animate=true] - 是否动画(建议单点关闭动画减少中断)\r\n * @param {number} [options.pointZoom=15] - MapView 单点缩放级别(控制在1-20内)\r\n * @param {number} [options.pointScale=5000] - SceneView 单点相机高度(米,合理范围)\r\n * @param {__esri.Extent} [options.fallbackExtent] - 兜底范围\r\n * @param {number} [options.retryTimes=1] - 跳转中断时重试次数\r\n * @returns {Promise<void>}\r\n */\r\nfunction mapJump(view, target, options = { zoom: 16 }) {\r\n // 前置校验:ArcGIS API是否加载\r\n if (!window.jkEsri) {\r\n return Promise.reject(\r\n new Error(\"[mapJump] ArcGIS API 未加载 (window.jkEsri missing)\")\r\n );\r\n }\r\n // 前置校验:view有效性\r\n if (!view || typeof view.goTo !== \"function\") {\r\n return Promise.reject(\r\n new Error(\"[mapJump] 无效的 view 对象(缺少 goTo 方法)\")\r\n );\r\n }\r\n\r\n // 视图类型判断\r\n const isScene = view.declaredClass === \"esri.views.SceneView\";\r\n const isMap = view.declaredClass === \"esri.views.MapView\";\r\n if (!isScene && !isMap) {\r\n return Promise.reject(\r\n new Error(`[mapJump] 不支持的 view 类型: ${view.declaredClass}`)\r\n );\r\n }\r\n\r\n // 合并配置项(新增重试、动画默认优化)\r\n const opts = Object.assign(\r\n {\r\n padding: 20,\r\n animate: false, // 单点跳转默认关闭动画,减少中断(核心优化)\r\n pointZoom: Math.max(\r\n 1,\r\n Math.min(20, options.pointZoom ? options.pointZoom : 15)\r\n ), // 限制缩放级别范围\r\n pointScale: Math.max(\r\n 100,\r\n Math.min(100000, options.pointScale ? options.pointScale : 5000)\r\n ), // 限制相机高度\r\n fallbackExtent: null,\r\n retryTimes: 1, // 中断时重试1次\r\n },\r\n options\r\n );\r\n\r\n // 防抖标记:避免短时间多次调用\r\n let isJumping = false;\r\n /**\r\n * 工具函数:等待视图就绪(核心!解决视图未加载完成导致的中断)\r\n * @returns {Promise<void>}\r\n */\r\n function waitViewReady() {\r\n return new Promise((resolve) => {\r\n if (view.ready) {\r\n resolve();\r\n } else {\r\n view.when(() => resolve());\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * 工具函数:强制转换空间参考(解决4326/3857不匹配问题)\r\n * @param {__esri.Geometry} geom - API几何实例\r\n * @returns {__esri.Geometry} 转换后的几何\r\n */\r\n function projectGeometry(geom) {\r\n if (!geom || !geom.spatialReference) return geom;\r\n\r\n // 空间参考一致,无需转换\r\n if (geom.spatialReference.wkid === view.spatialReference.wkid) {\r\n return geom;\r\n }\r\n\r\n try {\r\n // 使用ArcGIS投影工具转换空间参考\r\n return window.jkEsri.geometry.project(geom, view.spatialReference);\r\n } catch (e) {\r\n console.warn(\"[projectGeometry] 空间参考转换失败,使用原几何:\", e);\r\n return geom;\r\n }\r\n }\r\n\r\n /**\r\n * 工具函数:判断是否为点类几何(含单点/多点集合)\r\n * @param {*} geometry - API实例/纯JSON几何对象\r\n * @returns {boolean}\r\n */\r\n function isPointGeometry(geometry) {\r\n if (!geometry) return false;\r\n const type = geometry.type || (geometry.x && geometry.y ? \"point\" : \"\");\r\n return type === \"point\" || type === \"multipoint\";\r\n }\r\n\r\n /**\r\n * 核心工具:纯JSON几何 → ArcGIS API几何实例(支持点/线/面所有类型)\r\n * @param {*} geomJson - 纯JSON几何对象\r\n * @returns {__esri.Geometry | null}\r\n */\r\n function toEsriGeometry(geomJson) {\r\n if (!geomJson) return null;\r\n\r\n // 已是API实例,直接返回\r\n if (geomJson.toJSON && typeof geomJson.toJSON === \"function\") {\r\n return geomJson;\r\n }\r\n\r\n // 提取几何类型(兼容纯JSON无type字段的Point)\r\n let geomType = geomJson.type;\r\n if (!geomType && geomJson.x !== undefined && geomJson.y !== undefined) {\r\n geomType = \"point\";\r\n }\r\n if (!geomType) return null;\r\n\r\n // 统一空间参考(优先用几何自身的,无则用视图的)\r\n const sr = geomJson.spatialReference || view.spatialReference;\r\n\r\n try {\r\n // 1. 点(核心:校验坐标合法性,避免NaN导致中断)\r\n if (geomType === \"point\") {\r\n const x = Number(geomJson.x);\r\n const y = Number(geomJson.y);\r\n // 坐标合法性校验(关键!NaN会导致goTo中断)\r\n if (isNaN(x) || isNaN(y)) {\r\n console.error(\"[toEsriGeometry] 点坐标非法:\", geomJson);\r\n return null;\r\n }\r\n return new window.jkEsri.Point({\r\n x,\r\n y,\r\n z: geomJson.z ? Number(geomJson.z) : undefined,\r\n spatialReference: sr,\r\n });\r\n } else if (geomType === \"multipoint\") {\r\n return new window.jkEsri.MultiPoint({\r\n points: geomJson.points.map((pt) => pt.map(Number)) || [],\r\n spatialReference: sr,\r\n });\r\n }\r\n\r\n // 2. 线/多线\r\n else if (geomType === \"polyline\" || geomType === \"multipolyline\") {\r\n return new window.jkEsri.Polyline({\r\n paths:\r\n geomJson.paths.map((path) => path.map((pt) => pt.map(Number))) ||\r\n [],\r\n spatialReference: sr,\r\n });\r\n }\r\n\r\n // 3. 面/多面\r\n else if (geomType === \"polygon\" || geomType === \"multipolygon\") {\r\n return new window.jkEsri.Polygon({\r\n rings:\r\n geomJson.rings.map((ring) => ring.map((pt) => pt.map(Number))) ||\r\n [],\r\n spatialReference: sr,\r\n });\r\n }\r\n\r\n // 4. 范围\r\n else if (geomType === \"extent\") {\r\n return new window.jkEsri.Extent({\r\n xmin: Number(geomJson.xmin),\r\n ymin: Number(geomJson.ymin),\r\n xmax: Number(geomJson.xmax),\r\n ymax: Number(geomJson.ymax),\r\n spatialReference: sr,\r\n });\r\n }\r\n\r\n return null;\r\n } catch (e) {\r\n console.warn(`[toEsriGeometry] 转换${geomType}失败:`, e);\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * 核心工具:获取几何对象的有效范围(兼容所有类型 + 纯JSON)\r\n * @param {*} geom - API实例/纯JSON几何\r\n * @returns {__esri.Extent | null}\r\n */\r\n function getGeometryExtent(geom) {\r\n if (!geom) return null;\r\n\r\n // 步骤1:转换为API实例(解决纯JSON无extent问题)\r\n const esriGeom = toEsriGeometry(geom);\r\n if (!esriGeom) return null;\r\n\r\n // 步骤2:API实例自带extent,直接返回\r\n if (esriGeom.extent) {\r\n return esriGeom.extent;\r\n }\r\n\r\n // 步骤3:极端降级 - 手动构建Point的范围(x/y相同)\r\n if (esriGeom.type === \"point\") {\r\n return new window.jkEsri.Extent({\r\n xmin: esriGeom.x,\r\n ymin: esriGeom.y,\r\n xmax: esriGeom.x,\r\n ymax: esriGeom.y,\r\n spatialReference: esriGeom.spatialReference,\r\n });\r\n }\r\n\r\n console.warn(\"[getGeometryExtent] 无法获取几何范围:\", geom);\r\n return null;\r\n }\r\n\r\n /**\r\n * 核心工具:从图形数组计算合并范围(兼容点/线/面混合 + 纯JSON)\r\n * @param {Array} graphics - API Graphic数组 / 纯JSON Graphic数组\r\n * @returns {__esri.Extent | null}\r\n */\r\n function computeExtentFromGraphics(graphics) {\r\n if (!graphics || graphics.length === 0) return null;\r\n\r\n const validExtents = [];\r\n for (const graphic of graphics) {\r\n // 跳过无几何的无效图形\r\n if (!graphic || !graphic.geometry) {\r\n console.warn(\"[computeExtentFromGraphics] 跳过无几何的图形:\", graphic);\r\n continue;\r\n }\r\n\r\n // 获取单个图形的有效范围(自动转换纯JSON几何)\r\n const extent = getGeometryExtent(graphic.geometry);\r\n if (extent) {\r\n validExtents.push(extent);\r\n } else {\r\n console.warn(\r\n \"[computeExtentFromGraphics] 图形几何无有效范围:\",\r\n graphic.geometry\r\n );\r\n }\r\n }\r\n\r\n // 无有效范围\r\n if (validExtents.length === 0) {\r\n console.error(\"[computeExtentFromGraphics] 所有图形均无有效范围!\");\r\n return null;\r\n }\r\n\r\n // 单个范围直接返回\r\n if (validExtents.length === 1) {\r\n return validExtents[0];\r\n }\r\n\r\n // 合并多个范围(点/线/面混合也能正确union)\r\n let combinedExtent = validExtents[0];\r\n for (let i = 1; i < validExtents.length; i++) {\r\n combinedExtent = combinedExtent.union(validExtents[i]);\r\n }\r\n return combinedExtent;\r\n }\r\n\r\n /**\r\n * 工具函数:解析普通坐标为{x,y}({x,y}/[x,y]/\"lng,lat\")\r\n * @param {*} target - 原始坐标\r\n * @returns {Object|null}\r\n */\r\n function parseToPoint(target) {\r\n if (!target) return null;\r\n\r\n // {x,y}格式\r\n if (target.x !== undefined && target.y !== undefined) {\r\n const x = Number(target.x);\r\n const y = Number(target.y);\r\n return !isNaN(x) && !isNaN(y) ? { x, y } : null;\r\n }\r\n\r\n // [x,y]数组格式\r\n if (Array.isArray(target) && target.length >= 2) {\r\n const x = Number(target[0]);\r\n const y = Number(target[1]);\r\n return !isNaN(x) && !isNaN(y) ? { x, y } : null;\r\n }\r\n\r\n // \"lng,lat\"字符串格式\r\n if (typeof target === \"string\" && target.includes(\",\")) {\r\n const [x, y] = target.split(\",\").map(Number);\r\n return !isNaN(x) && !isNaN(y) ? { x, y } : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * 核心执行:视图跳转(带中断重试、防抖、空间参考转换)\r\n * @param {__esri.Geometry | __esri.Extent} targetGeom - 目标几何/范围\r\n * @param {boolean} isPointType - 是否为点类几何\r\n * @param {number} retryLeft - 剩余重试次数\r\n * @returns {Promise<void>}\r\n */\r\n async function doGoToWithRetry(targetGeom, isPointType, retryLeft) {\r\n // 防抖:已有跳转中,直接中断\r\n if (isJumping) {\r\n throw new Error(\"[mapJump] 前一次跳转未完成,中断本次操作\");\r\n }\r\n\r\n try {\r\n isJumping = true;\r\n // 步骤1:等待视图就绪\r\n await waitViewReady();\r\n\r\n // 步骤2:强制转换空间参考(解决4326/3857不匹配)\r\n const projectedGeom = projectGeometry(targetGeom);\r\n if (!projectedGeom) {\r\n throw new Error(\"[mapJump] 空间参考转换后几何无效\");\r\n }\r\n\r\n // 步骤3:构建goTo配置(优化动画/缩放参数,减少中断)\r\n const goToOptions = {\r\n animate: opts.animate,\r\n // 新增:延长动画时间,避免快速中断(单点建议关闭动画)\r\n duration: opts.animate ? 500 : 0,\r\n };\r\n\r\n // MapView配置:限制缩放级别在有效范围(1-20)\r\n if (isMap) {\r\n if (isPointType) {\r\n goToOptions.zoom = Math.max(1, Math.min(20, opts.pointZoom));\r\n } else {\r\n goToOptions.padding = opts.padding;\r\n }\r\n }\r\n // SceneView配置:限制scale在合理范围\r\n else if (isScene) {\r\n if (isPointType) {\r\n goToOptions.scale = Math.max(100, opts.pointScale);\r\n // 新增:SceneView单点跳转强制设置target为相机位置,减少中断\r\n goToOptions.target = {\r\n position: projectedGeom,\r\n scale: goToOptions.scale,\r\n };\r\n }\r\n }\r\n\r\n // 步骤4:执行跳转(捕获interrupted错误)\r\n try {\r\n await view.goTo(projectedGeom, goToOptions);\r\n } catch (gotoErr) {\r\n // 捕获Goto was interrupted错误,重试\r\n if (gotoErr.message.includes(\"interrupted\") && retryLeft > 0) {\r\n console.warn(\r\n `[mapJump] 跳转中断,剩余重试次数: ${retryLeft}`,\r\n gotoErr\r\n );\r\n // 延迟50ms重试,避免连续中断\r\n await new Promise((resolve) => setTimeout(resolve, 50));\r\n return doGoToWithRetry(targetGeom, isPointType, retryLeft - 1);\r\n }\r\n throw gotoErr;\r\n }\r\n } finally {\r\n isJumping = false; // 重置防抖标记\r\n }\r\n }\r\n\r\n /**\r\n * 工具函数:解析WMS/WMTS图层范围\r\n * @param {__esri.WMSLayer | __esri.WMTSLayer} layer - 图层实例\r\n * @returns {__esri.Extent | null}\r\n */\r\n function getWMXLayerExtent(layer) {\r\n // 优先读取图层内置范围\r\n if (layer.fullExtent) return layer.fullExtent;\r\n if (layer.extent) return layer.extent;\r\n if (layer.tileInfo.fullExtent) return layer.tileInfo.fullExtent;\r\n if (layer.initialExtent) return layer.initialExtent;\r\n\r\n // 解析URL中的BBOX参数(WMS标准)\r\n if (layer.url) {\r\n try {\r\n const urlObj = new URL(layer.url);\r\n const bbox =\r\n urlObj.searchParams.get(\"BBOX\") || urlObj.searchParams.get(\"bbox\");\r\n if (bbox) {\r\n const [xmin, ymin, xmax, ymax] = bbox.split(\",\").map(Number);\r\n if (!isNaN(xmin) && !isNaN(ymin) && !isNaN(xmax) && !isNaN(ymax)) {\r\n return new window.jkEsri.Extent({\r\n xmin,\r\n ymin,\r\n xmax,\r\n ymax,\r\n spatialReference: layer.spatialReference || view.spatialReference,\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n console.warn(\"[getWMXLayerExtent] 解析URL BBOX失败:\", e);\r\n }\r\n }\r\n\r\n // 兜底范围\r\n return opts.fallbackExtent;\r\n }\r\n\r\n // 主逻辑:Promise封装,统一处理所有目标类型\r\n return new Promise(async (resolve, reject) => {\r\n let targetGeometry = null; // 最终解析的几何实例\r\n let isPointType = false; // 是否为点类几何\r\n\r\n try {\r\n // 等待视图就绪(前置校验)\r\n await waitViewReady();\r\n\r\n // ========== 分支1:处理图层对象 ==========\r\n if (\r\n target &&\r\n typeof target === \"object\" &&\r\n target.declaredClass &&\r\n target.declaredClass.endsWith(\"Layer\")\r\n ) {\r\n const layer = target;\r\n\r\n // 1.1 图形图层(GraphicsLayer)\r\n if (layer.declaredClass === \"esri.layers.GraphicsLayer\") {\r\n const graphics = layer.graphics.toArray();\r\n if (graphics.length === 0) {\r\n reject(new Error(\"[mapJump] GraphicsLayer 无有效图形\"));\r\n return;\r\n }\r\n\r\n // 单个图形且为点类 → 按点跳转\r\n if (graphics.length === 1 && isPointGeometry(graphics[0].geometry)) {\r\n await doGoToWithRetry(graphics[0].geometry, true, opts.retryTimes);\r\n resolve();\r\n return;\r\n }\r\n\r\n // 多个图形/线/面 → 计算合并范围\r\n const layerExtent = computeExtentFromGraphics(graphics);\r\n if (layerExtent) {\r\n await doGoToWithRetry(layerExtent, false, opts.retryTimes);\r\n resolve();\r\n } else {\r\n // 兜底1:取第一个有效图形\r\n const firstValid = graphics.find(\r\n (g) => g.geometry && getGeometryExtent(g.geometry)\r\n );\r\n if (firstValid) {\r\n await doGoToWithRetry(\r\n firstValid.geometry,\r\n isPointGeometry(firstValid.geometry),\r\n opts.retryTimes\r\n );\r\n resolve();\r\n }\r\n // 兜底2:使用配置的兜底范围\r\n else if (opts.fallbackExtent) {\r\n await doGoToWithRetry(\r\n opts.fallbackExtent,\r\n false,\r\n opts.retryTimes\r\n );\r\n resolve();\r\n }\r\n // 最终兜底:报错\r\n else {\r\n reject(\r\n new Error(\r\n \"[mapJump] 无法从GraphicsLayer计算有效范围,且无兜底范围\"\r\n )\r\n );\r\n }\r\n }\r\n return;\r\n }\r\n\r\n // 1.2 WMS/WMTS图层\r\n if (\r\n layer.declaredClass === \"esri.layers.WMSLayer\" ||\r\n layer.declaredClass === \"esri.layers.WMTSLayer\"\r\n ) {\r\n // 图层未加载则先加载\r\n if (!layer.loaded) {\r\n await layer.load();\r\n }\r\n const extent = getWMXLayerExtent(layer);\r\n if (extent) {\r\n await doGoToWithRetry(extent, false, opts.retryTimes);\r\n resolve();\r\n } else {\r\n reject(\r\n new Error(\r\n `WM${\r\n layer.declaredClass.includes(\"WMS\") ? \"S\" : \"TS\"\r\n }图层无有效范围`\r\n )\r\n );\r\n }\r\n return;\r\n }\r\n\r\n // 1.3 服务图层(FeatureLayer/TileLayer等,支持queryExtent)\r\n if (typeof layer.queryExtent === \"function\") {\r\n if (!layer.loaded) {\r\n await layer.load();\r\n }\r\n const res = await layer.queryExtent();\r\n if (res.extent) {\r\n await doGoToWithRetry(res.extent, false, opts.retryTimes);\r\n resolve();\r\n } else {\r\n reject(new Error(\"服务图层查询范围为空\"));\r\n }\r\n return;\r\n }\r\n\r\n // 1.4 普通图层(无queryExtent,用fullExtent)\r\n if (layer.fullExtent) {\r\n await doGoToWithRetry(layer.fullExtent, false, opts.retryTimes);\r\n resolve();\r\n return;\r\n }\r\n\r\n // 不支持的图层类型\r\n reject(new Error(`[mapJump] 不支持的图层类型: ${layer.declaredClass}`));\r\n return;\r\n }\r\n\r\n // ========== 分支2:处理图形数组(API实例/纯JSON) ==========\r\n if (Array.isArray(target) && target.length > 0) {\r\n // 判断是否为Graphic数组(含纯JSON)\r\n const isGraphicArray = target.every((item) => item.geometry);\r\n if (isGraphicArray) {\r\n // 单个图形且为点类 → 按点跳转\r\n if (target.length === 1 && isPointGeometry(target[0].geometry)) {\r\n targetGeometry = toEsriGeometry(target[0].geometry);\r\n if (!targetGeometry) {\r\n reject(new Error(\"单个图形几何无效\"));\r\n return;\r\n }\r\n await doGoToWithRetry(targetGeometry, true, opts.retryTimes);\r\n resolve();\r\n return;\r\n }\r\n\r\n // 多个图形/线/面 → 计算合并范围\r\n const graphicsExtent = computeExtentFromGraphics(target);\r\n if (graphicsExtent) {\r\n await doGoToWithRetry(graphicsExtent, false, opts.retryTimes);\r\n resolve();\r\n } else {\r\n // 兜底1:取第一个有效图形\r\n const firstValid = target.find(\r\n (item) => item.geometry && toEsriGeometry(item.geometry)\r\n );\r\n if (firstValid) {\r\n targetGeometry = toEsriGeometry(firstValid.geometry);\r\n await doGoToWithRetry(\r\n targetGeometry,\r\n isPointGeometry(firstValid.geometry),\r\n opts.retryTimes\r\n );\r\n resolve();\r\n }\r\n // 兜底2:兜底范围\r\n else if (opts.fallbackExtent) {\r\n await doGoToWithRetry(\r\n opts.fallbackExtent,\r\n false,\r\n opts.retryTimes\r\n );\r\n resolve();\r\n }\r\n // 最终兜底\r\n else {\r\n reject(\r\n new Error(\"[mapJump] 无法从图形数组计算有效范围,且无兜底范围\")\r\n );\r\n }\r\n }\r\n return;\r\n }\r\n }\r\n\r\n // ========== 分支3:处理单个Graphic(API实例/纯JSON) ==========\r\n if (target && target.geometry) {\r\n targetGeometry = toEsriGeometry(target.geometry);\r\n isPointType = isPointGeometry(target.geometry);\r\n }\r\n\r\n // ========== 分支4:处理几何对象(API实例/纯JSON) ==========\r\n else if (target && (target.type || (target.x && target.y))) {\r\n targetGeometry = toEsriGeometry(target);\r\n isPointType = isPointGeometry(target);\r\n }\r\n\r\n // ========== 分支5:处理普通坐标格式 ==========\r\n else {\r\n const pointObj = parseToPoint(target);\r\n if (pointObj) {\r\n targetGeometry = new window.jkEsri.Point({\r\n x: pointObj.x,\r\n y: pointObj.y,\r\n spatialReference: view.spatialReference,\r\n });\r\n isPointType = true;\r\n }\r\n }\r\n\r\n // ========== 最终校验:解析结果有效性 ==========\r\n if (!targetGeometry) {\r\n reject(\r\n new Error(`[mapJump] 无法解析跳转目标,支持类型:\r\n 1. 基础坐标:{x,y} / [x,y] / \"lng,lat\"\r\n 2. 几何对象:Point/MultiPoint/Polyline/MultiPolyline/Polygon/MultiPolygon/Extent(API实例/纯JSON)\r\n 3. 图形对象:Graphic / 纯JSON Graphic / Graphic[] / 纯JSON Graphic[]\r\n 4. 图层对象:Layer(FeatureLayer/WMSLayer/WMTSLayer等)`)\r\n );\r\n return;\r\n }\r\n\r\n // 执行跳转(带重试)\r\n await doGoToWithRetry(targetGeometry, isPointType, opts.retryTimes);\r\n resolve();\r\n } catch (e) {\r\n // 捕获所有异常\r\n reject(new Error(`[mapJump] 执行失败: ${e.message}`));\r\n }\r\n });\r\n}\r\n\r\nexport { toArcGISPoint, mapJump };\r\n","import { isEmpty } from \"./comstom.js\";\r\nimport { toArcGISPoint } from \"./toArcGISPoint.js\";\r\n\r\n/**\r\n * 判断是否类型\r\n * @param {*} type\r\n * @returns\r\n */\r\nfunction judgeLayerType(type) {\r\n if (!type) return;\r\n if (type.includes(\"oint\")) return \"point\";\r\n if (type.includes(\"olygon\")) return \"polygon\";\r\n if (type.includes(\"ine\")) return \"polyline\";\r\n}\r\n/**\r\n * TextSymbol 符号\r\n * @param {Object} options 传递参数\r\n * @param {string} options.mapText 内容\r\n * @param {number} options.fontSize 字体大小\r\n * @param {string} options.color 字体颜色\r\n * @param {string} options.haloColor 字体阴影\r\n * @param {string} options.haloSize 字体阴影大小\r\n * @param {number } options.xoffset 字体偏移x轴\r\n * @param {number } options.yoffset 字体偏移y轴\r\n * @returns\r\n */\r\nexport function getTextSymbol(options) {\r\n try {\r\n const text = options.mapText || \"暂无描述\";\r\n const fontSize = isFinite(options.fontSize) ? Number(options.fontSize) : 10;\r\n const color = (typeof options.color === \"string\" && options.color) || \"red\";\r\n const haloColor =\r\n (typeof options.haloColor === \"string\" && options.haloColor) || \"black\";\r\n const haloSize =\r\n typeof options.haloSize !== \"undefined\"\r\n ? String(options.haloSize)\r\n : \"1px\";\r\n const xoffset = isFinite(options.xoffset) ? Number(options.xoffset) : 3;\r\n const yoffset = isFinite(options.yoffset) ? Number(options.yoffset) : 3;\r\n return {\r\n type: \"text\",\r\n text: text || \"\",\r\n color: color,\r\n haloColor: haloColor,\r\n haloSize: haloSize,\r\n xoffset: xoffset,\r\n yoffset: yoffset,\r\n font: {\r\n size: fontSize,\r\n weight: \"bold\",\r\n },\r\n };\r\n } catch (e) {\r\n console.error(\"[getTextSymbol] 生成 symbol 失败,使用默认值:\", e);\r\n return {\r\n type: \"text\",\r\n text: \"暂无标注\",\r\n color: \"red\",\r\n haloColor: \"black\",\r\n haloSize: \"1px\",\r\n xoffset: 3,\r\n yoffset: 3,\r\n font: { size: 10, weight: \"bold\" },\r\n };\r\n }\r\n}\r\n/**\r\n * pictureSymbol 符号\r\n * @param {Object} options\r\n * @param {string} options.color 颜色\r\n * @param {number} options.size 直径\r\n * @param {string} options.lineColor 边框颜色\r\n * @param {number} options.lineWidth 边框大小\r\n * @param {string} options.style 形状\r\n * @param {number} options.angle 旋转角度\r\n * @returns\r\n */\r\nexport function getSimpleMarkerSymbol(options) {\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri || !window.jkEsri.SimpleMarkerSymbol) {\r\n console.error(\r\n \"[getSimpleMarkerSymbol] ArcGIS API-SimpleMarkerSymbol 未加载,跳过创建\"\r\n );\r\n return null;\r\n }\r\n // 关键:设置偏移(单位:屏幕像素)\r\n let color = \"red\",\r\n size = 12,\r\n lineColor = \"white\",\r\n lineWidth = 1,\r\n style = \"circle\",\r\n angle = 0;\r\n if (options) {\r\n if (!isEmpty(options.color)) color = options.color;\r\n if (isFinite(options.size) && Number(options.size))\r\n size = Number(options.size);\r\n if (!isEmpty(options.lineColor)) lineColor = options.lineColor;\r\n if (!isEmpty(options.style)) style = options.style;\r\n if (isFinite(options.lineWidth) && Number(options.lineWidth))\r\n lineWidth = Number(options.lineWidth);\r\n if (isFinite(options.angle) && Number(options.angle))\r\n angle = Number(options.angle);\r\n }\r\n return new window.jkEsri.SimpleMarkerSymbol({\r\n color, // 填充色(支持 hex, rgb, named color)\r\n size, // 直径(单位:屏幕像素 px)\r\n outline: {\r\n // 边框\r\n color: lineColor,\r\n width: lineWidth, // 边框宽度(px)\r\n },\r\n style, // 形状:'circle' | 'square' | 'cross' | 'diamond' | 'triangle' | 'x'\r\n angle, //仅'diamond' | 'triangle'有效\r\n });\r\n } catch (e) {\r\n console.error(\"[getSimpleMarkerSymbol] 生成 symbol 失败,\", e);\r\n return null;\r\n }\r\n}\r\n/**\r\n * pictureSymbol 符号\r\n * @param {Object} options\r\n * @param {string} options.url 图片地址\r\n * @param {number } options.width 宽度\r\n * @param {number } options.height 高度\r\n * @param {number } options.size 大小\r\n * @param {number } options.xoffset 偏移x轴\r\n * @param {number } options.yoffset 偏移y轴\r\n * @returns\r\n */\r\nexport function getPictureSymbol(options) {\r\n if (isEmpty(options) || isEmpty(options.url)) {\r\n return getSimpleMarkerSymbol(options);\r\n }\r\n try {\r\n if (isEmpty(options) || isEmpty(options.url)) {\r\n console.error(\"[getPictureSymbol] 生成 symbol\", options);\r\n return null;\r\n }\r\n // 关键:设置偏移(单位:屏幕像素)\r\n let offset = {\r\n x: 0, // 水平偏移:正数向右,负数向左\r\n y: 0, // 垂直偏移:正数向下,负数向上\r\n },\r\n width = 20,\r\n height = 20,\r\n size = 0,\r\n url = options.url;\r\n if (options) {\r\n if (isFinite(options.width) && Number(options.width))\r\n width = Number(options.width);\r\n if (isFinite(options.height) && Number(options.height))\r\n height = Number(options.height);\r\n if (isFinite(options.size) && Number(options.size))\r\n size = Number(options.size);\r\n if (isFinite(options.xoffset) && Number(options.xoffset))\r\n offset.x = Number(options.xoffset);\r\n if (isFinite(options.yoffset) && Number(options.yoffset))\r\n offset.y = Number(options.yoffset);\r\n }\r\n return {\r\n type: \"picture-marker\",\r\n url, // 图片地址\r\n width,\r\n height,\r\n size,\r\n offset,\r\n };\r\n } catch (e) {\r\n console.error(\"[getPictureSymbol] 生成 symbol 失败\", e);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * 线符号\r\n * @param {Object} options\r\n * @param {number | string} options.color 颜色\r\n * @param {number | string} options.width 线大小\r\n * @param {number } options.opacity 线颜色的透明度\r\n * @returns symbol\r\n */\r\nexport function getLineSymbol(options) {\r\n const { color = \"#fff\", width = 2, opacity = 100 } = options;\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri || !window.jkEsri.Color) {\r\n console.error(\"[getLineSymbol] ArcGIS API-Color 未加载,跳过创建\");\r\n return null;\r\n }\r\n const esriColor = new window.jkEsri.Color(color);\r\n esriColor.a = Math.min(1, Math.max(0, opacity / 100));\r\n return {\r\n type: \"simple-line\",\r\n color: esriColor,\r\n width: width,\r\n cap: \"round\",\r\n join: \"round\",\r\n };\r\n } catch (e) {\r\n console.error(\"getLineSymbol未传入symbol,使用默认:\", e);\r\n return {\r\n type: \"simple-line\",\r\n color: new window.jkEsri.Color(\"#1f77b4\").setAlpha(1),\r\n width: 2,\r\n cap: \"round\",\r\n join: \"round\",\r\n };\r\n }\r\n}\r\n/**\r\n * 填充符号\r\n * @param {object} options\r\n * @param { string} options.color 颜色\r\n * @param {number } options.opacity 填充颜色的透明度\r\n * @param {object} options.outline 填充边框\r\n * @param {string} options.outline.color 填充边框颜色\r\n * @param {number } options.outline.width 填充边框大小\r\n * @param {number} options.outline.opacity 填充边框颜色的透明度\r\n * @returns symbol\r\n */\r\nexport function getFillSymbol(options) {\r\n let color = \"#fff\",\r\n lineColor = \"#fff\",\r\n width = 1,\r\n opacity = 10,\r\n lineOpacity = 100;\r\n if (options) {\r\n if (options.color) color = options.color;\r\n if (options.opacity || options.opacity == 0) opacity = options.opacity;\r\n if (options.outline) {\r\n lineColor = options.outline.color || \"#fff\";\r\n width = options.outline.width || 1;\r\n lineOpacity = options.outline.opacity || 100;\r\n }\r\n }\r\n const colors = new window.jkEsri.Color(color);\r\n colors.a = opacity / 100;\r\n const outColor = new window.jkEsri.Color(lineColor);\r\n outColor.a = lineOpacity / 100;\r\n return {\r\n type: \"simple-fill\",\r\n color: colors,\r\n outline: { color: outColor, width: width },\r\n };\r\n}\r\n/**\r\n *\r\n * @param {*} options\r\n * @property {number|string} options.geometry\r\n */\r\nexport function drawLayer(options) {\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri || !window.jkEsri.Graphic) {\r\n console.error(\"[drawLayer] ArcGIS API 未加载,跳过创建\");\r\n return null;\r\n }\r\n if (isEmpty(options) || !options.geometry) {\r\n console.error(`[drawLayer] options.geometry格式不正确,${options}`);\r\n return null;\r\n }\r\n // 4. 构造安全 attributes(仅保留基本类型)\r\n const safeAttrs = options.attributes || options.properties || options || {};\r\n const json = {\r\n geometry: options.geometry,\r\n attributes: safeAttrs,\r\n };\r\n let graphic = window.jkEsri.Graphic.fromJSON(json),\r\n symbol = null;\r\n const geometry = options.geometry;\r\n if (\r\n geometry.x ||\r\n geometry.longitude ||\r\n (geometry.points && geometry.points.length > 0)\r\n ) {\r\n if (options.mapText) {\r\n symbol = getTextSymbol(options);\r\n } else {\r\n symbol = options.url\r\n ? getPictureSymbol(options)\r\n : getSimpleMarkerSymbol(options);\r\n }\r\n } else if (geometry.paths && geometry.paths.length > 0) {\r\n symbol = getLineSymbol(options);\r\n } else if (geometry.rings && geometry.rings.length > 0) {\r\n symbol = getFillSymbol(options);\r\n }\r\n graphic.symbol = symbol;\r\n return graphic;\r\n } catch (e) {\r\n console.error(\"[drawLayer]失败,\", e);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 安全创建文本标注 Graphic(任何错误均静默失败,返回 null)\r\n * @param {object} options attributes的数据\r\n * @param {string} options.mapText 文字标注\r\n * @param {String} options.url 图片地址,如不存在则加载pictureSymbol\r\n * @returns {__esri.Graphic | null}\r\n */\r\nexport function drawArcPoint(options) {\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri) {\r\n console.error(\"[createArcPoint] ArcGIS API 未加载,跳过创建\");\r\n throw new Error(\"[createArcPoint] ArcGIS API 未加载,跳过创建\");\r\n }\r\n\r\n // 2. 解析坐标\r\n const point = toArcGISPoint(options);\r\n if (!point || !isFinite(point.x) || !isFinite(point.y)) {\r\n console.error(\"[createText] 坐标无效,跳过创建:\", options);\r\n throw new Error(\"[createText] 坐标无效,跳过创建\");\r\n }\r\n const geometry = point;\r\n // 4. 构造安全 attributes(仅保留基本类型)\r\n\r\n // 5. 创建 symbol\r\n let symbol = null;\r\n if (options.mapText) {\r\n symbol = getTextSymbol(options);\r\n } else {\r\n symbol = options.url\r\n ? getPictureSymbol(options)\r\n : getSimpleMarkerSymbol(options);\r\n }\r\n // 6. 创建 Graphic\r\n const graphic = new window.jkEsri.Graphic({\r\n geometry,\r\n symbol: symbol,\r\n attributes: options,\r\n });\r\n return graphic;\r\n } catch (error) {\r\n // 任何异常都捕获,不中断流程\r\n console.error(\"[createText] 创建文本标注失败,已跳过:\", error);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 创建点\r\n * @param {object} options attributes的数据\r\n * @param {string} options.type 正确格式类型\r\n * @param {Array} options.coordinates 多点范围\r\n * @returns {__esri.Graphic | null}\r\n */\r\nexport function createArcPoint(options) {\r\n try {\r\n // 1. 检查 ArcGIS API 是否加载\r\n if (!window || !window.jkEsri) {\r\n console.error(\"[createArcPoint] ArcGIS API 未加载,跳过创建\");\r\n return null;\r\n }\r\n if (isEmpty(options) || typeof options != \"object\") {\r\n console.error(\"[createArcPoint] 数据格式不对,跳过创建\", options);\r\n return null;\r\n }\r\n // 情况 A: GeoJSON MultiPoint\r\n if (options.type === \"MultiPoint\" && Array.isArray(options.coordinates)) {\r\n let graphics = [];\r\n options.coordinates.map((coord) => {\r\n if (\r\n Array.isArray(coord) &&\r\n coord.length >= 2 &&\r\n isFinite(coord[0]) &&\r\n isFinite(coord[1])\r\n ) {\r\n let pointData = {\r\n ...options,\r\n longitude: coord[0],\r\n latitude: coord[1],\r\n };\r\n graphics.push(drawArcPoint(pointData));\r\n }\r\n });\r\n if (graphics && graphics.length > 0) return graphics;\r\n } else return drawArcPoint(options);\r\n } catch (error) {\r\n // 任何异常都捕获,不中断流程\r\n console.error(\"[createArcPoint] 创建文本标注失败,已跳过:\", error);\r\n return null;\r\n }\r\n}\r\n// ==================== 内部解析函数 ====================\r\n\r\n/**\r\n * 解析单个线数据项为 { geometry: Polyline, attributes: Object }\r\n */\r\nfunction parseLineItem(item, defaultWKID, index) {\r\n try {\r\n let geometry = null;\r\n let attributes = {};\r\n\r\n // 情况 1: 已是 Graphic 或 Feature 格式\r\n if (item.geometry) {\r\n const geom = item.geometry;\r\n if (geom.type === \"polyline\" && Array.isArray(geom.paths)) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths: geom.paths,\r\n spatialReference: geom.spatialReference || { wkid: defaultWKID },\r\n });\r\n } else if (geom.x !== undefined || geom.rings !== undefined) {\r\n // 非线几何,跳过\r\n return null;\r\n }\r\n attributes = { ...item.attributes, ...item }; // 合并属性\r\n }\r\n // 情况 2: WKT 字符串\r\n else if (typeof item === \"string\") {\r\n if (isWKTMultiLineString(item) || isWKTPolyline(item)) {\r\n const paths = parseWKTToPaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n }\r\n attributes = { wkt: item };\r\n }\r\n // 情况 3: GeoJSON\r\n else if (item.type) {\r\n if (item.type === \"Feature\") {\r\n return parseLineItem(item.geometry || item, defaultWKID, index); // 递归处理 geometry\r\n } else if ([\"LineString\", \"MultiLineString\"].includes(item.type)) {\r\n const paths = geoJSONToArcGISPaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { ...item.properties };\r\n }\r\n }\r\n // 情况 4: 纯坐标数组\r\n else if (Array.isArray(item)) {\r\n const paths = normalizePaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { input: \"array\" };\r\n }\r\n\r\n if (!geometry) {\r\n console.error(`Invalid line data at index ${index}:`, item);\r\n return null;\r\n }\r\n\r\n // 添加默认属性\r\n attributes = {\r\n sourceIndex: index,\r\n ...attributes,\r\n };\r\n\r\n return new window.jkEsri.Graphic({\r\n geometry,\r\n attributes,\r\n });\r\n } catch (e) {\r\n console.error(`Failed to parse line item at index ${index}:`, e);\r\n return null;\r\n }\r\n}\r\n\r\n// ==================== 工具函数 ====================\r\n/**\r\n * 判断类型MULTILINESTRING\r\n * @param {*} str\r\n * @returns\r\n */\r\nfunction isWKTMultiLineString(str) {\r\n return (\r\n typeof str === \"string\" &&\r\n str.trim().toUpperCase().startsWith(\"MULTILINESTRING\")\r\n );\r\n}\r\n/**\r\n * 判断LINESTRING\r\n * @param {*} str\r\n * @returns\r\n */\r\nfunction isWKTPolyline(str) {\r\n return (\r\n typeof str === \"string\" && str.trim().toUpperCase().startsWith(\"LINESTRING\")\r\n );\r\n}\r\n/**\r\n * 线转化\r\n * @param {*} wkt\r\n * @returns\r\n */\r\nfunction parseWKTToPaths(wkt) {\r\n try {\r\n const upper = wkt.trim().toUpperCase();\r\n let coordsPart;\r\n if (upper.startsWith(\"MULTILINESTRING\")) {\r\n coordsPart = wkt.match(/MULTILINESTRING\\s*\\(\\s*(.+)\\s*\\)/i)[1];\r\n if (!coordsPart) return null;\r\n const lines = coordsPart.split(/\\)\\s*,\\s*\\(/);\r\n return lines.map((line) => {\r\n line = line.replace(/^\\(/, \"\").replace(/\\)$/, \"\");\r\n return line.split(\",\").map((pt) => pt.trim().split(/\\s+/).map(Number));\r\n });\r\n } else if (upper.startsWith(\"LINESTRING\")) {\r\n coordsPart = wkt.match(/LINESTRING\\s*\\(\\s*(.+)\\s*\\)/i)[1];\r\n if (!coordsPart) return null;\r\n return [\r\n coordsPart.split(\",\").map((pt) => pt.trim().split(/\\s+/).map(Number)),\r\n ];\r\n }\r\n return null;\r\n } catch (e) {\r\n console.error(\"WKT parse error:\", e);\r\n return null;\r\n }\r\n}\r\n/**\r\n * geojson转arcgis\r\n * @param {*} geojson\r\n * @returns\r\n */\r\nfunction geoJSONToArcGISPaths(geojson) {\r\n if (!geojson.coordinates) return null;\r\n if (geojson.type === \"LineString\") {\r\n return [geojson.coordinates];\r\n } else if (geojson.type === \"MultiLineString\") {\r\n return geojson.coordinates;\r\n }\r\n return null;\r\n}\r\n/**\r\n * 格式化路径\r\n * @param {*} input\r\n * @returns\r\n */\r\nfunction normalizePaths(input) {\r\n if (!Array.isArray(input) || input.length === 0) return null;\r\n\r\n // 多段线:[[[x,y],...], [[x,y],...]]\r\n if (Array.isArray(input[0]) && Array.isArray(input[0][0])) {\r\n return input;\r\n }\r\n // 单段线:[[x,y], [x,y]]\r\n if (Array.isArray(input[0]) && typeof input[0][0] === \"number\") {\r\n return [input];\r\n }\r\n return null;\r\n}\r\n\r\n/**\r\n * 创建兼容多源线数据的 FeatureLayer\r\n * @param {Array} lineDataList - 线数据数组,每项支持多种格式\r\n * @param {Object} [options] - 可选配置\r\n * @param {number} [options.defaultWKID=4326] - 默认空间参考\r\n * @param {string} [options.layerId] - 默认空间参考\r\n * @returns {Promise<FeatureLayer>} 返回 FeatureLayer 实例\r\n */\r\nexport async function createLineFeatureLayer(lineDataList = [], options = {}) {\r\n if (!Array.isArray(lineDataList) || lineDataList.length === 0) {\r\n console.error(\"No line data provided\");\r\n return null;\r\n }\r\n\r\n const { defaultWKID = 4326, layerId = \"lineFeatureId\" } = options;\r\n\r\n try {\r\n // 1. 解析所有线数据为统一格式:{ geometry: Polyline, attributes: Object }\r\n const features = lineDataList\r\n .map((item, index) => parseLineItem(item, defaultWKID, index))\r\n .filter(Boolean); // 过滤无效项\r\n\r\n if (features.length === 0) {\r\n console.error(\"No valid line features parsed\");\r\n return null;\r\n }\r\n\r\n // 2. 推断空间参考(优先使用第一个有效 geometry 的 WKID)\r\n const firstGeom = features[0].geometry;\r\n const spatialReference = firstGeom.spatialReference || {\r\n wkid: defaultWKID,\r\n };\r\n\r\n // 3. 创建 FeatureLayer 所需的 fields(自动推断属性字段)\r\n const allAttrs = features.map((f) => f.attributes).filter(Boolean);\r\n const fieldMap = new Set([\"OBJECTID\"]); // 必须包含 OBJECTID\r\n\r\n allAttrs.forEach((attrs) => {\r\n if (attrs && typeof attrs === \"object\") {\r\n Object.keys(attrs).forEach((key) => fieldMap.add(key));\r\n }\r\n });\r\n\r\n const fields = Array.from(fieldMap).map((name) => ({\r\n name,\r\n type: \"string\", // 简化处理,实际可按值类型判断\r\n alias: name,\r\n }));\r\n\r\n // 4. 确保每个 feature 有 OBJECTID\r\n features.forEach((feature, i) => {\r\n if (!feature.attributes) feature.attributes = {};\r\n if (feature.attributes.OBJECTID == null) {\r\n feature.attributes.OBJECTID = i + 1;\r\n }\r\n });\r\n\r\n // 5. 创建 FeatureLayer\r\n const layer = new window.jkEsri.FeatureLayer({\r\n source: features,\r\n fields: fields,\r\n objectIdField: \"OBJECTID\",\r\n geometryType: \"polyline\",\r\n spatialReference: spatialReference,\r\n renderer: {\r\n type: \"simple\",\r\n symbol: {\r\n type: \"simple-line\",\r\n color: \"#1f77b4\",\r\n width: 2,\r\n cap: \"round\",\r\n join: \"round\",\r\n },\r\n },\r\n title: \"Dynamic Line Layer\",\r\n id: layerId,\r\n });\r\n return layer;\r\n } catch (error) {\r\n console.error(\"Failed to create FeatureLayer:\", error);\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * 将任意线数据项解析为 Graphic\r\n */\r\nfunction parseLineToGraphic(item, defaultWKID, defaultSymbol, index) {\r\n let geometry = null;\r\n let attributes = {};\r\n\r\n try {\r\n // 情况 1: 已是 Graphic 对象\r\n if (item instanceof window.jkEsri.Graphic) {\r\n const geom = item.geometry;\r\n if (geom && geom.type === \"polyline\") {\r\n return item; // 直接复用\r\n } else {\r\n console.error(\r\n `Item at index ${index} is a Graphic but not polyline, skipped`\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n // 情况 2: 包含 geometry 的对象(如 Feature 格式)\r\n if (item && typeof item === \"object\" && item.geometry) {\r\n const geom = item.geometry;\r\n if (\r\n Array.isArray(geom.paths) ||\r\n Array.isArray(geom.coordinates) ||\r\n Array.isArray(geom.rings)\r\n ) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths: geom.paths || geom.coordinates || geom.rings,\r\n spatialReference: geom.spatialReference || { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { ...item.attributes, ...item };\r\n }\r\n // 情况 3: GeoJSON\r\n if (item && typeof item === \"object\" && item.type) {\r\n if (judgeLayerType(item.type) == \"polyline\") {\r\n if (\r\n Array.isArray(item.paths) ||\r\n Array.isArray(item.coordinates) ||\r\n Array.isArray(item.rings)\r\n ) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths: item.paths || item.coordinates || item.rings,\r\n spatialReference: item.spatialReference || { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { ...item.attributes, ...item };\r\n } else if ([\"LineString\", \"MultiLineString\"].includes(item.type)) {\r\n const paths = geoJSONToArcGISPaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { ...item.properties, sourceIndex: index };\r\n } else if (item.type === \"Feature\") {\r\n return parseLineToGraphic(\r\n item.geometry || item,\r\n defaultWKID,\r\n defaultSymbol,\r\n index\r\n );\r\n }\r\n }\r\n // 情况 4: WKT 字符串\r\n if (typeof item === \"string\") {\r\n if (isWKTMultiLineString(item) || isWKTPolyline(item)) {\r\n const paths = parseWKTToPaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n }\r\n attributes = { wkt: item, sourceIndex: index };\r\n }\r\n // 情况 5: 纯坐标数组\r\n if (Array.isArray(item)) {\r\n const paths = normalizePaths(item);\r\n if (paths) {\r\n geometry = new window.jkEsri.Polyline({\r\n paths,\r\n spatialReference: { wkid: defaultWKID },\r\n });\r\n }\r\n attributes = { inputType: \"array\", sourceIndex: index };\r\n }\r\n\r\n if (!geometry) {\r\n console.error(`Invalid line data at index ${index}:`, item);\r\n return null;\r\n }\r\n\r\n // 合并符号配置:优先使用 item 中的 symbol 配置\r\n const symbolConfig = { ...defaultSymbol };\r\n if (item && typeof item === \"object\") {\r\n if (item.color !== undefined) symbolConfig.color = item.color;\r\n if (item.width !== undefined) symbolConfig.width = item.width;\r\n if (item.borderWidth !== undefined) symbolConfig.width = item.borderWidth;\r\n if (item.opacity !== undefined) symbolConfig.opacity = item.opacity;\r\n }\r\n\r\n const symbol = getLineSymbol(symbolConfig);\r\n\r\n return new window.jkEsri.Graphic({\r\n geometry,\r\n symbol,\r\n attributes: { ...attributes, sourceIndex: index },\r\n });\r\n } catch (e) {\r\n console.error(`Failed to parse line item at index ${index}:`, e);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 创建兼容多源线数据的 GraphicsLayer(使用 Graphic)\r\n * @param {Array} lineDataList - 线数据数组,每项支持多种格式\r\n * @param {Object} [options] - 可选配置\r\n * @param {number} [options.defaultWKID=4326] - 默认空间参考\r\n * @param {string} [options.layerId='lineGraphicsLayer'] - 图层 ID\r\n * @param {Object} [options.defaultSymbol] - 默认线符号配置\r\n * @param {Promise<GraphicsLayer>} [mapLayer] - 地图图层\r\n * @returns {Promise<GraphicsLayer>} 返回 GraphicsLayer 实例\r\n */\r\nexport async function createLineGraphicsLayer(\r\n lineDataList = [],\r\n options = {},\r\n mapLayer = null\r\n) {\r\n if (!Array.isArray(lineDataList) || lineDataList.length === 0) {\r\n console.error(\"createLineGraphicsLayer: No line data provided\");\r\n return null;\r\n }\r\n const {\r\n defaultWKID = 4326,\r\n layerId = \"lineGraphicsLayer\",\r\n defaultSymbol = {\r\n color: \"#1f77b4\",\r\n width: 2,\r\n opacity: 100, // 0-100\r\n },\r\n } = options;\r\n\r\n try {\r\n const graphics = [];\r\n for (let i = 0; i < lineDataList.length; i++) {\r\n const item = lineDataList[i];\r\n const graphic = parseLineToGraphic(item, defaultWKID, defaultSymbol, i);\r\n if (graphic) {\r\n graphics.push(graphic);\r\n }\r\n }\r\n\r\n if (graphics.length === 0) {\r\n console.error(\"createLineGraphicsLayer: No valid graphics created\");\r\n return null;\r\n }\r\n let layer = mapLayer;\r\n if (!layer)\r\n layer = new window.jkEsri.GraphicsLayer({\r\n id: layerId,\r\n title: \"Dynamic Line Graphics Layer\",\r\n });\r\n\r\n layer.addMany(graphics);\r\n return {\r\n layer,\r\n graphics,\r\n };\r\n } catch (error) {\r\n console.error(\"createLineGraphicsLayer failed:\", error);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 创建兼容多源面数据的 GraphicsLayer(支持正向显示 & 反遮罩)\r\n * @param {Array} polygonDataList - 面数据列表(每个元素可为 rings 数组、{rings} 或 {geometry: {rings}})\r\n * @param {Object} options - 配置项\r\n * @param {string} options.layerId - 层级id\r\n * @param {object} options.outerExtent - 遮罩外围\r\n * @param {__esri.GraphicsLayer | __esri.MapView | __esri.SceneView} context -\r\n * 推荐传入 view(MapView/SceneView),也可传入已有 GraphicsLayer(兼容模式)\r\n * @param {any} options.mapLayer - 地图图层\r\n * @returns {any} {layer,graphics}\r\n */\r\nexport async function createMaskLayer(\r\n polygonDataList = [],\r\n options,\r\n context = null,\r\n mapLayer\r\n) {\r\n const {\r\n layerId = \"createMaskLayer\",\r\n outerExtent = null, // { xmin, ymin, xmax, ymax, spatialReference }\r\n } = options || {};\r\n\r\n if (!Array.isArray(polygonDataList) || polygonDataList.length === 0) {\r\n console.warn(\"createMaskLayer: 范围是空的\");\r\n return null;\r\n }\r\n\r\n if (typeof window.jkEsri === \"undefined\") {\r\n console.error(\"ArcGIS API for JavaScript is not loaded\");\r\n return null;\r\n }\r\n\r\n const { Polygon, SpatialReference, GraphicsLayer, Graphic, geometryEngine } =\r\n window.jkEsri;\r\n\r\n // ========== 步骤 1:确定空间参考(spatialReference)==========\r\n let view = null;\r\n let spatialReference = null;\r\n let is3D = false;\r\n\r\n if (context && typeof context === \"object\") {\r\n if (context.type === \"2d\" || context.type === \"3d\") {\r\n view = context;\r\n is3D = context.type === \"3d\";\r\n spatialReference = view.spatialReference;\r\n if (!spatialReference) {\r\n console.error(\"View spatialReference is not ready\");\r\n return null;\r\n }\r\n } else if (context.declaredClass === \"esri.layers.GraphicsLayer\") {\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n } else {\r\n console.warn(\"Unknown context type, assuming WKID 4326\");\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n }\r\n } else {\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n }\r\n\r\n const sr = spatialReference;\r\n const wkid = sr.wkid;\r\n\r\n // ========== 辅助函数 ==========\r\n /**\r\n * 提取 rings 数据\r\n */\r\n function extractRawRings(item, index) {\r\n if (!item) return null;\r\n if (Array.isArray(item)) return item;\r\n if (item.rings) return item.rings;\r\n if (item.geometry.rings) return item.geometry.rings;\r\n console.warn(`Item ${index} has no valid rings`);\r\n return null;\r\n }\r\n\r\n /**\r\n * 判断环是否为顺时针(CW)\r\n */\r\n function isRingClockwise(ring) {\r\n let sum = 0;\r\n for (let i = 0; i < ring.length; i++) {\r\n const [x1, y1] = ring[i];\r\n const [x2, y2] = ring[(i + 1) % ring.length];\r\n sum += (x2 - x1) * (y2 + y1);\r\n }\r\n return sum > 0; // true = CW\r\n }\r\n\r\n /**\r\n * 确保环闭合\r\n */\r\n function ensureClosed(ring) {\r\n if (ring.length < 3) return null;\r\n const first = ring[0];\r\n const last = ring[ring.length - 1];\r\n if (first[0] !== last[0] || first[1] !== last[1]) {\r\n return [...ring, [first[0], first[1]]];\r\n }\r\n return ring;\r\n }\r\n\r\n // ========== 核心:3D 反遮罩几何裁剪 ==========\r\n /**\r\n * 3D 反遮罩几何裁剪\r\n * @param {*} outerRing\r\n * @param {*} holes\r\n * @param {*} sr\r\n * @returns\r\n */\r\n function compute3DDifference(outerRing, holes, sr) {\r\n const outerPoly = new Polygon({\r\n rings: [outerRing],\r\n spatialReference: sr,\r\n });\r\n\r\n if (holes.length === 0) return outerPoly;\r\n\r\n // 合并所有 holes\r\n let unionHole = null;\r\n for (const hole of holes) {\r\n const holePoly = new Polygon({\r\n rings: [hole],\r\n spatialReference: sr,\r\n });\r\n if (!unionHole) {\r\n unionHole = holePoly;\r\n } else {\r\n try {\r\n unionHole = geometryEngine.union(unionHole, holePoly);\r\n } catch (e) {\r\n console.warn(\"Union hole failed, skipping:\", e);\r\n }\r\n }\r\n }\r\n\r\n if (!unionHole) return outerPoly;\r\n\r\n // 执行差集\r\n try {\r\n const result = geometryEngine.difference(outerPoly, unionHole);\r\n return result || outerPoly;\r\n } catch (e) {\r\n console.error(\"Geometry difference failed:\", e);\r\n return outerPoly;\r\n }\r\n }\r\n\r\n // ========== 主逻辑 ==========\r\n try {\r\n // ========== 反遮罩模式 ==========\r\n // 构建 outerRing\r\n let outerRing;\r\n if (outerExtent && outerExtent.spatialReference.wkid === wkid) {\r\n outerRing = [\r\n [outerExtent.xmin, outerExtent.ymin],\r\n [outerExtent.xmax, outerExtent.ymin],\r\n [outerExtent.xmax, outerExtent.ymax],\r\n [outerExtent.xmin, outerExtent.ymax],\r\n [outerExtent.xmin, outerExtent.ymin],\r\n ];\r\n } else {\r\n if (wkid === 4326) {\r\n outerRing = [\r\n [-180, -90],\r\n [180, -90],\r\n [180, 90],\r\n [-180, 90],\r\n [-180, -90],\r\n ];\r\n } else if (wkid === 3857) {\r\n const halfWorld = 20037508.342789244;\r\n outerRing = [\r\n [-halfWorld, -halfWorld],\r\n [halfWorld, -halfWorld],\r\n [halfWorld, halfWorld],\r\n [-halfWorld, halfWorld],\r\n [-halfWorld, -halfWorld],\r\n ];\r\n } else {\r\n // 默认中国范围(WKID 4490 近似)\r\n outerRing = [\r\n [105.0019, 19.9696],\r\n [121.0131, 19.9696],\r\n [121.0131, 26.933],\r\n [105.0019, 26.933],\r\n [105.0019, 19.9696],\r\n ];\r\n }\r\n }\r\n\r\n // 提取 holes(支持多个环)\r\n const holes = [];\r\n for (let i = 0; i < polygonDataList.length; i++) {\r\n const item = polygonDataList[i];\r\n const rawRings = extractRawRings(item, i);\r\n if (!rawRings || !Array.isArray(rawRings[0]) || rawRings[0].length < 3)\r\n continue;\r\n\r\n rawRings.forEach((ring, idx) => {\r\n idx;\r\n ring = ensureClosed(ring);\r\n if (!ring) return;\r\n\r\n // 2D 要求 hole 为 CW;3D 不关心(后续会裁剪)\r\n if (!is3D && !isRingClockwise(ring)) {\r\n ring = ring.slice().reverse();\r\n }\r\n\r\n holes.push(ring);\r\n });\r\n }\r\n\r\n let finalGeometry;\r\n\r\n if (is3D) {\r\n // ✅ 3D:使用 geometryEngine 裁剪\r\n finalGeometry = await compute3DDifference(outerRing, holes, sr);\r\n } else {\r\n // ✅ 2D:使用多环 Polygon(holes 必须 CW)\r\n if (holes.length === 0) {\r\n finalGeometry = new Polygon({\r\n rings: [outerRing],\r\n spatialReference: sr,\r\n });\r\n } else {\r\n finalGeometry = new Polygon({\r\n rings: [outerRing, ...holes],\r\n spatialReference: sr,\r\n });\r\n }\r\n }\r\n\r\n const maskSymbol = {\r\n type: \"simple-fill\",\r\n color: [0, 0, 0, 0.8],\r\n outline: null,\r\n };\r\n const maskGraphic = new Graphic({\r\n geometry: finalGeometry,\r\n symbol: maskSymbol,\r\n });\r\n\r\n let layer = mapLayer;\r\n if (!layer) {\r\n layer = new GraphicsLayer({ id: layerId });\r\n if (view) view.map.add(layer);\r\n } else {\r\n layer.removeAll();\r\n }\r\n layer.add(maskGraphic);\r\n\r\n return { layer, graphics: [maskGraphic] };\r\n } catch (error) {\r\n console.error(\"createMaskLayer failed:\", error);\r\n return null;\r\n }\r\n}\r\n/**\r\n * 创建兼容多源面数据的 GraphicsLayer(支持正向显示 & 反遮罩)\r\n * @param {Array} polygonDataList - 面数据列表(每个元素可为 rings 数组、{rings} 或 {geometry: {rings}})\r\n * @param {Object} options - 配置项\r\n * @param {string} options.layerId - 层级id\r\n * @param {object} options.defaultSymbol - 默认样式\r\n * @param {number} options.defaultWKID - 地图层级\r\n * @param {Boolean} options.enableHoles - 是否镂空\r\n * @param {__esri.GraphicsLayer | __esri.MapView | __esri.SceneView} context -\r\n * 推荐传入 view(MapView/SceneView),也可传入已有 GraphicsLayer(兼容模式)\r\n * @param {any} options.mapLayer - 地图图层\r\n * @returns {any} {layer,graphics}\r\n */\r\nexport async function createPolygonGraphicsLayer(\r\n polygonDataList = [],\r\n options,\r\n context = null,\r\n mapLayer\r\n) {\r\n const {\r\n layerId = \"polygonGraphicsLayer\",\r\n defaultSymbol = {\r\n color: [255, 255, 255, 0.1],\r\n outline: { color: \"#0070ff\", width: 1 },\r\n },\r\n enableHoles = true,\r\n } = options;\r\n if (!Array.isArray(polygonDataList) || polygonDataList.length === 0) {\r\n console.warn(\"createPolygonGraphicsLayer: 范围是空的\");\r\n return null;\r\n }\r\n\r\n if (typeof window.jkEsri === \"undefined\") {\r\n console.error(\"ArcGIS API for JavaScript is not loaded\");\r\n return null;\r\n }\r\n\r\n const { Polygon, SpatialReference, GraphicsLayer, Graphic } = window.jkEsri;\r\n // ========== 步骤 1:确定空间参考(spatialReference)==========\r\n let view = null;\r\n let spatialReference = null;\r\n\r\n if (context && typeof context === \"object\") {\r\n if (context.type === \"2d\" || context.type === \"3d\") {\r\n view = context;\r\n spatialReference = view.spatialReference;\r\n if (!spatialReference) {\r\n console.error(\"View spatialReference is not ready\");\r\n return null;\r\n }\r\n } else if (context.declaredClass === \"esri.layers.GraphicsLayer\") {\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n } else {\r\n console.warn(\"Unknown context type, assuming WKID 4326\");\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n }\r\n } else {\r\n spatialReference = new SpatialReference({ wkid: 4326 });\r\n }\r\n\r\n const sr = spatialReference;\r\n\r\n // ========== 辅助函数 ==========\r\n /**\r\n * 提取 rings 数据\r\n */\r\n function extractRawRings(item, index) {\r\n if (!item) return null;\r\n if (Array.isArray(item)) return item;\r\n if (item.rings) return item.rings;\r\n if (item.geometry.rings) return item.geometry.rings;\r\n console.warn(`Item ${index} has no valid rings`);\r\n return null;\r\n }\r\n\r\n /**\r\n * 确保环闭合\r\n */\r\n function ensureClosed(ring) {\r\n if (ring.length < 3) return null;\r\n const first = ring[0];\r\n const last = ring[ring.length - 1];\r\n if (first[0] !== last[0] || first[1] !== last[1]) {\r\n return [...ring, [first[0], first[1]]];\r\n }\r\n return ring;\r\n }\r\n // ========== 主逻辑 ==========\r\n try {\r\n // ========== 正向显示模式(2D/3D 通用)==========\r\n const graphics = [];\r\n for (let i = 0; i < polygonDataList.length; i++) {\r\n const item = polygonDataList[i];\r\n const rawRings = extractRawRings(item, i);\r\n if (!rawRings) continue;\r\n const symbolConfig = { ...defaultSymbol };\r\n if (item && typeof item === \"object\") {\r\n if (Array.isArray(item.color)) symbolConfig.color = item.color;\r\n if (typeof item.opacity === \"number\") {\r\n const alpha = Math.min(1, Math.max(0, item.opacity));\r\n const baseColor = Array.isArray(symbolConfig.color)\r\n ? symbolConfig.color.slice(0, 3)\r\n : [255, 255, 255];\r\n symbolConfig.color = [...baseColor, alpha];\r\n }\r\n if (item.outlineColor) symbolConfig.outline.color = item.outlineColor;\r\n if (typeof item.outlineWidth === \"number\")\r\n symbolConfig.outline.width = item.outlineWidth;\r\n }\r\n const symbol = {\r\n type: \"simple-fill\",\r\n color: symbolConfig.color,\r\n outline: symbolConfig.outline,\r\n };\r\n const attributes = { ...(item || {}), sourceIndex: i };\r\n if (enableHoles) {\r\n const poly = new Polygon({\r\n rings: rawRings,\r\n spatialReference: sr,\r\n });\r\n graphics.push(new Graphic({ geometry: poly, symbol, attributes }));\r\n } else {\r\n const outerRing = ensureClosed(rawRings[0]);\r\n if (outerRing) {\r\n const poly = new Polygon({\r\n rings: [outerRing],\r\n spatialReference: sr,\r\n });\r\n graphics.push(new Graphic({ geometry: poly, symbol, attributes }));\r\n }\r\n }\r\n }\r\n\r\n if (graphics.length === 0) {\r\n console.warn(\"No valid graphics created\");\r\n return null;\r\n }\r\n let layer = mapLayer;\r\n if (!layer) {\r\n layer = new GraphicsLayer({ id: layerId, title: \"Polygon Layer\" });\r\n if (view) view.map.add(layer);\r\n } else {\r\n layer.removeAll();\r\n }\r\n layer.addMany(graphics);\r\n return { layer, graphics };\r\n } catch (error) {\r\n console.error(\"createPolygonGraphicsLayer failed:\", error);\r\n return null;\r\n }\r\n}\r\n","// import { judgmentMapDataType, isValidArcGISPoint } from './comstom'\r\n/**\r\n * ArcGIS用于 ArcGIS JSON ⇄ GeoJSON 互转\r\n * ArcGIS.parse(arcgisJson) → 用于将 ArcGIS JSON 转为 GeoJSON { x: 30, y: 10 }==>{type: \"Point\",coordinates: [30, 10]}\r\n * ArcGIS.convert({geojson,options}) → 将 GeoJSON 转为 ArcGIS 格式。{type: \"Point\",coordinates: [30, 10]}==>{ x: 30, y: 10 }\r\n * options ==>{idAttribute: 'OBJECTID', // 指定 ID 字段名(默认 \"id\")\r\n * spatialReference: { wkid: 4326 } // 添加空间参考\r\n * } ==> {x: 30,y: 10,spatialReference: { wkid: 4326 }}\r\n */\r\nimport ArcGIS from 'terraformer-arcgis-parser'\r\n/**\r\n * ArcGIS 转 GeoJSON\r\n * @param {Object} data - 对象\r\n * @param {Object} data.geometry- 点:{x,y},线:{paths:[]},面:{rings:[]}\r\n * @returns {GeoJSON} GeoJSON 对象\r\n */\r\nfunction arcGISTranformGeoJson(data) {\r\n try {\r\n if (!data || !data.geometry) {\r\n throw new Error(\r\n `${JSON.stringify(\r\n data\r\n )}-arcGISTranformGeoJson对象包含geometry:{点:{x,y},线:{paths:[]},面:{rings:[]}}`\r\n )\r\n }\r\n return ArcGIS.parse(data.geometry)\r\n } catch (error) {\r\n throw new Error(`arcGISTranformGeoJson: ${error}`)\r\n }\r\n}\r\n/**\r\n * GeoJSON 转 ArcGIS\r\n * @param {Object} data - 对象\r\n * @param {Object} data.geometry {type:Point|MultiPoint|LineString|Polygon|MultiPolygon,coordinates:[]}\r\n * @returns {ArcGIS} ArcGIS 对象\r\n */\r\nfunction geoJsonTranformArcgis(data) {\r\n const errorText = `geoJsonTranformArcgis数据格式=>{geometry:{type:Point|MultiPoint|LineString|Polygon|MultiPolygon,coordinates:[]}}<=>错误对象${JSON.stringify(\r\n data\r\n )}`\r\n try {\r\n if (\r\n !data ||\r\n !data.geometry ||\r\n !data.geometry.coordinates ||\r\n data.geometry.coordinates.length === 0\r\n ) {\r\n console.error(errorText)\r\n return null\r\n }\r\n let geometry = data.geometry,\r\n jsonData = geometry\r\n if (!geometry.type) {\r\n console.error(errorText)\r\n return null\r\n }\r\n if (geometry.type == 'Point') {\r\n jsonData = {\r\n type: 'Feature',\r\n geometry: geometry,\r\n properties: {}\r\n }\r\n }\r\n const arcgisData = ArcGIS.convert(jsonData)\r\n if (arcgisData && JSON.stringify(arcgisData) != '{}') {\r\n return arcgisData.geometry ? arcgisData.geometry : arcgisData\r\n } else throw new Error(errorText)\r\n } catch (error) {\r\n throw new Error(error)\r\n }\r\n}\r\nimport { drawLayer } from '../utils/index.js'\r\n\r\n/**\r\n * WKT用于 WKT ⇄ GeoJSON 互转\r\n * WKT支持格式-POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION\r\n * WKT.parse(wktString) → 将WKT字符串解析为 GeoJSON 对象。'POINT (30 10)'==>{type: \"Point\",coordinates: [30, 10]}\r\n * WKT.convert(geojson) → 将 GeoJSON 对象转换为 WKT 字符串。{type: \"Point\",coordinates: [30, 10]}==>POINT (30 10)\r\n */\r\nimport WKT from 'terraformer-wkt-parser'\r\n\r\n/**\r\n * 安全判断是否为非空字符串\r\n */\r\nfunction isValidString(str) {\r\n return str && typeof str === 'string' && str.trim() !== '' && str != 'null' && str != 'undefined'\r\n}\r\n/**\r\n * 判断点\r\n * @param {*} value\r\n * @returns\r\n */\r\nfunction isNumeric(value) {\r\n // 排除 null 和 boolean(因为 typeof null === 'object',但 Number(null) = 0)\r\n if (value === null || !value || typeof value === 'boolean') {\r\n return false\r\n }\r\n\r\n // 如果是 number 类型,必须是有限数(排除 NaN, Infinity)\r\n if (typeof value === 'number') {\r\n return isFinite(value)\r\n }\r\n\r\n // 如果是 string 类型,尝试转换\r\n if (typeof value === 'string') {\r\n // 去除首尾空格\r\n const trimmed = value.trim()\r\n // 空字符串直接返回 false\r\n if (trimmed === '') return false\r\n // 使用 isFinite 检查是否可转为有效数字\r\n return isFinite(trimmed) && !isNaN(Number(trimmed))\r\n }\r\n\r\n // 其他类型(object, array, undefined 等)一律 false\r\n return false\r\n}\r\n/**\r\n * 粗略判断是否为 ArcGIS JSON 对象(至少包含 x/y 或 paths/rings)\r\n */\r\nfunction isValidArcGIS(obj) {\r\n if (typeof obj !== 'object' || obj === null) return false\r\n // Point: {x, y}\r\n if (isNumeric(obj.x) && isNumeric(obj.y)) return true\r\n // Point: {longitude, latitude}\r\n if (isNumeric(obj.longitude) && isNumeric(obj.latitude)) return true\r\n // Multipoint: {points: [...]}\r\n if (Array.isArray(obj.points)) return true\r\n\r\n // Polyline: {paths: [...]}\r\n if (Array.isArray(obj.paths)) return true\r\n\r\n // Polygon: {rings: [...]}\r\n if (Array.isArray(obj.rings)) return true\r\n\r\n return false\r\n}\r\n/**\r\n * geojson转wkt\r\n * @param {*} geojson\r\n * @returns\r\n */\r\nfunction geoJsonTranformWkt(geojson) {\r\n try {\r\n if (!geojson && !geojson.type) {\r\n throw new Error(`[geoJsonTranformWkt] 期望字符串,但收到: ${geojson}`)\r\n }\r\n return WKT.convert(geojson)\r\n } catch (error) {\r\n throw new Error(`geojson解析失败: ${error.message}`)\r\n }\r\n}\r\n\r\n/**\r\n * WKT 转 ArcGIS(安全版)\r\n * @param {string} wktString - WKT 字符串,如 \"POINT (30 10)\"\r\n * @returns {Object|null} ArcGIS JSON 对象,失败返回 null\r\n */\r\nfunction wktTranformArcgis(wktString) {\r\n try {\r\n if (!isValidString(wktString)) {\r\n throw new Error(`[wktTranformArcgis] 期望字符串,但收到: ${typeof wktString}`)\r\n }\r\n\r\n const geojson = WKT.parse(wktString.trim())\r\n const arcgis = ArcGIS.convert(geojson)\r\n return arcgis\r\n } catch (error) {\r\n throw new Error(`WKT 解析失败: ${error.message}`)\r\n }\r\n}\r\n/**\r\n * ArcGIS 转 WKT(安全版)\r\n * @param {Object} arcgisJson - ArcGIS 格式对象\r\n * @returns {string|null} WKT 字符串,失败返回 null\r\n */\r\nfunction arcgisTranformWkt(arcgisJson) {\r\n try {\r\n if (!isValidArcGIS(arcgisJson)) {\r\n throw new Error(`[arcgisTranformWkt] 期望字符串,但收到: ${arcgisJson}`)\r\n }\r\n const geojson = ArcGIS.parse(arcgisJson)\r\n const wkt = WKT.convert(geojson)\r\n return wkt\r\n } catch (error) {\r\n throw new Error(`[arcgisTranformWkt] ArcGIS 解析失败:${error.message}输入:${arcgisJson}`)\r\n }\r\n}\r\n/**\r\n * 绘制项目图层\r\n * @param {*} data\r\n * @returns\r\n */\r\nfunction drawWktAsset(data) {\r\n let graphic = null\r\n let arcgis = wktTranformArcgis(data.sub_range)\r\n graphic = drawLayer({\r\n geometry: arcgis,\r\n ...data\r\n })\r\n return graphic\r\n}\r\nexport {\r\n arcGISTranformGeoJson,\r\n geoJsonTranformArcgis,\r\n geoJsonTranformWkt,\r\n wktTranformArcgis,\r\n arcgisTranformWkt,\r\n drawWktAsset\r\n}\r\n","/* eslint-disable require-jsdoc */\r\nimport { loadWmsLayer } from \"../config/loadLayers.js\";\r\nimport { toArcGISPoint, mapJump } from \"../config/toArcGISPoint.js\";\r\nimport {\r\n getTextSymbol,\r\n getSimpleMarkerSymbol,\r\n getPictureSymbol,\r\n getLineSymbol,\r\n getFillSymbol,\r\n drawArcPoint,\r\n createArcPoint,\r\n createLineGraphicsLayer,\r\n createMaskLayer,\r\n createPolygonGraphicsLayer,\r\n drawLayer,\r\n} from \"../config/drawLayer.js\";\r\n\r\n/**\r\n * 加载2D地图\r\n * @param String mapId 地图容器id\r\n * @param Object params 地图参数\r\n * @return Promise\r\n */\r\nvar arcgisCoreView = null,\r\n arcgisCoreMap = null;\r\n/**\r\n * 返回地图容器\r\n * @param {*} data\r\n */\r\nexport function initMapPack(data) {\r\n if (!arcgisCoreView && data.view) arcgisCoreView = data.view;\r\n if (!arcgisCoreMap && data.map) arcgisCoreMap = data.map;\r\n}\r\n\r\n/**\r\n * 创建自定义底图\r\n * @param {*} mapId\r\n * @param {*} layer\r\n * @param {*} params\r\n * @returns\r\n */\r\nexport function createBase(mapId, layer, params) {\r\n return new Promise((resolve) => {\r\n arcgisCoreMap = new window.jkEsri.Map({ layers: [layer] }); // 添加动态图层\r\n const { minZoom = 6, maxZoom = 17 } = params;\r\n const viewOptions = {\r\n container: mapId,\r\n map: arcgisCoreMap,\r\n ui: {\r\n logo: false,\r\n components: [\"zoom\"],\r\n },\r\n };\r\n Object.assign(viewOptions, params || {});\r\n viewOptions.constraints = {\r\n minZoom,\r\n maxZoom,\r\n };\r\n arcgisCoreView = new window.jkEsri.MapView(viewOptions);\r\n arcgisCoreView.when(function () {\r\n if (params.extent) {\r\n goToViewExtent(params.extent);\r\n }\r\n resolve({ map: arcgisCoreMap, view: arcgisCoreView });\r\n });\r\n });\r\n}\r\n/**\r\n * 创建基础地图\r\n * @param {*} mapId\r\n * @param {*} params\r\n * @returns\r\n */\r\nexport function createMapView(mapId, params) {\r\n return new Promise((resolve) => {\r\n /*天地图-影像(CGCS2000)*/\r\n const layersType =\r\n params && params.layersType ? params.layersType : \"tdtYxt\";\r\n var tiandituDtLayer = loadWmsLayer({\r\n id: layersType,\r\n title: \"天地图-影像\",\r\n url: \"http://{subDomain}.tianditu.gov.cn/img_c/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=img&STYLE=default&FORMAT=tiles&TILEMATRIXSET=c&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}&tk=4267820f43926eaf808d61dc07269beb\",\r\n subDomains: [\"t0\", \"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\"],\r\n loadInfo: true,\r\n // fullExtent: {\r\n // xmin: 109.613990783691,\r\n // xmax: 117.323570251465,\r\n // ymin: 20.131498336792,\r\n // ymax: 25.5443782806396,\r\n // spatialReference: 4490\r\n // },\r\n }),\r\n tiandituDtBz = loadWmsLayer({\r\n id: \"tiandituDtBz\",\r\n title: \"天地图-影像注记\",\r\n url: \"http://{subDomain}.tianditu.gov.cn/cia_c/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=cia&STYLE=default&FORMAT=tiles&TILEMATRIXSET=c&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}&tk=4267820f43926eaf808d61dc07269beb\",\r\n subDomains: [\"t0\", \"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\"],\r\n loadInfo: true,\r\n // fullExtent: {\r\n // xmin: 109.613990783691,\r\n // xmax: 117.323570251465,\r\n // ymin: 20.131498336792,\r\n // ymax: 25.5443782806396,\r\n // spatialReference: 4490\r\n // }\r\n });\r\n if (layersType == \"tdtDxt\") {\r\n tiandituDtLayer = loadWmsLayer({\r\n id: layersType,\r\n title: \"天地图-地形图\",\r\n url: \"http://{subDomain}.tianditu.gov.cn/ter_c/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=ter&STYLE=default&FORMAT=tiles&TILEMATRIXSET=c&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}&tk=4267820f43926eaf808d61dc07269beb\",\r\n subDomains: [\"t0\", \"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\"],\r\n loadInfo: true,\r\n // fullExtent: {\r\n // xmin: 109.613990783691,\r\n // xmax: 117.323570251465,\r\n // ymin: 20.131498336792,\r\n // ymax: 25.5443782806396,\r\n // spatialReference: 4490\r\n // },\r\n });\r\n } else if (layersType == \"tdtSlt\") {\r\n tiandituDtLayer = loadWmsLayer({\r\n id: \"tdtSlt\",\r\n title: \"天地图-矢量图\",\r\n url: \"https://{subDomain}.tianditu.gov.cn/vec_c/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=vec&STYLE=default&FORMAT=tiles&TILEMATRIXSET=c&TILEMATRIX={level}&TILEROW={row}&TILECOL={col}&tk=4267820f43926eaf808d61dc07269beb\",\r\n subDomains: [\"t0\", \"t1\", \"t2\", \"t3\", \"t4\", \"t5\", \"t6\", \"t7\"],\r\n loadInfo: true,\r\n // fullExtent: {\r\n // xmin: 109.613990783691,\r\n // xmax: 117.323570251465,\r\n // ymin: 20.131498336792,\r\n // ymax: 25.5443782806396,\r\n // spatialReference: 4490\r\n // },\r\n });\r\n }\r\n arcgisCoreMap = new window.jkEsri.Map();\r\n arcgisCoreMap.layers.add(tiandituDtLayer, 0);\r\n\r\n arcgisCoreMap.layers.add(tiandituDtBz, 1);\r\n const { minZoom = 6, maxZoom = 17 } = params;\r\n const param = {\r\n map: arcgisCoreMap,\r\n container: mapId,\r\n };\r\n if (params && params.mapType && params.mapType == \"3d\") {\r\n arcgisCoreView = new window.jkEsri.SceneView(param);\r\n // arcgisCoreView.watch('zoom', (newZoom) => {\r\n // if (newZoom < minZoom || newZoom > maxZoom) {\r\n // arcgisCoreView.goTo(\r\n // { zoom: Math.min(maxZoom, Math.max(minZoom, newZoom)) },\r\n // { animate: false } // 禁用动画,避免闪烁\r\n // )\r\n // }\r\n // })\r\n } else {\r\n Object.assign(param, params || {});\r\n param.constraints = {\r\n minZoom,\r\n maxZoom,\r\n };\r\n arcgisCoreView = new window.jkEsri.MapView(param);\r\n }\r\n arcgisCoreView.when(function () {\r\n if (param.extent) {\r\n goToViewExtent(param.extent);\r\n }\r\n resolve({ map: arcgisCoreMap, view: arcgisCoreView });\r\n });\r\n });\r\n}\r\n/**\r\n * 跳转点\r\n * @param String mapId 地图容器id\r\n * @param Object params 地图参数\r\n * @return Promise\r\n */\r\nfunction goToPoint(point, zoom = 17) {\r\n arcgisCoreView.goTo(\r\n {\r\n target: toArcGISPoint(point), // 跳转目标点\r\n tilt: 60, // 可选,目标视角倾斜角度\r\n heading: 30, // 可选,目标视角方向角度\r\n zoom, // 可选,目标视角缩放级别\r\n },\r\n { duration: 1000 }\r\n );\r\n}\r\n/**\r\n * 跳转extent\r\n * @param Object extent 地图参数\r\n */\r\nfunction goToViewExtent(extent) {\r\n if (extent.xmin && extent.ymin && extent.xmax && extent.ymax) {\r\n let wkid = extent.xmin > 1000 ? 102100 : 4326;\r\n arcgisCoreView.goTo(\r\n new window.jkEsri.Extent(\r\n extent.xmin,\r\n extent.ymin,\r\n extent.xmax,\r\n extent.ymax,\r\n new window.jkEsri.SpatialReference({\r\n wkid: wkid,\r\n })\r\n ),\r\n { duration: 1000 }\r\n );\r\n }\r\n}\r\n/**\r\n * 地图跳转\r\n * @param {*} target\r\n * @param {*} options\r\n * @returns\r\n */\r\nfunction goToMap(target, options = { zoom: 16 }) {\r\n if (target && arcgisCoreView) {\r\n if (\r\n (target.x && target.y) ||\r\n (target.longitude && target.latitude) ||\r\n (target.jd && target.wd) ||\r\n (target.length == 2 && target[0] && target[1]) ||\r\n (target.lng && target.lat)\r\n ) {\r\n goToPoint(target, options.zoom);\r\n return;\r\n }\r\n if (target.xmin && target.ymin && target.xmax && target.ymax) {\r\n goToViewExtent(target);\r\n return;\r\n }\r\n mapJump(arcgisCoreView, target, options);\r\n }\r\n}\r\n/**\r\n * 获取面积\r\n * @param geometry\r\n */\r\nfunction getArea(geometry) {\r\n const outSpatialReference = {\r\n wkid: 4326,\r\n };\r\n outSpatialReference;\r\n const newGeometry = window.jkEsri.projection.project(\r\n geometry,\r\n outSpatialReference\r\n );\r\n newGeometry;\r\n // 平方米\r\n return window.jkEsri.geometryEngine.geodesicArea(\r\n newGeometry,\r\n \"square-meters\"\r\n ); //返回平方米\r\n}\r\n/**\r\n * 绘制缓冲区\r\n * @param {*} val\r\n * @param {*} myDrawGeometry\r\n * @returns\r\n */\r\nfunction drawBuffer(val = 10, myDrawGeometry) {\r\n return new Promise((resolve) => {\r\n const outSpatialReference = {\r\n wkid: 4326,\r\n };\r\n const myDrawGeometryNew = window.jkEsri.projection.project(\r\n myDrawGeometry,\r\n outSpatialReference\r\n );\r\n //公里-meters kilometers\r\n const geometry = window.jkEsri.geometryEngine.geodesicBuffer(\r\n myDrawGeometryNew,\r\n val,\r\n \"kilometers\"\r\n );\r\n let lineColor = new window.jkEsri.Color(\"red\");\r\n const color = new window.jkEsri.Color(\"red\");\r\n color.a = 0.1;\r\n const symbol = {\r\n type: \"simple-fill\",\r\n color: color,\r\n outline: {\r\n color: lineColor,\r\n width: 2,\r\n style: \"solid\",\r\n },\r\n };\r\n let graphic = window.jkEsri.Graphic.fromJSON({\r\n geometry,\r\n attributes: null,\r\n });\r\n graphic.symbol = symbol;\r\n resolve(graphic);\r\n goToViewExtent(graphic.geometry.extent);\r\n });\r\n}\r\nimport { arcGISTranformGeoJson } from \"../config/wktMethods\";\r\nexport {\r\n getArea,\r\n goToMap,\r\n drawBuffer,\r\n getTextSymbol,\r\n getSimpleMarkerSymbol,\r\n getPictureSymbol,\r\n getLineSymbol,\r\n getFillSymbol,\r\n toArcGISPoint,\r\n drawArcPoint,\r\n createArcPoint,\r\n createLineGraphicsLayer,\r\n createMaskLayer,\r\n createPolygonGraphicsLayer,\r\n drawLayer,\r\n arcGISTranformGeoJson,\r\n};\r\n","'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from 'axios'\r\nlet gjData = [\r\n {\r\n latitude: 23.183327834,\r\n longitude: 113.403289721\r\n },\r\n {\r\n latitude: 23.183327705,\r\n longitude: 113.403289762\r\n },\r\n {\r\n latitude: 23.183445415,\r\n longitude: 113.403424905\r\n },\r\n {\r\n latitude: 23.183448298,\r\n longitude: 113.403421133\r\n },\r\n {\r\n latitude: 23.183272301,\r\n longitude: 113.403244761\r\n },\r\n {\r\n latitude: 23.18334142,\r\n longitude: 113.403288819\r\n },\r\n {\r\n latitude: 23.183385722,\r\n longitude: 113.403316791\r\n },\r\n {\r\n latitude: 23.18338681,\r\n longitude: 113.403316918\r\n },\r\n {\r\n latitude: 23.18342365,\r\n longitude: 113.403339142\r\n },\r\n {\r\n latitude: 23.183435695,\r\n longitude: 113.403368006\r\n },\r\n {\r\n latitude: 23.183458462,\r\n longitude: 113.40341566\r\n },\r\n {\r\n latitude: 23.1834767,\r\n longitude: 113.403450948\r\n },\r\n {\r\n latitude: 23.183487018,\r\n longitude: 113.403472978\r\n },\r\n {\r\n latitude: 23.183474702,\r\n longitude: 113.403519446\r\n },\r\n {\r\n latitude: 23.18346746,\r\n longitude: 113.403551614\r\n },\r\n {\r\n latitude: 23.183457553,\r\n longitude: 113.403593373\r\n },\r\n {\r\n latitude: 23.183446648,\r\n longitude: 113.403636364\r\n },\r\n {\r\n latitude: 23.183439113,\r\n longitude: 113.403677632\r\n },\r\n {\r\n latitude: 23.183436163,\r\n longitude: 113.403699473\r\n },\r\n {\r\n latitude: 23.183433538,\r\n longitude: 113.403713766\r\n },\r\n {\r\n latitude: 23.183430131,\r\n longitude: 113.403727555\r\n },\r\n {\r\n latitude: 23.183432256,\r\n longitude: 113.403753757\r\n },\r\n {\r\n latitude: 23.183435481,\r\n longitude: 113.403790737\r\n },\r\n {\r\n latitude: 23.183437181,\r\n longitude: 113.403830022\r\n },\r\n {\r\n latitude: 23.183438793,\r\n longitude: 113.4038605\r\n },\r\n {\r\n latitude: 23.183441243,\r\n longitude: 113.403883432\r\n },\r\n {\r\n latitude: 23.183506056,\r\n longitude: 113.403881087\r\n },\r\n {\r\n latitude: 23.183535315,\r\n longitude: 113.403878137\r\n },\r\n {\r\n latitude: 23.183576343,\r\n longitude: 113.40387476\r\n },\r\n {\r\n latitude: 23.183540015,\r\n longitude: 113.403878113\r\n },\r\n {\r\n latitude: 23.183532393,\r\n longitude: 113.403805058\r\n },\r\n {\r\n latitude: 23.18352621,\r\n longitude: 113.403743629\r\n },\r\n {\r\n latitude: 23.183521787,\r\n longitude: 113.403709945\r\n },\r\n {\r\n latitude: 23.18351811,\r\n longitude: 113.403660533\r\n },\r\n {\r\n latitude: 23.183514268,\r\n longitude: 113.403626867\r\n },\r\n {\r\n latitude: 23.183512565,\r\n longitude: 113.403597051\r\n },\r\n {\r\n latitude: 23.183509183,\r\n longitude: 113.403564486\r\n },\r\n {\r\n latitude: 23.183506912,\r\n longitude: 113.403547867\r\n },\r\n {\r\n latitude: 23.183503392,\r\n longitude: 113.403512886\r\n },\r\n {\r\n latitude: 23.183499576,\r\n longitude: 113.403477199\r\n },\r\n {\r\n latitude: 23.183496244,\r\n longitude: 113.403443952\r\n },\r\n {\r\n latitude: 23.183494047,\r\n longitude: 113.403421579\r\n },\r\n {\r\n latitude: 23.183492919,\r\n longitude: 113.403385444\r\n },\r\n {\r\n latitude: 23.183493365,\r\n longitude: 113.403351539\r\n },\r\n {\r\n latitude: 23.183492976,\r\n longitude: 113.403332441\r\n },\r\n {\r\n latitude: 23.183489731,\r\n longitude: 113.403299691\r\n },\r\n {\r\n latitude: 23.183486624,\r\n longitude: 113.403271692\r\n },\r\n {\r\n latitude: 23.183439628,\r\n longitude: 113.403254241\r\n },\r\n {\r\n latitude: 23.183418674,\r\n longitude: 113.403245809\r\n },\r\n {\r\n latitude: 23.183390747,\r\n longitude: 113.403234807\r\n },\r\n {\r\n latitude: 23.183345598,\r\n longitude: 113.403216483\r\n },\r\n {\r\n latitude: 23.183319579,\r\n longitude: 113.403204644\r\n },\r\n {\r\n latitude: 23.183342545,\r\n longitude: 113.403164238\r\n },\r\n {\r\n latitude: 23.183365598,\r\n longitude: 113.403128573\r\n },\r\n {\r\n latitude: 23.183382969,\r\n longitude: 113.403099251\r\n },\r\n {\r\n latitude: 23.183386971,\r\n longitude: 113.403100574\r\n },\r\n {\r\n latitude: 23.183449693,\r\n longitude: 113.403150908\r\n },\r\n {\r\n latitude: 23.183474457,\r\n longitude: 113.403170518\r\n },\r\n {\r\n latitude: 23.183500643,\r\n longitude: 113.403201166\r\n },\r\n {\r\n latitude: 23.183538599,\r\n longitude: 113.403249703\r\n },\r\n {\r\n latitude: 23.183561277,\r\n longitude: 113.403277425\r\n },\r\n {\r\n latitude: 23.183597481,\r\n longitude: 113.403325142\r\n },\r\n {\r\n latitude: 23.183625068,\r\n longitude: 113.40336022\r\n },\r\n {\r\n latitude: 23.183641735,\r\n longitude: 113.403379961\r\n },\r\n {\r\n latitude: 23.183567632,\r\n longitude: 113.403415609\r\n },\r\n {\r\n latitude: 23.183528837,\r\n longitude: 113.403432589\r\n },\r\n {\r\n latitude: 23.183572127,\r\n longitude: 113.403474834\r\n },\r\n {\r\n latitude: 23.183571451,\r\n longitude: 113.403503243\r\n },\r\n {\r\n latitude: 23.183565767,\r\n longitude: 113.403566032\r\n },\r\n {\r\n latitude: 23.183562411,\r\n longitude: 113.403613148\r\n },\r\n {\r\n latitude: 23.183567786,\r\n longitude: 113.403645951\r\n },\r\n {\r\n latitude: 23.183577532,\r\n longitude: 113.403680848\r\n },\r\n {\r\n latitude: 23.183584414,\r\n longitude: 113.40370146\r\n },\r\n {\r\n latitude: 23.183597703,\r\n longitude: 113.403754034\r\n },\r\n {\r\n latitude: 23.183611276,\r\n longitude: 113.403806426\r\n },\r\n {\r\n latitude: 23.18362028,\r\n longitude: 113.403844608\r\n },\r\n {\r\n latitude: 23.183663768,\r\n longitude: 113.403845759\r\n },\r\n {\r\n latitude: 23.183712307,\r\n longitude: 113.403831228\r\n },\r\n {\r\n latitude: 23.183724163,\r\n longitude: 113.403787393\r\n },\r\n {\r\n latitude: 23.183730158,\r\n longitude: 113.403746144\r\n },\r\n {\r\n latitude: 23.183735937,\r\n longitude: 113.403702431\r\n },\r\n {\r\n latitude: 23.183740693,\r\n longitude: 113.403667152\r\n },\r\n {\r\n latitude: 23.183742057,\r\n longitude: 113.403650173\r\n },\r\n {\r\n latitude: 23.183734177,\r\n longitude: 113.403618829\r\n },\r\n {\r\n latitude: 23.183725174,\r\n longitude: 113.403590992\r\n },\r\n {\r\n latitude: 23.183715724,\r\n longitude: 113.403552529\r\n },\r\n {\r\n latitude: 23.183703949,\r\n longitude: 113.403495103\r\n },\r\n {\r\n latitude: 23.183696404,\r\n longitude: 113.40344933\r\n },\r\n {\r\n latitude: 23.183687035,\r\n longitude: 113.403387525\r\n },\r\n {\r\n latitude: 23.183680307,\r\n longitude: 113.403339774\r\n },\r\n {\r\n latitude: 23.183674136,\r\n longitude: 113.403294958\r\n },\r\n {\r\n latitude: 23.183666043,\r\n longitude: 113.403247509\r\n },\r\n {\r\n latitude: 23.183658668,\r\n longitude: 113.403205447\r\n },\r\n {\r\n latitude: 23.183653676,\r\n longitude: 113.403176062\r\n },\r\n {\r\n latitude: 23.183648883,\r\n longitude: 113.403147174\r\n },\r\n {\r\n latitude: 23.183641813,\r\n longitude: 113.403112216\r\n },\r\n {\r\n latitude: 23.183631684,\r\n longitude: 113.403060803\r\n },\r\n {\r\n latitude: 23.183620288,\r\n longitude: 113.403011501\r\n },\r\n {\r\n latitude: 23.183610919,\r\n longitude: 113.402971483\r\n },\r\n {\r\n latitude: 23.183603933,\r\n longitude: 113.402930426\r\n },\r\n {\r\n latitude: 23.183644501,\r\n longitude: 113.402908973\r\n },\r\n {\r\n latitude: 23.183679087,\r\n longitude: 113.402903514\r\n },\r\n {\r\n latitude: 23.183710094,\r\n longitude: 113.402898431\r\n },\r\n {\r\n latitude: 23.183747309,\r\n longitude: 113.402900257\r\n },\r\n {\r\n latitude: 23.183747916,\r\n longitude: 113.402903264\r\n },\r\n {\r\n latitude: 23.183742208,\r\n longitude: 113.402950536\r\n },\r\n {\r\n latitude: 23.183737572,\r\n longitude: 113.402991024\r\n },\r\n {\r\n latitude: 23.183733539,\r\n longitude: 113.403024657\r\n },\r\n {\r\n latitude: 23.183730281,\r\n longitude: 113.403056637\r\n },\r\n {\r\n latitude: 23.183726123,\r\n longitude: 113.403095992\r\n },\r\n {\r\n latitude: 23.183723362,\r\n longitude: 113.403118331\r\n },\r\n {\r\n latitude: 23.183718653,\r\n longitude: 113.403151633\r\n },\r\n {\r\n latitude: 23.183713543,\r\n longitude: 113.403198101\r\n },\r\n {\r\n latitude: 23.183708902,\r\n longitude: 113.403238777\r\n },\r\n {\r\n latitude: 23.183704083,\r\n longitude: 113.403280446\r\n },\r\n {\r\n latitude: 23.183701081,\r\n longitude: 113.403304699\r\n },\r\n {\r\n latitude: 23.18367984,\r\n longitude: 113.403264485\r\n },\r\n {\r\n latitude: 23.183665146,\r\n longitude: 113.403232299\r\n },\r\n {\r\n latitude: 23.183680248,\r\n longitude: 113.403182451\r\n },\r\n {\r\n latitude: 23.183694191,\r\n longitude: 113.403150625\r\n },\r\n {\r\n latitude: 23.183713817,\r\n longitude: 113.403109762\r\n },\r\n {\r\n latitude: 23.183729319,\r\n longitude: 113.403078686\r\n },\r\n {\r\n latitude: 23.183753524,\r\n longitude: 113.403027734\r\n },\r\n {\r\n latitude: 23.183772534,\r\n longitude: 113.402988712\r\n },\r\n {\r\n latitude: 23.183786938,\r\n longitude: 113.4029754\r\n },\r\n {\r\n latitude: 23.183804009,\r\n longitude: 113.402964282\r\n },\r\n {\r\n latitude: 23.183861869,\r\n longitude: 113.402965778\r\n },\r\n {\r\n latitude: 23.183878425,\r\n longitude: 113.402994549\r\n },\r\n {\r\n latitude: 23.183877443,\r\n longitude: 113.403022199\r\n },\r\n {\r\n latitude: 23.183875284,\r\n longitude: 113.403067226\r\n },\r\n {\r\n latitude: 23.183874527,\r\n longitude: 113.403094053\r\n },\r\n {\r\n latitude: 23.183873075,\r\n longitude: 113.403127552\r\n },\r\n {\r\n latitude: 23.183870968,\r\n longitude: 113.40315874\r\n },\r\n {\r\n latitude: 23.183860703,\r\n longitude: 113.40317117\r\n },\r\n {\r\n latitude: 23.183823963,\r\n longitude: 113.403205232\r\n },\r\n {\r\n latitude: 23.183781421,\r\n longitude: 113.403245149\r\n },\r\n {\r\n latitude: 23.183753537,\r\n longitude: 113.403270052\r\n },\r\n {\r\n latitude: 23.183724537,\r\n longitude: 113.403295718\r\n },\r\n {\r\n latitude: 23.183707588,\r\n longitude: 113.403309828\r\n },\r\n {\r\n latitude: 23.183706616,\r\n longitude: 113.403309781\r\n },\r\n {\r\n latitude: 23.183706602,\r\n longitude: 113.403309451\r\n },\r\n {\r\n latitude: 23.183705964,\r\n longitude: 113.403309663\r\n },\r\n {\r\n latitude: 23.183694647,\r\n longitude: 113.40331984\r\n },\r\n {\r\n latitude: 23.183681584,\r\n longitude: 113.403342833\r\n },\r\n {\r\n latitude: 23.183677603,\r\n longitude: 113.403372324\r\n },\r\n {\r\n latitude: 23.183684296,\r\n longitude: 113.403401845\r\n },\r\n {\r\n latitude: 23.183701266,\r\n longitude: 113.403425101\r\n },\r\n {\r\n latitude: 23.183706051,\r\n longitude: 113.40342848\r\n },\r\n {\r\n latitude: 23.183749774,\r\n longitude: 113.4034589\r\n },\r\n {\r\n latitude: 23.183809031,\r\n longitude: 113.403499452\r\n },\r\n {\r\n latitude: 23.183826268,\r\n longitude: 113.403510612\r\n },\r\n {\r\n latitude: 23.183868604,\r\n longitude: 113.403527711\r\n },\r\n {\r\n latitude: 23.183914992,\r\n longitude: 113.403532835\r\n },\r\n {\r\n latitude: 23.183916843,\r\n longitude: 113.40353279\r\n },\r\n {\r\n latitude: 23.18391646,\r\n longitude: 113.403532749\r\n },\r\n {\r\n latitude: 23.183922909,\r\n longitude: 113.403504753\r\n },\r\n {\r\n latitude: 23.183944255,\r\n longitude: 113.403434947\r\n },\r\n {\r\n latitude: 23.183952118,\r\n longitude: 113.403399867\r\n },\r\n {\r\n latitude: 23.183948062,\r\n longitude: 113.403333473\r\n },\r\n {\r\n latitude: 23.18391638,\r\n longitude: 113.403274187\r\n },\r\n {\r\n latitude: 23.183910703,\r\n longitude: 113.403269006\r\n },\r\n {\r\n latitude: 23.18391073,\r\n longitude: 113.403267803\r\n },\r\n {\r\n latitude: 23.183876459,\r\n longitude: 113.40328313\r\n },\r\n {\r\n latitude: 23.183812288,\r\n longitude: 113.403322957\r\n },\r\n {\r\n latitude: 23.183761031,\r\n longitude: 113.403369712\r\n },\r\n {\r\n latitude: 23.183708457,\r\n longitude: 113.40342629\r\n },\r\n {\r\n latitude: 23.183701975,\r\n longitude: 113.403432692\r\n },\r\n {\r\n latitude: 23.183700843,\r\n longitude: 113.403432815\r\n },\r\n {\r\n latitude: 23.183719515,\r\n longitude: 113.403456823\r\n },\r\n {\r\n latitude: 23.183740884,\r\n longitude: 113.403475796\r\n },\r\n {\r\n latitude: 23.183782589,\r\n longitude: 113.403506954\r\n },\r\n {\r\n latitude: 23.183802428,\r\n longitude: 113.403521746\r\n },\r\n {\r\n latitude: 23.183808793,\r\n longitude: 113.403527574\r\n },\r\n {\r\n latitude: 23.18384306,\r\n longitude: 113.40357\r\n },\r\n {\r\n latitude: 23.183868552,\r\n longitude: 113.403611229\r\n },\r\n {\r\n latitude: 23.183864236,\r\n longitude: 113.403612119\r\n },\r\n {\r\n latitude: 23.183808253,\r\n longitude: 113.403601498\r\n },\r\n {\r\n latitude: 23.183790246,\r\n longitude: 113.403610983\r\n },\r\n {\r\n latitude: 23.183796961,\r\n longitude: 113.403612889\r\n },\r\n {\r\n latitude: 23.183797604,\r\n longitude: 113.403612671\r\n },\r\n {\r\n latitude: 23.183823752,\r\n longitude: 113.403617652\r\n },\r\n {\r\n latitude: 23.18384693,\r\n longitude: 113.403632835\r\n },\r\n {\r\n latitude: 23.183839916,\r\n longitude: 113.403679376\r\n },\r\n {\r\n latitude: 23.183837127,\r\n longitude: 113.403692234\r\n },\r\n {\r\n latitude: 23.183823132,\r\n longitude: 113.403766378\r\n },\r\n {\r\n latitude: 23.183808008,\r\n longitude: 113.403843895\r\n },\r\n {\r\n latitude: 23.183801648,\r\n longitude: 113.40387446\r\n },\r\n {\r\n latitude: 23.183801726,\r\n longitude: 113.403875089\r\n },\r\n {\r\n latitude: 23.183801356,\r\n longitude: 113.40387548\r\n },\r\n {\r\n latitude: 23.183801199,\r\n longitude: 113.403875693\r\n },\r\n {\r\n latitude: 23.183799982,\r\n longitude: 113.403875082\r\n },\r\n {\r\n latitude: 23.183761855,\r\n longitude: 113.40384525\r\n },\r\n {\r\n latitude: 23.183701196,\r\n longitude: 113.403796093\r\n },\r\n {\r\n latitude: 23.183685878,\r\n longitude: 113.403784816\r\n },\r\n {\r\n latitude: 23.183680286,\r\n longitude: 113.403780887\r\n },\r\n {\r\n latitude: 23.183679922,\r\n longitude: 113.403780478\r\n },\r\n {\r\n latitude: 23.183699797,\r\n longitude: 113.403767551\r\n },\r\n {\r\n latitude: 23.183723761,\r\n longitude: 113.403715465\r\n },\r\n {\r\n latitude: 23.183754876,\r\n longitude: 113.403601332\r\n },\r\n {\r\n latitude: 23.183763831,\r\n longitude: 113.403581842\r\n },\r\n {\r\n latitude: 23.183816615,\r\n longitude: 113.403551211\r\n },\r\n {\r\n latitude: 23.183823964,\r\n longitude: 113.403559712\r\n },\r\n {\r\n latitude: 23.183824086,\r\n longitude: 113.403561691\r\n },\r\n {\r\n latitude: 23.183851736,\r\n longitude: 113.403551962\r\n },\r\n {\r\n latitude: 23.183894994,\r\n longitude: 113.403548796\r\n }\r\n]\r\n\r\n/**\r\n * 获取轨迹数据\r\n * @param {*} USE_MOCK\r\n * @returns\r\n */\r\nexport async function fetchGjData(url, params, USE_MOCK = false) {\r\n return new Promise((resolve, reject) => {\r\n if (!USE_MOCK) {\r\n // 真实接口\r\n axios\r\n .get(url, params)\r\n .then((res) => {\r\n let data = res.data && res.data.data ? res.data.data : res.data\r\n if (res.status == 200 && data && data.length > 0) resolve(data)\r\n else resolve([])\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n } else {\r\n resolve(gjData)\r\n }\r\n })\r\n}\r\n","/**\r\n * 计算两点之间的方位角(Forward Azimuth)\r\n * 支持输入:\r\n * - [lon, lat] 坐标数组\r\n * - { type: 'Point', coordinates: [lon, lat] }\r\n * - { type: 'Feature', geometry: { type: 'Point', coordinates: [lon, lat] } }\r\n *\r\n * @param {Array|Object} start - 起点\r\n * @param {Array|Object} end - 终点\r\n * @returns {number} 方位角(度,范围 [0, 360))\r\n */\r\nexport function bearing(start, end) {\r\n // 提取坐标的辅助函数\r\n function getCoordinates(obj) {\r\n if (Array.isArray(obj)) {\r\n // 直接是 [lon, lat]\r\n return obj\r\n }\r\n if (obj.type === 'Feature') {\r\n // GeoJSON Feature\r\n return obj.geometry.coordinates\r\n }\r\n if (obj.type === 'Point') {\r\n // GeoJSON Point Geometry\r\n return obj.coordinates\r\n }\r\n throw new Error('Invalid input: expected [lon, lat], Point geometry, or Feature<Point>')\r\n }\r\n\r\n const coord1 = getCoordinates(start)\r\n const coord2 = getCoordinates(end)\r\n\r\n const [lon1, lat1] = coord1\r\n const [lon2, lat2] = coord2\r\n\r\n // 转弧度\r\n const φ1 = (lat1 * Math.PI) / 180\r\n const φ2 = (lat2 * Math.PI) / 180\r\n const Δλ = ((lon2 - lon1) * Math.PI) / 180\r\n\r\n // 球面三角公式\r\n const y = Math.sin(Δλ) * Math.cos(φ2)\r\n const x = Math.cos(φ1) * Math.sin(φ2) - Math.sin(φ1) * Math.cos(φ2) * Math.cos(Δλ)\r\n\r\n let θ = Math.atan2(y, x) // 弧度\r\n let brng = (θ * 180) / Math.PI\r\n return (brng + 360) % 360 // 归一化到 [0, 360)\r\n}\r\n","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.name == 'point')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742351514971\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"3951\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M506.885115 1.022977c-193.342657 1.534466-348.835165 159.584416-347.812188 352.927073 0.511489 91.556444 37.338661 179.532468 101.786214 244.491508L506.885115 845.490509l246.025974-247.560439c136.055944-137.078921 135.544456-359.064935-1.534466-495.120879C686.417582 38.361638 598.441558 2.045954 506.885115 1.022977zM506.885115 506.373626c-85.418581 0-154.981019-69.562438-154.469531-155.492507 0-85.418581 69.050949-154.981019 154.469531-155.492508 85.418581 0 154.981019 69.562438 154.46953 155.492508 0.511489 85.418581-69.050949 154.981019-154.46953 155.492507z m-154.469531 452.667333c0 35.804196 69.050949 64.959041 154.469531 64.959041s154.46953-29.154845 154.46953-64.959041c0-35.804196-69.050949-64.959041-154.46953-64.959041s-154.46953 29.154845-154.469531 64.959041z\",\"p-id\":\"3952\",\"fill\":_vm.color}})]):(_vm.name == 'line')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742353681074\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"4947\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M419.2 102.4c51.2 0 92.8 41.6 92.8 96 0 25.6-9.6 51.2-28.8 70.4l166.4 416c19.2-12.8 44.8-16 67.2-9.6l172.8-272c-19.2-32-12.8-76.8 19.2-99.2 32-22.4 73.6-12.8 96 22.4 19.2 32 12.8 76.8-19.2 99.2-9.6 6.4-25.6 12.8-38.4 12.8l-176 275.2c28.8 41.6 19.2 102.4-19.2 131.2-41.6 32-99.2 22.4-128-22.4-16-22.4-19.2-48-16-73.6L422.4 291.2h-3.2c-12.8 0-22.4-3.2-32-6.4l-208 243.2c25.6 44.8 6.4 102.4-38.4 128s-99.2 6.4-124.8-38.4-6.4-102.4 38.4-128c22.4-12.8 51.2-16 76.8-6.4l208-243.2c-25.6-44.8-6.4-102.4 38.4-128 12.8-6.4 28.8-9.6 41.6-9.6z\",\"p-id\":\"4948\",\"fill\":_vm.color}})]):(_vm.name == 'polygon')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742353743548\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"5913\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M928.381303 0.002274a91.333624 91.333624 0 0 1 91.939988 91.939988 91.333624 91.333624 0 0 1-91.939988 91.939988 92.849535 92.849535 0 0 1-84.891003-56.581369H212.265055c-8.83018 21.222751-26.528439 40.664306-49.494487 49.532384v634.787636c21.222751 8.868078 40.664306 26.528439 49.494487 49.532384h97.245676c19.479453 0 35.396517 15.917063 35.396516 35.358619 0 19.441556-15.917063 35.358619-35.396516 35.358619H212.265055c-12.392571 33.615321-45.969994 56.58137-84.891004 56.581369a91.333624 91.333624 0 0 1-91.939988-91.939988c0-38.883111 23.003946-70.717237 56.58137-84.891003V176.833265C58.400111 164.440695 35.396165 130.863271 35.396165 91.942262A91.333624 91.333624 0 0 1 127.374051 0.002274c37.139814 0 70.755135 22.966048 84.891004 56.581369h631.263143C855.88287 22.968322 889.498192 0.002274 928.381303 0.002274zM443.858323 760.345219l127.336505 127.336505-146.778061 40.664306c-12.354673 3.524493-24.747243-8.83018-21.222751-21.22275l40.664307-146.778061z m344.831803-339.488217l123.774114 123.774114-305.910794 298.823911-120.249622-127.336505 302.386302-295.26152z m97.245676-97.283574c17.698258-15.917063 44.226697-17.66036 60.143759-1.743297l65.41155 65.411549c15.917063 15.917063 15.917063 42.445502-1.781195 60.14376l-61.887057 61.887058-123.774115-123.774115z\",\"p-id\":\"5914\",\"fill\":_vm.color}})]):(_vm.name == 'perv')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742353858894\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"7700\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M365.44 112.32v133.76h237.888a340.928 340.928 0 0 1 340.928 335.36v5.632a340.928 340.928 0 0 1-335.296 340.864l-5.632 0.064h-324.48a16 16 0 0 1-16-16v-64a16 16 0 0 1 16-16h324.48a244.928 244.928 0 0 0 5.12-489.856H130.432a16 16 0 0 1-11.136-27.52l218.88-213.76a16 16 0 0 1 27.2 11.456z\",\"fill\":_vm.color,\"p-id\":\"7701\"}})]):(_vm.name == 'next')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1742353895510\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"2267\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M670.08 112.32v133.76H432.192a340.928 340.928 0 0 0-340.928 335.36v5.632a340.928 340.928 0 0 0 335.296 340.864l5.632 0.064h324.48a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16h-324.48a244.928 244.928 0 0 1-5.12-489.856h477.952a16 16 0 0 0 11.2-27.52l-219.008-213.76a16 16 0 0 0-27.136 11.456z\",\"fill\":_vm.color,\"p-id\":\"2268\"}})]):(_vm.name == 'close')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1763603732402\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"2437\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M566.97558594 521.09667969L856.8828125 231.18945312c14.63378906-14.63378906 14.63378906-38.75976563 0-53.39355468l-1.58203125-1.58203125c-14.63378906-14.63378906-38.75976563-14.63378906-53.39355469 0L512 466.51660156 222.09277344 176.21386719c-14.63378906-14.63378906-38.75976563-14.63378906-53.39355469 0l-1.58203125 1.58203125c-15.02929688 14.63378906-15.02929688 38.75976563 0 53.39355469l289.90722656 289.90722656L167.1171875 811.00390625c-14.63378906 14.63378906-14.63378906 38.75976563 0 53.39355469l1.58203125 1.58203125c14.63378906 14.63378906 38.75976563 14.63378906 53.39355469 0L512 576.07226563 801.90722656 865.97949219c14.63378906 14.63378906 38.75976563 14.63378906 53.39355469 0l1.58203125-1.58203125c14.63378906-14.63378906 14.63378906-38.75976563 0-53.39355469L566.97558594 521.09667969z\",\"fill\":_vm.color,\"p-id\":\"2438\"}})]):(_vm.name == 'del')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1763604252947\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"3453\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M928.16 144H736V64a32 32 0 0 0-32-32H320a32 32 0 0 0-32 32v80H95.84a32 32 0 0 0 0 64H129.6l77.92 698.656A96 96 0 0 0 302.912 992h418.144a96.032 96.032 0 0 0 95.424-85.344L894.4 208h33.728a32 32 0 0 0 0.032-64zM352 96h320v48H352V96z m400.896 803.552a32 32 0 0 1-31.808 28.448H302.912a32 32 0 0 1-31.808-28.448L193.984 208h636.032l-77.12 691.552z\",\"p-id\":\"3454\",\"fill\":_vm.color}}),_c('path',{attrs:{\"d\":\"M608 820.928a32 32 0 0 0 32-32V319.104a32 32 0 0 0-64 0v469.824a32 32 0 0 0 32 32zM432 820.928a32 32 0 0 0 32-32V319.104a32 32 0 0 0-64 0v469.824a32 32 0 0 0 32 32z\",\"p-id\":\"3455\",\"fill\":_vm.color}})]):(_vm.name == 'full')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1763604352213\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"4438\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M128 266.666667v490.666666a53.393333 53.393333 0 0 0 53.333333 53.333334h661.333334a53.393333 53.393333 0 0 0 53.333333-53.333334V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H181.333333a53.393333 53.393333 0 0 0-53.333333 53.333334z m725.333333 0v490.666666a10.666667 10.666667 0 0 1-10.666666 10.666667H181.333333a10.666667 10.666667 0 0 1-10.666666-10.666667V266.666667a10.666667 10.666667 0 0 1 10.666666-10.666667h661.333334a10.666667 10.666667 0 0 1 10.666666 10.666667z m-597.333333 608a21.333333 21.333333 0 0 1-21.333333 21.333333H96a53.393333 53.393333 0 0 1-53.333333-53.333333v-138.666667a21.333333 21.333333 0 0 1 42.666666 0v138.666667a10.666667 10.666667 0 0 0 10.666667 10.666666h138.666667a21.333333 21.333333 0 0 1 21.333333 21.333334zM42.666667 320V181.333333a53.393333 53.393333 0 0 1 53.333333-53.333333h138.666667a21.333333 21.333333 0 0 1 0 42.666667H96a10.666667 10.666667 0 0 0-10.666667 10.666666v138.666667a21.333333 21.333333 0 0 1-42.666666 0z m938.666666-138.666667v138.666667a21.333333 21.333333 0 0 1-42.666666 0V181.333333a10.666667 10.666667 0 0 0-10.666667-10.666666h-138.666667a21.333333 21.333333 0 0 1 0-42.666667h138.666667a53.393333 53.393333 0 0 1 53.333333 53.333333z m0 522.666667v138.666667a53.393333 53.393333 0 0 1-53.333333 53.333333h-138.666667a21.333333 21.333333 0 0 1 0-42.666667h138.666667a10.666667 10.666667 0 0 0 10.666667-10.666666v-138.666667a21.333333 21.333333 0 0 1 42.666666 0z\",\"fill\":_vm.color,\"p-id\":\"4439\"}})]):(_vm.name == 'loading')?_c('svg',{staticClass:\"icon\",attrs:{\"t\":\"1766044858654\",\"viewBox\":\"0 0 1024 1024\",\"version\":\"1.1\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"p-id\":\"2820\",\"width\":_vm.width,\"height\":_vm.width}},[_c('path',{attrs:{\"d\":\"M512 64a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04v192a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96 31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04v-192a31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96z m0 640a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04v192a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96 31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04v-192a31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96zM960 512a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96h-192a31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04 31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96h192a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04z m-640 0a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96h-192a31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04 31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96h192a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04zM194.986667 194.986667a33.450667 33.450667 0 0 1 23.04-8.96c8.661333 0 16 2.986667 22.016 8.96l135.978666 136.021333a32.853333 32.853333 0 0 1 9.002667 22.485333 30.293333 30.293333 0 0 1-9.514667 22.016 30.037333 30.037333 0 0 1-22.016 9.514667 32.938667 32.938667 0 0 1-22.485333-8.96L194.986667 240a29.952 29.952 0 0 1-8.96-22.016c0-8.704 2.986667-16.384 8.96-23.04z m452.992 452.992a31.104 31.104 0 0 1 22.528-9.984c8.32 0 15.786667 3.328 22.485333 10.026666l136.021333 135.978667c5.973333 5.973333 8.96 13.354667 8.96 22.016a30.72 30.72 0 0 1-9.514666 22.485333 30.933333 30.933333 0 0 1-22.485334 9.514667 29.866667 29.866667 0 0 1-22.016-8.96l-135.978666-136.021333a31.146667 31.146667 0 0 1-10.026667-22.485334c0-8.32 3.328-15.829333 10.026667-22.528zM829.013333 194.986667c5.973333 6.698667 8.96 14.378667 8.96 23.04s-2.986667 16-8.96 22.016l-136.021333 135.978666a32.853333 32.853333 0 0 1-22.485333 9.002667 30.293333 30.293333 0 0 1-22.016-9.514667 30.037333 30.037333 0 0 1-9.514667-22.016c0-8.32 2.986667-15.829333 8.96-22.485333l136.021333-136.021333c5.973333-5.973333 13.354667-8.96 22.016-8.96 8.704 0 16.341333 2.986667 23.04 8.96zM376.021333 648.021333a31.104 31.104 0 0 1 9.984 22.528c0 8.32-3.328 15.786667-10.026666 22.485334L240.042667 829.013333a29.952 29.952 0 0 1-22.016 8.96 30.72 30.72 0 0 1-22.485334-9.514666 30.890667 30.890667 0 0 1-9.514666-22.485334 29.866667 29.866667 0 0 1 8.96-22.016l136.021333-135.978666a31.104 31.104 0 0 1 22.485333-10.026667c8.32 0 15.829333 3.328 22.528 10.026667z\",\"fill\":_vm.color,\"p-id\":\"2821\"}})]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <svg\r\n t=\"1742351514971\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"3951\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-if=\"name == 'point'\"\r\n >\r\n <path\r\n d=\"M506.885115 1.022977c-193.342657 1.534466-348.835165 159.584416-347.812188 352.927073 0.511489 91.556444 37.338661 179.532468 101.786214 244.491508L506.885115 845.490509l246.025974-247.560439c136.055944-137.078921 135.544456-359.064935-1.534466-495.120879C686.417582 38.361638 598.441558 2.045954 506.885115 1.022977zM506.885115 506.373626c-85.418581 0-154.981019-69.562438-154.469531-155.492507 0-85.418581 69.050949-154.981019 154.469531-155.492508 85.418581 0 154.981019 69.562438 154.46953 155.492508 0.511489 85.418581-69.050949 154.981019-154.46953 155.492507z m-154.469531 452.667333c0 35.804196 69.050949 64.959041 154.469531 64.959041s154.46953-29.154845 154.46953-64.959041c0-35.804196-69.050949-64.959041-154.46953-64.959041s-154.46953 29.154845-154.469531 64.959041z\"\r\n p-id=\"3952\"\r\n :fill=\"color\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1742353681074\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"4947\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'line'\"\r\n >\r\n <path\r\n d=\"M419.2 102.4c51.2 0 92.8 41.6 92.8 96 0 25.6-9.6 51.2-28.8 70.4l166.4 416c19.2-12.8 44.8-16 67.2-9.6l172.8-272c-19.2-32-12.8-76.8 19.2-99.2 32-22.4 73.6-12.8 96 22.4 19.2 32 12.8 76.8-19.2 99.2-9.6 6.4-25.6 12.8-38.4 12.8l-176 275.2c28.8 41.6 19.2 102.4-19.2 131.2-41.6 32-99.2 22.4-128-22.4-16-22.4-19.2-48-16-73.6L422.4 291.2h-3.2c-12.8 0-22.4-3.2-32-6.4l-208 243.2c25.6 44.8 6.4 102.4-38.4 128s-99.2 6.4-124.8-38.4-6.4-102.4 38.4-128c22.4-12.8 51.2-16 76.8-6.4l208-243.2c-25.6-44.8-6.4-102.4 38.4-128 12.8-6.4 28.8-9.6 41.6-9.6z\"\r\n p-id=\"4948\"\r\n :fill=\"color\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1742353743548\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"5913\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'polygon'\"\r\n >\r\n <path\r\n d=\"M928.381303 0.002274a91.333624 91.333624 0 0 1 91.939988 91.939988 91.333624 91.333624 0 0 1-91.939988 91.939988 92.849535 92.849535 0 0 1-84.891003-56.581369H212.265055c-8.83018 21.222751-26.528439 40.664306-49.494487 49.532384v634.787636c21.222751 8.868078 40.664306 26.528439 49.494487 49.532384h97.245676c19.479453 0 35.396517 15.917063 35.396516 35.358619 0 19.441556-15.917063 35.358619-35.396516 35.358619H212.265055c-12.392571 33.615321-45.969994 56.58137-84.891004 56.581369a91.333624 91.333624 0 0 1-91.939988-91.939988c0-38.883111 23.003946-70.717237 56.58137-84.891003V176.833265C58.400111 164.440695 35.396165 130.863271 35.396165 91.942262A91.333624 91.333624 0 0 1 127.374051 0.002274c37.139814 0 70.755135 22.966048 84.891004 56.581369h631.263143C855.88287 22.968322 889.498192 0.002274 928.381303 0.002274zM443.858323 760.345219l127.336505 127.336505-146.778061 40.664306c-12.354673 3.524493-24.747243-8.83018-21.222751-21.22275l40.664307-146.778061z m344.831803-339.488217l123.774114 123.774114-305.910794 298.823911-120.249622-127.336505 302.386302-295.26152z m97.245676-97.283574c17.698258-15.917063 44.226697-17.66036 60.143759-1.743297l65.41155 65.411549c15.917063 15.917063 15.917063 42.445502-1.781195 60.14376l-61.887057 61.887058-123.774115-123.774115z\"\r\n p-id=\"5914\"\r\n :fill=\"color\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1742353858894\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"7700\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'perv'\"\r\n >\r\n <path\r\n d=\"M365.44 112.32v133.76h237.888a340.928 340.928 0 0 1 340.928 335.36v5.632a340.928 340.928 0 0 1-335.296 340.864l-5.632 0.064h-324.48a16 16 0 0 1-16-16v-64a16 16 0 0 1 16-16h324.48a244.928 244.928 0 0 0 5.12-489.856H130.432a16 16 0 0 1-11.136-27.52l218.88-213.76a16 16 0 0 1 27.2 11.456z\"\r\n :fill=\"color\"\r\n p-id=\"7701\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1742353895510\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"2267\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'next'\"\r\n >\r\n <path\r\n d=\"M670.08 112.32v133.76H432.192a340.928 340.928 0 0 0-340.928 335.36v5.632a340.928 340.928 0 0 0 335.296 340.864l5.632 0.064h324.48a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16h-324.48a244.928 244.928 0 0 1-5.12-489.856h477.952a16 16 0 0 0 11.2-27.52l-219.008-213.76a16 16 0 0 0-27.136 11.456z\"\r\n :fill=\"color\"\r\n p-id=\"2268\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1763603732402\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"2437\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'close'\"\r\n >\r\n <path\r\n d=\"M566.97558594 521.09667969L856.8828125 231.18945312c14.63378906-14.63378906 14.63378906-38.75976563 0-53.39355468l-1.58203125-1.58203125c-14.63378906-14.63378906-38.75976563-14.63378906-53.39355469 0L512 466.51660156 222.09277344 176.21386719c-14.63378906-14.63378906-38.75976563-14.63378906-53.39355469 0l-1.58203125 1.58203125c-15.02929688 14.63378906-15.02929688 38.75976563 0 53.39355469l289.90722656 289.90722656L167.1171875 811.00390625c-14.63378906 14.63378906-14.63378906 38.75976563 0 53.39355469l1.58203125 1.58203125c14.63378906 14.63378906 38.75976563 14.63378906 53.39355469 0L512 576.07226563 801.90722656 865.97949219c14.63378906 14.63378906 38.75976563 14.63378906 53.39355469 0l1.58203125-1.58203125c14.63378906-14.63378906 14.63378906-38.75976563 0-53.39355469L566.97558594 521.09667969z\"\r\n :fill=\"color\"\r\n p-id=\"2438\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1763604252947\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"3453\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'del'\"\r\n >\r\n <path\r\n d=\"M928.16 144H736V64a32 32 0 0 0-32-32H320a32 32 0 0 0-32 32v80H95.84a32 32 0 0 0 0 64H129.6l77.92 698.656A96 96 0 0 0 302.912 992h418.144a96.032 96.032 0 0 0 95.424-85.344L894.4 208h33.728a32 32 0 0 0 0.032-64zM352 96h320v48H352V96z m400.896 803.552a32 32 0 0 1-31.808 28.448H302.912a32 32 0 0 1-31.808-28.448L193.984 208h636.032l-77.12 691.552z\"\r\n p-id=\"3454\"\r\n :fill=\"color\"\r\n />\r\n <path\r\n d=\"M608 820.928a32 32 0 0 0 32-32V319.104a32 32 0 0 0-64 0v469.824a32 32 0 0 0 32 32zM432 820.928a32 32 0 0 0 32-32V319.104a32 32 0 0 0-64 0v469.824a32 32 0 0 0 32 32z\"\r\n p-id=\"3455\"\r\n :fill=\"color\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1763604352213\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"4438\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'full'\"\r\n >\r\n <path\r\n d=\"M128 266.666667v490.666666a53.393333 53.393333 0 0 0 53.333333 53.333334h661.333334a53.393333 53.393333 0 0 0 53.333333-53.333334V266.666667a53.393333 53.393333 0 0 0-53.333333-53.333334H181.333333a53.393333 53.393333 0 0 0-53.333333 53.333334z m725.333333 0v490.666666a10.666667 10.666667 0 0 1-10.666666 10.666667H181.333333a10.666667 10.666667 0 0 1-10.666666-10.666667V266.666667a10.666667 10.666667 0 0 1 10.666666-10.666667h661.333334a10.666667 10.666667 0 0 1 10.666666 10.666667z m-597.333333 608a21.333333 21.333333 0 0 1-21.333333 21.333333H96a53.393333 53.393333 0 0 1-53.333333-53.333333v-138.666667a21.333333 21.333333 0 0 1 42.666666 0v138.666667a10.666667 10.666667 0 0 0 10.666667 10.666666h138.666667a21.333333 21.333333 0 0 1 21.333333 21.333334zM42.666667 320V181.333333a53.393333 53.393333 0 0 1 53.333333-53.333333h138.666667a21.333333 21.333333 0 0 1 0 42.666667H96a10.666667 10.666667 0 0 0-10.666667 10.666666v138.666667a21.333333 21.333333 0 0 1-42.666666 0z m938.666666-138.666667v138.666667a21.333333 21.333333 0 0 1-42.666666 0V181.333333a10.666667 10.666667 0 0 0-10.666667-10.666666h-138.666667a21.333333 21.333333 0 0 1 0-42.666667h138.666667a53.393333 53.393333 0 0 1 53.333333 53.333333z m0 522.666667v138.666667a53.393333 53.393333 0 0 1-53.333333 53.333333h-138.666667a21.333333 21.333333 0 0 1 0-42.666667h138.666667a10.666667 10.666667 0 0 0 10.666667-10.666666v-138.666667a21.333333 21.333333 0 0 1 42.666666 0z\"\r\n :fill=\"color\"\r\n p-id=\"4439\"\r\n />\r\n </svg>\r\n <svg\r\n t=\"1766044858654\"\r\n class=\"icon\"\r\n viewBox=\"0 0 1024 1024\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n p-id=\"2820\"\r\n :width=\"width\"\r\n :height=\"width\"\r\n v-else-if=\"name == 'loading'\"\r\n >\r\n <path\r\n d=\"M512 64a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04v192a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96 31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04v-192a31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96z m0 640a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04v192a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96 31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04v-192a31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96zM960 512a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96h-192a31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04 31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96h192a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04z m-640 0a31.146667 31.146667 0 0 1-8.96 23.04 31.146667 31.146667 0 0 1-23.04 8.96h-192a31.146667 31.146667 0 0 1-23.04-8.96 31.146667 31.146667 0 0 1-8.96-23.04 31.146667 31.146667 0 0 1 8.96-23.04 31.146667 31.146667 0 0 1 23.04-8.96h192a31.146667 31.146667 0 0 1 23.04 8.96c5.973333 6.016 8.96 13.696 8.96 23.04zM194.986667 194.986667a33.450667 33.450667 0 0 1 23.04-8.96c8.661333 0 16 2.986667 22.016 8.96l135.978666 136.021333a32.853333 32.853333 0 0 1 9.002667 22.485333 30.293333 30.293333 0 0 1-9.514667 22.016 30.037333 30.037333 0 0 1-22.016 9.514667 32.938667 32.938667 0 0 1-22.485333-8.96L194.986667 240a29.952 29.952 0 0 1-8.96-22.016c0-8.704 2.986667-16.384 8.96-23.04z m452.992 452.992a31.104 31.104 0 0 1 22.528-9.984c8.32 0 15.786667 3.328 22.485333 10.026666l136.021333 135.978667c5.973333 5.973333 8.96 13.354667 8.96 22.016a30.72 30.72 0 0 1-9.514666 22.485333 30.933333 30.933333 0 0 1-22.485334 9.514667 29.866667 29.866667 0 0 1-22.016-8.96l-135.978666-136.021333a31.146667 31.146667 0 0 1-10.026667-22.485334c0-8.32 3.328-15.829333 10.026667-22.528zM829.013333 194.986667c5.973333 6.698667 8.96 14.378667 8.96 23.04s-2.986667 16-8.96 22.016l-136.021333 135.978666a32.853333 32.853333 0 0 1-22.485333 9.002667 30.293333 30.293333 0 0 1-22.016-9.514667 30.037333 30.037333 0 0 1-9.514667-22.016c0-8.32 2.986667-15.829333 8.96-22.485333l136.021333-136.021333c5.973333-5.973333 13.354667-8.96 22.016-8.96 8.704 0 16.341333 2.986667 23.04 8.96zM376.021333 648.021333a31.104 31.104 0 0 1 9.984 22.528c0 8.32-3.328 15.786667-10.026666 22.485334L240.042667 829.013333a29.952 29.952 0 0 1-22.016 8.96 30.72 30.72 0 0 1-22.485334-9.514666 30.890667 30.890667 0 0 1-9.514666-22.485334 29.866667 29.866667 0 0 1 8.96-22.016l136.021333-135.978666a31.104 31.104 0 0 1 22.485333-10.026667c8.32 0 15.829333 3.328 22.528 10.026667z\"\r\n :fill=\"color\"\r\n p-id=\"2821\"\r\n />\r\n </svg>\r\n</template>\r\n<script>\r\nexport default {\r\n props: {\r\n name: {\r\n type: String,\r\n default: 'point'\r\n },\r\n width: {\r\n type: String,\r\n default: '20'\r\n },\r\n color: {\r\n type: String,\r\n default: '#6a6a6a'\r\n }\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./svgIcon.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./svgIcon.vue?vue&type=script&lang=js\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent(\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */,\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options =\n typeof scriptExports === 'function' ? scriptExports.options : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) {\n // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () {\n injectStyles.call(\n this,\n (options.functional ? this.parent : this).$root.$options.shadowRoot\n )\n }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functional component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","import { render, staticRenderFns } from \"./svgIcon.vue?vue&type=template&id=670bdcdf\"\nimport script from \"./svgIcon.vue?vue&type=script&lang=js\"\nexport * from \"./svgIcon.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"loading-wrapper\"},[_c('div',{staticClass:\"loading-main-box\"},[(_vm.loading)?_c('div',{staticClass:\"loading-box\"},[_vm._v(\"地图加载中...\")]):_vm._e(),_vm._t(\"default\")],2)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"loading-wrapper\">\r\n <div class=\"loading-main-box\">\r\n <div class=\"loading-box\" v-if=\"loading\">地图加载中...</div>\r\n <slot></slot>\r\n </div>\r\n </div>\r\n</template>\r\n<script>\r\nexport default {\r\n name: 'loadingIndex',\r\n props: {\r\n loading: {\r\n type: Boolean,\r\n default: true\r\n }\r\n }\r\n}\r\n</script>\r\n<style>\r\n@import '../css/styles.css';\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./loading.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./loading.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./loading.vue?vue&type=style&index=0&id=5cce13c8&prod&lang=css\"","import { render, staticRenderFns } from \"./loading.vue?vue&type=template&id=5cce13c8\"\nimport script from \"./loading.vue?vue&type=script&lang=js\"\nexport * from \"./loading.vue?vue&type=script&lang=js\"\nimport style0 from \"./loading.vue?vue&type=style&index=0&id=5cce13c8&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('Teleport',{attrs:{\"to\":\"body\"}},[(_vm.visible)?_c('div',{ref:\"tooltipRef\",staticClass:\"arcgis-custom-tooltip\",style:(_vm.tooltipStyle)},[_vm._t(\"default\",null,{\"data\":_vm.showData})],2):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- CustomTooltip.vue -->\r\n<template>\r\n <Teleport to=\"body\">\r\n <div v-if=\"visible\" ref=\"tooltipRef\" class=\"arcgis-custom-tooltip\" :style=\"tooltipStyle\">\r\n <slot :data=\"showData\">\r\n <!-- 默认内容 -->\r\n </slot>\r\n </div>\r\n </Teleport>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'CustomTooltip',\r\n computed: {\r\n tooltipStyle() {\r\n let tooltipRef = this.$refs.tooltipRef\r\n if (!tooltipRef) return { left: this.x + 'px', top: this.y + 'px' }\r\n const rect = tooltipRef.getBoundingClientRect()\r\n const width = rect.width\r\n const height = rect.height\r\n // 水平居中:鼠标位置 - 宽度一半\r\n const left = this.x - width / 2 + 'px'\r\n // 正上方:鼠标 y 坐标 - 高度 - 10px(留点间距)\r\n const top = this.y - height - 10 + 'px'\r\n return { left, top, position: 'absolute' }\r\n }\r\n },\r\n data() {\r\n return {\r\n visible: false,\r\n x: 0,\r\n y: 0,\r\n showData: null\r\n }\r\n },\r\n methods: {\r\n show(point, contentData) {\r\n this.x = point.x\r\n this.y = point.y\r\n this.showData = contentData\r\n this.visible = true\r\n // ⚠️ 强制重绘以确保 getBoundingClientRect 正确(可选)\r\n this.$nextTick(() => {\r\n // 宽高会在渲染后更新,computed 会自动响应\r\n })\r\n },\r\n hide() {\r\n this.visible = false\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.arcgis-custom-tooltip {\r\n /* 固定定位或绝对定位 */\r\n position: absolute;\r\n background: white;\r\n border: 1px solid #ccc;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n padding: 12px;\r\n border-radius: 6px;\r\n z-index: 10000;\r\n font-size: 14px;\r\n pointer-events: auto;\r\n max-width: 240px;\r\n word-wrap: break-word;\r\n text-align: center; /* 内容居中 */\r\n white-space: nowrap; /* 可选:禁止换行,看需求 */\r\n}\r\n\r\n/* 可选:添加小箭头(指向鼠标) */\r\n.arcgis-custom-tooltip::after {\r\n content: '';\r\n position: absolute;\r\n top: 100%;\r\n left: 50%;\r\n margin-left: -5px;\r\n border: 5px solid transparent;\r\n border-top-color: #ccc;\r\n filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.1));\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./customTooltip.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./customTooltip.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./customTooltip.vue?vue&type=style&index=0&id=533a75ed&prod&scoped=true&lang=css\"","import { render, staticRenderFns } from \"./customTooltip.vue?vue&type=template&id=533a75ed&scoped=true\"\nimport script from \"./customTooltip.vue?vue&type=script&lang=js\"\nexport * from \"./customTooltip.vue?vue&type=script&lang=js\"\nimport style0 from \"./customTooltip.vue?vue&type=style&index=0&id=533a75ed&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"533a75ed\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <loading-box :loading=\"isLoading\">\r\n <div class=\"arcgisMap-box\">\r\n <div class=\"arcgisMapBox\" :id=\"mapId\"></div>\r\n <div class=\"controls\" v-if=\"pathCoordinates.length > 0 && noAbleMoving\">\r\n <div\r\n class=\"controls-item\"\r\n @click=\"changeMove\"\r\n :class=\"{ 'controls-active': currentPathIndex > 0 }\"\r\n >\r\n {{ currentPathIndex == 0 ? '开始' : isPaused ? '继续' : '暂停' }}\r\n </div>\r\n <div class=\"controls-item\" @click=\"changeSpeed\">\r\n <p>{{ speedNum }} <svgIcon name=\"close\" width=\"14\" color=\"#000\" /></p>\r\n <p>加速</p>\r\n </div>\r\n <div class=\"controls-item\" @click=\"stopAnimation\">重置</div>\r\n\r\n <div class=\"controls-item\" @click=\"drawMeasurement('distance')\"> 测距 </div>\r\n <div class=\"controls-item\" @click=\"drawMeasurement('area')\">测面积</div>\r\n <div class=\"controls-item\" @click=\"clearMeasurement\">清除</div>\r\n </div>\r\n <CustomTooltip ref=\"tooltip\" v-slot=\"{ data }\">\r\n <div>\r\n 经纬度: <b>{{ data.longitude }}-{{ data.latitude }}</b>\r\n </div>\r\n <div>\r\n 时间: <b>{{ data.time }}</b>\r\n </div>\r\n </CustomTooltip>\r\n </div>\r\n </loading-box>\r\n</template>\r\n<script>\r\nimport { loadCss, loadModules } from 'esri-loader'\r\nimport mapConfig from '../config/map.config.js'\r\nimport { createMapView, toArcGISPoint, goToMap } from '../utils/index.js'\r\nimport { fetchGjData } from '../mock/api'\r\nimport { bearing } from '../utils/bearing.js'\r\nimport cardLeftPng from '../image/wrj.png'\r\nimport svgIcon from '../svgIcon.vue'\r\nimport cardRightPng from '../image/wrj.png'\r\nimport endIcon from '../image/end-icon.png'\r\nimport gjPoint from '../image/gjPoint.png'\r\nimport startIcon from '../image/start-icon.png'\r\nimport loadingBox from './loading.vue'\r\nimport CustomTooltip from './customTooltip.vue' //自定义弹框\r\nvar jk_map,\r\n jk_view,\r\n measurement,\r\n esri = [],\r\n startLayer, //起点\r\n endLayer, //终点\r\n pointLayer, //点位数据\r\n pointGraphic, //轨迹点车辆样式\r\n trailPolylineGraphic, //轨迹点\r\n lastMoveTime = 0, //最好操作时间戳\r\n animationFrameId = null //动画容器\r\n/**\r\n * 防抖\r\n */\r\nfunction debounce(fn, delay) {\r\n let timer\r\n return (...args) => {\r\n clearTimeout(timer)\r\n timer = setTimeout(() => fn.apply(this, args), delay)\r\n }\r\n}\r\nexport default {\r\n name: 'gjMap',\r\n components: { CustomTooltip, svgIcon, loadingBox },\r\n props: {\r\n mapParams: {\r\n type: Object,\r\n default: mapConfig\r\n },\r\n load: {\r\n type: Function,\r\n default: null\r\n },\r\n center: {\r\n type: Array,\r\n default: () => {\r\n return [113.15333645218509, 22.708905783449126]\r\n }\r\n }\r\n },\r\n computed: {},\r\n data() {\r\n return {\r\n //地图容器\r\n mapId: 'map' + Math.round(Math.random() * 10000),\r\n //地图加载loading\r\n isLoading: true,\r\n gjParams: null,\r\n gjData: null,\r\n apiToken: null,\r\n currentPathIndex: 0,\r\n //轨迹点\r\n pathCoordinates: [],\r\n //点位\r\n pointCoordinates: [],\r\n isPaused: false,\r\n speedNum: 1,\r\n speed: 500,\r\n noAbleMoving: false\r\n }\r\n },\r\n activated() {\r\n let route = this.$route\r\n this.gjParams = route.query\r\n this.noAbleMoving = route.query && route.query.cannotMove ? false : true\r\n this.isLoading = true\r\n if (route.query.token) {\r\n this.apiToken = route.query.token\r\n }\r\n },\r\n mounted() {\r\n this.isLoading = true\r\n this.init(this.mapParams)\r\n },\r\n methods: {\r\n returnLineSymbol(symbol) {\r\n return new window.jkEsri.SimpleLineSymbol({\r\n color: symbol.color,\r\n width: symbol.width\r\n })\r\n },\r\n /**\r\n * 返回marker样式\r\n */\r\n returnMarkerSymbol(marker) {\r\n return new window.jkEsri.PictureMarkerSymbol({\r\n url: marker.url, // 替换为你自己的图标\r\n width: marker.width,\r\n height: marker.height\r\n })\r\n },\r\n returnPolyLine(paths = []) {\r\n return new window.jkEsri.Polyline({\r\n paths\r\n })\r\n },\r\n changeSpeed() {\r\n if (this.speedNum < 3) this.speedNum++\r\n else this.speedNum = 1\r\n switch (this.speedNum) {\r\n case 1:\r\n this.speed = 1000\r\n break\r\n case 2:\r\n this.speed = 550\r\n break\r\n case 3:\r\n this.speed = 300\r\n break\r\n default:\r\n break\r\n }\r\n },\r\n pauseAnimation() {\r\n this.isPaused = true\r\n cancelAnimationFrame(animationFrameId)\r\n animationFrameId = null\r\n },\r\n stopAnimation() {\r\n this.currentPathIndex = 0\r\n // this.updatePosition(this.pathCoordinates[0])\r\n pointGraphic.geometry = new window.jkEsri.Point({\r\n x: this.pathCoordinates[0][0],\r\n y: this.pathCoordinates[0][1]\r\n })\r\n this.updateTrail([], true)\r\n this.pauseAnimation()\r\n setTimeout(() => {\r\n this.startAnimation()\r\n }, 200)\r\n },\r\n resumeAnimation() {\r\n if (!this.isPaused || animationFrameId) return\r\n this.isPaused = false\r\n lastMoveTime = performance.now()\r\n this.animate()\r\n },\r\n startAnimation() {\r\n if (animationFrameId !== null) return\r\n this.currentPathIndex = 0\r\n lastMoveTime = performance.now() // 统一使用 performance.now()\r\n this.isPaused = false\r\n this.animate(lastMoveTime)\r\n },\r\n changeMove() {\r\n if (this.currentPathIndex == 0) {\r\n this.startAnimation()\r\n } else if (!this.isPaused) this.pauseAnimation()\r\n else this.resumeAnimation()\r\n },\r\n animate(timestamp) {\r\n if (this.isPaused) return\r\n const elapsed = timestamp - lastMoveTime\r\n if (elapsed >= this.speed && this.currentPathIndex < this.pathCoordinates.length) {\r\n const coord = this.pathCoordinates[this.currentPathIndex]\r\n this.updatePosition(coord)\r\n const newPath = this.pathCoordinates.slice(0, this.currentPathIndex + 1)\r\n this.updateTrail(newPath)\r\n lastMoveTime = performance.now() // 每次更新都用 performance.now()\r\n this.currentPathIndex++\r\n }\r\n if (this.currentPathIndex < this.pathCoordinates.length) {\r\n animationFrameId = requestAnimationFrame((time) => this.animate(time))\r\n } else {\r\n animationFrameId = null\r\n }\r\n },\r\n updatePosition(coord) {\r\n if (this.isPaused) return\r\n let angle = this.getBearingForPath(coord)\r\n if (angle < -90) angle = -180 + angle\r\n pointGraphic.symbol.angle =\r\n this.getBearingForPath(coord) < 0 && this.getBearingForPath(coord) > -90\r\n ? angle\r\n : Math.abs(angle)\r\n pointGraphic.symbol.url = this.getBearingForPath(coord) >= 0 ? cardLeftPng : cardRightPng\r\n pointGraphic.geometry = new window.jkEsri.Point({\r\n x: coord[0],\r\n y: coord[1]\r\n })\r\n },\r\n updateTrail(coords, isClear = false) {\r\n if (isClear) {\r\n trailPolylineGraphic.geometry = this.returnPolyLine()\r\n return\r\n }\r\n if (coords.length < 2) return\r\n trailPolylineGraphic.geometry = this.returnPolyLine([coords.map(([x, y]) => [x, y])])\r\n },\r\n getBearingForPath(coord) {\r\n coord\r\n if (this.currentPathIndex <= 1) return 0\r\n\r\n const prev = this.pathCoordinates[this.currentPathIndex - 2]\r\n const curr = this.pathCoordinates[this.currentPathIndex - 1]\r\n const from = {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: prev }\r\n }\r\n const to = {\r\n type: 'Feature',\r\n geometry: { type: 'Point', coordinates: curr }\r\n }\r\n return bearing(from, to)\r\n },\r\n returnGraphic(point, symbol) {\r\n return new window.jkEsri.Graphic({\r\n geometry: toArcGISPoint(point),\r\n symbol: symbol\r\n })\r\n },\r\n initGraphics() {\r\n this.isLoading = false\r\n if (this.pathCoordinates.length > 0) {\r\n startLayer = new window.jkEsri.GraphicsLayer({ id: 'startLayer' })\r\n startLayer.add(\r\n this.returnGraphic(\r\n this.pathCoordinates[0],\r\n this.returnMarkerSymbol({ url: startIcon, width: 24, height: 30 })\r\n )\r\n )\r\n endLayer = new window.jkEsri.GraphicsLayer({ id: 'endLayer' })\r\n endLayer.add(\r\n this.returnGraphic(\r\n this.pathCoordinates[this.pathCoordinates.length - 1],\r\n this.returnMarkerSymbol({ url: endIcon, width: 24, height: 30 })\r\n )\r\n )\r\n pointGraphic = new window.jkEsri.Graphic({\r\n geometry: null,\r\n symbol: this.returnMarkerSymbol({\r\n url: cardLeftPng,\r\n width: 32,\r\n height: 32\r\n })\r\n })\r\n trailPolylineGraphic = new window.jkEsri.Graphic({\r\n geometry: this.returnPolyLine(),\r\n symbol: this.returnLineSymbol({ color: '#c8c8c8', width: 2 })\r\n })\r\n\r\n let polylineInit = new window.jkEsri.GraphicsLayer({\r\n id: 'polylineInit'\r\n }),\r\n polyGraphic = new window.jkEsri.Graphic({\r\n geometry: this.returnPolyLine(this.pathCoordinates),\r\n symbol: this.returnLineSymbol({ color: '#176415', width: 2 })\r\n })\r\n polylineInit.add(polyGraphic)\r\n jk_map.add(polylineInit)\r\n jk_map.add(pointLayer, 18)\r\n jk_map.add(startLayer, 19)\r\n jk_map.add(endLayer, 19)\r\n jk_view.graphics.add(trailPolylineGraphic, 11)\r\n jk_view.graphics.add(pointGraphic, 10)\r\n goToMap(polyGraphic.geometry.extent)\r\n } else {\r\n startLayer = new window.jkEsri.Graphic({\r\n geometry: toArcGISPoint(this.center),\r\n symbol: this.returnMarkerSymbol({\r\n url: gjPoint,\r\n width: 32,\r\n height: 32\r\n })\r\n })\r\n jk_view.graphics.add(startLayer, 8)\r\n goToMap(this.center)\r\n }\r\n },\r\n loadMapData() {\r\n this.gjData = []\r\n this.pathCoordinates = []\r\n this.pointCoordinates = []\r\n\r\n let isLoad = !(this.gjParams && this.gjParams.url)\r\n const headers = {\r\n 'Content-Type': 'application/json'\r\n }\r\n if (this.apiToken) {\r\n headers.Authorization = 'Bearer ' + this.apiToken\r\n }\r\n let params = {}\r\n for (const key in this.gjParams) {\r\n if (\r\n Object.prototype.hasOwnProperty.call(this.gjParams, key) &&\r\n key != 'url' &&\r\n key != 'move'\r\n ) {\r\n params[key] = this.gjParams[key]\r\n }\r\n }\r\n\r\n fetchGjData(\r\n this.gjParams.url, //window._$config.gjUrl ||\r\n {\r\n params,\r\n headers\r\n },\r\n isLoad\r\n ).then((responeData) => {\r\n if (responeData && responeData.length > 0) {\r\n this.gjData = responeData\r\n let paths = []\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: 'pointLayer' })\r\n responeData.map((item) => {\r\n item.longitude = item[window._$config.jd || 'jd'] || item.longitude || ''\r\n item.latitude = item[window._$config.wd || 'wd'] || item.latitude || ''\r\n if (item.longitude && item.latitude) {\r\n item.point = toArcGISPoint([item.longitude, item.latitude])\r\n paths.push([item.longitude, item.latitude])\r\n item.longitude = Number(item.longitude)\r\n ? Number(item.longitude).toFixed(2)\r\n : item.longitude\r\n item.latitude = Number(item.latitude)\r\n ? Number(item.latitude).toFixed(2)\r\n : item.latitude\r\n const graphic = new window.jkEsri.Graphic({\r\n geometry: item.point,\r\n attributes: item,\r\n symbol: {\r\n type: 'simple-marker',\r\n size: '8px',\r\n color: '#98fe33'\r\n }\r\n })\r\n pointLayer.add(graphic)\r\n this.pointCoordinates.push(item)\r\n }\r\n })\r\n this.pathCoordinates = paths\r\n this.initGraphics()\r\n } else this.initGraphics()\r\n })\r\n },\r\n TDTinstance(mapSet, args) {\r\n for (const k in args) {\r\n const name = mapSet.modules[k].split('/').pop()\r\n if (name === 'geometryEngine') {\r\n esri.geometryEngine = args[k]\r\n }\r\n if (name === 'webMercatorUtils') {\r\n esri.webMercatorToGeographic = args[k].webMercatorToGeographic\r\n esri.geographicToWebMercator = args[k].geographicToWebMercator\r\n }\r\n esri[name] = args[k]\r\n }\r\n window.jkEsri = esri\r\n },\r\n init(param) {\r\n // 加载CSS;\r\n loadCss(param.initCss)\r\n // 加载JS模块\r\n loadModules(param.modules || [], {\r\n url: param.initJs\r\n })\r\n .then(this.TDTinstance.bind(this, this.mapParams)) // 依赖初始化\r\n .then(this.initMap.bind(this)) // 地图初始化\r\n },\r\n hideDefaulte() {\r\n jk_view.container.style.cursor = 'default'\r\n this.$refs.tooltip.hide()\r\n },\r\n async debouncedHover(event) {\r\n const hitData = await jk_view.hitTest(event)\r\n if (hitData && hitData.results && hitData.screenPoint) {\r\n if (hitData.results.length > 0) {\r\n let hoverData = null\r\n hitData.results.some((item) => {\r\n if (\r\n item.graphic &&\r\n item.graphic.layer &&\r\n item.graphic.layer.id &&\r\n item.graphic.layer.id == 'pointLayer'\r\n ) {\r\n hoverData = item.graphic\r\n return\r\n }\r\n })\r\n if (hoverData) {\r\n jk_view.container.style.cursor = 'pointer'\r\n this.$refs.tooltip.show(\r\n { x: hitData.screenPoint.x, y: hitData.screenPoint.y },\r\n hoverData.attributes\r\n )\r\n } else this.hideDefaulte()\r\n } else this.hideDefaulte()\r\n } else {\r\n this.hideDefaulte()\r\n }\r\n },\r\n initMap() {\r\n createMapView(this.mapId, {\r\n mapType: this.mapParams.mapType,\r\n layersType: this.mapParams.layersType,\r\n center: this.center,\r\n zoom: 7\r\n }).then((res) => {\r\n jk_map = res.map\r\n jk_view = res.view\r\n\r\n this.isLoading = false\r\n // 3. 创建 Measurement 小部件\r\n measurement = new window.jkEsri.Measurement({\r\n view: jk_view\r\n })\r\n jk_view.on('pointer-move', debounce(this.debouncedHover, 300))\r\n this.loadMapData()\r\n })\r\n },\r\n drawMeasurement(type) {\r\n if (!measurement) return\r\n measurement.clear()\r\n measurement.activeTool = null\r\n setTimeout(() => {\r\n // 激活 Measurement 的测距工具\r\n measurement.activeTool = type\r\n }, 500)\r\n },\r\n clearMeasurement() {\r\n if (!measurement) return\r\n measurement.clear()\r\n }\r\n }\r\n}\r\n</script>\r\n<style scoped>\r\n.arcgisMap-box {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n z-index: 10;\r\n}\r\n.arcgisMapBox {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.map-view {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.controls {\r\n position: absolute;\r\n left: 0;\r\n bottom: 0;\r\n width: 100%;\r\n z-index: 10;\r\n padding: 10px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.controls-item {\r\n width: 52px;\r\n height: 52px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n cursor: pointer;\r\n color: #000;\r\n border: 2px solid #1ab393;\r\n background: #a3d1be;\r\n border-radius: 50%;\r\n margin-right: 12px;\r\n}\r\n.controls-item p {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n}\r\n.controls-item p i {\r\n font-size: 15px;\r\n}\r\n.controls-item.controls-active {\r\n background: #c4cf8b;\r\n color: #000;\r\n}\r\n</style>\r\n<style>\r\n.arcgisMap-box .esri-ui .esri-component.esri-attribution.esri-widget,\r\n.arcgisMap-box .esri-component.esri-zoom.esri-widget {\r\n display: none;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineGjMap.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineGjMap.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineGjMap.vue?vue&type=style&index=0&id=4294e38e&prod&scoped=true&lang=css\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineGjMap.vue?vue&type=style&index=1&id=4294e38e&prod&lang=css\"","import { render, staticRenderFns } from \"./augustineGjMap.vue?vue&type=template&id=4294e38e&scoped=true\"\nimport script from \"./augustineGjMap.vue?vue&type=script&lang=js\"\nexport * from \"./augustineGjMap.vue?vue&type=script&lang=js\"\nimport style0 from \"./augustineGjMap.vue?vue&type=style&index=0&id=4294e38e&prod&scoped=true&lang=css\"\nimport style1 from \"./augustineGjMap.vue?vue&type=style&index=1&id=4294e38e&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4294e38e\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('loading-box',{attrs:{\"loading\":_vm.isLoading}},[_c('div',{staticClass:\"arcgisMap-box\"},[_c('div',{staticClass:\"map-canvans\",attrs:{\"id\":_vm.mapId}}),(!_vm.isLoading && _vm.isSearch)?_c('searchMap',{ref:\"searchRef\",on:{\"select-point\":_vm.refreshPoint,\"clearSearchMap\":_vm.clearSearchMap}}):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"arcgis-search-wrapper\"},[_c('div',{staticClass:\"arcigs-search-box\"},[_c('CustomSearchInput',{on:{\"checked-point\":_vm.changeCheckedPoint,\"search\":_vm.searchMap,\"clear\":_vm.clearSearch},model:{value:(_vm.keyWord),callback:function ($$v) {_vm.keyWord=$$v},expression:\"keyWord\"}}),(_vm.keyWord && _vm.isSearch && !_vm.checkedPoint)?_c('div',{staticClass:\"search-item-box\"},[_c('div',{staticClass:\"arcgis-line\"}),_c('div',{staticClass:\"search-item-wrapper\"},[(_vm.mapNameList.length > 0)?[_vm._l((_vm.mapNameList),function(item,idx){return _c('div',{key:idx,staticClass:\"search-item\",on:{\"click\":function($event){$event.stopPropagation();return _vm.goDetail(item)}}},[_c('div',{staticClass:\"search-name\"},[_vm._v(_vm._s(item.name))]),_c('div',{staticClass:\"search-address\"},[_vm._v(_vm._s(item.address))])])}),(_vm.loadPage)?_c('div',{staticClass:\"loaded-box\"},[_vm._v(\" \"+_vm._s(_vm.finished ? '数据加载中...' : '数据已到底!!!')+\" \")]):_vm._e()]:_c('div',{staticClass:\"search-no-data\"},[_vm._v(\" \"+_vm._s(_vm.loadSearch ? '数据加载中...' : '暂无数据')+\" \")])],2)]):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('transition',{attrs:{\"name\":\"message-fade\"}},[(_vm.localVisible)?_c('div',{staticClass:\"custom-message\",class:`custom-message--${_vm.type}`,on:{\"click\":_vm.handleClick}},[(_vm.showIcon && false)?_c('span',{staticClass:\"custom-message__icon\"},[_vm._v(_vm._s(_vm.iconMap[_vm.type]))]):_vm._e(),_c('span',{staticClass:\"custom-message__content\"},[_vm._v(_vm._s(_vm.message))]),(_vm.closable)?_c('button',{staticClass:\"custom-message__close\",attrs:{\"type\":\"button\",\"aria-label\":\"关闭提示\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.close.apply(null, arguments)}}},[_vm._v(\" × \")]):_vm._e()]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- CustomMessage.vue -->\r\n<template>\r\n <transition name=\"message-fade\">\r\n <div\r\n v-if=\"localVisible\"\r\n class=\"custom-message\"\r\n :class=\"`custom-message--${type}`\"\r\n @click=\"handleClick\"\r\n >\r\n <!-- 图标 -->\r\n <span v-if=\"showIcon && false\" class=\"custom-message__icon\">{{ iconMap[type] }}</span>\r\n <!-- 内容 -->\r\n <span class=\"custom-message__content\">{{ message }}</span>\r\n <!-- 关闭按钮(仅在可关闭时显示) -->\r\n <button\r\n v-if=\"closable\"\r\n type=\"button\"\r\n class=\"custom-message__close\"\r\n @click.stop=\"close\"\r\n aria-label=\"关闭提示\"\r\n >\r\n ×\r\n </button>\r\n </div>\r\n </transition>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'CustomMessage',\r\n props: {\r\n // 是否可手动关闭\r\n closable: {\r\n type: Boolean,\r\n default: false\r\n },\r\n // 点击消息体是否关闭(仅当 closable=false 时有效)\r\n closeOnClick: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n data() {\r\n return {\r\n timer: null,\r\n message: '',\r\n showIcon: false,\r\n localVisible: false,\r\n duration: 3000,\r\n type: 'info' //'success', 'error', 'warning', 'info'\r\n }\r\n },\r\n computed: {\r\n iconMap() {\r\n return {\r\n success: '✓',\r\n error: '✗',\r\n warning: '⚠',\r\n info: 'ℹ'\r\n }\r\n }\r\n },\r\n\r\n mounted() {\r\n if (this.localVisible) {\r\n this.startTimer()\r\n }\r\n },\r\n beforeUnmount() {\r\n this.clearTimer()\r\n },\r\n methods: {\r\n startTimer() {\r\n this.clearTimer()\r\n if (this.duration > 0 && !this.closable) {\r\n this.timer = setTimeout(() => {\r\n this.close()\r\n }, this.duration)\r\n }\r\n },\r\n clearTimer() {\r\n if (this.timer) {\r\n clearTimeout(this.timer)\r\n this.timer = null\r\n }\r\n },\r\n close() {\r\n this.localVisible = false\r\n },\r\n handleClick() {\r\n if (this.closeOnClick && !this.closable) {\r\n this.close()\r\n }\r\n },\r\n // 对外暴露的 show 方法(用于 ref 调用)\r\n show(options = {}) {\r\n const { message, type = 'info', duration = 3000, closable, closeOnClick } = options\r\n if (message !== undefined) this.message = message\r\n this.type = type\r\n if (duration !== undefined) this.duration = duration\r\n if (closable !== undefined) this.$props.closable = closable\r\n if (closeOnClick !== undefined) this.$props.closeOnClick = closeOnClick\r\n\r\n this.localVisible = true\r\n this.startTimer()\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.custom-message {\r\n position: fixed;\r\n top: 20px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n z-index: 9999;\r\n display: flex;\r\n align-items: center;\r\n padding: 12px 16px;\r\n border-radius: 6px;\r\n color: #000;\r\n font-size: 14px;\r\n max-width: 90%;\r\n word-break: break-word;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\r\n backdrop-filter: blur(4px);\r\n -webkit-backdrop-filter: blur(4px);\r\n}\r\n\r\n/* 移动端优化:更大点击区域 */\r\n@media (max-width: 768px) {\r\n .custom-message {\r\n top: 16px;\r\n padding: 14px 18px;\r\n font-size: 15px;\r\n max-width: 94%;\r\n }\r\n}\r\n\r\n/* 类型背景色 */\r\n.custom-message--success {\r\n background-color: #e6f4ec;\r\n}\r\n.custom-message--error {\r\n background-color: #fceded;\r\n}\r\n.custom-message--warning {\r\n background-color: #fff4e7;\r\n}\r\n.custom-message--info {\r\n background-color: #ecf3ff;\r\n}\r\n\r\n/* 图标 */\r\n.custom-message__icon {\r\n margin-right: 8px;\r\n font-weight: bold;\r\n font-style: normal;\r\n}\r\n\r\n/* 关闭按钮 */\r\n.custom-message__close {\r\n margin-left: auto;\r\n margin-left: 12px;\r\n background: none;\r\n border: none;\r\n color: white;\r\n font-size: 20px;\r\n cursor: pointer;\r\n padding: 2px;\r\n opacity: 0.8;\r\n}\r\n.custom-message__close:hover,\r\n.custom-message__close:active {\r\n opacity: 1;\r\n}\r\n\r\n/* 动画 */\r\n.message-fade-enter-active,\r\n.message-fade-leave-active {\r\n transition:\r\n opacity 0.3s,\r\n transform 0.3s;\r\n}\r\n.message-fade-enter {\r\n opacity: 0;\r\n transform: translate(-50%, -10px);\r\n}\r\n.message-fade-leave-to {\r\n opacity: 0;\r\n transform: translate(-50%, -10px);\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomModal.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomModal.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomModal.vue?vue&type=style&index=0&id=5b0941a0&prod&scoped=true&lang=css\"","import { render, staticRenderFns } from \"./CustomModal.vue?vue&type=template&id=5b0941a0&scoped=true\"\nimport script from \"./CustomModal.vue?vue&type=script&lang=js\"\nexport * from \"./CustomModal.vue?vue&type=script&lang=js\"\nimport style0 from \"./CustomModal.vue?vue&type=style&index=0&id=5b0941a0&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5b0941a0\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"search-input-wrapper\"},[_c('div',{staticClass:\"input-container\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.localValue),expression:\"localValue\"}],ref:\"input\",staticClass:\"custom-input\",attrs:{\"type\":\"text\",\"placeholder\":_vm.computedPlaceholder},domProps:{\"value\":(_vm.localValue)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\"))return null;return _vm.handleSearch.apply(null, arguments)},\"input\":[function($event){if($event.target.composing)return;_vm.localValue=$event.target.value},_vm.onInput],\"focus\":function($event){_vm.isFocused = true},\"blur\":function($event){_vm.isFocused = false}}}),(_vm.localValue && (_vm.isFocused || !_vm.isMobile))?_c('button',{staticClass:\"clear-btn\",attrs:{\"type\":\"button\",\"aria-label\":\"清除内容\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleClear.apply(null, arguments)}}},[_vm._v(\" × \")]):_vm._e(),_c('button',{staticClass:\"search-btn\",attrs:{\"type\":\"button\",\"aria-label\":\"搜索\"},on:{\"click\":function($event){$event.stopPropagation();return _vm.handleSearch.apply(null, arguments)}}},[_c('svg',{attrs:{\"width\":\"14\",\"height\":\"14\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\"}},[_c('circle',{attrs:{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\"}}),_c('path',{attrs:{\"d\":\"m21 21-4.35-4.35\"}})])])]),_c('label',{staticClass:\"custom-checkbox\"},[_c('input',{staticClass:\"checkbox-input\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.localCheckedPoint},on:{\"change\":_vm.toggleCheckedPoint}}),_c('span',{staticClass:\"checkbox-box\"},[_c('svg',{staticClass:\"check-icon\",attrs:{\"width\":\"10\",\"height\":\"8\",\"viewBox\":\"0 0 10 8\",\"fill\":\"none\",\"xmlns\":\"http://www.w3.org/2000/svg\"}},[_c('path',{attrs:{\"d\":\"M1 4L3.5 6.5L9 1\",\"stroke\":\"white\",\"stroke-width\":\"1.5\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}})])]),_c('span',{staticClass:\"checkbox-label\",style:({ color: _vm.localCheckedPoint ? '#409eff' : '#fff' })},[_vm._v(\"坐标反查\")])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!-- SearchInputWithCheckbox.vue -->\r\n<template>\r\n <div class=\"search-input-wrapper\">\r\n <!-- 输入框容器 -->\r\n <div class=\"input-container\">\r\n <input\r\n ref=\"input\"\r\n v-model=\"localValue\"\r\n type=\"text\"\r\n class=\"custom-input\"\r\n :placeholder=\"computedPlaceholder\"\r\n @keyup.enter=\"handleSearch\"\r\n @input=\"onInput\"\r\n @focus=\"isFocused = true\"\r\n @blur=\"isFocused = false\"\r\n />\r\n\r\n <!-- 清除按钮 -->\r\n <button\r\n v-if=\"localValue && (isFocused || !isMobile)\"\r\n type=\"button\"\r\n class=\"clear-btn\"\r\n @click.stop=\"handleClear\"\r\n aria-label=\"清除内容\"\r\n >\r\n ×\r\n </button>\r\n\r\n <!-- 搜索按钮(append) -->\r\n <button type=\"button\" class=\"search-btn\" @click.stop=\"handleSearch\" aria-label=\"搜索\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\r\n <path d=\"m21 21-4.35-4.35\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- 自定义 Checkbox -->\r\n <label class=\"custom-checkbox\">\r\n <input\r\n type=\"checkbox\"\r\n :checked=\"localCheckedPoint\"\r\n @change=\"toggleCheckedPoint\"\r\n class=\"checkbox-input\"\r\n />\r\n <span class=\"checkbox-box\">\r\n <svg\r\n class=\"check-icon\"\r\n width=\"10\"\r\n height=\"8\"\r\n viewBox=\"0 0 10 8\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M1 4L3.5 6.5L9 1\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </span>\r\n <span class=\"checkbox-label\" :style=\"{ color: localCheckedPoint ? '#409eff' : '#fff' }\"\r\n >坐标反查</span\r\n >\r\n </label>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'SearchInputWithCheckbox',\r\n props: {\r\n value: {\r\n type: String,\r\n default: ''\r\n }\r\n },\r\n data() {\r\n return {\r\n localValue: this.value,\r\n localCheckedPoint: false,\r\n isFocused: false\r\n }\r\n },\r\n computed: {\r\n computedPlaceholder() {\r\n return this.localCheckedPoint ? '输入经纬度(115.83,23.43)' : '输入地址'\r\n },\r\n isMobile() {\r\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\r\n navigator.userAgent\r\n )\r\n }\r\n },\r\n watch: {\r\n value(newVal) {\r\n this.localValue = newVal\r\n }\r\n },\r\n methods: {\r\n handleSearch() {\r\n this.$emit('search', this.localValue)\r\n },\r\n handleClear() {\r\n this.localValue = ''\r\n this.$emit('clear', this.localValue)\r\n this.$refs.input.focus()\r\n },\r\n toggleCheckedPoint(e) {\r\n const newVal = e.target.checked\r\n this.localCheckedPoint = newVal\r\n this.$emit('checkedPoint', newVal)\r\n },\r\n onInput() {\r\n // 可用于后续扩展(如防抖搜索)\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.search-input-wrapper {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n flex-wrap: wrap;\r\n padding: 8px 0;\r\n}\r\n\r\n/* ========== 输入框区域 ========== */\r\n.input-container {\r\n position: relative;\r\n display: inline-flex;\r\n align-items: center;\r\n width: 240px;\r\n border: 1px solid #dcdfe6;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n transition: border-color 0.2s;\r\n background: #fff;\r\n}\r\n\r\n.input-container:hover,\r\n.input-container:focus-within {\r\n border-color: #409eff;\r\n}\r\n\r\n.custom-input {\r\n flex: 1;\r\n padding: 8px 32px 8px 12px;\r\n border: none;\r\n outline: none;\r\n font-size: 14px;\r\n color: #000;\r\n background: transparent;\r\n min-width: 0;\r\n}\r\n\r\n.custom-input::placeholder {\r\n color: #000;\r\n}\r\n\r\n.clear-btn {\r\n position: absolute;\r\n right: 36px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n background: none;\r\n border: none;\r\n font-size: 18px;\r\n color: #c0c4cc;\r\n cursor: pointer;\r\n padding: 2px;\r\n opacity: 0.8;\r\n z-index: 1;\r\n}\r\n\r\n.clear-btn:hover {\r\n color: #909399;\r\n}\r\n\r\n.search-btn {\r\n position: absolute;\r\n right: 0;\r\n top: 0;\r\n width: 32px;\r\n height: 100%;\r\n background: #ecf5ff;\r\n border: none;\r\n border-left: 1px solid #dcdfe6;\r\n cursor: pointer;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n color: #409eff;\r\n}\r\n\r\n.search-btn:hover {\r\n background: #ecf5ff;\r\n}\r\n\r\n/* ========== 自定义 Checkbox ========== */\r\n.custom-checkbox {\r\n display: flex;\r\n align-items: center;\r\n cursor: pointer;\r\n user-select: none;\r\n font-size: 14px;\r\n color: #606266;\r\n}\r\n\r\n.checkbox-input {\r\n position: absolute;\r\n opacity: 0;\r\n width: 0;\r\n height: 0;\r\n}\r\n\r\n.checkbox-box {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 16px;\r\n height: 16px;\r\n border: 1px solid #dcdfe6;\r\n border-radius: 2px;\r\n background: white;\r\n margin-right: 6px;\r\n transition: all 0.2s ease;\r\n position: relative;\r\n}\r\n\r\n.checkbox-input:checked + .checkbox-box {\r\n background-color: #409eff;\r\n border-color: #409eff;\r\n}\r\n\r\n.check-icon {\r\n opacity: 0;\r\n transform: scale(0.8);\r\n transition: all 0.2s ease;\r\n}\r\n\r\n.checkbox-input:checked + .checkbox-box .check-icon {\r\n opacity: 1;\r\n transform: scale(1);\r\n}\r\n\r\n.checkbox-input:focus + .checkbox-box {\r\n outline: 2px solid #409eff;\r\n outline-offset: 2px;\r\n}\r\n\r\n@media (hover: hover) {\r\n .checkbox-box:hover {\r\n border-color: #409eff;\r\n }\r\n}\r\n\r\n/* ========== 移动端适配 ========== */\r\n@media (max-width: 768px) {\r\n .input-container {\r\n width: 100%;\r\n max-width: 280px;\r\n }\r\n\r\n .search-input-wrapper {\r\n justify-content: center;\r\n }\r\n\r\n .checkbox-box {\r\n width: 18px;\r\n height: 18px;\r\n }\r\n\r\n .checkbox-label {\r\n font-size: 15px;\r\n }\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomSearchInput.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomSearchInput.vue?vue&type=script&lang=js\"","// extracted by mini-css-extract-plugin\nexport {};","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??clonedRuleSet-52.use[0]!../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-52.use[1]!../../node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-52.use[2]!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./CustomSearchInput.vue?vue&type=style&index=0&id=3e01720b&prod&scoped=true&lang=css\"","import { render, staticRenderFns } from \"./CustomSearchInput.vue?vue&type=template&id=3e01720b&scoped=true\"\nimport script from \"./CustomSearchInput.vue?vue&type=script&lang=js\"\nexport * from \"./CustomSearchInput.vue?vue&type=script&lang=js\"\nimport style0 from \"./CustomSearchInput.vue?vue&type=style&index=0&id=3e01720b&prod&scoped=true&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3e01720b\",\n null\n \n)\n\nexport default component.exports","// utils/tianditu.js\r\nimport axios from 'axios'\r\n// 替换为你的实际密钥\r\nconst TDT_KEY = 'f04ece8bf0ff9c1117526a29a96bb2e1'\r\n/**\r\n * 逆地理编码查询 - 根据名称模糊匹配\r\n * @param {Object} data\r\n * @param {string} data.keyWord - 关键字\r\n * @param {string} data.level - 级别\r\n * @param {string} data.mapBound - 范围\r\n * @param {string} data.currentPage - 页码\r\n * @param {string} data.pageSize - 页数\r\n * @returns {Promise}\r\n */\r\nexport function getGeocoderList(data) {\r\n return new Promise((reslove, reject) => {\r\n if (!data || !data.keyWord) {\r\n reject()\r\n return\r\n }\r\n let {\r\n keyWord,\r\n level = 12,\r\n mapBound = '108.38512072748536,20.999700722178734,118.92018884189694,26.042267179024694',\r\n currentPage = 0,\r\n pageSize = 20\r\n } = data\r\n axios\r\n .get('http://api.tianditu.gov.cn/v2/search', {\r\n params: {\r\n postStr: JSON.stringify({\r\n keyWord: keyWord,\r\n level,\r\n mapBound,\r\n queryType: 2,\r\n start: currentPage,\r\n count: pageSize\r\n }),\r\n type: 'query',\r\n tk: TDT_KEY\r\n },\r\n timeout: 10000\r\n })\r\n .then((res) => {\r\n console.log('reject', res)\r\n\r\n if (res && res.status && res.status == 200 && res.data && res.data.pois) {\r\n reslove({\r\n list: res.data.pois || [],\r\n total: res.data.count || 0\r\n })\r\n } else {\r\n reject(res.data)\r\n }\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * 逆地理编码查询 - 经纬度解析成地址\r\n * @param {Object} data\r\n * @param {string} data.longitude - 经度\r\n * @param {string} data.latitude - 维度\r\n * @returns {Promise}\r\n */\r\nexport function getGeocoderLg(data) {\r\n return new Promise((reslove, reject) => {\r\n if (!data) {\r\n reject()\r\n return\r\n }\r\n // 构造 postStr 对象\r\n let postObj = { lon: data.longitude, lat: data.latitude }\r\n // 转为 JSON 字符串(注意:不能有空格,天地图严格校验)\r\n const postStr = JSON.stringify(postObj)\r\n axios\r\n .get('https://api.tianditu.gov.cn/geocoder', {\r\n params: {\r\n postStr,\r\n type: 'geocode',\r\n tk: TDT_KEY\r\n },\r\n // 天地图要求 Content-Type 不重要(GET 请求),但需注意跨域\r\n timeout: 10000\r\n })\r\n .then((res) => {\r\n if (res && res.status && res.status == 200 && res.data && res.data.msg && res.data.result) {\r\n reslove(res.data.result)\r\n } else {\r\n reject(res.data)\r\n }\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n}\r\n/**\r\n * 地理编码接口-地址解析成经纬度\r\n * @param {string} keyWord - 地址\r\n * @returns {Promise}\r\n */\r\nexport function getGeocoderAddress(keyWord) {\r\n return new Promise((reslove, reject) => {\r\n if (!keyWord) {\r\n reject()\r\n return\r\n }\r\n axios\r\n .get('https://api.tianditu.gov.cn/geocoder', {\r\n params: {\r\n ds: JSON.stringify({ keyWord: keyWord }),\r\n tk: TDT_KEY\r\n },\r\n // 天地图要求 Content-Type 不重要(GET 请求),但需注意跨域\r\n timeout: 10000\r\n })\r\n .then((res) => {\r\n if (\r\n res &&\r\n res.status &&\r\n res.status == 200 &&\r\n res.data &&\r\n res.data.msg &&\r\n res.data.location\r\n ) {\r\n reslove(res.data.location)\r\n } else {\r\n reject(res.data)\r\n }\r\n })\r\n .catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n}\r\n\r\n/**\r\n * 天地图 - 驾车路径规划\r\n * @param {Object} data\r\n * @param {string} data.orig - 起点 \"lng,lat\"\r\n * @param {string} data.dest - 终点 \"lng,lat\"\r\n * @param {string} [data.mid] - 途经点 \"lng1,lat1;lng2,lat2\"\r\n * @param {string} [data.style='0'] - 路线风格:0-速度优先,1-少收费,2-不走高速,3-高速优先\r\n * @returns {Promise}\r\n */\r\nexport function getDriveRoute(data) {\r\n if (!data) return\r\n // 构造 postStr 对象\r\n let postObj = { orig: data.orig, dest: data.dest, style: data.style || 0 }\r\n if (data.mid) {\r\n postObj.mid = data.mid\r\n }\r\n // 转为 JSON 字符串(注意:不能有空格,天地图严格校验)\r\n const postStr = JSON.stringify(postObj)\r\n return axios.get('https://api.tianditu.gov.cn/drive', {\r\n params: {\r\n postStr,\r\n type: 'search',\r\n tk: TDT_KEY\r\n },\r\n // 天地图要求 Content-Type 不重要(GET 请求),但需注意跨域\r\n timeout: 10000\r\n })\r\n}\r\n","<template>\r\n <div class=\"arcgis-search-wrapper\">\r\n <div class=\"arcigs-search-box\">\r\n <CustomSearchInput\r\n v-model=\"keyWord\"\r\n @checked-point=\"changeCheckedPoint\"\r\n @search=\"searchMap\"\r\n @clear=\"clearSearch\"\r\n />\r\n <div class=\"search-item-box\" v-if=\"keyWord && isSearch && !checkedPoint\">\r\n <div class=\"arcgis-line\"></div>\r\n <div class=\"search-item-wrapper\">\r\n <template v-if=\"mapNameList.length > 0\">\r\n <div\r\n class=\"search-item\"\r\n v-for=\"(item, idx) in mapNameList\"\r\n :key=\"idx\"\r\n @click.stop=\"goDetail(item)\"\r\n >\r\n <div class=\"search-name\">{{ item.name }}</div>\r\n <div class=\"search-address\">{{ item.address }}</div>\r\n </div>\r\n <div class=\"loaded-box\" v-if=\"loadPage\">\r\n {{ finished ? '数据加载中...' : '数据已到底!!!' }}\r\n </div>\r\n </template>\r\n <div class=\"search-no-data\" v-else>\r\n {{ loadSearch ? '数据加载中...' : '暂无数据' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <CustomModal ref=\"message\" :z-index=\"2000\" animation=\"fade\" width=\"400px\">\r\n <p>这是淡入弹框</p>\r\n </CustomModal>\r\n</template>\r\n<script>\r\nimport CustomModal from './CustomModal.vue'\r\nimport CustomSearchInput from './CustomSearchInput.vue'\r\nimport { getGeocoderList } from '../utils/tianditu.js'\r\nvar search_Map = null\r\nexport default {\r\n name: 'SearchMap',\r\n components: { CustomModal, CustomSearchInput },\r\n data() {\r\n return {\r\n keyWord: '',\r\n isSearch: false,\r\n loadSearch: false,\r\n currentPage: 1,\r\n finished: false,\r\n loadPage: false,\r\n pageSize: 20,\r\n total: 0,\r\n mapNameList: [],\r\n checkedPoint: false\r\n }\r\n },\r\n methods: {\r\n onShowDialog(text) {\r\n this.$refs.message.show({\r\n message: text,\r\n type: 'warning',\r\n duration: 3000\r\n })\r\n },\r\n clearSearch() {\r\n this.keyWord = ''\r\n this.mapNameList = []\r\n this.clearMap()\r\n },\r\n changeCheckedPoint(val) {\r\n this.checkedPoint = val\r\n },\r\n initMap(data) {\r\n search_Map = data.map\r\n this.isSearch = false\r\n this.checkedPoint = false\r\n this.clearSearch()\r\n search_Map\r\n },\r\n goDetail(item) {\r\n if (item.lonlat) {\r\n let point = typeof item.lonlat == 'string' ? item.lonlat.split(',') : []\r\n if (point && point.length > 1) {\r\n this.$emit('selectPoint', { ...item, longitude: point[0], latitude: point[1] })\r\n } else this.onShowDialog('坐标格式不正确!!!')\r\n }\r\n },\r\n loadMapList() {\r\n if (this.mapNameList.length > 0 && this.total > this.currentPage * this.pageSize) {\r\n this.currentPage++\r\n this.postMapList()\r\n }\r\n if (this.total > 0 && this.total <= this.currentPage * this.pageSize) {\r\n this.finished = true\r\n }\r\n },\r\n postMapList() {\r\n this.loadSearch = true\r\n getGeocoderList({\r\n keyWord: this.keyWord,\r\n currentPage: this.currentPage,\r\n pageSize: this.pageSize\r\n })\r\n .then((res) => {\r\n this.loadSearch = false\r\n this.total = 0\r\n if (res && res.list && res.list.length > 0)\r\n this.mapNameList = this.mapNameList.concat(res.list)\r\n if (res.total && Number(res.total)) {\r\n this.total = Number(res.total)\r\n this.loadPage = true\r\n }\r\n })\r\n .catch((err) => {\r\n console.log('定位失败', err)\r\n this.loadSearch = false\r\n })\r\n },\r\n searchMap(val) {\r\n if (!val) {\r\n this.onShowDialog('请输入搜索内容!!!')\r\n return\r\n }\r\n this.keyWord = val\r\n if (!this.mapNameList) return\r\n this.mapNameList = []\r\n this.isSearch = true\r\n this.total = 0\r\n this.finished = false\r\n this.loadPage = false\r\n this.currentPage = 1\r\n if (!this.checkedPoint) this.postMapList()\r\n else {\r\n let point = this.keyWord\r\n let pointArr = typeof point == 'string' ? point.split(',') : []\r\n if (pointArr.length > 1) {\r\n this.$emit('selectPoint', { longitude: pointArr[0], latitude: pointArr[1] })\r\n } else {\r\n this.onShowDialog('坐标格式不正确!!!')\r\n }\r\n }\r\n },\r\n clearMap() {\r\n this.$emit('clearSearchMap')\r\n }\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./search_map.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./search_map.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./search_map.vue?vue&type=template&id=e0bc6834\"\nimport script from \"./search_map.vue?vue&type=script&lang=js\"\nexport * from \"./search_map.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import \"../css/styles.css\";\r\nimport mapConfig from \"../config/map.config.js\";\r\nimport searchMap from \"../vue2/search_map.vue\";\r\nimport loadingBox from \"../vue2/loading.vue\";\r\nimport localImg from \"../image/ico_location.png\";\r\nimport svgIcon from \"../svgIcon.vue\";\r\nimport {\r\n initMapPack,\r\n drawArcPoint,\r\n goToPoint,\r\n getPictureSymbol,\r\n} from \"../utils/index.js\";\r\nimport { getGeocoderLg, getGeocoderAddress } from \"../utils/tianditu.js\";\r\nvar arcgisMap = null,\r\n arcgisView = null,\r\n currentAbortController,\r\n isClickLocked = false,\r\n pointLayer = null,\r\n searchViewModel = null;\r\nlet markerData = {\r\n url: localImg,\r\n width: 20,\r\n height: 18,\r\n};\r\nexport const mapLocationMixin = {\r\n components: { loadingBox, searchMap, svgIcon },\r\n props: {\r\n mapParams: {\r\n type: Object,\r\n default: mapConfig,\r\n },\r\n defaultCenter: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n isSearch: {\r\n type: Boolean,\r\n default: true,\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n computed: {\r\n isShowPoint() {\r\n return !this.disabled && this.isSearch;\r\n },\r\n mapCenter() {},\r\n },\r\n data() {\r\n return {\r\n mapId: \"map\" + Math.round(Math.random() * 10000),\r\n isLoading: true, //地图加载loading\r\n center: [],\r\n address: \"\",\r\n pointCenter: [113.536308532987, 23.3450945634734],\r\n pointData: {\r\n longitude: \"\",\r\n latitude: \"\",\r\n address: \"\",\r\n },\r\n };\r\n },\r\n methods: {\r\n /**\r\n * 返回地图容器\r\n */\r\n getMap() {\r\n return arcgisMap;\r\n },\r\n /**\r\n * 返回地图容器\r\n */\r\n getView() {\r\n return arcgisView;\r\n },\r\n setupMapEvents(view) {\r\n // 点击\r\n this._clickHandler = view.on(\r\n \"click\",\r\n this.debounce(this.handleMapClick, 300)\r\n );\r\n // 悬浮\r\n this._hoverHandler = view.on(\r\n \"pointer-move\",\r\n this.debounce(this.handleMapHover, 80)\r\n );\r\n },\r\n\r\n handleMapClick(e) {\r\n // 处理点击逻辑\r\n if (isClickLocked) return;\r\n // 取消上一次未完成的 hitTest\r\n if (currentAbortController) {\r\n currentAbortController.abort();\r\n }\r\n currentAbortController = new AbortController();\r\n isClickLocked = true;\r\n const eventData = {\r\n mapPoint: e.mapPoint,\r\n type: \"click\",\r\n };\r\n const hitTestPromise = arcgisView.hitTest(e); // 注意:ArcGIS hitTest 不支持 signal,此为未来兼容\r\n hitTestPromise\r\n .then((hitResult) => {\r\n if (currentAbortController.signal.aborted) return; // 已取消\r\n eventData.event = hitResult;\r\n if (this.isShowPoint && searchViewModel) {\r\n let point = e.mapPoint;\r\n if (point) {\r\n this.pointData.longitude = point.x;\r\n this.pointData.latitude = point.y;\r\n pointLayer.graphics._items[0].geometry.longitude = point.x;\r\n pointLayer.graphics._items[0].geometry.latitude = point.y;\r\n this.pointData.address = \"\";\r\n searchViewModel.update(pointLayer.graphics._items[0]);\r\n }\r\n }\r\n this.$emit(\"mapEventClick\", eventData);\r\n })\r\n .catch((err) => {\r\n if (err.name === \"AbortError\") return;\r\n console.warn(\"hitTest error\", err);\r\n })\r\n .finally(() => {\r\n setTimeout(() => {\r\n isClickLocked = false;\r\n currentAbortController = null;\r\n }, 300);\r\n });\r\n },\r\n\r\n async handleMapHover(event) {\r\n // 处理 hover 逻辑\r\n const hitData = await arcgisView.hitTest(event);\r\n if (hitData && hitData.results && hitData.screenPoint) {\r\n arcgisView.container.style.cursor = \"pointer\";\r\n\r\n this.$emit(\"mapEventMouse\", hitData);\r\n } else arcgisView.container.style.cursor = \"default\";\r\n },\r\n\r\n debounce(fn, delay) {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => fn.apply(this, args), delay);\r\n };\r\n },\r\n\r\n cleanupMapEvents() {\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n /**\r\n * 地图加载完成\r\n */\r\n loadEdMap(data) {\r\n arcgisMap = data.map;\r\n arcgisView = data.view;\r\n initMapPack(data);\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: \"pointLayer\" });\r\n arcgisMap.add(pointLayer, 10);\r\n if (this.isShowPoint) {\r\n this.setSearchVm();\r\n } else {\r\n this.moveCenterPoint();\r\n }\r\n this.setupMapEvents(data.view);\r\n if (this.center && this.center.length == 2) {\r\n goToPoint({\r\n longitude: this.center[0],\r\n latitude: this.center[1],\r\n });\r\n }\r\n this.$emit(\"loadEdMap\", data);\r\n },\r\n moveCenterPoint() {\r\n if (\r\n this.center &&\r\n this.center.length == 2 &&\r\n this.center[0] &&\r\n this.center[1]\r\n ) {\r\n this.refreshPoint({\r\n longitude: this.center[0],\r\n latitude: this.center[1],\r\n });\r\n } else if (this.address) {\r\n getGeocoderAddress(this.address)\r\n .then((resData) => {\r\n if (resData && resData.lon && resData.lat) {\r\n this.refreshPoint({\r\n longitude: resData.lon || \"\",\r\n latitude: resData.lat,\r\n });\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(\"err\", err);\r\n });\r\n } else if (\r\n this.defaultCenter &&\r\n this.defaultCenter.length == 2 &&\r\n this.defaultCenter[0] &&\r\n this.defaultCenter[1]\r\n ) {\r\n this.refreshPoint({\r\n longitude: this.defaultCenter[0],\r\n latitude: this.defaultCenter[1],\r\n });\r\n } else\r\n this.refreshPoint({\r\n longitude: this.pointCenter[0],\r\n latitude: this.pointCenter[1],\r\n });\r\n },\r\n /**\r\n * 设置搜索的可编辑图层\r\n */\r\n setSearchVm() {\r\n if (!this.disabled) {\r\n let pointSymbol = {\r\n type: \"picture-marker\", // autocasts as new PictureFillSymbol()\r\n ...markerData,\r\n img: markerData.url,\r\n };\r\n searchViewModel = new window.jkEsri.SketchViewModel({\r\n view: arcgisView, // view 是你的地图视图\r\n layer: pointLayer,\r\n pointSymbol: pointSymbol,\r\n polylineSymbol: {\r\n type: \"simple-line\",\r\n color: \"#8A2BE2\",\r\n width: \"4\",\r\n style: \"dash\",\r\n spatialReference: {\r\n wkid: 4326,\r\n },\r\n },\r\n polygonSymbol: {\r\n type: \"simple-fill\",\r\n color: \"rgba(0, 45, 99,0.4)\",\r\n style: \"solid\",\r\n outline: {\r\n color: \"white\",\r\n width: 2,\r\n },\r\n spatialReference: {\r\n wkid: 4326,\r\n },\r\n },\r\n spatialReference: {\r\n wkid: 4326,\r\n },\r\n });\r\n this.moveCenterPoint();\r\n searchViewModel.on(\"update\", (event) => {\r\n if (\r\n event &&\r\n event.graphics &&\r\n event.graphics.length > 0 &&\r\n event.graphics[0].geometry\r\n ) {\r\n let geometry = event.graphics[0].geometry;\r\n event.graphics[0].symbol = getPictureSymbol({\r\n ...markerData,\r\n });\r\n if (this.isSearch) {\r\n this.pointData.longitude = geometry.longitude;\r\n this.pointData.latitude = geometry.latitude;\r\n this.pointData.address = \"\";\r\n }\r\n event.graphic = event.graphics[0];\r\n }\r\n });\r\n } else this.moveCenterPoint();\r\n },\r\n\r\n clearSearchMap() {\r\n console.log(\"\");\r\n },\r\n clearSketch() {\r\n pointLayer && pointLayer.removeAll();\r\n if (this.$refs.searchRef && this.$refs.searchRef.clearSearch)\r\n this.$refs.searchRef.clearSearch();\r\n },\r\n /**\r\n * 搜索绘图\r\n * @param data\r\n */\r\n refreshPoint(data) {\r\n pointLayer && pointLayer.removeAll();\r\n this.pointData = { ...data, ...markerData };\r\n pointLayer.add(drawArcPoint(this.pointData));\r\n if (this.isShowPoint)\r\n setTimeout(() => {\r\n searchViewModel.update(pointLayer.graphics._items[0]);\r\n }, 200);\r\n goToPoint(data);\r\n },\r\n /**\r\n * 初始化点\r\n * @param {*} options\r\n * @param {Array} options.center 经纬度\r\n * @param {String} options.address 中文地址\r\n */\r\n initPoint(options) {\r\n this.center = [];\r\n this.address = \"\";\r\n this.pointData.address = \"\";\r\n if (options) {\r\n if (options.address) {\r\n this.address = data.address;\r\n }\r\n if (\r\n options.center &&\r\n options.center.length == 2 &&\r\n options.center[0] &&\r\n options.center[1]\r\n ) {\r\n this.center = data.center;\r\n }\r\n if (arcgisMap && arcgisView) {\r\n setTimeout(() => {\r\n this.moveCenterPoint();\r\n }, 200);\r\n }\r\n }\r\n },\r\n /**\r\n * 搜索回调\r\n */\r\n async returnPoint() {\r\n let datas = this.pointData;\r\n if (datas && datas.longitude && datas.latitude) {\r\n if (!datas.address) {\r\n let resData = await getGeocoderLg({\r\n longitude: this.pointData.longitude,\r\n latitude: this.pointData.latitude,\r\n });\r\n if (resData && resData.addressComponent) {\r\n let address = \"\";\r\n address = resData.addressComponent.address\r\n ? resData.addressComponent.address\r\n : \"\";\r\n datas = {\r\n ...this.pointData,\r\n ...resData.addressComponent,\r\n address,\r\n };\r\n }\r\n }\r\n return datas;\r\n } else return datas;\r\n },\r\n },\r\n beforeUnmount() {\r\n this.clearSketch();\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n};\r\n","/**\r\n * 高性能事件管理器\r\n * @param {Function} [originalFn] - 原始回调函数(可选)\r\n * @param {Object} [options] - 配置项\r\n * @param {boolean} [options.executeOriginalFirst=true] - 是否先执行原始函数\r\n * @param {number} [options.debounce] - 防抖延迟(毫秒)\r\n * @param {boolean} [options.throttle] - 节流间隔(毫秒)\r\n * @returns {Function} 可扩展的事件处理器\r\n */\r\nexport function createEventManager(originalFn, options = {}) {\r\n const { executeOriginalFirst = true, debounce: debounceDelay, throttle: throttleDelay } = options\r\n\r\n let listeners = []\r\n let isSorted = true // 懒排序标志\r\n let lastTriggerTime = 0\r\n let debounceTimer = null\r\n\r\n // 错误处理包装\r\n const safeCall = (fn, context, args) => {\r\n try {\r\n return fn.apply(context, args)\r\n } catch (error) {\r\n console.error('EventManager listener error:', error)\r\n return null\r\n }\r\n }\r\n\r\n // 执行所有监听器\r\n const executeListeners = (context, args) => {\r\n // 懒排序:仅当有新监听器加入且未排序时才排序\r\n if (!isSorted) {\r\n listeners.sort((a, b) => a.index - b.index)\r\n isSorted = true\r\n }\r\n\r\n // 先执行原始函数(如果需要)\r\n if (executeOriginalFirst && originalFn) {\r\n safeCall(originalFn, context, args)\r\n }\r\n\r\n // 安全遍历(避免修改数组导致的问题)\r\n const snapshot = [...listeners] // 创建快照\r\n for (let i = 0; i < snapshot.length; i++) {\r\n const listener = snapshot[i]\r\n\r\n // 检查是否仍存在于当前列表(防止重复移除)\r\n if (!listeners.includes(listener)) continue\r\n\r\n const result = safeCall(listener, context, args)\r\n\r\n // 支持返回 'remove' 自动移除\r\n if (result === 'remove') {\r\n removeListener(listener)\r\n }\r\n }\r\n\r\n // 后执行原始函数(如果配置了)\r\n if (!executeOriginalFirst && originalFn) {\r\n safeCall(originalFn, context, args)\r\n }\r\n }\r\n\r\n // 移除监听器\r\n const removeListener = (listener) => {\r\n const index = listeners.indexOf(listener)\r\n if (index > -1) {\r\n listeners.splice(index, 1)\r\n }\r\n }\r\n\r\n // 主事件处理器\r\n let eventHandler = function (...args) {\r\n const now = Date.now()\r\n\r\n // 节流:限制最小触发间隔\r\n if (throttleDelay && now - lastTriggerTime < throttleDelay) {\r\n return\r\n }\r\n\r\n // 防抖:延迟执行\r\n if (debounceDelay) {\r\n if (debounceTimer) clearTimeout(debounceTimer)\r\n debounceTimer = setTimeout(() => {\r\n lastTriggerTime = Date.now()\r\n executeListeners(this, args)\r\n }, debounceDelay)\r\n return\r\n }\r\n\r\n // 正常执行\r\n lastTriggerTime = now\r\n executeListeners(this, args)\r\n }\r\n\r\n // 添加监听器\r\n eventHandler.addListener = function (fn, index = 0) {\r\n if (typeof fn !== 'function') {\r\n throw new Error('Listener must be a function')\r\n }\r\n\r\n fn.index = index\r\n fn.remove = () => removeListener(fn)\r\n\r\n listeners.push(fn)\r\n isSorted = false // 标记需要重新排序\r\n\r\n return fn\r\n }\r\n\r\n // 清空所有监听器\r\n eventHandler.clear = function () {\r\n listeners = []\r\n isSorted = true\r\n if (debounceTimer) {\r\n clearTimeout(debounceTimer)\r\n debounceTimer = null\r\n }\r\n }\r\n\r\n // 获取监听器列表(只读)\r\n eventHandler.getListeners = function () {\r\n return [...listeners] // 返回副本,防止外部修改\r\n }\r\n\r\n // 销毁(清理定时器)\r\n eventHandler.destroy = function () {\r\n this.clear()\r\n if (debounceTimer) {\r\n clearTimeout(debounceTimer)\r\n debounceTimer = null\r\n }\r\n }\r\n\r\n return eventHandler\r\n}\r\n","// map.js\r\nimport { loadCss, loadModules } from \"esri-loader\";\r\nimport { createEventManager } from \"./eventManager\";\r\nimport { createMapView, createBase } from \"../utils/index\";\r\nlet esri = {}; // 全局 esri 缓存(可选,用于调试)\r\nimport mapConfig from \"../config/map.config.js\";\r\n\r\nclass MapWrapper {\r\n /**\r\n * 构造\r\n * @param {*} id\r\n * @param {*} params\r\n * @returns\r\n */\r\n constructor(id, params = {}) {\r\n this.id = id;\r\n let param = { ...mapConfig, ...params };\r\n this.param = param;\r\n this.__config = param.config || {};\r\n this.layersType = param.layersType;\r\n // 存储原始参数,供 TDTinstance 使用\r\n this.mapParams = { ...param };\r\n\r\n // ✅ 使用 createEventManager 替代 eventBox\r\n this.onloadMap = createEventManager();\r\n\r\n this.createMap(id, param);\r\n return this;\r\n }\r\n /**\r\n * 创建地图\r\n * @param {*} id\r\n * @param {*} param\r\n */\r\n createMap(id, param) {\r\n this.init(param);\r\n }\r\n /**\r\n * 加载js和css\r\n * @param {*} param\r\n */\r\n init(param) {\r\n if (!window.jkEsri) {\r\n if (param.initCss) {\r\n loadCss(param.initCss);\r\n }\r\n const modules = param.modules || [\r\n \"esri/Map\",\r\n \"esri/views/MapView\",\r\n \"esri/layers/WebTileLayer\",\r\n \"esri/geometry/Extent\",\r\n \"esri/geometry/SpatialReference\",\r\n \"esri/geometry/support/webMercatorUtils\",\r\n \"esri/geometry/geometryEngine\",\r\n ];\r\n // 更新 mapParams.modules 用于 TDTinstance 解析\r\n this.mapParams.modules = modules;\r\n loadModules(modules, { url: param.initJs })\r\n .then(this.TDTinstance.bind(this, this.mapParams))\r\n .then(this.initMap.bind(this))\r\n .catch((err) => {\r\n console.error(\"地图模块加载失败:\", err);\r\n throw err;\r\n });\r\n } else this.initMap();\r\n }\r\n\r\n /**\r\n * 动态解析模块并挂载到 esri 对象\r\n * @param {Object} mapSet - 包含 modules 配置的对象\r\n * @param {Array} args - loadModules 返回的模块实例数组\r\n */\r\n TDTinstance(mapSet, args) {\r\n esri = {}; // 重置\r\n for (const k in args) {\r\n if (!args.hasOwnProperty(k)) continue;\r\n\r\n // 获取模块短名称(如 'esri/Map' → 'Map')\r\n const name = mapSet.modules[k].split(\"/\").pop();\r\n\r\n // 特殊处理 webMercatorUtils\r\n if (name === \"webMercatorUtils\") {\r\n esri.webMercatorToGeographic = args[k].webMercatorToGeographic;\r\n esri.geographicToWebMercator = args[k].geographicToWebMercator;\r\n }\r\n\r\n // 特殊处理 geometryEngine(直接挂载整个对象)\r\n if (name === \"geometryEngine\") {\r\n esri.geometryEngine = args[k];\r\n }\r\n\r\n // 通用挂载:esri.Map, esri.MapView 等\r\n esri[name] = args[k];\r\n }\r\n\r\n // 暴露到 window(便于调试,生产环境可移除)\r\n window.jkEsri = esri;\r\n\r\n // 同时保存到实例,避免全局依赖\r\n this.esri = esri;\r\n }\r\n /**\r\n * 初始化地图\r\n * @returns\r\n */\r\n initMap() {\r\n let layer = null;\r\n if (\r\n (this.layersType == \"dynamic\" || this.layersType == \"TileLayer\") &&\r\n this.param.baseMapUrl\r\n ) {\r\n var layerApi =\r\n this.layersType == \"dynamic\"\r\n ? window.jkEsri.MapImageLayer\r\n : window.jkEsri.TileLayer;\r\n layer = new layerApi({\r\n url: this.param.baseMapUrl,\r\n title: this.layersType,\r\n opacity: 1,\r\n visible: true,\r\n });\r\n createBase(this.id, layer, this.param).then((res) => {\r\n this.onloadMap(res);\r\n });\r\n } else\r\n createMapView(this.id, this.param).then((res) => {\r\n this.onloadMap(res);\r\n });\r\n }\r\n\r\n /**\r\n * 销毁\r\n */\r\n destroy() {\r\n this.onloadMap.destroy();\r\n if (this.view) {\r\n this.view.container = null;\r\n this.view = null;\r\n }\r\n this.map = null;\r\n this.esri = null;\r\n }\r\n}\r\n\r\nexport default MapWrapper;\r\n","<template>\r\n <loading-box :loading=\"isLoading\">\r\n <div class=\"arcgisMap-box\">\r\n <div :id=\"mapId\" class=\"map-canvans\"></div>\r\n <searchMap\r\n ref=\"searchRef\"\r\n v-if=\"!isLoading && isSearch\"\r\n @select-point=\"refreshPoint\"\r\n @clearSearchMap=\"clearSearchMap\"\r\n />\r\n </div>\r\n </loading-box>\r\n</template>\r\n\r\n<script>\r\nimport { mapLocationMixin } from '../mixins/mapLocationMixin.js'\r\nimport MapWrapper from '../lib/MapWrapper.js'\r\nexport default {\r\n name: 'JKMapEdit',\r\n mixins: [mapLocationMixin],\r\n mounted() {\r\n this.isLoading = true\r\n this.map = new MapWrapper(this.mapId, this.mapParams)\r\n // 监听地图加载完成\r\n this.map.onloadMap.addListener((data) => {\r\n this.isLoading = false\r\n this.loadEdMap(data)\r\n if (this.isShowPoint || this.isSearch || this.isLocation)\r\n setTimeout(() => {\r\n this.$nextTick(() => {\r\n this.$refs.searchRef.initMap(data)\r\n })\r\n }, 200)\r\n })\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./locationMap.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./locationMap.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./locationMap.vue?vue&type=template&id=65ceeabc\"\nimport script from \"./locationMap.vue?vue&type=script&lang=js\"\nexport * from \"./locationMap.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('loading-box',{attrs:{\"loading\":_vm.isLoading}},[_c('div',{staticClass:\"arcgisMap-box\"},[_c('div',{staticClass:\"map-canvans\",attrs:{\"id\":_vm.mapId}}),(!_vm.isLoading && _vm.isSearch)?_c('searchMap',{ref:\"searchRef\",on:{\"select-point\":_vm.refreshPoint,\"clearSearchMap\":_vm.clearSearchMap}}):_vm._e(),(_vm.isShowBtnBox)?_c('div',{staticClass:\"edit-btn-box\"},[(_vm.drawIngArea)?_c('div',{staticClass:\"edit-area\"},[_vm._v(\" \"+_vm._s(_vm.drawIngArea)+\"(平方米) \")]):_vm._e(),(_vm.module.indexOf('screen') > -1)?_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"全屏\"},on:{\"click\":_vm.changeFull}},[_c('svgIcon',{attrs:{\"name\":\"full\",\"width\":\"24\",\"color\":\"#000\"}})],1):_vm._e(),(_vm.isUseSketch)?[(_vm.type && _vm.type.indexOf('point') > -1)?_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"点\"},on:{\"click\":function($event){return _vm.drawLayerType('point')}}},[_c('svgIcon')],1):_vm._e(),(_vm.type && _vm.type.indexOf('polyline') > -1)?_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"线\"},on:{\"click\":function($event){return _vm.drawLayerType('polyline')}}},[_c('svgIcon',{attrs:{\"name\":\"line\"}})],1):_vm._e(),(_vm.type && _vm.type.indexOf('polygon') > -1)?_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"面\"},on:{\"click\":function($event){return _vm.drawLayerType('polygon')}}},[_c('svgIcon',{attrs:{\"name\":\"polygon\"}})],1):_vm._e(),_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"关闭\"},on:{\"click\":_vm.closeLayer}},[_c('svgIcon',{attrs:{\"name\":\"close\",\"width\":\"22\",\"color\":\"#000\"}})],1),_c('div',{staticClass:\"edit-btn\",attrs:{\"title\":\"删除\"},on:{\"click\":_vm.delDraw}},[_c('svgIcon',{attrs:{\"name\":\"del\"}})],1),_c('div',{staticClass:\"edit-btn\",class:{ 'btn-disable': !_vm.isPerv },attrs:{\"title\":\"上一步\"},on:{\"click\":_vm.undo}},[_c('svgIcon',{attrs:{\"name\":\"perv\",\"width\":\"22\",\"color\":_vm.isPerv ? '#6a6a6a' : '#dadada'}})],1),_c('div',{staticClass:\"edit-btn\",class:{ 'btn-disable': _vm.isNextList.length == 0 },attrs:{\"title\":\"下一步\"},on:{\"click\":_vm.redo}},[_c('svgIcon',{attrs:{\"name\":\"next\",\"width\":\"22\",\"color\":_vm.isNextList.length > 0 ? '#6a6a6a' : '#dadada'}})],1)]:_vm._e()],2):_vm._e()],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import \"../css/styles.css\";\r\nimport searchMap from \"../vue2/search_map.vue\";\r\nimport loadingBox from \"../vue2/loading.vue\";\r\nimport localImg from \"../image/ico_location.png\";\r\nimport svgIcon from \"../svgIcon.vue\";\r\nimport {\r\n initMapPack,\r\n drawArcPoint,\r\n getPictureSymbol,\r\n getArea,\r\n goToMap,\r\n drawLayer,\r\n} from \"../utils/index.js\";\r\nimport { arcGISTranformGeoJson } from \"../config/wktMethods\";\r\n\r\nlet arcgisMap = null,\r\n arcgisView = null,\r\n currentAbortController = null,\r\n isClickLocked = false,\r\n pointLayer = null,\r\n sketchDemo = null,\r\n editGraphic = null,\r\n sketchLayer = null,\r\n sketchTextLayer = null,\r\n drawingText = null,\r\n layerDraw = null,\r\n layerDrawText = null,\r\n drawEnd = 0;\r\n\r\nconst markerData = {\r\n url: localImg,\r\n width: 20,\r\n height: 18,\r\n};\r\n\r\nexport const mapMixin = {\r\n components: { searchMap, svgIcon, loadingBox },\r\n props: {\r\n mapParams: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n module: {\r\n type: Array,\r\n default: () => {\r\n return [\"search\", \"edit\", \"screen\"]; //edit:编辑,screen:全屏,search:搜索-'search', 'edit', 'screen'\r\n },\r\n },\r\n isUseMore: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n center: {\r\n type: Array,\r\n default: () => [115.837683, 23.43353],\r\n },\r\n type: {\r\n type: Array,\r\n default: () => [\"point\", \"polyline\", \"polygon\"], //'point', 'polyline', 'polygon'\r\n },\r\n },\r\n computed: {\r\n isShowPoint() {\r\n return this.type && this.type.includes(\"point\");\r\n },\r\n isSearch() {\r\n return (\r\n this.module &&\r\n this.module.length > 0 &&\r\n this.module.indexOf(\"search\") > -1\r\n );\r\n },\r\n isUseSketch() {\r\n return (\r\n this.module &&\r\n this.module.length > 0 &&\r\n this.module.indexOf(\"edit\") > -1\r\n );\r\n },\r\n isShowBtnBox() {\r\n return (\r\n this.module &&\r\n this.module.length > 0 &&\r\n (this.module.indexOf(\"edit\") > -1 || this.module.indexOf(\"screen\") > -1)\r\n );\r\n },\r\n },\r\n data() {\r\n return {\r\n mapId: \"map\" + Math.round(Math.random() * 10000),\r\n isLoading: true,\r\n pointData: null,\r\n isPerv: false,\r\n isNextList: [],\r\n drawIngArea: 0,\r\n };\r\n },\r\n methods: {\r\n getMap() {\r\n return arcgisMap;\r\n },\r\n getView() {\r\n return arcgisView;\r\n },\r\n setupMapEvents(view) {\r\n this._clickHandler = view.on(\r\n \"click\",\r\n this.debounce(this.handleMapClick, 300)\r\n );\r\n this._hoverHandler = view.on(\r\n \"pointer-move\",\r\n this.debounce(this.handleMapHover, 80)\r\n );\r\n },\r\n async handleMapClick(e) {\r\n if (isClickLocked) return;\r\n if (currentAbortController) {\r\n currentAbortController.abort();\r\n }\r\n currentAbortController = new AbortController();\r\n isClickLocked = true;\r\n const eventData = {\r\n mapPoint: e.mapPoint,\r\n type: \"click\",\r\n };\r\n try {\r\n const hitResult = await arcgisView.hitTest(e);\r\n if (currentAbortController.signal.aborted) return;\r\n this.$emit(\"mapEventClick\", { ...eventData, ...hitResult });\r\n } catch (err) {\r\n if (err.name !== \"AbortError\") {\r\n console.warn(\"hitTest error\", err);\r\n }\r\n } finally {\r\n setTimeout(() => {\r\n isClickLocked = false;\r\n currentAbortController = null;\r\n }, 300);\r\n }\r\n },\r\n\r\n async handleMapHover(event) {\r\n const hitData = await arcgisView.hitTest(event);\r\n hitData.results = hitData.results.filter(\r\n (item) =>\r\n item.layer && item.layer.id && item.layer.id.indexOf(\"map-mask\") == -1\r\n );\r\n if (\r\n hitData &&\r\n hitData.results &&\r\n hitData.results.length > 0 &&\r\n hitData.screenPoint\r\n ) {\r\n // arcgisView.container.style.cursor = 'pointer'\r\n this.$emit(\"mapEventMouse\", hitData);\r\n } else {\r\n arcgisView.container.style.cursor = \"default\";\r\n }\r\n },\r\n\r\n debounce(fn, delay) {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => fn.apply(this, args), delay);\r\n };\r\n },\r\n\r\n cleanupMapEvents() {\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n\r\n loadEdMap(data) {\r\n arcgisMap = data.map;\r\n arcgisView = data.view;\r\n initMapPack(data);\r\n this.setupMapEvents(data.view);\r\n if (this.isSearch) {\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: \"pointLayer\" });\r\n arcgisMap.add(pointLayer, 10);\r\n }\r\n if (this.isUseSketch) {\r\n this.loadSketch();\r\n }\r\n if (this.center && this.center.length === 2) {\r\n goToMap({\r\n longitude: this.center[0],\r\n latitude: this.center[1],\r\n });\r\n }\r\n this.$emit(\"loadEdMap\", data);\r\n },\r\n\r\n clearSearchMap() {\r\n pointLayer.removeAll();\r\n },\r\n\r\n refreshPoint(data) {\r\n pointLayer.removeAll();\r\n this.pointData = {\r\n ...data,\r\n ...markerData,\r\n };\r\n pointLayer.add(drawArcPoint(this.pointData));\r\n goToMap(data);\r\n },\r\n uuidGenerator() {\r\n const originStr = \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\r\n const originChar = \"ABCDEFGHJKMNPQRSTWXYZ0123456789\";\r\n const len = originChar.length;\r\n return originStr.replace(/x/g, () =>\r\n originChar.charAt(Math.floor(Math.random() * len))\r\n );\r\n },\r\n\r\n drawLayerType(type) {\r\n editGraphic = null;\r\n sketchDemo.create(type);\r\n sketchDemo.on(\"create\", (event) => {\r\n this.isPerv = true;\r\n\r\n if (event.graphic) this.drawLayerNames(event.graphic);\r\n if (event.state === \"complete\") {\r\n if (!this.isUseMore) sketchDemo.cancel();\r\n this.isPerv = false;\r\n this.isNextList = [];\r\n this.drawIngArea = 0;\r\n editGraphic = null;\r\n drawEnd = 1;\r\n\r\n if (event.graphic && !event.graphic.attributes) {\r\n const baseAttr = {\r\n typeId: this.uuidGenerator(),\r\n name: \"\",\r\n describe: \"\",\r\n area: 0,\r\n };\r\n if (event.graphic.symbol.type === \"simple-fill\") {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"polygon\",\r\n };\r\n } else if (event.graphic.symbol.type === \"simple-line\") {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"polyline\",\r\n };\r\n } else {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"point\",\r\n };\r\n }\r\n } else if (event.graphics[0]) {\r\n const g = event.graphics[0];\r\n if ([\"simple-marker\", \"picture-marker\"].includes(g.symbol.type)) {\r\n g.symbol = getPictureSymbol({\r\n url: g.attributes.url || localImg,\r\n width: g.attributes.width || 20,\r\n height: g.attributes.height || 18,\r\n });\r\n }\r\n }\r\n this.drawcomplete(event);\r\n }\r\n });\r\n },\r\n undo() {\r\n if (!this.isPerv) return;\r\n sketchDemo.undo();\r\n this.isNextList.push(\"1\");\r\n if (editGraphic) this.drawLayerNames(editGraphic);\r\n },\r\n redo() {\r\n if (this.isNextList.length === 0) return;\r\n this.isPerv = true;\r\n sketchDemo.redo();\r\n if (editGraphic) this.drawLayerNames(editGraphic);\r\n this.isNextList.pop();\r\n },\r\n\r\n closeLayer() {\r\n if (sketchDemo.viewModel) sketchDemo.viewModel.cancel();\r\n this.isPerv = false;\r\n this.isNextList = [];\r\n },\r\n\r\n delDraw() {\r\n this.clearSketch();\r\n },\r\n\r\n changeFull() {\r\n this.$emit(\"changeFull\");\r\n },\r\n\r\n completeSketch() {\r\n editGraphic = null;\r\n sketchDemo.viewModel.complete();\r\n },\r\n\r\n clearSketch() {\r\n this.closeLayer();\r\n editGraphic = null;\r\n sketchLayer.removeAll();\r\n sketchTextLayer.removeAll();\r\n layerDraw.removeAll();\r\n layerDrawText.removeAll();\r\n drawingText.removeAll();\r\n pointLayer.removeAll();\r\n\r\n if (\r\n (this.isShowPoint || this.isSearch) &&\r\n this.$refs.searchRef &&\r\n this.$refs.searchRef.clearSearch\r\n ) {\r\n this.$nextTick(() => {\r\n this.$refs.searchRef.clearSearch();\r\n });\r\n }\r\n },\r\n\r\n addGeometryLayer(graphic) {\r\n sketchLayer.add(graphic);\r\n },\r\n\r\n loadSketch() {\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: \"pointLayer\" });\r\n layerDraw = new window.jkEsri.GraphicsLayer({ id: \"layerDraw\" });\r\n layerDrawText = new window.jkEsri.GraphicsLayer({ id: \"layerDrawText\" });\r\n sketchLayer = new window.jkEsri.GraphicsLayer({ id: \"sketchLayer\" });\r\n sketchTextLayer = new window.jkEsri.GraphicsLayer({\r\n id: \"sketchTextLayer\",\r\n });\r\n drawingText = new window.jkEsri.GraphicsLayer({ id: \"drawingText\" });\r\n arcgisMap.add(pointLayer, 10);\r\n arcgisMap.add(layerDraw, 1);\r\n arcgisMap.add(layerDrawText, 2);\r\n arcgisMap.add(sketchLayer, 4);\r\n arcgisMap.add(sketchTextLayer, 5);\r\n arcgisMap.add(drawingText, 5);\r\n sketchDemo = new window.jkEsri.SketchViewModel({\r\n layer: sketchLayer,\r\n view: arcgisView,\r\n polylineSymbol: {\r\n type: \"simple-line\",\r\n color: \"#fff\",\r\n width: \"4\",\r\n style: \"dash\",\r\n },\r\n polygonSymbol: {\r\n type: \"simple-fill\",\r\n color: \"rgba(0, 45, 99,0.01)\",\r\n style: \"solid\",\r\n outline: {\r\n color: \"white\",\r\n width: 2,\r\n },\r\n },\r\n });\r\n sketchDemo.on(\"delete\", (event) => {\r\n if (event.graphics.length > 0) event.graphic = event.graphics[0];\r\n this.drawIngArea = 0;\r\n editGraphic = null;\r\n this.drawcomplete(event);\r\n });\r\n sketchDemo.on(\"update\", (event) => {\r\n if (event.graphics[0]) {\r\n this.drawLayerNames(event.graphics[0]);\r\n }\r\n if (event.state === \"start\") {\r\n drawEnd = 0;\r\n event.graphic = event.graphics[0];\r\n if (event.graphic && !event.graphic.attributes) {\r\n const baseAttr = {\r\n typeId: this.uuidGenerator(),\r\n name: \"\",\r\n describe: \"\",\r\n area: 0,\r\n rings: [],\r\n };\r\n if (event.graphic.symbol.type === \"simple-fill\") {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"polygon\",\r\n color: \"#cef5ff\",\r\n opacity: 20,\r\n outline: {\r\n opacity: 100,\r\n color: \"#0ccfff\",\r\n width: 2,\r\n style: \"solid\",\r\n },\r\n };\r\n } else if (event.graphic.symbol.type === \"simple-line\") {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"polyline\",\r\n outline: {\r\n opacity: 100,\r\n color: \"#0ccfff\",\r\n width: 2,\r\n style: \"solid\",\r\n },\r\n };\r\n } else {\r\n event.graphic.attributes = {\r\n ...baseAttr,\r\n type: \"point\",\r\n };\r\n }\r\n }\r\n } else if (event.state === \"active\") {\r\n this.isPerv = true;\r\n } else if (event.state === \"complete\") {\r\n this.isPerv = false;\r\n this.isNextList = [];\r\n drawEnd = 1;\r\n this.drawIngArea = 0;\r\n editGraphic = null;\r\n event.graphic = event.graphics[0];\r\n this.drawcomplete(event);\r\n }\r\n });\r\n },\r\n\r\n drawLayerNames(event) {\r\n if (\r\n event.geometry.type === \"polygon\" &&\r\n event.geometry.rings.length > 0\r\n ) {\r\n this.drawIngArea = 0;\r\n editGraphic = event;\r\n const lastRing = event.geometry.rings[event.geometry.rings.length - 1];\r\n const isDraw = lastRing.length > 2;\r\n const draw_Area = getArea(event.geometry);\r\n if (isDraw && draw_Area && Number(draw_Area) > 0) {\r\n this.drawIngArea = Number(draw_Area).toFixed(2);\r\n }\r\n if (event.attributes.uuid && sketchTextLayer.graphics.items) {\r\n const textItem = sketchTextLayer.graphics.items.find(\r\n (item) => item.attributes.uuid === event.attributes.uuid\r\n );\r\n if (textItem) {\r\n textItem.geometry = event.geometry.centroid;\r\n }\r\n }\r\n }\r\n },\r\n\r\n async retuanGraphics() {\r\n let area = 0;\r\n let form = {\r\n drawEnd,\r\n area: \"\",\r\n mArea: \"\",\r\n hectareArea: \"\",\r\n latitude: \"\",\r\n longitude: \"\",\r\n ringsList: [],\r\n };\r\n\r\n if (sketchLayer.graphics.items.length > 0) {\r\n for (const item of sketchLayer.graphics.items) {\r\n const geomType = this.judgeLayerType(item.geometry.type);\r\n let geometry = arcGISTranformGeoJson(item);\r\n if (geomType === \"point\") {\r\n form.longitude = item.geometry.longitude;\r\n form.latitude = item.geometry.latitude;\r\n form.ringsList.push({\r\n type: \"Point\",\r\n geometry,\r\n });\r\n } else if (geomType === \"polyline\") {\r\n form.ringsList.push({\r\n type: \"Polyline\",\r\n geometry,\r\n latitude: \"\",\r\n longitude: \"\",\r\n area: 0,\r\n });\r\n } else if (geomType === \"polygon\") {\r\n const itemArea = getArea(item.geometry);\r\n\r\n let polygonArea = 0;\r\n if (itemArea && Number(itemArea))\r\n polygonArea = Math.abs(Number(itemArea).toFixed(2));\r\n area += polygonArea;\r\n form.longitude = item.geometry.centroid.longitude;\r\n form.latitude = item.geometry.centroid.latitude;\r\n form.ringsList.push({\r\n type: \"polygon\",\r\n geometry,\r\n longitude: item.geometry.centroid.longitude,\r\n latitude: item.geometry.centroid.latitude,\r\n area: polygonArea,\r\n });\r\n }\r\n }\r\n }\r\n if (area > 0) {\r\n form.area = area;\r\n form.mArea = Number(area) * 0.0015; // 亩\r\n form.hectareArea = Number(area) * 0.0001; // 公顷\r\n }\r\n console.log(\"formatMapData00\", form, sketchLayer.graphics.items);\r\n return form;\r\n },\r\n async drawcomplete(event) {\r\n if (event.type == \"delete\") {\r\n if (event.graphic.attributes.uuid && sketchTextLayer.graphics.items) {\r\n const idx = sketchTextLayer.graphics.items.findIndex(\r\n (item) => item.attributes.uuid === event.graphic.attributes.uuid\r\n );\r\n if (idx >= 0) {\r\n sketchTextLayer.remove(sketchTextLayer.graphics.items[idx]);\r\n }\r\n }\r\n }\r\n const form = await this.retuanGraphics();\r\n this.$emit(\"drawcomplete\", form);\r\n },\r\n\r\n judgeLayerType(type) {\r\n if (!type) return;\r\n if (type.includes(\"oint\")) return \"point\";\r\n if (type.includes(\"olygon\")) return \"polygon\";\r\n if (type.includes(\"ine\")) return \"polyline\";\r\n },\r\n batchDraw(layers, type = \"edit\") {\r\n let layer = type == \"edit\" ? sketchLayer : layerDraw;\r\n let graphics = [];\r\n if (layers.length > 0) {\r\n for (const item of layers) {\r\n let graphic = drawLayer(item, item.drawType);\r\n if (graphics) graphics.push(graphic);\r\n }\r\n if (graphics.length > 0) {\r\n layer.addMany(graphics);\r\n }\r\n goToMap(layer);\r\n }\r\n },\r\n },\r\n beforeUnmount() {\r\n this.clearSketch();\r\n this.cleanupMapEvents();\r\n },\r\n};\r\n","<template>\r\n <loading-box :loading=\"isLoading\">\r\n <div class=\"arcgisMap-box\">\r\n <div :id=\"mapId\" class=\"map-canvans\"></div>\r\n <searchMap\r\n ref=\"searchRef\"\r\n v-if=\"!isLoading && isSearch\"\r\n @select-point=\"refreshPoint\"\r\n @clearSearchMap=\"clearSearchMap\"\r\n />\r\n <div class=\"edit-btn-box\" v-if=\"isShowBtnBox\">\r\n <div class=\"edit-area\" v-if=\"drawIngArea\"> {{ drawIngArea }}(平方米) </div>\r\n <div class=\"edit-btn\" v-if=\"module.indexOf('screen') > -1\" @click=\"changeFull\" title=\"全屏\">\r\n <svgIcon name=\"full\" width=\"24\" color=\"#000\" />\r\n </div>\r\n <template v-if=\"isUseSketch\">\r\n <div\r\n class=\"edit-btn\"\r\n @click=\"drawLayerType('point')\"\r\n v-if=\"type && type.indexOf('point') > -1\"\r\n title=\"点\"\r\n >\r\n <svgIcon />\r\n </div>\r\n <div\r\n class=\"edit-btn\"\r\n @click=\"drawLayerType('polyline')\"\r\n v-if=\"type && type.indexOf('polyline') > -1\"\r\n title=\"线\"\r\n >\r\n <svgIcon name=\"line\" />\r\n </div>\r\n <div\r\n class=\"edit-btn\"\r\n @click=\"drawLayerType('polygon')\"\r\n v-if=\"type && type.indexOf('polygon') > -1\"\r\n title=\"面\"\r\n >\r\n <svgIcon name=\"polygon\" />\r\n </div>\r\n <div class=\"edit-btn\" @click=\"closeLayer\" title=\"关闭\">\r\n <svgIcon name=\"close\" width=\"22\" color=\"#000\" />\r\n </div>\r\n <div class=\"edit-btn\" @click=\"delDraw\" title=\"删除\">\r\n <svgIcon name=\"del\" />\r\n </div>\r\n <div class=\"edit-btn\" @click=\"undo\" :class=\"{ 'btn-disable': !isPerv }\" title=\"上一步\">\r\n <svgIcon name=\"perv\" width=\"22\" :color=\"isPerv ? '#6a6a6a' : '#dadada'\" />\r\n </div>\r\n <div\r\n class=\"edit-btn\"\r\n @click=\"redo\"\r\n :class=\"{ 'btn-disable': isNextList.length == 0 }\"\r\n title=\"下一步\"\r\n >\r\n <svgIcon\r\n name=\"next\"\r\n width=\"22\"\r\n :color=\"isNextList.length > 0 ? '#6a6a6a' : '#dadada'\"\r\n />\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </loading-box>\r\n</template>\r\n\r\n<script>\r\nimport MapWrapper from '../lib/MapWrapper.js'\r\nimport { mapMixin } from '../mixins/mapMixin.js'\r\nexport default {\r\n name: 'JKMapEdit',\r\n mixins: [mapMixin],\r\n mounted() {\r\n this.isLoading = true\r\n this.map = new MapWrapper(this.mapId, this.mapParams)\r\n // 监听地图加载完成\r\n this.map.onloadMap.addListener((data) => {\r\n this.isLoading = false\r\n this.loadEdMap(data)\r\n if (this.isShowPoint || this.isSearch || this.isLocation)\r\n setTimeout(() => {\r\n this.$nextTick(() => {\r\n this.$refs.searchRef.initMap(data)\r\n })\r\n }, 200)\r\n })\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineMap.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./augustineMap.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./augustineMap.vue?vue&type=template&id=786fd786\"\nimport script from \"./augustineMap.vue?vue&type=script&lang=js\"\nexport * from \"./augustineMap.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('loading-box',{attrs:{\"loading\":_vm.isLoading}},[_c('div',{staticClass:\"arcgisMap-box\"},[_c('div',{staticClass:\"map-canvans\",attrs:{\"id\":_vm.mapId}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import \"../css/styles.css\";\r\nimport mapConfig from \"../config/map.config.js\";\r\nimport loadingBox from \"../vue2/loading.vue\";\r\nimport { createArcPoint, getPictureSymbol, goToMap } from \"../utils/index.js\";\r\n\r\nvar arcgisMap = null,\r\n arcgisView = null,\r\n currentAbortController,\r\n isClickLocked = false,\r\n pointLayer = null;\r\nexport const mapListMixin = {\r\n components: { loadingBox },\r\n props: {\r\n mapParams: {\r\n type: Object,\r\n default: mapConfig,\r\n },\r\n\r\n load: {\r\n type: Function,\r\n default: null,\r\n },\r\n defaultCenter: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n computed: {\r\n mapCenter() {},\r\n },\r\n data() {\r\n return {\r\n mapId: \"map\" + Math.round(Math.random() * 10000),\r\n isLoading: true, //地图加载loading\r\n center: [],\r\n address: \"\",\r\n pointCenter: [113.536308532987, 23.3450945634734],\r\n pointsList: [],\r\n };\r\n },\r\n methods: {\r\n /**\r\n * 返回地图容器\r\n */\r\n getMap() {\r\n return arcgisMap;\r\n },\r\n /**\r\n * 返回地图容器\r\n */\r\n getView() {\r\n return arcgisView;\r\n },\r\n setupMapEvents(view) {\r\n // 点击\r\n this._clickHandler = view.on(\r\n \"click\",\r\n this.debounce(this.handleMapClick, 300)\r\n );\r\n // 悬浮\r\n this._hoverHandler = view.on(\r\n \"pointer-move\",\r\n this.debounce(this.handleMapHover, 80)\r\n );\r\n },\r\n changeGraphic(data) {\r\n if (pointLayer && pointLayer.graphics && pointLayer.graphics._items) {\r\n pointLayer.graphics._items.map((item) => {\r\n let url = item.attributes.url,\r\n width = item.attributes.width,\r\n height = item.attributes.height;\r\n if (\r\n data &&\r\n item &&\r\n item.attributes &&\r\n item.attributes.name == data.name\r\n ) {\r\n url = data.activeUrl ? data.activeUrl : data.url;\r\n width = data.width + 5;\r\n height = (data.height * width) / data.width;\r\n }\r\n item.symbol = getPictureSymbol({\r\n url: url,\r\n width: width,\r\n height: height,\r\n });\r\n return item;\r\n });\r\n }\r\n },\r\n handleMapClick(e) {\r\n // 处理点击逻辑\r\n if (isClickLocked) return;\r\n // 取消上一次未完成的 hitTest\r\n if (currentAbortController) {\r\n currentAbortController.abort();\r\n }\r\n currentAbortController = new AbortController();\r\n isClickLocked = true;\r\n const eventData = {\r\n mapPoint: e.mapPoint,\r\n type: \"click\",\r\n };\r\n const hitTestPromise = arcgisView.hitTest(e); // 注意:ArcGIS hitTest 不支持 signal,此为未来兼容\r\n hitTestPromise\r\n .then((hitResult) => {\r\n if (currentAbortController.signal.aborted) return; // 已取消\r\n eventData.event = hitResult;\r\n if (hitResult && hitResult.results && hitResult.results.length > 0) {\r\n const graphics = hitResult.results.filter(\r\n (item) =>\r\n item.layer &&\r\n item.layer.id &&\r\n item.layer.id.indexOf(\"pointLayer\") > -1\r\n );\r\n if (graphics && graphics.length > 0) {\r\n const graphic = graphics[0].graphic,\r\n attributes = graphic.attributes;\r\n this.changeGraphic(attributes);\r\n }\r\n console.log(\"eventData\", hitResult.results, graphics);\r\n } else {\r\n this.changeGraphic(null);\r\n }\r\n this.$emit(\"mapEventClick\", eventData);\r\n })\r\n .catch((err) => {\r\n if (err.name === \"AbortError\") return;\r\n console.warn(\"hitTest error\", err);\r\n })\r\n .finally(() => {\r\n setTimeout(() => {\r\n isClickLocked = false;\r\n currentAbortController = null;\r\n }, 300);\r\n });\r\n },\r\n\r\n async handleMapHover(event) {\r\n // 处理 hover 逻辑\r\n const hitData = await arcgisView.hitTest(event);\r\n if (hitData && hitData.results && hitData.screenPoint) {\r\n arcgisView.container.style.cursor = \"pointer\";\r\n this.$emit(\"mapEventMouse\", hitData);\r\n } else arcgisView.container.style.cursor = \"default\";\r\n },\r\n\r\n debounce(fn, delay) {\r\n let timer;\r\n return (...args) => {\r\n clearTimeout(timer);\r\n timer = setTimeout(() => fn.apply(this, args), delay);\r\n };\r\n },\r\n\r\n cleanupMapEvents() {\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n /**\r\n * 地图加载完成\r\n */\r\n loadEdMap(data) {\r\n arcgisMap = data.map;\r\n arcgisView = data.view;\r\n setTimeout(() => {\r\n pointLayer = new window.jkEsri.GraphicsLayer({ id: \"pointLayer\" });\r\n arcgisMap.add(pointLayer, 10);\r\n this.drawPoints();\r\n this.setupMapEvents(data.view);\r\n this.$emit(\"loadEdMap\", data);\r\n }, 500);\r\n },\r\n moveCenterPoint() {\r\n if (\r\n this.defaultCenter &&\r\n this.defaultCenter.length == 2 &&\r\n this.defaultCenter[0] &&\r\n this.defaultCenter[1]\r\n ) {\r\n goToMap(this.defaultCenter);\r\n } else goToMap(this.pointCenter);\r\n },\r\n drawPoints() {\r\n if (this.pointsList && this.pointsList.length > 0) {\r\n const validGraphics = this.pointsList\r\n .map((item) => createArcPoint(item))\r\n .filter((g) => g !== null); // 过滤掉失败项\r\n pointLayer.addMany(validGraphics);\r\n goToMap(pointLayer.graphics.items);\r\n }\r\n },\r\n /**\r\n * 初始化点\r\n * @param {*} data\r\n */\r\n initPoint(data = []) {\r\n this.pointsList = data || [];\r\n if (arcgisMap && arcgisView) {\r\n if (pointLayer) pointLayer.removeAll();\r\n this.drawPoints();\r\n }\r\n },\r\n },\r\n beforeUnmount() {\r\n this._clickHandler.remove();\r\n this._hoverHandler.remove();\r\n },\r\n};\r\n","<template>\r\n <loading-box :loading=\"isLoading\">\r\n <div class=\"arcgisMap-box\">\r\n <div :id=\"mapId\" class=\"map-canvans\"></div>\r\n </div>\r\n </loading-box>\r\n</template>\r\n\r\n<script>\r\nimport { mapListMixin } from '../mixins/mapListMixin.js'\r\nimport MapWrapper from '../lib/MapWrapper.js'\r\nexport default {\r\n name: 'JKMapList',\r\n mixins: [mapListMixin],\r\n mounted() {\r\n this.isLoading = true\r\n this.map = new MapWrapper(this.mapId, this.mapParams)\r\n // 监听地图加载完成\r\n this.map.onloadMap.addListener((data) => {\r\n this.isLoading = false\r\n this.loadEdMap(data)\r\n })\r\n }\r\n}\r\n</script>\r\n","import mod from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./mapList.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./mapList.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./mapList.vue?vue&type=template&id=a8621cc6\"\nimport script from \"./mapList.vue?vue&type=script&lang=js\"\nexport * from \"./mapList.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/@vue/vue-loader-v15/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import augustineGjMap from \"./vue2/augustineGjMap.vue\";\r\nimport locationMap from \"./vue2/locationMap.vue\";\r\nimport augustineMap from \"./vue2/augustineMap.vue\";\r\nimport mapList from \"./vue2/mapList.vue\";\r\nexport { augustineGjMap, augustineMap, locationMap, mapList };\r\n// 所有组件列表\r\nconst components = [augustineGjMap, augustineMap, locationMap, mapList];\r\n// install 方法\r\nconst install = (Vue) => {\r\n if (install.installed) return;\r\n install.installed = true;\r\n components.forEach((comp) => {\r\n Vue.component(comp.name, comp);\r\n });\r\n};\r\n\r\n// 支持 Vue.use(MyLib)\r\nexport default {\r\n install,\r\n ...components,\r\n};\r\nimport {\r\n getArea,\r\n goToMap,\r\n drawBuffer,\r\n getTextSymbol,\r\n getSimpleMarkerSymbol,\r\n getPictureSymbol,\r\n getLineSymbol,\r\n getFillSymbol,\r\n toArcGISPoint,\r\n drawArcPoint,\r\n createArcPoint,\r\n createLineGraphicsLayer,\r\n createMaskLayer,\r\n createPolygonGraphicsLayer,\r\n drawLayer,\r\n arcGISTranformGeoJson,\r\n} from \"./utils/index.js\";\r\nexport {\r\n getArea,\r\n goToMap,\r\n drawBuffer,\r\n getTextSymbol,\r\n getSimpleMarkerSymbol,\r\n getPictureSymbol,\r\n getLineSymbol,\r\n getFillSymbol,\r\n toArcGISPoint,\r\n drawArcPoint,\r\n createArcPoint,\r\n createLineGraphicsLayer,\r\n createMaskLayer,\r\n createPolygonGraphicsLayer,\r\n drawLayer,\r\n arcGISTranformGeoJson,\r\n};\r\n// 浏览器环境自动安装\r\nif (typeof window !== \"undefined\" && window.Vue) {\r\n install(window.Vue);\r\n}\r\n","import './setPublicPath'\nimport mod from '~entry'\nexport default mod\nexport * from '~entry'\n"],"names":[],"ignoreList":[],"sourceRoot":""}
|