From b65d1817b5817f7bc7662e4e1eb27c7fbed52371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=A2=E6=AC=A3=E6=82=A6?= <2289014031@qq.com> Date: Mon, 22 Jul 2024 10:19:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E8=80=834?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 33 + pom.xml | 333 + src/main/java/com/bw/Application.java | 31 + .../bw/service/ScheduledPrintNameService.java | 5 + .../ScheduledPrintNameServiceImpl.java | 12 + src/main/resources/application.properties | 67 + src/main/webapp/css/css.css | 187 + src/main/webapp/css/img/234.jpg | Bin 0 -> 851113 bytes src/main/webapp/css/img/455.jpg | Bin 0 -> 1311496 bytes src/main/webapp/css/img/48.jpg | Bin 0 -> 1213762 bytes src/main/webapp/css/img/4823.jpg | Bin 0 -> 1000501 bytes src/main/webapp/css/index.css | 57 + src/main/webapp/css/index_like.css | 57 + src/main/webapp/css/index_work.css | 201 + src/main/webapp/css/style.css | 28 + .../webapp/js/My97DatePicker/WdatePicker.js | 57 + src/main/webapp/js/My97DatePicker/calendar.js | 5 + src/main/webapp/js/My97DatePicker/lang/en.js | 14 + .../webapp/js/My97DatePicker/lang/zh-cn.js | 14 + .../webapp/js/My97DatePicker/lang/zh-tw.js | 14 + .../js/My97DatePicker/skin/WdatePicker.css | 11 + .../js/My97DatePicker/skin/datePicker.gif | Bin 0 -> 1043 bytes .../skin/default/datepicker.css | 246 + .../js/My97DatePicker/skin/default/img.gif | Bin 0 -> 1578 bytes .../js/My97DatePicker/skin/whyGreen/bg.jpg | Bin 0 -> 307 bytes .../skin/whyGreen/datepicker.css | 256 + .../js/My97DatePicker/skin/whyGreen/img.gif | Bin 0 -> 1679 bytes .../js/My97DatePicker/开发包/lang/en.js | 14 + .../js/My97DatePicker/开发包/lang/zh-cn.js | 14 + .../js/My97DatePicker/开发包/lang/zh-tw.js | 14 + .../js/My97DatePicker/开发包/readme.txt | 3 + .../开发包/skin/WdatePicker.css | 11 + .../My97DatePicker/开发包/skin/datePicker.gif | Bin 0 -> 1043 bytes .../开发包/skin/default/datepicker.css | 267 + .../开发包/skin/default/img.gif | Bin 0 -> 1578 bytes .../开发包/skin/whyGreen/bg.jpg | Bin 0 -> 307 bytes .../开发包/skin/whyGreen/datepicker.css | 277 + .../开发包/skin/whyGreen/img.gif | Bin 0 -> 1679 bytes src/main/webapp/js/additional-methods.js | 4 + src/main/webapp/js/echarts.js | 94011 ++++++++++++++++ src/main/webapp/js/index.css | 57 + src/main/webapp/js/index2.css | 186 + src/main/webapp/js/jquery-1.8.2.min.js | 9440 ++ src/main/webapp/js/jquery-1.8.3.js | 9472 ++ src/main/webapp/js/jquery.validate.js | 1114 + src/test/java/com/bw/ApplicationTests.java | 13 + 46 files changed, 116525 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/bw/Application.java create mode 100644 src/main/java/com/bw/service/ScheduledPrintNameService.java create mode 100644 src/main/java/com/bw/service/ScheduledPrintNameServiceImpl.java create mode 100644 src/main/resources/application.properties create mode 100644 src/main/webapp/css/css.css create mode 100644 src/main/webapp/css/img/234.jpg create mode 100644 src/main/webapp/css/img/455.jpg create mode 100644 src/main/webapp/css/img/48.jpg create mode 100644 src/main/webapp/css/img/4823.jpg create mode 100644 src/main/webapp/css/index.css create mode 100644 src/main/webapp/css/index_like.css create mode 100644 src/main/webapp/css/index_work.css create mode 100644 src/main/webapp/css/style.css create mode 100644 src/main/webapp/js/My97DatePicker/WdatePicker.js create mode 100644 src/main/webapp/js/My97DatePicker/calendar.js create mode 100644 src/main/webapp/js/My97DatePicker/lang/en.js create mode 100644 src/main/webapp/js/My97DatePicker/lang/zh-cn.js create mode 100644 src/main/webapp/js/My97DatePicker/lang/zh-tw.js create mode 100644 src/main/webapp/js/My97DatePicker/skin/WdatePicker.css create mode 100644 src/main/webapp/js/My97DatePicker/skin/datePicker.gif create mode 100644 src/main/webapp/js/My97DatePicker/skin/default/datepicker.css create mode 100644 src/main/webapp/js/My97DatePicker/skin/default/img.gif create mode 100644 src/main/webapp/js/My97DatePicker/skin/whyGreen/bg.jpg create mode 100644 src/main/webapp/js/My97DatePicker/skin/whyGreen/datepicker.css create mode 100644 src/main/webapp/js/My97DatePicker/skin/whyGreen/img.gif create mode 100644 src/main/webapp/js/My97DatePicker/开发包/lang/en.js create mode 100644 src/main/webapp/js/My97DatePicker/开发包/lang/zh-cn.js create mode 100644 src/main/webapp/js/My97DatePicker/开发包/lang/zh-tw.js create mode 100644 src/main/webapp/js/My97DatePicker/开发包/readme.txt create mode 100644 src/main/webapp/js/My97DatePicker/开发包/skin/WdatePicker.css create mode 100644 src/main/webapp/js/My97DatePicker/开发包/skin/datePicker.gif create mode 100644 src/main/webapp/js/My97DatePicker/开发包/skin/default/datepicker.css create mode 100644 src/main/webapp/js/My97DatePicker/开发包/skin/default/img.gif create mode 100644 src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/bg.jpg create mode 100644 src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/datepicker.css create mode 100644 src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/img.gif create mode 100644 src/main/webapp/js/additional-methods.js create mode 100644 src/main/webapp/js/echarts.js create mode 100644 src/main/webapp/js/index.css create mode 100644 src/main/webapp/js/index2.css create mode 100644 src/main/webapp/js/jquery-1.8.2.min.js create mode 100644 src/main/webapp/js/jquery-1.8.3.js create mode 100644 src/main/webapp/js/jquery.validate.js create mode 100644 src/test/java/com/bw/ApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a50a17f --- /dev/null +++ b/pom.xml @@ -0,0 +1,333 @@ + + + 4.0.0 + com.bw + Rkday18 + 0.0.1-SNAPSHOT + Rkday18 + Demo project for Spring Boot + + 1.8 + UTF-8 + UTF-8 + 2.3.12.RELEASE + + + + + + + com.belerweb + pinyin4j + 2.5.1 + + + + + cn.hutool + hutool-captcha + 5.8.5 + + + + + com.xuxueli + xxl-job-core + 2.3.1 + + + + + + org.projectlombok + lombok + true + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + 1.3.0 + + + + + com.alibaba + fastjson + 1.2.79 + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + + + mysql + mysql-connector-java + 5.1.32 + runtime + + + + + javax.servlet + javax.servlet-api + provided + + + + + javax.servlet + jstl + + + + + org.apache.tomcat.embed + tomcat-embed-jasper + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + org.springframework.boot + spring-boot-starter-mail + + + + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + + commons-lang + commons-lang + 2.6 + + + + + junit + junit + 4.12 + + + + + dom4j + dom4j + 1.6.1 + + + jaxen + jaxen + + + + + org.springframework.boot + spring-boot-starter-test + + + + + org.junit.vintage + junit-vintage-engine + + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.4 + + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + + + cn.hutool + hutool-all + 5.7.22 + + + + + org.mybatis.caches + mybatis-ehcache + 1.2.1 + + + org.ehcache + ehcache + 3.8.1 + + + + + com.alibaba + fastjson + 1.2.15 + + + org.apache.httpcomponents + httpclient + 4.2.1 + + + org.apache.httpcomponents + httpcore + 4.2.1 + + + commons-lang + commons-lang + 2.6 + + + org.eclipse.jetty + jetty-util + 9.3.7.v20160115 + + + + + org.springframework.boot + spring-boot-starter-activemq + + + + + org.springframework.boot + spring-boot-starter-cache + + + net.sf.ehcache + ehcache + 2.10.6 + + + + + org.apache.poi + poi-ooxml + 3.17 + + + org.apache.poi + poi-ooxml-schemas + 3.17 + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + + com.alibaba + easyexcel + 2.2.7 + + + + + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.3.12.RELEASE + + + + repackage + + + + + + + + + + src/main/java + + **/*.xml + + + + src/main/resources + + **/*.* + + + + src/main/webapp + + **/*.* + + + + + + + diff --git a/src/main/java/com/bw/Application.java b/src/main/java/com/bw/Application.java new file mode 100644 index 0000000..947f10f --- /dev/null +++ b/src/main/java/com/bw/Application.java @@ -0,0 +1,31 @@ +package com.bw; + +import com.bw.service.ScheduledPrintNameService; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.jms.annotation.EnableJms; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; + +@EnableJms +@SpringBootApplication +@EnableScheduling +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + + @Autowired + private ScheduledPrintNameService service; + @Scheduled(cron = "0/5 * * * * ?") + public void testName(){ + service.ScheduledPrintName(); + } + + + +} diff --git a/src/main/java/com/bw/service/ScheduledPrintNameService.java b/src/main/java/com/bw/service/ScheduledPrintNameService.java new file mode 100644 index 0000000..18e8200 --- /dev/null +++ b/src/main/java/com/bw/service/ScheduledPrintNameService.java @@ -0,0 +1,5 @@ +package com.bw.service; + +public interface ScheduledPrintNameService { + void ScheduledPrintName(); +} diff --git a/src/main/java/com/bw/service/ScheduledPrintNameServiceImpl.java b/src/main/java/com/bw/service/ScheduledPrintNameServiceImpl.java new file mode 100644 index 0000000..ec09540 --- /dev/null +++ b/src/main/java/com/bw/service/ScheduledPrintNameServiceImpl.java @@ -0,0 +1,12 @@ +package com.bw.service; + +import org.springframework.stereotype.Service; + +@Service +public class ScheduledPrintNameServiceImpl implements ScheduledPrintNameService{ + @Override + public void ScheduledPrintName() { + Object name="谢欣悦"; + System.out.println(name); + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..f710332 --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1,67 @@ +# ???? WEB ????? +server.port=8080 + +# ??????????MyBatis?? +# ??Mybatis?Mapper?? +mybatis.mapper-locations=classpath:mapper/*.xml +# ??Mybatis????? +#mybatis.type-aliases-package=com.bw.bean +# ???? +logging.level.com.bw=debug +# mybatis??????? +mybatis.configuration.map-underscore-to-camel-case=true +# ?????? +spring.datasource.driver-class-name=com.mysql.jdbc.Driver +# ????? +#spring.datasource.name=defaultDataSource +# ??????? +spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zg2_rkday18?characterEncoding=utf-8&useUnicode=true +# ??????&??? +spring.datasource.username=root +spring.datasource.password=root +# ????? +spring.mvc.view.prefix=/WEB-INF/view/ +spring.mvc.view.suffix=.jsp + +# ????????????/?? +spring.mail.host=smtp.qq.com +# ??????? +spring.mail.port=587 +# ??? +spring.mail.username=2289014031@qq.com +# ??? +spring.mail.password=osckrzzuhfbhecgc + +# ?? +spring.mail.defaultencoding=UTF8 +# ???? +spring.mail.properties.mail.smtp.socketFactoryClass=javax.net.ssl.SSLSocketFactory +# ???????????? ???????? +spring.mail.properties.mail.debug=true + + +# pageHelper?? +# ????? +pagehelper.reasonable=true +# ????????????????? ????????? mysql--limit oracle--rownum +pagehelper.auto-dialect=true + + +# activeMq????? +spring.activemq.user=admin +spring.activemq.password=admin +# ???????mq ?????????? +spring.activemq.in-memory=false +# ???? ?61616 ?????8161 +spring.activemq.broker-url=tcp://127.0.0.1:61616 +# ????????????? (??????????????) +spring.activemq.packages.trust-all=true +#??mq????? +spring.jms.template.delivery-mode=persistent + +# ???? +spring.cache.ehcache.config=classpath:ehcache.xml +spring.cache.type=ehcache + +#??MQ?????? ???false:???? ??true:??????? +spring.jms.pub-sub-domain=false diff --git a/src/main/webapp/css/css.css b/src/main/webapp/css/css.css new file mode 100644 index 0000000..e9953d2 --- /dev/null +++ b/src/main/webapp/css/css.css @@ -0,0 +1,187 @@ +@charset "UTF-8"; + +form { + margin: 0px; +} + +img { + border: medium none; + margin: 0; + padding: 0; +} /* img elements 图片元素 */ +/** 设置默认字体 **/ +body,button,input,select,textarea { + font-size: 12px; + font: 12px/1.5 ’宋体’, Arial, tahoma, Srial, helvetica, sans-serif; +} + +h1,h2,h3,h4,h5,h6 { + font-size: 100%; +} + +em { + font-style: normal; +} +/** 重置列表元素 **/ +ul,ol { + list-style: none; +} +/** 重置超链接元素 **/ +a { + text-decoration: none; + color: #4f4f4f; +} + +a:hover { + text-decoration: underline; + color: #F40; +} +/** 重置图片元素 **/ +img { + border: 0px; + margin-bottom: -7px; +} + +body { + width: 80%; + margin: 40px auto; + font-family: 'trebuchet MS', 'Lucida sans', Arial; + font-size: 14px; + color: #444; + background: url(../css/img/48.jpg); + background-repeat: no-repeat; + background-size: 100% auto; + /* background: #F5F5F5; */ +} + +table { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + /* -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; */ + -webkit-box-shadow: 0px 2px 1px 5px rgba(242, 242, 242, 0.1); + box-shadow: 5px 20px 30px 30px rgba(242, 242, 242, 0.1); + width: 100%; +} + +table thead th { + background:url(../css/img/zebratable.png); + background-repeat:no-repeat; + background-position: 0px center; +} + +table tr { + background: #D5EAF0; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; +} + +table tr:nth-child(even) { + background: #D7E1C5; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; +} + + + +table td,table th { + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + padding: 10px; + text-align: center; +} + +table th { + background-color: #66a9bd; + background-image: -moz-linear-gradient(top, #dce9f9, #66a9bd); + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + border-top: none; + text-shadow: 0 1px 0 rgba(255, 255, 255, .5); +} + +table td:first-child,table th:first-child { + border-left: none; +} + +table th:first-child { + -webkit-border-radius: 6px 0 0 0; + border-radius: 6px 0 0 0; +} + +table th:last-child { + -webkit-border-radius: 0 6px 0 0; + border-radius: 0 6px 0 0; +} + +table th:only-child { + -webkit-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +table tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 6px; + border-radius: 0 0 0 6px; +} + +table tr:last-child td:last-child { + -webkit-border-radius: 0 0 6px 0; + border-radius: 0 0 6px 0; +} + +input[type="button"],input[type="submit"],input[type="reset"] { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; + background: #B0CC7F; + margin: 0 2px 0; +} + +input[type="text"],input[type="password"] { + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} +select { + width:200px; + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} +option { + width:180px; + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} + +input[name="page.now"] { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0px 0px 0px #CEB754; + background: #D5EAF0; + margin: 0px 10px 0px 0px; + padding-bottom: 0px; + padding-top: 5px; + width: 24px; + line-height:10px; + height: 12xp; +} \ No newline at end of file diff --git a/src/main/webapp/css/img/234.jpg b/src/main/webapp/css/img/234.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcc369e6c93d9c3a5a16366ba51c5f4dbd70e66f GIT binary patch literal 851113 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

(6y}aOQnbqkau|4E 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 z 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

R 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%0DTgF-{0x5wY}nD;VX zc|%vYR(Rn0#j{(4YOJw`-P?VrX~#NGXCg*;-#Rz%r=0eRcc(qpE9U#h$df}KmUO$B z!^0D4*0MN}g;ucwMFw&joAD$(&))SI_lQ12?qmM|n)lWcep-39`Ol{tXtzw9j_RzG z756pEJ39XWGmL*sH0$=kGyNHT&yK$@zcg(0Ps-~vr}H*8+A_m)b5$)5IXD#y-Ko%h zs+BYYHvOU5@}9O_TN6Ej>$TgBqSlCMV^>@P%iVwHAN-kZ<+E>RX`_Q5q!1;&9(%ol?#}3`cBuEIb6Xhz z=1L_8Y#IjwLtmn~DGOl{-pOsR1RuOAKI$CDlr6AG1u3s0xFzc0t50EuILKmh0+z^G zh!sMT3~q^cNtoJDB8&3(Kw!Gig) zIcc5gm!j{Cmg~+Z6;=adn6iNl!dJUj$TwIDiI4-W7dOn)O2Y&ffi*VT=`WfW`Vk=TNq3M;=V9Q7eG?%beX%ruN?U5$i z1o)nFuS+Wyh&T#*QL`%qcT9`V3|yujv#$<71K%^H$r$;(Z}Mu_>o&UXsT_?T*8IV# zKT;|qlhYr9=6`F<+y{0z{jLXQLd4H}&)D?qnbP4JtUXjAO1jYf{u!=-A=pf@*`d>J z?l1IP$c!s{WP#@d6UY*!LH7h4nGzKtzU*RSxaG2klk}*x$fePx)|2bQzA*i9Fm~gOMCOJj*Y=*EIWh zxz99`Fg@CeNcYO|;GB-Zl&2VuY!2hjI#txI5ld*|UH&&MQa#4mwa3}h1FL{_vA&5` zr{_IB(hpH2jU!|-Hv%}&cpjN3=q6TL$VKG-XZ+C8hLtXxX&jSZ-7-aFA%yXk;}->el(vZGdxL|j?W|bhK-}~lJN-x#Z+ir2eF;Sx8C0K9 zLiOM7!>Q8COCcV9ec9#0GN>P4>V(;XHct6xVHaJ=vEfYPxck}>v) zr3pE`(BUuxh}h>&lUa~tCxlVuZ#K2iHN8G)BNK@vRFK>ub3sBWzhxcNX4NKwr$z)KBfU7ni zzRyF{F0HIlFKwAxH!aAh6{sI;>C9|6=ORZhH#atTfFwGlma|8E8sa%Qdc-%R4JpKI z81~yTD8r}4#^V#Z>X6;R4V~DTihxu#6cE9I+kD80GK-HOB2aQ&GRyTcj*(aU%8DN5 zxiO1t4Q724H@dYg3`D%G8w19rg)7{2IYGuxHu%g(V28K8eMbIOnH_ASse~1&>%POo z21tlQW{^yzU;ohgLNy4U-r_q{^<4aFQT9)x$1o?1hb9>ZM8?O+cRqfbM;c|UV&>*Z zqvq}Dh9#-R*d5gU`G=cd`B+L)CV=VAoZT*n>ZK4W$!ET4@-B(yoBc;e)ifKO8_YUL zG2Gng%q}e2MIQq+OjcC{4#3x@U}-x>c;gwzAe<&{B4dVi)B-FQcdP8^WF|7kV>pjd zf#Qdeu731qm3*Bam8|dXzc2M<)*d*L@$D0wH@pC)!n8CccrdDi@lz+O?G7^-<&Ov^ zuVVq+c)a;EY4mc_M4U3>AYFeE{{T0j9&e>Qr}@QiYvsEpYp0s-_TEV(o#ZM~hlGJ4dJbYZ}4~2Dje0`;mWUg0zIr%VMbIcCc(MhjqDGlYkaw^Dq zt2-WzN9q@{j+vFD(gPF0Ev$9Fxx?)ZWQ>Q200@brRrjP`WR?l-EdKyT#!jInQRAT! z)N~)yHc^iWHg6A-Rizd;K``p-R z^5N$aJ?zuWIz6YCWVE^0?u7SO4V(Nn$oqPQZ1|am6g4_+xJOJZ6qE4pZ=9 z*Dy)0%8y~qE&%{YHsAp9@yO#R7SeAupLi)7gq9e@C~j`OMFjrHL^NVY?Gxjd*7RED zHnF-Z&U1d5V{3gY7m6|Iu>)i~fkC#}W-=kLaWa!GeHdk)nRyfj;uKU7x5CoxQA*TP z$1-l5BRhJ2fp>jrVC!+fCDQP9MI6GD_PxG-8H17nX1kj)>dZDue7-LY%<)+}%`9!i zK(9_*PX7Q9+JmvlP9u|cERq}B)2{U^%SU}J5DT^AEKtoL6MKz`S05vhg$E?$GYO8P ze`|4b1*`;#XN(z%Bzk16eiC~EDnZLm{E-Q7yBU2xLi428OtVD_T|@z;PxFd*6zSY# zj^G;R;!8J&A}*_wwA;%)VS?REOqWQgM4JHZ;(Ju|IShc~9-fX?8N)HNXJE}VbNWfG z^kk66kXY9a&3OcuMwb1+K1hG}j^$yNCi5wnw$$ZNRI*pF1AxFOkTUacD)n+9& zA%@3@_`eLGW8jI1I~~iD<5?0Tana_McG`sLeWehxCGnl;=A2&G4^i2ET|QZ#ltvXk zT!+5hZYj!QSnBMP?x%}t5(9oCHw2?@vJ*wB^)&E48JjGAPN&7{>8@|2^sZV%UsK{! zumh!OPMMA)5n;F0Ez|8gPzyDmu77gUl@%Wj!@Y8h_-+Qfxw#lJaLy#Yit=BX^!cLI zrqt7w?X3LLOJc+rczR(8I}k~!&M&p}CL%O`t%tw8?RzI%9EMy%_;=g8xtIR{&Nq2G zPrW*qo)OKZ-jrOM+2kz*Vp3HMaSizj{ifJ<%}=!YtdQWtu@e3eH#N@W?Y)-Aj%InT zj7@oYdVfk2^E2~PUlE_ny?0f4t?h4FXS|I7=AZzkqjN%QnLUx&Sf%^n8o2Eqdxsyk zyI(0j4c$v}Jp9qWml5ff`nIF5>T=6ztw3Y_9eryZZQOtXj#N-U<~|~8vC2DEc_j$O zBV&9~KUcgs{hOo^%PF0RBZfoneY2x^(CW=^8%l}mvnM)!?~nkk81?1bIVeEHka|7T za`6E9KmKy-%-Y?QP{XCkI#?B!)>eUn$1THv5m*iOsTA*>Z?gJ)bDd0Yw72I$<-MxU zk`VNAl@@A9eDtb?AZmlAQEImgY+=}%0k4}R%9j%k|S>=@VKW8B9 z`!f&au*Mz3?|RaCj_O1VuAz@}zH5#ubNHVCdER>uDu2#L`Ey!G{VR=Ct>wA73`l8S zH;8T6PylJRcRDdV{g;v_aUMg-hb3e_8 zcg4`-&-|mSKg`9;xX-=%A7|zZ0C#}M{bH?<#;RJnpQLF?RG#ZkFwV^d!b zwTOx6r_3LcR@zpX8xO5tz!|AU^^&H(0<}3YDKQ{h1N_YV+VT(N)Ji<>sVp~d6HOJI ze;ve#y}}K^Ct+GwHeH?A`i{|+VUEM8ih0b}r>Yz7H=yZZYJ9gdjnqM4qq8 z>2KtLXLq*ws9ITCE9ttyytBBHX}thh zRx+hkSgG5Sj}F6p(7+s%HvkCg^f@OSP}*dIc{db#p(QO+;9H2<!31qninHb%E-imhkEDY7eY=hfQ5mPPUJUw|NQ%k%z-lH`_IRurkXZ z1}SjJpR2e%7qigDGV$hz9AY_izc<)_mwGql_vR$m5Z`DTW{ocZ5;7!}q%L@>#=L zb*rmYY2&rCWjvS7hih;+AO0eHl1}e5V)b&Z&K(ep%^I>65%LTSAKj5T|MiDk$!J0N*_7 zd|6~~c^%8X#S@cp>4@I@7*(9hEG)T{#jQHaLj#+;e>6U)nfj zsUuHQxey8St$^~U;Ai~g9+!XR{{YV4F=)O`Sz(6jQ*r1-#EDW`Js5OgYEJtDzIPpy zn;uOFmRi^oXQdv02Ay6knDvnmvBg#gBeyDjgXEvgpFDrgD(TifLDbgPEe}|PUfSwR zezLlI$Y}A;!>9~9(~Wn|Pb4w+q>fxt^$m=F)gn1cBfaX*lwg63qahKnk>vx_A1>mW zdDG8+dh-?h9(C3=i6LlUU#i_{u_DG*Ni|}%=7+dy(C!9TfMbc^G2gEjKPOk04B{*u zyt#Ychxr-*068D$yIp$E%KApPX2$2F7mF3m&CHg(`XU>fmi{6le>dS1o+ z{{Rk2%7Nq~&BcV{*^nZ*q&xXMPx9OTbHB_|q?*6xj*|mu+`Tlpu>~bE9l!}AQMT~R z{?PU=0;7gruH(z*IXK!cYNSo&kEgsnmHz-gbdSz^+f6G&`o^22rDa(!%0zDFQC3Aj ze#~ll7AAz}E!rKAm$TqZ_dP)M7>@q{i`VuyYU0(-qp;=)*+X6Y%<`X>wMZ;)b?r7d zU}b4n>j>_|ZbI>`Mr-u_m!BxOOGa9I$RzUs{FY=f7^Yf4OXMYg^17ty;e^=X;=C*nj9KY zZCSs2KBI9hWe&&e#;fp!r;S_RE{2mNa&eh@f0_o~_X9Sk9I^0-o-gMT{X6m$8n@-2 z^SV7=o?pGnZc^t8>(Za8f02Kl9!K+bmucmnDY3BBEP=C=NV`AjFuW^L zocCEMyM_mGUku^9SF&{)d2wYIf5bkM`a{%cb=b8Ls2Z)P^B(uTU1}DLq%r{1J#$D6 zI}sO=>%2WuQECqR49&-rWiX~Es9Z;77`Tywtw7)0&}Gq|djc8Xm-P#YOmG%q9S0#( zN@Oxk10C}ZXVdNNqd_&A5jT&HVap*?1J#k+M>WFlF=|D$@BjJ<{q1; z!}*=%eP-Mk^%bqA4B|H%Uy*00$HX`0&UFn@9JD~} zdeeNvg~&JX)6R8GJwpq%hn#KV-w-*Kiy<3Z89*emYuatU!qCVadWz;i22DnSTXC=3 z-4L*;Pj5o$r&IET#(lh+0R~g0Z?|YOt2CQnZcZT|p{ zSsW6dHZsW=rEvM0Am(3Cf_ebCZ{?UA!509|L0QfJhsVfASxRqf6` zBA#aKdNe~rk2+mjg5b^F2x(@!drD> z66#aN#s0G^H-hXlC_o;LIhh?*Q_LEf9AOeL9Wj;&bx6xDh!t zE=D_Zu4;w9e{^H_uGyW74nFH~XPYN@4!4%}@q<3G5{mR^rcQFl4p93V;~bJV;s$eX zb#HGPrRJd#ZoHC3+-9R8l#iw-4X^-3$PZxspkFKwU4epw8WCy*_$lt);na9wGn z4^XQ&`2+!!9}qW);yaZ34NAc%f(?&y24l(-JzIf*hL2JF!jH{q{{WsH`b)`e z@r`0LU*xICjV`CG3V$=FKgK=_Q(E#hv8&(DIXhMu!5>X>&&g_K${>68XqK}Ce~C(6 zZ^{!$O_SfB@#+ph zKg=j2U4&|cQN2%1sy_X*9QIaA-rI+0V`Fz8m=gn)$du)@h(^5ukF?LkHoNwIWw^G88gnJo0aa?-2n zOAj7jFl$evGGW;n39~vL;^WV?VOvJeygavB{Kc12c8)DR($V`Ehd|pwkev-U%a@y3;s~VWnX?Upi9J6tcPY8iW(4Km9w=O39)Y;-$m!1eF18U5Xl{B4xxi5!6W26(0=%%7Sx z`7cY2OUoQOr)={hBv(mR)t`w<;S;&OAzl>Yz-3^C)y zAL1oFv$C|8{yBkOPKTFY_!HAGWM>|3Ytdyx_O z15=tKc$U%#NaU?SLOe!4ngFBnq_FF~I%_!!@9GVT(|YDe$Ry#*8G&vqd(s1?yo|mf zO+NgLgnQXWQXA7>p>OY8lMC_Mv>OknwjywkRt6Kv(OhZYR|O@ik+ln8u`R553xcllgO|Ih#~xnM;3m(>s7ZN(bx5CbL^H z>Dc?3VeHKwKdXOvqrWipZC9{;d@@wo;pUDh=dG*8o&jF6BrF@xzrR&A>XvyS%u?$m|Kg}jn zIBNUDbbl%5^F~D8P*wP?+|&Lo%D6Rs?V#xgL-RvTcjX`0wtA2Fw?SYk&>+jGiqh z!aXlNFp#Ra@h2=ZkmOoKVSA^|rfCZYDXpUtk_W+B)7vpj^4`VH zh{IckIdiAj*Zmy|uYoz08O)8`V;p0Wy}plcEna{EDTl-%i36fxZ{_rQ2*&-!Mp;?L z4?)v(IWA(ig4Ie$%ts^8W;Y)ZrthblIe#lfXA?OUxM5Sobs%KUpNpGN)^MG+dB>Qw z?JLN3(d+u^h$D`t)33(WJt^M^(npCSS1CrVEc}}CUZLj?HqWhoVOTz#FGAkv*4G4} zb!wD#1FNd;0r}H2gd@lo4>q90cfPCqzSP(JQ|C=i`s!BG^l@XQG?O}&_2P`nBF3r# zs0;xBnx5D|0mRA-fb)93n{MXjO;+{9QqHQT7W+}gMNxm&HLH94vaU3oM2&*aQrgju zg=x*>w_!B)-E!$qRvU_Y0>W%BN;r>3)iaAi>(R};EOC6Qcg3k9!1O@%o0IfETRyXfq4 zX||yD{SQ}1)7M&u)W3LOl4zlcgG)6{MM3U-PeGeZdXXV+lQxo3GzT#2~^$jxT zP=ZMK9a8xmD{=_yC&avl$BEjxY;{yEt1gV)BwFX^3TgL-&ce{$B1jUd)F!=1%qjMn z2WLAUV+ludMU|(YtfxT6H(4qblc@xZi0zB!6!r{8iwELo%Rh5C}WH!E?xdfN9K$^c11em*S0C7 z$!3<**viDTsLxp!oj~NO0j)iTWJk0NP^eyho+e6TN zljZ#a;?8SnW4C3B;lUu5a^Jio_DyqoIj5t{{Rh|%?74=S&VYzeIyT%`8&OKk{XB^$Cw;j{kP_;{{T3O zZDP?{?(*6xUs<`9<%kttN$?2V9_qc1j%xj<1m)o;Xo~pvyDw&?cyIZ{lFI)8=PAaE zpz7X6^9G}DXqt3)(^_3CTcf9;EL}>|aHLl%_H<7yGQ<;nH_p1YcJYomVwCv_cV9*+ zt$ClwdbG0XclspIM|lCZj^;}N8DPSS=&A#8Vbiu{;?U}11felwrxS^rv~;p2Gl}2& zDHYF|^nWe+dJQ+qwrH2ydI=sUP-BUrZXBM5pfUK=9rF)9lOWA`j?(4lZbW-S3~`9# z8^@<}>OUuH`ahnuyG?6KxPoU?WVw+e^y?x4&*5QEJMWs=@#$nlf!~(>9mXl+)kGK( zw>_S7=N&^;)pZ~=)fUz$f5FgxUq zXdN&Ec?l8j1)><|Ouf~=M&9aSzNpSvM)F2ED!EmcF<1WJvyCR`ewFSTt)a z6YT24qLt{UIvo}Ri(CXRgzhi8w;u!5(Ce}cx*1A!#5OhF3+&%0d9>=DSkf*+PHpXN zboxgeC6-v#7t}1vvk|_->CRVGgM%c2?>~FeX{X1IBzF(F4f+27=N%hW{Iv5{pQGN} zHPyzPVMuGnLCMyu#P3>t*=J+u=N(QtNE#Ar?Od^zo?so!NPM&TQRXi!-{`(y@?V&4 z^lLjUHtl4-^{wRf9ykj6Kotafh08ThRj%2!?M)tRS*JLO6ECNJSI^+#_I9fbu*NbV zaPuDSPuQ&^Q}P71Us%xfyBRiKU{IlE6%;+bU9***E)hoW&%MhTb7Yn9*zX1By6kpv zNiEu4MJ>C7#wfncPeYiH+`DM<-GoPUjRlI}~pf@w=gT51#G5EGlceS@Eeh=2#4-+QT_ZDA7O z1e5(ASKQy9$DC%YI6Zd*p&5T~&knLN zmKd0jJF3Ht*xGFRVq=u?dyUt{_3pR%)qUj~W}8UUn(@$}46_Of^{5-toimx!_DIhy z^jb}||dqc8qX(_xK> z1Mb|l{%#{I<8 zvBBED7TK=5z_+3KPxFV$esh%uiEn)_n8s$0QD_^{t+?d=paQY2Iu_ZwW|vvnnXqj# z0oWMc{-d+H((AG3`a!MtJht79eoUWN$~Kq8mzw^2tw7OfwZ!b}?a++BwTBLB{%8^T z0c<-slZ%M+B%hhLuUzSN`k(qij8#;Ic5W(m{bR0c;UgWoIkSbOH-25V)opCGi&vm7 z&K)+YQ;Sp{wCjiSd?bdr;uBzgWVONJ zrUx>OlK$4-7}|Lq15g0%_YA5qkvj(YNJMV)pFiv2G;(y{w`^qKvGqHipmzf{{hN#T zo}*5qwX%_m(Yh1L5*r&yEj-0ogP5IA0;DeFp&)c_*_E!Dp7{5t8?zuGV>enudRlg+ zrnZM;XzzJ#!BRqogc*wjPl(zqY#6+2hl6 z^3(b;rz+0MRVu@vKuP)LW=`Dj@tA?R+kWR=9>6&=2_51$+q}Gf*Yhhx{G-&aZS^&| zyVh6wmr-(`}AwE#zv%%ZEVq9777#tAe2>WzWK5<;fC9tzUNpmc$4zq?`8VGmy$AB zCX$YRBHORZm?50Ym|>es!__1jd5Kt=0EsARLsQ|FnJ|toG>Yy!ndL|=7Dg@ss-Ykf zdz`W~2JI7(CW9x`ERLUVAJ=%vBkWIs_RKMtid#AJ#laD1TWh;MLFMKnL&OB!)BO75 zF(xsP41($GmNmJB-qoOPRRiI4ZI~0=F(JlHbGIT@^$UOh(fK`Tqgh!-W|ku?k5MdO z(5O+=c;+PXahh`RV-Sjz9#>fIR^of;-E~&}H^h#>2p8Jar== zAZju4AEn%XqN5D9A|@+@nSD|o{^lFzug(i=i~A2dc_uAGMAU6b}v{yG5h@oIdZ&4qh=1#<)!!n_&@oq8L4X=}flMe@|(fe7xt@(X@p?NM3 zI7@pNY2^@2Zh)7B$xwuzV%~uR5tD0g#$#qCZwMemI(1TMsz@A zHo6_8@THvWRs~{KN>)WDzazd#W2WfLaz8dFsY5oMarJhYO5410$0MD>){S1|Q?_Jd z1FMCWWEaujmYQoKK-I^}f?L(n4jc$4O0PlMr zvOkm}XL|+SP5ia96W(bLa<=!j>nag6V2J`b0Ppr#W;U<2rRgACW!=%s(RNf~WgbR7 z?;f#+=Hlw}PD%c*(aP|oh(kFcw+-*LMs6|Ype#DsK$1W_o`O8hKAWgoJc?fDOG$2u zkU~iAzM7hNb*S;koiNA<=vzNHaS`4V-zv)_@JX#kw(;G~do6gV43Rp5^e3fG!^bdn zcLF2QgO#P97&03hKQ6DCeA5k!d6x3}7Z%n}D@kt)DQ+wKNDU}=9eZZuODS*wcP^V& zW8xAyAguJOi|EFyB(L>(d6#9O04So5Y=%N&K<_Jq)n%A3<@`d_Yj(GdCEcu1NG*7p zg6DHX)Kj?39GbIS73AmQ(?(vantB%tG z9X`?9i=TTm(myb+;L$Z-E9r5;Zw9F}Z8It!V}bZoo}qkcoc6D?qH{+i?C{^k-f6pP zc(F?!Fb5w$Dq>biVXA6&nr5py`Yj~Oc3iQdB9<*dzqNC0363);N1);NlgYrsd`XTo z{6~xB%|r5Q%a>khmsX$4{$rm-)2*(#`U0g4RjM%r(2{5Xp*Z_Rtd5jGOAyFN=hPQ3 zu(Z?EnV4lTj886qd+mKI%#!Ig(!;4u9;0g-$n9|x8Y?2y$Ou{k<3ZP^aK{+SAwr4h zdA-CloKf7^?|A-^s*lZYH|Y8t^Ln;ATYi+j-;$S8Se3g}npfL8IcdL>u*)bOsd{7j zT@-ac${C{z+8(KU`abQ4U$dAI>aBTGk8I?nhEG)-k>nAvUM$-q0KMszN(L>_d`e%svI#(Y(2rBWogEb2pxH!c~88*=lxRtYrC1H zia9|sq#)Kf>$o8GCZ0KhdobSooPn;fvo6y-&vy*XeQ`6%$N|K)R34SvB`(d6CQ;VO znCM<{xxOr{f)^b3Cy=7|IYj$9IL6zy!&Gu?QvEy38m0Z@uYG?6)=GbNvBFXPiDJZ4 zES@OFB8Kd7l213E{%>kOr*!yyx*RLqUfG19;#-8O?HOMz zdRz*odro3x-9v3sFbG+3{{S$0?jOpZ=9SL1tog58*Zjlkwxu?ucGo<~^&^wjYK9-P zPJ`P$^FfXg!x0*;5$@#q9=|;0nnpx}XRjrHCixT1-fNjH^a9YVgaIViYi}5@O0%%a zb-JuNVRIMcBg9+uSalkMP>~+_SLu6b{EN2o)KY3co8Ek}vsl6O>~x!!)bD0*5;;$2BR?g=Ah-emX=Y)8^eI2iUHFyVeD=k**slLjL-8&rx@~~x&1CSe{Ax?9v++s z0k;t*b3XER{ZE@UKQUixSF-C`_0+ew^EWxCxN{@9J|(|bOzd#rh8Xa`06GD%4;!02 z^T^I*l6saSdwwIiGk^#_IbK6WvmP@cx=(XI*CZ02z3G^;Hf_m-cm*<6^Fo_tv7X)& z8UyLkcLy-%rnzwf1^kT%)D1l_YBt}lW@CUdw-+W;!%18Hv-89JND1zb zthSlzAYMx-6`>%Ccx5^8_<_vQYDNNVU&fi&map4f)orxxEv^>&<<=O8mxUR&sc=UT z;(RkttiW+V%5_4?+WC1sCX2KqsL2?^h!eLxzG3ygiT?mN$N7ck8%gi9beoV9T!` zcIS8Bx>uGgJiT_>&Y-uRV)HZz#cwCKe@5Ifts+VlN_S&d@oeE`G6x1R!ye)KPvAWX zn4a^H1G>{m4!?H{nx~kee?EI9(lh#Un8?c0 zea&h!qS5OmkFj{go*7ZTpuHz;6N6Sn4Id0jC%UH&{S`^%|~VSgtSCwB0C?B?Wfu?s?+{cAS94|Uysu9KQDjJzVCE> zH5X*3JC!GFif6gTSSb2u(Pc3;PQPeaoZYGZGJ>-V*A-0d=U{#AL3)q(1 zq02Nr(PYyd#}FpFtKu59U50gWxeyOhKUANMznTqU9=~&Ca}{& zxWXBf3iKkC9kbIrK2nq}QQ#+_^QzWuGHnt9D~Eg2tQWia66rrlLiSw=aP?h`y)KR`8A~ZhgP=I?DeO& zv73>S`r}WMIAROAW^Pp=4-B48)|My}IEx)PxA`)MV?!*549$1&n)$u^M*jeuW&E%6 z6zgMS`L|^)(*wvyr@U!UX}h~nd*+u_?H;2Dv!|EM*=hR+Pn7MN{!fwr05g1<2a){K zd*u5KLLE}yO+J#|LA+9fza*g|oA~EZ*;=Ej!ZMLp(7f+y;f|jthZA6RO1zPxN#+ek zD;q_YSuQRWRyfm>F{lGA)?^s5852MQzrh+jCpJ+Ci#9fYL4In`OrB7aPKBbkTU&Hh z60*dLMB+e^wq8I`S739&booTG@6^86mOL=qpnP$s{#V<7&Ox19%-7Lf>3US!MZKMf z)lf9?%8X2xD5_|{k;Po~9X8IsI++-k1i+(SAF#~DsE2-P(pf7%zkr@XzU_WNCi(XQv1!qF)vPAcFi+>^-Dr;c*kjF1wjkL`MmHW_f-%i}LR zf6iuU`YxmO7$UyB5V2F~dU3>DY)x2Iso}8BhehnBqgNg)jC{JfO?R}KeI&Sdmw$2> z$o~MDZTXom_}5XmdlRKeJdwxCk!Yk|Dp-TZkflhceX_36?73*A;SX030{q81@@~*; z85iett{weV$ynYF=Px+dLEs+W}mbr9}w{J6de5_ zJ{Y&r_Esz$QMNg)=G~H8Jrd1eiVsTiJ-e|vd`8>4T%uBy#J)rP_PsX0m>xoH5!54H zT*WycHDPGUWgh+O+cWf7#PQ@E03Umqj&p|%^C#@5wcgv=EIzHNUS~CxLC(fW=JVZV z-ZxHQ5Z!v^n9l6-2bAhI{;Z|ZM&0va32frZDIBnbYMKH(GR`Kk6lIbop*q{Srrpn4 zWJ%#0G6ME5SA$Wv({16i2oSKN&{T}Wlnl3T29)h}>kEs5&?6a;@MkMtp7~6%NH;{q z>E}(m)il?;(_hmHq}7Eh^yKmF&BdNk8Buu6?vJcl)@zvRt+;+b)O%)4hTwR)B?d{~ zc^s}4qEg9-Mz1p2Y+9rWp_wF%DXIl3{Y{*4E2ZVuWlc*=K@JMjj{)x1CbZbGoF7+mXO@MqHEmkU6fC^9CED zs}-;m6cl2$$bLk}nNz6;kWXzq->N|u3mE+bZN()A`sEVSM(msTHjJ_(VfL?0Lr|Fv zx0fMJcV}*xj8F!EB?lyjG6K97@LZK^tw{<009Xu>#(G7F%M;FDY9i=qR?Es=MkV*$ z{;YtU#BX|9Yhb+ACYAV;gI@I%p_WlpQ1Z3vSR@QrBZGD z4Jn%pJ}r8jES?$Vx5@Y*{)=H#SU?<=cH%mI@B1@hk1-tGUQ7V;w6*LEl5vRysZP<+zX6#eI30f1 z6zPfN56N27%Nmv8;ip);*T7RFJ#ILCQUl_cXmU^Ki7ATySb3h{(mMxA__$H}@{`*- zc=M1gpUAq2a*x`${!n???-joq9f-M5e_jFGnq$xIU*t_l<@csmpOqeGw|+X+^j75b zSuPZseCw6v?Q8^kVo$-l7i8uK*DCn3IDaWwhdoDKvW*8*>hdG#12xm_p&zCa`8yna zjm7m$CN@4w@=liZ);z*zil6R^_4(#DUe?rP+8F*}%Ej4Qe0$F&vVA`D^7~EZAR_7! zwO%sjr{|dG7PB`!z0OF>q{Xn`=Cb_8)lZ#ugOpk?2tw+)ZUmRMP^N{&99Y&P$2jYO2Q1XzDv02`+9tCTb z3|afbUyp;JDP^acJh^W-2(;;0M^P(KeLXVSX!A^cO>x%Zf%;yBrv7PpS5Al-ba>Wc zXwB-aDeY0VYw~tZdH(revf z;2)J~(+TX%!|9N(HnZB8N!};mmA{>ApVWrX+{0{5M0}L}{yAvSaam#bkj?Q25q+^eQG(H==?^eJ4AuyKUy+;24 z4Jr3#+YT8(Q>e|FGAl*VStI(S_e;crtU4+70~uqn>H#s!N76`4Wr`L*T)VqdH`@5% zeq^5@rVSCZe4&nAcTCeqg5I8! zp#!>dBL|LU&6vUmBEiMUbCQnvapmhO!iWDGt$|N5ds);arx} zK`$%dB9Fkqh|Os2=my0!7+Zv=$w1h|F`Vh;jy+MV4B5F6B4}S_9%nR&~$}#)f4*gUJrtw;B%< zl}of>8>89NUvcDwl!({T1fL%ae>@o-2~eBMmevNB4-%>SB)Wh|`JA>n`1v)RHxD!c zeLG8zTlBf}a$ z8gL{421jp$Q$bGM*bZ;_T`J(0zF~|TBBV3!rM7LoY2ESpUd1U!x$@Xt+WV)U7t!^Y{%p2R*R3}{*Cr#;i9J~-mb}3xsW7p&Qe~ku19tE^kD43;%WgUGZ1SJXeMD*g zX0r2b-O5C|RI6_*6G|(Oh!fx|-!b&E6On+u`7+NA5GCBF`OD@ByxHXaHsT1GXOeYv z_=58bQLt^uGz8PfGkZ218BZ7XFxDRvAEoeDnj_Wp{Wn#T{@G%Q?jRwG&;~8`)kej; zQkmD{!;2BnPlb@o}gN`tfGV9!(`IE?&S1wM1E+LXa4a5&2ep~G1l1lvYI&RREcAZy5>NF8M zz>s=}%^#fb>N*Xj=9#H-H?c#;-7WbMGPQqs;%U&IY~JW{!h3<&e|wpMdX=o|+$$98PNutu1R8i}9oqTht;G#NHO?n)=eF#Oa?#|L04xts z_@-Z&zF*cgA3k{($-ZHdC%&n0vSzrCtyz59?Hlu>GNfc@{B?ACw5(< z9~V9xa@^dB9^m>X%=#Nk2AvZ`5+)oZW>89}5;uOJ4*+vhgH^yuCv(VjcA0Q-fgQHy zYj?-r;L9H|&v&6)EYe-aa;xgyM%L{-E@&BCfyja5U4?UNs@EJ~Or5IDQK@%2{5_ux zqkwY#WFzep(EC#~Gt2p(RoOi{d>zg# z15P+Vpc1b+YStcOhHHCC?k&*D0?TYYGHLd{A}AL(8az|Q9o;U!Q4FMr^kTkMynCKk zOFZxON0Zb5o-Uw(p^4ldmf221V=9+aX}w~>XR+#cE#`||Gt?7BWu)9)@CJ|j*^yLN z!^Gr_L^S4nu3%rmw}_nMA9P9kRCTY(eRIy&XUsPDHp2NLo=Dno(kN$*kt0g{Dgh#` z^UL(TxsM0#$k>s~ZM(~ltL#jfy>={JSg~iI?tB~h@%aU-epY!3%U{%tR#MGykYCta zT{N*tH3{|APeOVy`#mY0r(%0SgI}Il@$W+8A}E2##p3&S+05Du5y>N0w16ao=Jj97 zza#nE&3;(ZWAaX@+A2e(LdkOl^Ey28HtTT_uciXm>w8ZP4JkyVZ4AwLKc#GtTly!f3!kU7Xg8r+zKh zrAA_Cy{W;Rh{iQ5q36ENR;Ss#xWT#c3bVBl-fbuHFXXS8Z~p);qSSQx)LLryGwKq; zs5uA{p*YAYOE6u4=~0>5-qyt(VGk*hK+k>>9a^@` zIUAVcLCT-ZtQUVAw0|d6n6%Cvq9sCGdxJHS&-3F>(xki5uZ{iWe;Y+5uOi{QB}F#O zcplBkI+Q4T+?=@e`0?CjXWaQ~^Ec1`0GyW*O{V$U_UB5C2v#t{U|RMZlAnRjqqDm+ zL3f6veBNiYJ6p5>thW$4fWv<-Z7)3Ic|0CuyVW&|YiNwppps4usnj>c`i@`PoH|&J z4j7ZmVQn3gGpvyrIHU)edwzlW-=k;=9+Tv|JAEgeK}%azSrJ!i%_CK+erGxSy^E7C zt06KYy#2sz^w>LR1|LQ+BkmMO^^a68vH8Dcdm=Q~vdwY{K~7FcZnPaMk;BGX{@bv8;E+DO3)<-?H+?ImY1Z64kR^k2VpOoZ6Wj3)7#u=D)53T zJvlvBKR_G%gSJ-;SYx#7?q!=%n45q!l!D=`wWUZsc|8h7uH zi>1aY$IjSF8my+`56SI1Kjep=pG{42{{UCiEMtxM&0?%%otCsLoG3l%*EJctPff+Z zBNOM**<$SNOryj}9!$f^U-OKS%M0Im*HP7kh27&wu82}ARc2FKG42U8%pGsETpMDH zeqVQ!o1^SQE%FoddhV0?LFDZ=6^i!UY7T_)H)owaxQ~bDQJM_hvz}(buXfJ&4`kwx zF@I|(z0x%62vXX@&dN9w?8Z?zf#4L148j@bGi00Zvgbz(W3T`Za#QAQQr|-IuCX1A zQ9}{auFI?{sGt~FS85D!gFLaaPUFw2GYH2Vy~pl&-{tq1KBwiY9Xcq?dVPkUX$sEB zQNsx5YEcO%C$^~Ul_MBS73xLSWi0PX|sLV4Ho3c?K{MbdRg`o+l>(ZaMs(z|g4 zI|2Y-+B@xzpH1UVh}d&+by~p~dQRo!4d)Lr%WZLW=KJdrZ>PqKZ}l0U;dLJvZb3&U z9dm6S%EO97!vx%FiytRhm$z|gqhee{?r7HUKh^&L=O>1+KB;SE52G6bjd3%Q4?t+X z9{Xl)4`t<#)hYh~r5~-==k~Z{+AtpyUTEHJy}Fm4sjFT3vbX{Z13)>SgaUJRG_io; zj3YpEmp4T%WU@<&Q#MZ_$@CwS{FnKRB_l<+))EsWZ7W^e2SN_Ol~Bz}wkzaaFQ9S*Qc#HC(l-%Hzh16VMn)}iK$i>Q>hscB(qkWcD2K&>DwY1oro<>lH? zx`sH9ITC)r_0iE}BIlAv$N)atWjWD^D!3+(<$hYcU zD4?Mo`)0~|@x$~B=-^}QsX}5rW{-Jfx`&p0u_mQxZ}nT7t6PRgi zPF6L!;~z{wK4H3AO+OIgnLidoBuh9{b7`fo5^J*8peMFZH)#xKZO=f}hqKN=Otz*fbUE7K+}hk3EZw&V)hj`< zVc32do%x|#jocxkmloTPxq@nMIFeXpl*tTiR-||E%)Ai3P6nc8H+>l=k@T%!SC#Da zxK>09xMcxG{wKau+7rcqaZLQ1yEhJPL8wLSx>uC_XO_dx7eWXUt-Nc;fE_F2?VQf5 zU&Fo;e;29J_D>n%&9}M#()p#RL#HDo_el2FOUh7MPEok0#mPYFm{G$qw>bT-#(8ne zep34$Pk*Sdm=#2l2#}J7LsB2Wf!dw>X37|N2F{-*ZxrrnAis$;N#K@O`qITBFb}e@ z9k%Q-G4Uc|cCbPOyeWb=r>4mbzn?9wQ`Lk)^_i!R!Y_s4SqbIM&+Lj+0ppr~5AtNl z?mz&`p{I5;jb%V>xjZi|^F5}aWveWaSWRgnBBQ{=kYU<{bqpz)nrxBD3%eVe{SFSM zCmiaCJpNhhtzwFOc2gLI`NElxh4#Yz?0mFg*&Vk1xL2V=^dnat`>3HrL< zSEYGB$<`Oq-afggeNR%iiW_tnggj2nb_mP8Dbx=6hppAfSBD-b-I^4BF3+=cF`Q&_ zN~8q+sSS2Ucx)7+}lVZnURQ60otATpB&q1@(hs@ z(;o69(&Tq}IaH`#G!z}$yJWM*To({ebuc+1PXwd_En(6$yA{UkK zW-ks*a=CJG&krc?(IfNUnaHxXv$wi3T8I7WDE*L9DACV_+|l?8ix;PMb)EE2(a;^*@S0p~NvpwI+nnmao23IL=Ze03*xI%ffMt zKoVs>zDYg)l{D}!u#;QDfxR;U1rQYkf;n}sd^q(U9K1Rw&963;PCg(bx|sBO^@>`9 ze{!igZXXQ@E#vGwGh;;Za16i+P2QI;m@W#Kqj_LL8YxPtC`TgIJ*YOPe8<%1@I~^y zug#Byavi!o3(Gg@rrBFq*+~tQv5!%b+ndf(wO(hnb3v9qB*`{?{GI-S@x%y`6U^5& zx=r+#8ol+C&o$TAINSp%q=+2+N^8Gt%Qy!B+n344)8!{DtljnMg!1f~Ri>qRZKXug zOFZT@66`sz+G?MlUip$@OhG*t5sYR)>c;;7FeRJI`n>F}@=a(KH;TNuBMQ2jcx*w- z@Jz@8;p*YTDo8ZFR`ud@<^KRt?YEpEPu~R<{txt6eyD^<(s+tw~~fZQC?? zHCZ8(!yfzYZk7Qk@ssXIbqU_u?ONU?isz8viYN_Rde^7}t#d2Ej$CF^=)g$EVwLpm zK22v;oAgqlc9blOu=Nywcq&K=DZNf?@#BsR086{==;N6g<=f)M{Ht?rby4My(Pm*R z{B0#->J>|#EX6x=@BA|ZUm0+CoM2Zmx7hCcJ1k`(kARWT@454Rd*>g_4J*q2Q@--^ zTY7C3v)hPm55x6`AQHsxB8*gn`%HW@gY2%)%b!yj%X>Ulf0^a|B3{R}HE_d%Q6Iu8 zhe>{?n0`ds%^jP0vKK#Gyqt-`4~L3;CjZjfXFb&UPh;_<-(C{_c;p zbYw3Xoe#oyqY9e*vy9ZrAlFB;(&Hy`^c^ozhG?T=wUMMSFkYdDi0m_0n;91D@Z8i3d2Gb1!;ka{@y zBn&|vUcIGS3DH(!L}|5GdV`wGlBZ*iHjA+_*?Q{}?(FMIc0EDJOL}a8;Z5{=KSC9` z5}=ET4yR&A?4O=fIoYPzL#qb!O}boa-d}(BV7!{~f#^gKngTpIFwD(1Lm1E80Qk7M zp~X0lGJZkm_I5K{6D*5CT9AJlX0s%OgRp=+-qWG#lE5Rqvy8@205_;K@%iS9D5*OU zkBm`HF8t}J&I?=`Z}w170g&JYjC9eDN8peA<$j?hm*(cZcv>MevPB~pR*P1QeX-E7 zA8W@w$JrBlCVKW5h47EpDRyA*aR=f&1uJqMznp@=u3s>Hq+3 zzrp1P759ADyqc&xC?m$B6O{61Fc%x*`$DAG0m(@4tC|?wUEC8>O|}*5mC8i6i9{_r zHRDv2sRF0sAJ;1}w!x4lR(d7W5!^l0W-=n?oVu~E?Bf8(B>5z=*jz?WtrMUJa_U7s z{A*^xB^8B1qqwDeZ-7T-B{a6v;kl3{#EgpL_eEEgY1Y0OT#G0LnuJ!?w*@rP<~32g zl&>mputVLr5)!v&RM=`%K9l{X55|m?A z1a7n4rqZBbuYQ3nQbxeD9we2?V6FGsDtC7g@ zqr*Z0uiZ@OwV94Mf`NjHW>U05qSA=^y#TZ92~PRJi)&XwGhJQC*Z00S-t9 zwQ0U`zS$W85fVTmSN1)hu;L!GATHxyYwN$u{{YP!Un==VC)MD(EVoxj>qgz=gpXK- z3gGdk)HKd3wEG5ntp1J~p|$$CJ`hD6 z7eOPCO=%=PQS2wLIZdT>Ol=%pPxlJTxW6|fx5nrsdZ00`Dar|wCfl8 z&8)G+@C8rZ%WWW_Wp0c=R&#osv`k3lv$gE~7H_X$cO>6e^E>|lIcaV!{{S}p)oBMI z1UJSwk(jpx3OKEN0MBmrP!GuCuJ6+Mr?oi@^^-C-cKe^BKlAKyCzpJm=3Q%0g8uc=?ZGKZA#}am~A~!YD-tv7X^NRKe{U6b> zUfH<`N{HD**J^=;Ju01Qu8Ri^EEWWEt({XeYv zr@xjzm^!oRdZ(8B#UshD>ak1fJ1mJh$0dC!9Et!qP^fBc+Yf1IaX`j!+8}{l=csZt zI*gfPDCGKxKO@Mz7xGu~S4r~*rLWumV*2WInneUL76Mt>s5un`@u$VNT;KNBZA(v% z2Mv0G=j8I8i`X&Gl4CWV6ZgKc)ITh|qiyAXt7zI~wXOV6i-_)SNADS9KNu&Kc^~EL zOyx0lzJD6$B0=anAJp~vyC(;NV+a66Q7=mTnEbo)uC=M!YI-!eI?_T-rU6-vI%n`~je*S0T`LAf{{{SnP!1n|5ew=^LxxXi^uRNi9 z=bcweSha@KB#z4NbRtHz^wzB%e`K{sAU>S)Pi}Sd$*34(FGz?cBVonn_nyl_I&3_1 zjS_YwbbU|f@5`3+kD4^S3ttzjrD-$8dmXG`wYH+fR4k+UVj{FX>9%va9H&VMN<1b~ z6@SGZ`uDviY?0K+a{zDTed)*MH|4LJE_EN${#O>hfwDHflemq@3`hgD4^Eq9{hugd zffMIt8!d%L#TFW`?vEK8$}9oVv!0X~u`XYvM);@RPq? zob&t9WAGoEAM=pEmwJ|gePafrWov2-M5;*}Bbx3@wMeP2eDv>RbptddAW7e^=zQnf z2yjX}bbT%V066RUO&6auJsRszNa3`VnKcEA?5tLg{odW#k8{0qL)&_Tr_DY-V0wSf z>h8NQ6mx0e!|{Hi>3SPOZ}3J@Q~-jVhfLx!T#M0ofNUQx{{YTX{{YTK>)-Q_T6UML zXnHI+@ZMf6w9?$lR3Rd~RabIItq(z+53`+#4%0J?q+&p^U0p|Qc7f4GG7%E9Tl9P7 z$D8E5wM(y2ph;p$3T$b~L8sAN)P7%bJBc4BYY+gp%fFbOZML7y-cos-{{W)RbhW2e zXpdhCX5X`P-@D2@hu+}o^&B}N?=N-He89I%ZP~VQ$t&aixvkBop>D$#OGaxKk;xcj z_*q9xq8Qs`UO%ecktq&nr1s5(F^X|zG&Y^7LG_a>6=D>E7*u?~?s6HikP`_4%;37Q zDEfVv4RBVd%AgwilbD9%&9qTTbUktjCwnX5LJt>yL{om}EXX^N2e(*xZ$q$UYf$V; z^JiD8f_M6J9&#m|Y%%`;GTdtVoL^AWZe4Wvh#r!BJcVo5zrIfi?_(@t?NZt9?O={J zk|dTj)!hDC0bL9st9zZNUqGnk7RPhNRMA;1m$ROwvG z00x;!DAc^Y<`S>yqsJ0`sT@#K#AaSOW9s2#EfCo$)!oH@tj+YB+E@hIQPqsXGPSYTa}fJWK<7Hb|c3Qd|5G?DZ`T-#e^=c=3NTc;kuS$KiuP@3M zoykTcuwUz#*>aAKPAqckNx#&sTm*QLNb6J|epVz#;Ip84fS}%2v6%8{_zm`0(2v!U z8mSL9CruK0{fSlI<(-xMZ5(&*g}fk7*Oo)HB@@f-Yo3NOa%xE#E8sT~i=#+PIcRz770KP_OkFD3DZiu6%(z@Nb6 z&uYqhNBzrC?083c@BVTM=FdmdTk6*OWxSGiVKlCOno_xBGUdoUQzPL`Q^kiK(S`g` zP+45u#zvi?!o-cK1c&vUiJW40$bMn4K*)M=kCA0MCC8dHbXZf%*0LZqqge*8&%R;j zh76mGlK%iq=3th5T=9?etlr1Wescc+rGJ)m$iS(q>F9U)vCI>LPC4b5`e!U;&pued z_%4^s{(Wk@*jhqIXzbx%yJL_TG^hB<__p|(q5L3x63IO0=A>WryJPNF)d>6-EE-KY zGa@~ghCHItF4WC0;y)w>$C@>HsL|gv zKz39I_2kBf5dIr$mbWawh^2RT_j-X1d#YR$;t_w2T?`S2C(sgnhg~gLGsPHs2%wwjEjqnlfm3@v-)XFy4qgh!;PS0qJKJk_g&YyYtwf_Jp!svnW32feU(x)|BeHD-LwV+SN zxMQK1>o1y}Y!68Mn*RV3>C-45qco@YjuW@zhw_t;DNEv~TM2WFeh6c%X^53NO|d7s zmjGmj37_I$&0`#(6i%z9wFLTAp&kUae^wvMWa%P-s)6SStdbuq-;Ye__RA$l#PbDT z)rpR1e;mF@Gs8dNA2jkGF8MZCg1(uhF4Z9~oHyQ9nT;vx0oqdk07~B&>B#zH^I{jC zR`RT}v^M4oLZ@--bJ+MbH_e7D`Jy+o@O9a+;U{Vge0eJJ+DhoU?w-+~vZrDPhfK^G zp&?R%aKA1=^vot-;g2(-@q4{G;X4w>zkte)Y+b}T5z}Sw1uy!Ry=hB!x3ZN9-MNvF zIWZoxZWwZdRTWEy)}V13+SymI49D@NR}+q1OF0aY=orP--l~Cw_V6W7#K#QDRQk>AhK&qlj`g7WcFci-EeB9nNvP@*{7G#cC_cfc{a8jQ_n_pF=#M&w zn{31qX^^CG@~AQdWi;^}X_Ze;hG6j$-3>-;WN?7aEd0~w3&IRm7LzdSBjwk=`Kg~~ z>7mTXd|kXdM?C)kgdc(;YY#o%Kc>0@79yamN}yN7lZOmke9ALJQ$>s=-0kzV-1d>rdn~^{W9%T*VqA5kk6@xA!ag{ zxw8(Ed3i`j-fftl%3W-_r|C^TMPX9tOCpaGwR049o;vzu9D&(c5Anq@w*0l$EMy3} zovg{$v8x6D0EQWlKG4S@^vTGFX5@+bhsl*(c`s15x2e0eX=z_ib+5?uu4{*AAPwzJ1?HLdhkv%~5!L}==zdsG_yUOA1oJ?+1n zJ<=M}OVWK!QZXV$5oThcQl_+0SMK)BcB0I-E@m!CZJxhxuSVA);Xa5^6tV_IJpl)C z?c)gO5qz`#UYcBqz#8rt4T2tR8Daf*hGIqbQ@!#ZjsM^lE z`d?Vp8ckPUzr3~6)c`FOjfpN;*Kl053HHs-yBOf8iUP0RU4EA-60$+N18(Qp9%2`s zU9i3LXO?f}7nTH~g zYFef2dW1HrthOl~%Ngpx5m^}1o3Wq+U^8(X`1s9=pzF>If+CIC8$PN0qVp900GOKo zr7W<7T{_+iS;f23IV9^Whq2^9r}-l^S-liH?7L`g2|XU~=8wyZFE$vzNJuUXvx#Di z?5pkY?tQD6hKaJ|LgMic`N&H@D|tP1{a4IZ_TN>7mf@q^Gs_i1hE?6wLFPf*ZSyBV zh)zTfzhg$KL`Kg-`5VqZo3_4fipR>{SF~%iS9xykB7#UgX;0V-N{%2fulZEW*ytmG z@ye`sklkkRM#PN z(aMNz`81NMv38*Q3(AZ0Id+>gr|PYPMyDh(P$U9a#*Kgf04mVUqJwF0+Kdef@tIA{ zyML6!Z;QZYMme0|?YFyTyzmj`eh-mMu(=`1jU7W{nX*l$*P!%!7)DTa?z8i0wY`QU~ z$tg##M+*+D>M;Q=sg22~>Tjaz*ETZ?i+GV)!;w-e$P&cXr>UlAMmWsj83GBX55|-u zIf4y+&u9Fk&~-_4tv>xwxxcd##)GH>qdD+n(=@KaQv1gCAR%^%}!lmG$XKfkkbLro8}MBeQL_nR`TuMsM6YLFv~r?<;A!n zc)5>(WMB`#NZoqpLD_iak~55Vkrn|x+{ko&sgOcYCurRgIg9D>dQY3}{Hf+GJ5m1t z5^DCAms+K#)x>uORRRtl2NoY``}<~}MVB@S4hWeDo&Nx>e{;IlM;=(nNP%L$9Uln( zN`7J6{$5RYvT56ffBADVi$uWb^^ZRK4O(@RO@kV($s z=l8Qw`V+(j%r4N);pt-#Ys8eLL!geq&eF$^Qc3>+ClL^Q<;@BC=jTDBYd%Es^^N?N z@?LA@ZeodmLkFfgM&wj&UY|};*!oWs9%+yW5V6kfx3x8#88N~pjHgBBznGtx5qW>j z_O|vDG~Zbvt$jo%(gBz`D^H0?1#8&!$?3Z!=hMi@ReAUFMyIt#pFCg==aBDv9p{=Y z{G)F+y>o5PPy#a1LJ0%sSPrM5%pT9sOHn=mb{%`%?$FoAPYx*$gT=L9IZNj? zo?S*1jhB06jDR=~vRi%GkG6NZe#?Xa>hM~Q)||=Mc`IoCTh#8Ov)1(2lFVQ8ifcJs z7{O)S?Op0Kna>E}%Pdmfx4(P6(n?uj9FgRDCsX;dFDiNN%Gb;d9lKolc2$x>wP*C@ z1r;g#MDOz38EAhqq?ZQfIRURC-Zf)StBhy0<2(7^C)EB_)jq#r4b%jPoeYDw!`8XR zXU9?^gV|#{Z1_k1a;H##Hu-l_pHX=2A+?erVQF7d;&xzJ-Pvl1#0r$HK&5xi)7dgK z+K7mPZ)qM}FCFbx6R6Y3%7ti9 z;DRbhu3-CVESR-2i9VA=1IfttOhYb`1P#THwUB?#RO`COl0PoBTia(dew0zC%gilc zNew{+Z%wJbV0$a2$EwysBv%RI=gyqZXfw}GrksK1DJ}e*^8@)$@~_JJN1d<45y@!J z4VuK<(KLqC5?yls6ou|p z7Ats|vMfj{q=WlszlTiK$1g`^Jbf6~n>^8>`9VycV$?0*dR1cO%4Vl!jcUj4&5n{8 zGkqiD(ZbJ?82O)r$83D*t@+MtyKNB{Pqczw9=-T;Hx>butO-g2Iu>lt$$~flGbEGU z%i`eU&T|qX03GG){$9|vS>cA;SJ!o0=oY`bNj|L=39m@##C+Q@WtanEF&}G}99vN& zv-a`_mh}h?p0%e(bqg?lHxkJpElLLX*zb_Xug#3yBtqrUV#+FU1U#Es{{Wn2@=gB$ zJ1bGDSn0dB)vUE9jvj6Hzjsdm06fl*wEBR3Trxf6dcJNa`W(VX40xhDguNdwXb&v@ zL4I24S5sJ8`E-d@Xl1>X=6MwU+8$Kc`&4A|`$4G40ps`p*N@r!7|zl7lJ*;K%ReSr zszRDponPOK51ye|DfKsqq4p`g0WP zXLd<)Bcy=j10m8hyGvAz*jvFD!lJRNj)U7UvgeexCfuBOM0o~Cl9=jwSI04A0VS zBqV?+d8q^+Z|jsw2NyQLc)2`_^LI$oX7aALW@nZXntaTvO;!FMvefOFU7MEkLbp6Y zqgjvla`zSi=2&kue=0|DVRLP$!2-np0J}fEwo;%G7_SxsxjjBvZl64L8H@-Zl12P> zakY453|1)6A9LhQYx6qW&3Bd>H<0xBZ*?143z;Wl94J%m7abmlspxxWWuf+X>4BbO zLb(9(dd|~^axvhK5gkt;gT4Ht);#5@{*wH{)}R7kj96*aMSqd4HXY4PGi){3^wF#_ zC(MT$eV08!;?FP#aO%l)&m(y!MYg+)X`(rtG;47@CgBPDHBwClJD%Nh4?eFxYTw`u zI}I+2O@<^G*Ks3>g<5F39k-cb(2Ak7zJ*dr8WoBZHTbA$$@U+!lFOebf@V3#%-_T~ zc=Y&&aSoF506oU@%KlQ&^!ZjO?ez#Fm{l%QkEmC1!-(V~9k;KJYP1@?PFYm08*>KF z#o6k#I(#rPg-Bl`%KW<0X%>s+yHsy7==M65zOM5}3~=dMn?$k(pe?}m1MkV?$(SDs za*2&^#SPiw$Ak|S0zy~HGNJN%zxY$h^2Y?awdSsxmC@q^T;4J&6|YKCgo@OfoYWmo zXcNO25INLc*wJB_5|pK9zDQ`lEA;(OO_R*}ZndjNX=>#qjV_qT&C-h8x_9v-E}v^l z5g5)m5_{qrW0I7e&)=ytU^`-44r2k5i6Y>8)4SkSr;3kgJkIZYU2XJr8W2P&FEH zDNBZhn&w5*Rw*4Oq{Ksx$gA(C)&6AjaM0Q-4>ajO$ql=(dt#;@bQ_>iUL(UfEFGOJ z#GF|+Cy_h7c5c^>7=t(-T{(Oh-JhBKuwYAlPUJ;xst-&-a1W;iHsnxl%uhz>JTmN^ zpQ+*|BKUsR5ba$oq5+rGK9jX27J3eY<#(3PRJmz%@g)!!*;U5R@NUDm8sQ{Psm1KS~!Vjpd&G4b(-AU>}&7`BBCJqrQ z>Q5r-G0#g4M~Gv0v_~<0@20d}Qr5yD9mSobH#1NyR8;sEwFi9SbH-Dx`JawqSnpJgv_Wf#@Iq)A?ts{cK(Ob1*J#8FC^9Ia)M574YxjA}pNuYNxOwtviowSRlw~1kL z!Zs(=jg$G9nt*9idv?u!LNZ3;JtT7P1=zqC%Y>cB*zx}WIck@Su1|M!aW&oS?o8KH zNy()&pl=ERuqS-K1~`ZS004CEaI+IR8#ZlU%ARkMEnX{)O+=2MEK(CrC3XZ8PzTYI zmOo7mnPHcQAwG5Z`yQj`e=$wwONi~$>aoi&!1qlNM|EG?cHXr+W;T;c;9U3br!QTu zI-oJ_{cfk;^GS7wvxn;JQsPM5gT+WYoz!;s2R4}XWOVpCT-qRZ2jZ1!o?=}-{WVBp zU#!O9$H?xq>58?hJy_nvm<~>hNxt=Q&5ZO#(^h}`g;Dh06b_cFsiUMPPf2FI$ls6Ag z(Ek7_^*=u}R~Fie>X%ZlsIi%N$IOqj#X%$Z<{bM@7%a*>Aa$o}i?hz44jFM1(08MJ z%lQZAZ!UdZ{L`V`N2j|il1XbCN>Mr%EwW{VqZmhfATrJ&E@VMb+NqBJny4Cs9xM4h2mu_jP3~%E42U}S2*o& zZTMMuun{bBBcCw!nqI;=v54meIU{@YBctHv^A@A!{a)Wy*3~}0Z!C~-bf7`VfK7hT zua85W=*1k6+o%QMC6;({aZ8vcKLsW8J>1uGOA1EUVpf>+P)l_yUVvq>#3LGLmU&86 z9)IRfGTdI=N3B~)9BX>)7|J(b2NF&kP~h2eW#io)q3Sn!Byuj2>VC2p><_X@KZxvd z*x}yGK+Ix**ZkIXW{x|TZb=!pXORLq0Mr_eyiI-b+N7EBG0#pJrG_AepoT11kw886 z%Lv)3KU3G%-Twg5A5cD}B^)@ONg`94?Hf=J!v^56p$vv@3lp%@#4iYX!NQj&W)ag)_uO(e)3aRtfEW_H zxeeOJuXCh>aK=JCPfAh{7ah$zcFx1ujGh)^I!=egJcqS9e-i*bV`t#Of9DjxE_Hov z=kt!O4DYATIK?!KLbJxh;^a+e0HE!gKWR14#s(;wJwvMYV?&a6lMvos|91qiRwGnhEPGea2LYd(JGs)YXlE(yqc=p`SP(OByC#$gGFMR70H z)JjMZJ8}h+U=2wW%k}(NrNeiy`LyUr%Nqgi`T(}LpX!2m;$p=@brl`Gy|Y)AWCvxA zAv)ExXe^TWU3EQ(Wqw#RL|eHlb@lknZPSb$}^7n5R=2jLS%%P|O^wg9149L?!N^yzmX{%9?!ZMKPE&TBQWBIb{&;DV)^KPU5 z^j^wjH0(Mk`T!a4+C40ExTB6dgW-CuT(wzcl3dARR>D}ENQa9K`IW^^B$FkEE0g=O zt10Yu2jp-Gv{^$C;;ONeLqkDaCSj0@6~z2V5jYk5TuxQQ-xvUhhTWuin*C;u*t&@% zNcRg}=~@D5(zrORY{&o}n{#jFNG;Yq4)a#z(nixQ%y1vwDcz8%*@s|uJ~%N9g6_PS z=P)%_@_HAO{{SX5-_DOP$K@|0`Lanh3y@8`TD6q1GnEx9$`+Ms2gp-3+RbeAP&sl( zVbmYc?R0u9dbx~v<+&Y4cRlUk9(VGb{zTXB{HJwsZFxSOJ3%DYj$RgYG+?EIlS8rF zu4HMm{$c|lx+43WT}~eYW(3_Q7FN^gb4TWjs9|ej2v~%G79>;Q9wQmgi_*C9k?Ki2 z!)h%q!;5(>y=a7nDO7@_^`&}`e78<-W*LV3sgP)1T)vLgb!$ye^md(b43)StG9yhI zm-@T#KWVA(a@giRe39kDXS?*dI59}?#Y4aJF`q1HSAJ#Hq0%gVJG-`ZUT?>f6(@7= zPp2%@XNH~zbL2NII55vVxFO8!_AmLy_~w((5a~&A^*50v26w5B9x7_?qjCq!G``bL zBTQsP^4sHYMeLj;bwV*UvH5`dzw+Pm+gtqDxs&oUPr8P0FL`d_d#mfnWO&kNo=<^P z(zNPnPaX4@?M;3@&w$ofuOJ*T{%8+HpwmlPDQTpA7|G%w{Zf|o`rh+p{{T1#r{CP$ zL$5G~7^Mc5GA|cSTZarQ(wl=`xz8VN^2Ydio~NgE2X`-J^wJh=dzqe@{{TMx)9ml% z)gMxh3w4|&q);j4>3-3X-n)@ew@$bx?Uq?%;R57&-z)L~svVPq9P9!B`M!!Dl~d_n zUYE&UR+{xR`)FkPl+fI)h9|8^F6WgwZ$;X<%F9`kE>9OELGK5X(+T5@L}E-y>qh?o zQ}Vy_&;D^+%}cFa`Qy#A$12`&ntQugq-8V!GrAAj+u{`fo|)=hf$e6VSjH$05;g#u z_y^7VYuSv_%5zFwR(Bw8@d-bW{{THT@5$XPepYD{THg6m7n1Tj!(}8>EV6u6`$37W z-xX*xGqk;&!`l+^=184Y2?88l2X5u;gW*I28#|DHTECZnKP@zCo6D^t%F^EI_=zrB z*_}ge*fmI@-(%M>^}YZI2lzfP#6^=BW>#taWWu$-Z#7w)E|+ zuWnTpKPr0F=jR8PhPR_8 zoq2I-J*OqOl2hsc7?4Py0jXMrrfNUXc34JxMD4e{J6L;nf<_m_4fF2vd}sNktl#MO zx3JpWnRNThi37~b@k_rT`_!#L>0X;>PuY4vF~-FZDu>$fovqp)E>dD{?|%2vpYw?y zmzsa(MwP6q>&vI=);w-uv1pZ+c%vNoGZRvrg&9}r*yfMg9J15SBu2-6{{SbU_Ff|_ z4a$x3^5|JSS26i}P|Bf& zPe|*(Us1ncc+`yNyFb~JmRl1#=f4a-eDB=nYdxmSA;sy(e5`R~K72oa$Bx2^h*o`^EmR zC#BN+PvK%1XBz{kFR2gw{Zhh4GoLKY#xd}ZSqEOdj%(xWR#DDliaLeZN z{ZsyauYW9zbpHS=+Lb3^G=+#CF-*;mu{=Z7Kd?2++Mykz17Frow9om>pD})IeqQTU|TqDw7A)4Nha6&u8|5{LEz@M1cMN^N;2~l|Lf%?L9ojaY1nta^={oIvG@x;s-oAT$pB#Q;{{YTA`Ir83FU_}l&z7|tFVN9TED~J$ z-l0iU*N+A8tt;O;e#z~4c3v(M6U2AlZJj4;_HozD9wEXud&m6aCzFTdN1Oc9`7br% z-RbLRrt3D%DOHoyoHTbFP=C7Wpx4K)`A=r8{HT zkTUTFe+!4(TrfE6`Oj#!<1EX0X3Ey&)+raGFJe8jTaZwq>?7XHWrc3z49`l9_RKT0 zkHPg$){t@Oz>Kn4qy+}CiYIcJTIpIO8`xc4EX`1U zD)sC1Wiyn|HqjW4N#2d1Y4(!+YTo2DysA;a-22xk$ur#97y-L5g4*$9dwAtR1gGRy zz7)!ggDu&aMQFvOZbN_+0p6Y`AsMhCj?LujsiqT1=A3~vuER2aFe;b>MXfvX?msf> zPj2%FU|)!q9RTaO$>Yt@hJ4-_zG*(MWo4#a{YOYnQ6b~&GMccjP%!aZW;v2K*&BIF zJ9U=(*7Uk5H6MY=!hA<$NH9+^Y4)uMxznOo1XQm>n;kA{H75r?D;6GG9-<30X>6+E zpaLttXJn1IcxPO~9$BxEOwDf+#z8!#RRV+OzA%JN)_w~-o%F>Ao2>3p3hO#euwy`! zWhZ(c+04HH$M|GiQ#H#>OSLOgBp4mC*G0Xc};jWne#$j!)-d;JlbYjg)^5y!DVM|R2@~13k zneR@b^Ap>Gu7DqKMk4@6jC!a^=EE4T3XfxkI(uU*)URvi$Q^;25(mz>&rEA#h-VkO zARcM3WuiDk?gnG{6AnSm6V)lX^HHrWrc*=OnUNhi>eO(cGH2PmBkD6h7BTjRDf&bQ!MFbaoQCtE9-3TQkNC!l zDfbK!_HRwpADU(D7N?<#l74&n?fx@!3#dH|dmK-*dQRi>K=y-I-abi{ujluiIGWp9 zIqt?5{s$?avpQb$^Kx-}NvR*gK1DpV{QmP%V9#M>z>WU^cOd>bM7^5Re>nY)Og*L4 zpWz>BGGET`G~BZNLdFQFYw)8re*8GQ2L>^@VVk!zF zQ?`s9s=PBxn5+TVJJIK?8l~ zTdT^hpEQ%H#D_Ec6Y1u&k04pVNk479bmsE3ke^5jVB<{tx-Twf9 z!5oq9Q;J>cka=q2zrK@i9!DiC!4cEQ^-tjP^lL>dSo`HZIdVpy%{sKu3Z7A`ZQ-_6 zElBFy4H@%K7e|%P64DQmIgE0|_c^h^M|yE@r(G`Q@ph z(%m}5cc^;P=*mu~96{NYfQHmwm^Lb z{w_XU5SjYW`X}VIlgjex-e8E8_}Sf58v9iB$>!}jR`C1Uu=ZdF(>7aY`A@4f(abg3 z<+TQq7|OD!ALOf4v>b^tP)*j<~9b1)7#A&x5&`tV^C%M1Lhmf z4jyt=o_mV|w&Pv3WS}1(B0>3g$VU$!I5NqoG1yEZ(&AemPgH}<7L(m84lxL1YFD|a zBMh;`jsuL-UmU)#5FaX8cdCt2cDuj0g{~wuc_BiJ^B@XW3^Dj(q6-CECcz-E1fVf2GU60qjB72(9B0LFrnj)6e}zeZr@)d)G*bjE4>XcER0 zNySJYF(#n=shas~+9_0Au5zcPhfs9o!9YgY$Px{Qdg}f-U5*P{!Fdcc0&W#!Ex_WHugFn+5!fS^Gn)2w9i01BE?r1%WC1o);0m|>Wh#GfMY z-^i~h*y(mZm)ecgDm5GXJz8H}gU#AhR+E1Z55qUQ%%)Sx5y)`5d;@|omtRxeKRND` z%RWlheyr7!;>qpeT2vO6k^UU3lxbsg0kcsrNi4qF#w{mC(=^dN0{({prI4$n;MC050_H3&=+A^b~QddW@}cI|KdWxv4(Db{(=FC698?8LDRY zn!FZMwDAKPlBFxKAod>lUxgOvXO&aIKj$JmyKCm??M|4{ol;pMj^~`=NPrT=(AJ@8 zxE;FY7|$G1ARG5NnISBY0K7}cc5`VSVw1~S=C>A|6pWz93db_cBozPvJ{BT}C8;s+ z_`tsY_N_c6#$rt#kEXvbw0}5$S$Vndq_aAfi#!#!M&e~j4J%0iuP^;rbq z0O#b+T0xTdrL){WB<^nKhg`nZ?a6!ZFyCDjn1IX4fG1(N6xzMA81nDF{J(3DtkU=( z0BVJ8)O344oWC$H^t%}s%UVp@lyOAN;yOmfM#q5ttlH1D-mQNBF0 z0N)^Y{g2O2Ir)>zx|Q9vz|n4W+eqBYdoQC&R$3CNT9Va0PZ76V$AoiYff1N8t%dDR zPlp_G5N0fMC(ZNy-IldL7PX!$*@5gvp=) z;;wgXIWpqNC5|z(X07oo8innQH&#!{;DT>U(o@Y9>p}<{9}4H8cyN^+td4J=#&Z`P z`SR$>JgKE#UTM!a)n>b}o(q<`MN?SBN8D8Ysn#yhUsTp*8l}Tq0Yfyva79tE2)tAeW0;!r#g~Vqb{`II zMwUD<;v18>^FOihXXl=k<;^q9nj`2OwF~<_N$zz9h!$0v;O*)as`A>L7jaDL`xnGG zvKdrCg$vs0=KEa0WyiuSiCL}3sp>l9IyaSk^`c(t@j0IU2^vYR(~JK0gV73h0S@U- zwKdHKIOWf!$rzqQa(8+1W5KC}rZ*t&dK-F|<{h2CnzZTQ(uhxCRQ<*&)TD)&gWmF1Gg<_4^{OhcBg#R>hDZj|er%-z3| z6C+|PZzoHG+1yzm1=jXYd#yDqTO0WFD>Rj1wY`bU&TRjBYr2ALn<6y-(-uKSr=$ElpW1qKk~^vxRX4Vuq!-)VJfDr295` zrQ%1wW75mi$FwoxkB2SjZaUNFug_g`N7X!*vFH|eamJNfXciCM#wFQ}M^0bNdgkY_ zwE1!BeR3S^oBJJaZfAtFgSb5=4NiK1I*=j&Q? zx##U;&l64Mf6BRIk50FhqQ2J_HuT_STC`EuW@FRT2ZEit<$7#5wDF9!8%T>7>|DIh zaPJ3lZx&wn9SmRgVZWQ|^%(}`O6 zWtsa-=NAb?S3$7(Fu|kn%}ykq^run2PbA;Ns@U4xK8vV&DRpx0KXMkT7KW!`xb~>a z^yKPdVo#`Y0U4q&NDw_InR>O9(Aw5*I__Ug)q>W5k815hn1dne-f<3L+TNumv0~P# zb39L7*hH*B{yBa>NpbSV!y47}uQFbFY3%%$u0EZrhvv5v+oXlS{eq|LhCN8%Cx<>L zWxTQCk8@sZ8FFH*Qlsudd6&x)>Iqi&~6atN6n!0zhHyrZOBd5cU-`>jQ-+EyeiaWNpNqXWoqzlKw()EG;KnPJ0Y ziIhv_n>Znu+j6ko zJ{b5d1xH-To>P$2A^KRx70jcw%kL^&>Px2Bd5T>^@WRu2aZ2G0p|! zzpLo!Z3d-0vfCKXtN~!pUW1zMSo`LFEHIxgeH<*Ar3$^mQ>OW*=I8!6nt!PBD{wOc zSaCfMdW@c<6kslL<=mY<% z(czc?85f!P*6?c@T;5-^;BIfGNF)wPRaS6Z5!8+#`(<5~XE2evj7jd_`&xC`226Y- znK2&=-Q!=Mw>Dl&^8Nm`ZB)6`kl0$=Jb)v_!j0*w&@UC-9;Z5=WVHD;dBi2k2Z~0z z{+CJZPNo`MCS#n32p!?`?~}9$Jhi0gw$@SllInKGW|%J_#fcQHH!INl=Xt2eGs;Fr zgikNn@On|;!aO7D9Ni7Xy2ZuMlyz7co(7{_r4}?n-k{X6U8pwk##s1bGDE8fWHKin zPMvL)TzO*e^kvo8m-T6q&M1PzWjX@yQWWtdj@#G1YPA`7W(1-v^F7}8V*pMvV>4X= zNp<^AJKb8?`I6?*r@7Lg7VR_*5oJ~A$N{Sor*llg#Vk1IC<#!O`-5K;=EteY5s>d) z)by<$O>4~FUWd$b+D8;IK<#puS17LS8K*eo2E2&asPCCjgm6s2l1z@qAlEMb=3XT7 zV-t{|2K+=>_YS2qw(~}Vb!6AxSg@AfWMmB_?gZ42aySkCDw=J!44N$Po#d6@LG=9C zL$t9N{_Zv2N!AlU>G6J=)S~BO9FJOLC!Hag&E!^VEyMg_pK_^}wqavz+H|sW0WNJ=Du*NzykKZL4@@3vs>3XVmg=9G`r}h(xhvPP^k1Glw-MF{0>`)O1(n2OskMR z8LpdtbwoE-@;ge(dBw2-tF=Ci%7_lTEKR1qWVD9$;+sjg3mm~Yh=9@@bc_TCaoPaKs$2-u;ht$NqKZ8&Y$#%3k-x1RWZU~|=? zg2E)Vfjw#kg_y7asHV(EZK^txn$0!owvi;ClefKC7)wY&L}OMPDU<-iK&o|LrQ7C&V8oE@M% zJI!2B19*YdcQ*D}@oND*GA6{yJ$gRy)PF5}_o-7Ik3ln>GLkO=s`bJ_w#4l{EEi4SwZ?PFbTAqAXnmlZtR z9f0cMpDvk|Esv9cBWn7khM6tm+i;ZIM;`?gH0MslcJZ%#7|%k_FQ<|t%a+Sah;;JG z;RCNCIaCu|$eXL zAP>I=LqWSw8!uJ6)2FvYxPnFcwY&<@M$9;`a!DOQ{4-e@4c)BZeh(Sep-5&(Bnr)0 z4_9v3^U88zjE$OXjN}Ces%SoI zi_7;B+{F>Pl&O&V@u{PC+rz^!b7@XU^QU2_&M=#+_p|RN%?*Z|1ioRmTboH9S=He* zVgM{EI)lADGZQv3;#_%=Mc81M?)_Ye=#A36-zJl)#dl|{zK^9eQ^?O9y3ccM9Lg1> zj2)HvQAw{#u*&uN80sU%z$GtFGf|awKdHyl=a!yErbKF0Kp6sjlbh?i{{Zmpf0#Py zjlQ>VbnYR^khDb7LU$-1sVB#5!qZP4pE=Tt6ga`;Jja`{&x%>J<5G9C!CiLbe4gE< z`BTi=CYZ8$cj|UB>I)w^ekOTdwFw)Y)84zDxueu}wj9$joyw262cy#VK73g38H`M* zo}~F-M9*4_^9#;;bntnaIBf1MqCZu&RaqW$3FIY8ciVHe)ygpB(rIQqB4uZJbl;)( zIXPpj)kKV-0y#%(H2H`AaywaZpxNtI?K8)#Tl!Z<;3|c_f$r z2^Ryke>a`^Tg>}Skc?26zgRbY<7)VIeKYx0i_msXmUuMrjn>};2DX;-xorCM5IVAtEBQxN(&Q1^>KFHBR`t0^!9uCtoL9oM zsodr+q8PyB9GqEXPcoa>S?V?(alW7GVEVdsk~_+3z^lvm)EedvVF}^_>vQ)xIAthh zBo1J1_M5#{%EL_hz<6N1N-EnCStP0JPYl)#Igqi*$~m}YMMq25?C;7!J*%{Yd`vb2 zG3SSacO#0^&0otJZRM2qiEv&y;%KFb)KiO!5x23*#K=5Dm^Q{T;<(6cZSdBy{{T2K z`Eh@9HNCx^)Gi2;v0SpzTcH4gDec=juk>xMhw%gObl>PpLoeY!2|iH&0G!YN0Gv?M zKO}UYFZrkP`DT+%y+?-o)OMB9;BKUo(Mt5&s5#dAFYPu?&?g>pIEdnpO}c>bUeNXg zbiTY1A~7^<-#)Jh{Gakhh31_C_f+!+oi+59Y#qL%a~jUD*Wz}K*dK?er`j30?GDm7 za>p5wj~6QkhvwmSZ)L|eBap|43%Zx60p<9$82qQ?okvxU<42P2UoOKfFF?3ht^`%x zktF?~J8xXsLnc^6i62#Mw>MiTVVuVZA~(IA(;vHlKD}2u;r4`KVCW7Kb z=L9@K4oXs_lS)&zV|I3{K3f@~RoA_{v^4l20mD19L>^f}bm5|!AI(2?VkmObvb@9ttIYQDt# z$hy=%TGy;~%e7{T+D}oHKG6UXx4!v>uhaf(6tRw?obJxljW$^1JJC!$o#va5E_svu zL#4{_&sqI9QUL}}}EZjI`N~Tzeh<*UYl@!dInxz*&4I`=Sk z{{WnZ{K13OhUd%|w<{$>3Fc`!{X1q!_E$zv&p&Q~dOre16J z(c4OdgoExwmTWJvQ&y8sAqR!fVI z4;H`@2xNNam98%|+g(>zwk-w9G)f8GWQg%%KMbQ5cuM0P{mw?C1hK?O`@T#o%k8iJ zUf-st<@TBZ7&MZ-m{6(l1Z_;GQ>2D?)SI-L>FK4#9%=25pS;M|VdA%qrn7%qH{)N0 zwq^Q3*!IdtV?&0b2-~0B>_@bDZp{|8AI!aXMZJet&~;ngD);`&GaaVq10v;ksr#-<^Na;-G zJ*$SN2M$aZ!*wAZc6$4so7s8kvc^!&SJL~tugUR-vVnE0+hD?}bus{~7*Sl%1K(`y zboO8`xIDJ10y2;stf21hKCvR9Ueo~XN@iHu#>O^#H|75TO&hVfZU@8WBXe+V)id*vXZlA)037 zTbXLIk+&w_YG)JeH)iDVyjcJRP~qi4>iZj2izXiqB$78b-d@$`f6O}-{Mzzgne_WL zQ>xqF=yz&q$&-MdHmKj>Wi<9DHF|vz%Y!6uXn`^FqU^sgapi#iaWVTX^&@$j2ZNIc z;f++1TVMd{O?IYgMwa#)yC_KC>waDScK&YpH(Au~e6b#}X@4dAwYW%^)QMTP1>fwB zJw-l^^K;q#k*XiOj3p2{osY@J)pnkji^4e~N$Jdd-pix;)5z&^zEo{?$mb511liTfNr+{GM_fdiDo*e$H0h9tF$iXlLNbl3_F zvkp3rrO3&TrzAY~H#|qDFz|9mGJ% zHsYJpakgR43y~S8dLNkN^+mzrumk5OLpZ>Jo+fgBq@xb3Z|3h zf2!Zg_uL9dC`ymvl89lK9}uQTbv}@5cMG$z6${3c#FhX{s}R zJ!%h5zZDN7_>7FPfy){BtVuigf#@1Va^orWRBw-vJ2 z((TyRTU(|hyErRfpN3<8W=D}8;2Tb!Jwf-Rw~J>JdPNW(;Z1Wc0z_MfGZC_c7M8D8 z2ng^il9Y&I06V5jYXh$V5>w}_aBZ43CEBOgt5z+DWTVVy>A$|ce;*12k$sEedJK*(g)Y9Yy#GWz34K&yQ{Cb+(DANI6e&bMHvnpQ{;Wgn0q;WHC(h zC*-zk2qKU}H237vwNzj~8f4=;-lOwtoGYx8TWvo|Sowds3yJAfS}hOWNv2mh;HqZ#EUKbFZJaZKUz?xA@|TGG}!_m*T) z`m&j35#Gyea2fvq2urU2055e~mRn0H7QeA{r}bs{_0aD>Cm$w;W1#u5>Aab8t>{f< zXB+kSrvA*!j-(M_mkN4gbwSbj7g3UlZEtRW)Rv?5VLG5WmcPo#@(SzueX1c>xmcqe zPsCVL=O11dr zyLks)sG}(URLL$ux;>i#)iZrRMAM@U1aYxHwISaqIkL~0E=+LZha@?^w~e_Y!5a7| z1pXNgBh|bU-H(;8^ zqo?WiKc?^R?$TBgao~>Sr zPikdjwC4~&iNAAk?3he~PTuxEsQC-aT9&W+6U&#DaR@+ZrMtTjM*D0Kn$(*7hGglx zQ#KfJWQjM(L~h~g`zr+H!;U~#J4bn^@{2^bw^3!USwyO}k~lR8WRS7#Q%ZrE8gAO2 zLuVYCvUV&gqd&Af%TfHh(JkkW%FoSr7OKfvy+nd#9@R$7oL#A!d-y>7+-#kXhaTQ3 z9{MaYA13)&U6}5?&v1A*z+touTAjfSQNC=BvpJ9VL+0y0CxSDfke_f1wVxw-R_P>d zJIr??Q0iJs%V_~|P5AFxgX56Jtj;z#dSIs+Cx0a z390sO*$lm^bjSD5AbA2=!?EM2AGw$(%+jo%^Nl`jw0}C*P>3$Vb{u zJjTLD;D1wGy`9uUoTL7kndu+%jlO%ah+OG+nry2sz^v;k5#M@|n3?^k(sD7E`d2$m z?AD|Wr5~NB-~L7U{ytDlx=R&1@stCWVfL3vA^d+BlxFs8Ro?^gYfSu-^DtLgbt?;3 z096FCZ}KCqIeUKyJ4Qr%lZ)BhwYdQM*RSPQnr+pY^{Z&3P0KXo5BO!vKbEi`;Frm$ z_6~UR$UbP){Iv5+LT=#KEGFaoDRO}A*J7h1{I!G{IOXzF*m{b;5-D?eZ&;02)z)km ze~5`xns@D&jcz&pIOXzjPKPXhtdadIqt)cnnlmo(a^ef_99VK@ds%9@U(;Wfo+ z^`D!r?;Jw$QZ9wKg&&SnEeIW3;o2r$8I7K(vknOnA$qW3u<^_p>G*oNk<@YYWU$}b zF^!!XLbNC1>+P8G$35Jbr6!Gs~L{d@1xE~pAUv^>0xiQA_Eno9@$~s-- z+Gm+{+Z#59qF7DBw1avdP>O{A09USM!$F>47{Hrx<*3CTavzS2d&zftH=Sjh%$hEv z_00_uN!Kbt%Z>$8aum#wkYQN8G^dzbe_T=e5)| zJEpaOwZtdatjgUKfYksmT2m#Hv}Kb1*5igTh@b&^FXn!jzn7MGK6jSw4wja0r(EAo zz{weu{45kymt(Ui6)TqZb_1&PL!I4s(~H_U2A}tmHMM;I0Bh&J%kLwy!k%UGma{ZS z?G@BXYY0*CuqtZ9W+Uv6qc-~eUHTyr@o_X-E&<0mZ_j7ix@Vs(^y{l_M@;h;v3p?a z>szJOvivkWU!1fb0{;LZ9J~%`WfNNpc9^k=ik)ut&&z*4L3wMgBVAifBVRnWz)9)I zRzNmoG#eW3yHhI2IAe0z!PMZnfH@6|=*!J&-&@k-xX~`2&iXY~2~j~#pm^8u%`o8nS|1DWFe@*MK@3Ovp2H) zLm0$FqjY(J&E4kGNXT$YgmeVHJNonK9%R#WvwCKowS?s_Al0{(2_OUa4}9seR$MZi zWBfY~)G84f)_gpcuW?qXWjnWbr-a*|D4%NLjKbr8-#D<`Cl@d|%29rH65dCyD) zE02faZo57RLsEFJgNuK2(jnG-t>yg-&0kTyx%!3jTzy6ZQWYgM5UcD|6T1^yjKaaD z&6_SC5{cW0_mJnEPAFo?VrUz$a!2LO3qa5yv9XTuo0+Ynj`BZHN$In63cvyx4*mAb zoql=d$twbcjcrAvL#D@$5u>>Pm)D<^URCn6ns%*saj0HHskNJ0w2r}Ci3K^SC*!AM z+c_T9)#R0WcDvilz3MwVO%3Soc0NJm-gf+h*L=lqZEfXmHOjUM+$4cap$ZX3t0_B? z*Dlg_<}ESeo-j%K8g*XJ=FR}elz*Xv)5uTrk^{%6AOHiiU$Ztg?oSFoqLi_@qz2U_H-I z7|&OS#L3T;N4Rq+-^kUu^Ka$-pO>}mROt57TurB3#3ExP-&bxN5?YT;^xP0@k88+a z)DsXT{6OCO@5zT|MCHQ}O;yDa<-hsH%e#m#?Y#GPX0?0CPdK1Rr)zlF3t(9(Nr39Z ze;S;pRqYfumLW#By~h#ywrtY&G@=Z0AL6lJReuY^Kj$Gdi#-#~ItGMMt@PKM)OiHW zJmu&WYV1kqHx=uf-)Aw)HW}p`%aG_D543qkJg~>O9rtDEw||=YK7nbcX<8Ddpfz4b z8;E6I5C~YTiy%K`_8WWVEIU3~%%v-cj>Hl5Ur^^uv}1%uF{yD~d^_IB=1ozw&n!|R zwmO7X%YMouG9O;GSl%!yKwauKu4=T=yw}WM50yJzOt^4YEv@8VkaAdg(?y=<8=&${ zsNG5~kx4PT4i)%?K^5E`vfpWPO9n`eKtyfc;(I$7>M=@O{c@x5=!N|A^3V8RMe@g# zysN8AcXw^(IH8jM>5Da~xQ?WW7Mxa~d>svPzQWb`xiVy&MI2;^$N0EOaGM{z-P3W}a)*ZtpFc8MV7>nC))iU|C~IAK!5zflWFc&34J>)P7b1GTIW4 z5FN+)sL<)ovQo+q?;|b~w$=RV^Lkh25>0L8t!3wEMdhxYHRMiHlgiO0R4}a+f08?A zA*9PW>ame^DFAonZ&RK;7^TX@Ndw$1@t6GI_OTA5dFFU^SghXScw@bQT#hlc%IDw& zAA}NWDV~k(&YOlfxNe2VZtv3YKF4afrI4Dl>igca{{T5j2bO%rCzl|x(Baek(W+gg zyz;b9915vMmvo?VdIQvhwrV|=@wEOVr805GB#!$$orkmo4qga=IHfAzm33!6Q}T|L z`HCONpO!YWY5r5wG0#v9}f-217dlfgXrrY%lLesq1}07M!dPRh8t5H2+a(sPvjsDMW}1PUmVa3 zr&E{3oML26lfO4?NW~5a*aPu?_nXggu1zvSYj<@tc98O(D~KUP2v&Wooa2c%0gJGmU11 zX!-ZJ5zi7%IU5|)UnzMu_Q1Z9bt#Rb$s`3PK z9Xv0Q*_vFf&W6_OVWRF6v6ZG=8z zlFr!zM{ZF=l0=I}6+#U<=JU4uJ1!_0K-_P>{{R8h_E%_Q%y?z>S3ys?HJ8!!OE1!T z?Zgm9tg0UE)Ks2;ay0q|a@d6OPM|*?ZtpCk5$ZJgJM)WO8l2GDd3r0ESD)`55WE77 z$tI$Loz8SREexP9FQ&%V%=c5z>$^e|+8fc_jziv|`CX%>wUzFtJ=;%nNhPy#c|;J3 z0Hk#wb@$9J(j>@406H7y?E5AnFfs=EgUoJ@^5v!do$$WWFH-Jnq%^m1Xyo+(^sj!I zMypd8!le>C`-gje7)mp^o4$yT&3`m#o=EcO^R}>sB)7eW87&CoD?d_#pR(W(Pl3%B zWA=VcPN+u-u_%*$0PjDkJ*ljYj|t5&usu23<1aB>-Twg2LTdNA?we?lSXo-K+i9_r zG?6i)sZ}&qmyH3T_*R+en4=EGgmKD5%16~MSLAz#pI42Zd3Myy;x+)(d7C|7L4Hzx zR6(uj()n9my1Ua7(m1BIw3%re79SZBS8BG!24nWWZ^snG@x(~=mv@yn_E%w?kujW% zYm`}q{{ZB4GTp^@<(rEwGGJCUlUKgyoM6?BDvB-UH3Z z)cZOx`lJ5OuetJ8nr<~uG0$Zrkz8EQJ0o4f++ar)1rZLwEjI0)HAnK`fwyt`kG#B% z$YwDclhkq_2djBsNYz}ewYxyi&SYqul_!8Icl#|~qM5GOLlt%DRPA&JG`6r0aZ7xk zSt*9{{VV7H7ItV>)$Y=+JBh>GWxu^d!3Z~AZbaE`g@Ny z1LdzXnY6pFE%|4K)}tE`CU$0JSq{g2`BTHDU8&LokY&lVN6Ev`YHkM(G9-83ui!A_ zqG-Bm+gi^Qk&!5SwvZCDTyi@Oj^_?ZN7`LZ#b`hu zsP@W6Ibroy*4lDMIN;xxU(orNRI;}6yztu~l6a$eTI4$t$s({|tjufi3Utnc3GpI& zZ1S483^NtI7p>d2m95^3Z!=upX_Cl&R5q!)zZ$9#PRsi9Uy>Pd#_@oC?shri%Pt&* z$K3YIKQ4Js%^IbqlOCf#8%UB_Wo0NCRexk2rH_wX(`D3ZFu=%xzbfeTShSjLPC)=j zAbiy9^eqk#Fr~bbR?$dhbWS8waIT%n!#w#Vhq#}Q$&563p`3R;gHZgzw_wFx4YVv8 z8+1@ml@zHPft>6+IzZiT)R(88vIJK_&{9|aIJUW&E_GX3qj>{Fp^*UP`yeRX4}6AA z46D*^z3xUWWJfXgGJh(0<#h(S^5v?AySL#RMZ=1*a%w|&r*WFyW`}?Y6ZY=y^tyvE zK!5+$_`mvLukGj4%&erJUL|9*Z9_xy%gjZB9Bwi}1&rF=UEIMAnrMh5C1|3wBAb!a zeDZJ%GD)B4epZ^=c&+C_ESEGE%gTw&{@q7#I$)H*-0~dJ5hJkXc``pb>7z`V&cf77 z`c@d;Tc?pY(zN5i5_teWYJ)K}nNCScSLx{GYp});j7{-%C#hn-XYxL&<;2rw)}GyC zze6H$m1L14H29fEO^rY}>9x?*%29>-PWw{l(N9egDc7iNy|DY$JTBWyXO7L8P_s7_ zaDt+v#GS@nD2S0@Uq-BQBv($UWFJ@hquNcyo^Tyx8x>*LpAT%24RRzK9TFQ$xhy30 zZDb*$sCnuId~YHFjY_ROyoLLh;)F&ars$|s%e=7ZGXzWlUV zG@muv-a`$;v%@@)Dmf%mWO7dyUbUu1W;yqPws>PLHrW9lNhh7Odt0k(ElWdMTPynv<9kLiKNXAE+bwn76#B7c8eb$v{tJ&XqI@N6~TG(5(XzfWIXhTU} zwaPGJGmM1yApEVnT`0iDP!(W&YrU3hUU-wtdS|QV8Kk+sxQ(sQZjsw6Y@!YwLH(e1 zJ{f_d?0?EkjC)6)d6_);ze7D=YfDoQW=S#i&OpcDO@$AJ z^aHkRMy3K(KF1gG)0AxPmD=bLH>qVDez}c>B)8qwzhvd}oo~zD;*3UTgl}EXMe^_E zHO9Su`XMuE`nRCBQQF+A$2G>=7}Av__NQFcYCBpQXz~3~x+Xh;?=I&}*t6Bofchm? z1hyyKz?s2_B4h^|+HlN$h8=cDe)e=c>MDk5~Af~$HW)~q*GbRJdv@G#0ol*LP-=kmT~b#*F!IcQjvab zBb8bJW0#76Yee~EOk1Or9&Cp|^kRm4rkuu(LZm=)EGt9wR$y5`i@JBc9@Mv}cz7C=iVD?n;C-`^Nww!E20FGhQvOGrnK zHVtfJjUuTIL-E>`-kv!|Oi>%R;?&Bii1|z#udeA=0yVpp{{VX{$<=z$*J1(aFysIL zMI{yHdFWkp#aerfbB*w;ORU$N^7x=c~b}L-tJ)n$nWd=lmMFKwO zz4m%?&xFtfiCue#H>CNa%=(MRq&B-}ERwazHthtQV~*k~0J4y2QaT=oHTqu7fHUBh z)xGm0tvelOX;0I~6L&(6!1=SkKf|dXExxI10h`UtpINh!CG^(Tc!*)pg5c1KZ_A}K zSEGyuehaK%(c9_=V(qoj$Z+uxPD-)8aMt6OH|NLZzQ6wfD;DF)dIWcHht%EgE<=G7 z7V}-)@nk*2IFHA1Zg56f|5?# z8jpJByGNYFf_axSSBr=cIS%DtA?V}F)*|ZmB!g8iJ{*1&ZIoX5PVW0x&~IarTGn~ic8Y+IBCM>{Jyd}~^T2fj9Ar9%9tVjb=K2Rg zx0({tuuCrqX_)5~KJPKy{DkvPm8UGS&7(T62j+pfBk?@}N8BH6^VBir z;vH|_x54wgxQq=BRoz50@5|53O&7`+aKq-$DQUXSn=2~ZeP$riAQsLypy0p`@ z>v3;)32Uo3co}^~Baf(Cp*F^i)z=1QSLL+J&g9F`C2CqZL-II>qouwuWS1Nc4k475791OQtCfb z#Y|R{sE;OZ?Q* zoGz*5`_?jjgBeEvcIZxOVeM9rCj4XMT*><@tby7C<`4`2063fZp2j=NodV!`)#LG} zA_s`AMnL;jqrb20Y#z$%Ncw)z#r)g<065|2Pbg{g`Jc?1aJ8_BfMW6vUqH!V_K!=R zd=QnBh#$7<|q#__auLnzm^xCeDj8r`FEx?P~U1`xsp&>U`0~goDKE^r^_3l-~y2(Q^OY%+Nwcsee;F? z0F!|Uix4B?9`+u<9%gp<Kg z5Y}PwdUf)79@p%dXtVf9=BN1`qIqDz{$tb?eO5(ejR&b0AydsNX~#6!J*Ug5nHX`J zkMSNy+~;NN40s?VmnP?+>F-E9p=oQNYg5>>B-YIg@sSJv0DP!$0F%$>l9p()BKRCCIZ9`f$2XfErLaRCOSB%#8-CCSXQLnETv) zUYi^U;FbH0yb}KaSDrYn@1x}roG~E@8xH+?9NUQy1FJZJkz!M7GOUj%V!}Xb39nJt zD&%dt7{yceTgsoC{{WZ%YW%nI$Na2_Z8a9qwA2&W-z0NPWr=v9iktC$w(Z|I47v?Y zpHm}@pHbNK0rX8izfG4-9~eaN52S%)u@51BcIdjT+?F`#<;^b7Ql8n- z{To>1ROZ}EEWAY+1GNoCU!&~olFB7H$br7({mokKUMzTz005th^RDc)g!-GwUZbd{ zb@C4@jMLOSzpUv^r$99-$8{SuKxg3ng;h-}?nYBACR>lUcC49Y8xbS~ETY!&Op#ft zab|Mr>^2@d;f5af5*m}r(n)8tLRx55;-~j)&MWR{cEVx@lX%M_Qzr9Wpwdp3H0Z>^ z!wZosmf|`s2_l2GV^0w>;=h2{d)$$lvrU*_m?wS1=nwhJFEn{Ue=sg}&nmm?GTqwSNi_FG9bulT z%fPSN3mD@=(B`Ar*ku?vG65PVmtOLIF8=`9ESTr08-w0}|Nltk8h4_E~4W2ck#yFk%($@JS>om8pRRsbd{Dy+x7JTuHPN->oVR{9vTx#qsYTd34W zsgz5_Bs6PYG_J%~$1TZ6>Ey>5@8+*7vjQamH_sshOy#=?)@@>#6mds2`|~C_NNJWZ zUSiO*v)ebq>sk|;ke#@)$GU54ZzmPvcjyiYOccfx$}HRW4I8ll>_v93jWUTxcKGso zCZAyrl?-fT4>}Q3U8zo#%vs2i-Xlzm`HITvgiW*10zjy)RB@5I>{BZ#blYh?T}+o+ z{gvuQA5rAjFpbpw%c3j66`jPEv6lg)kv_=zjI$n^bLh}=i1RGr^p-dj#!Rm;+nsiba_#v zi_~Xt*x)++#c7)iT0EV8_Pm;iJi_k#R5F{b6iX{Ak|U#4M{+jJgf#Fznb*z1mU%~b z-^qr@b$8|)vjW>Jm+w%?PmI&V8g$LHF~lR<7Fp+*`ZC0UNfj!9ZIa-RLRcJP!M} z{!*hwIEkk|tZZoCHU2y^YJJ+^GV1STi5B zUip<7#lVy$d$0Pe*5BUBReO$DXh{GV^Hxn>Mffedku;r?^QZ`VZ`=@{s+lQj^w{<> z9~K{#)n(t0)Ym#7b*VdS$Tu!RZn5X_ieq zddU3HXI;?j{{VNR!K_PBPG!RF?NL#gAC}24sKeyron|-N2?Y z7(Y?_8B4bb`bXN0i}RCQfqgh43Ws6FQ_J<7e~>YGwnw)z0m-=k06Mjz;#r#MiuDv% zU&Lf3?DjGlN4N3<$@GuUWx4&{rYo%GhLtAqYdCgvD5oY8SNqVCo_Iz=y!m} zIG2$f3`a5J*xBNCqw#Vj+c*y}en=G7e6xB(b3`Y!iO2QkNbK!M>GrgLDe2|c>_mUK znAjzwz(L>Pbps-FnR?qO>v2n!e8L9u?$hk>fynS6_C)J_X2@k5Mt{ z0Q^G$x$?K35=Mkt*cp4H-o#t(u4Y47rmMMsr7jHgdY)Aum|{L*^8WzlRj~Bu)2yM7 zjcQ7@NBJdMhcobH(`4L8{ydxv`1Kg}F%K`i@{gbH+tz|5<<^nLtl!3&o=%>qmkK!b z2YAE}gLZb_ZncnGq~bfVvqvdUi1r+MjI6^57h89R_{%xio%@OlQrCRt@!QN+86#pG zEZj<-oeA45!==M5#^H`#UU=+wNF>!f^=BHjtonrM_P~l)AQRkEGJhq4T;m^$j&*tC z$dm5qy5I9F^CAMs*ZROcIPz-o?lY1ah1A4xCahslh4TTnlWNK4N?dGhIucS8DT z&cw`x#~%&H>d8a1^wHj;J;s(@p{SqpkGxwPGx@IJh=)&~i8Knfwf#eUzlRKeh~V6-PzK5k&F+V3FIkgfM z5h3$cT`SH+pRU7v7@mzJ!>$h-OgV77#-|=nq9$JlB;lMtypSIBW$m_)YJgg5vRukmtxIK%0rn)4e&L56OoaNQ z_MCJ}&Ej7@ot_U4s<%v+P=vTmHWp@6UxuXD<}(zV`iq$epWzQm()68rVfDMY z1QEsq@p2icd(dW+Q>(!n06X0-lQGa_$G9Kh9-oqj?_9?EI>lWHQ|_Sdr(mGBkt= z@{&R*N!-Jub z>R;9bA9JtPj$T9-Pj7!U&zyX#Z9AbHukL1!l>woH;A-}vVVLtg7^ma_A3fV~4mreo z%O?EU^NydWTmJxsuD-M^?vSjn0D1vkm~kN1y)###iL;Ztz01`=0l<3qB|cNptp5Nk zq_fa`mkh$z;zK0*gv-aA+(A`yPqKFgoemvts#?3rGAwcow3zWIE1B#dWwN z(|Y)(Iv<$);&dGr=IYrkq13J9HulnwP0UcQB`eGA0xQ6`UfB$|v3RqLO_=kbOMVSj zT$te_Lx^>u(%B!IJlW=dB3fBpUqsS9;`*y~9P1@j$47;B9}n$QsLHf>vFfBi>C@cX ztkq9X0b`$0=JkKbJw>i=^*J?tGg7~j*u@+dsz8Ae&<-cPXh9uvuF}Q?Km-nZb=i)P z$dYAyR`0zAi>cUY66++wW3`Aej&@{rMcuf!Qq=Jo%45W3XKsD&Wc82}5ZvE)>3nVZ zpJ`|3>nm?Kz08Uuc7#VPmEffA;D9QmeHHi3&t>YRrjf)z-|uIw(#JGGmq*C@?aq_t zoBbNc$@h`VEu6DFfWt&c;EcB;A*DxRK9QYvpC(KZk;*6<0Q>x&XIThklzcO|=eKv8 z7rpZ(*O?%&I>o$NddoW&Xd~y%n`IoN@f09ee9py)VZH-qxm%{ssg^+=FbrFCU#ChK&YBU*g;hsWxL`N#- zm1r7op01TVxo73Lu5}WjW4S;O%)A31wMsW0hrdj9`1JfoEV2+R?0Pvm8D}vVhC4Jj zeRKIc`7dp({ZGyR0GM!_3wt>v7fp6dOrdt-5TA)pO~COL&M&q*XktDdG7L%Bf%d%~ zkF(F#VodwGKBu&`@>G`omy#|6X-Leg^?l0`v8mr|{+bG!4|>9n3LRIB098cW?(VGL!7M3 z-V5Ag5;BlIC=ZJb{G7W_F4_6F^7mA=H`g}$yUk%43Iws2XsWGV- z^F+{;X#3)7z3vu<2To;*LzJv}-r+;@3(bCU@&=t_Yh$OTq-41Cn$9_$z6Kk*+!M$h zs0kc%7ek}NsL3uVaMvUI9F1nLHVko;W5h|^4u3bwf1JK>(7erOZF?1*_8O(N-MIR^ z=uf7lsUnvIjrXDZv$E_sWx>T5o+#1WZ1H`+uG8u&L=iAX#B$$#`8{vQnnsCzrr+v5 zTk`durF4um{URA+8^m`mLFn$}mS*gurgM7jR%l3Z+_^t-hB-3=WEya{`p}Uj;K%zuDE3o~Y>5%NeV~|Q7t2GjNZ`Ap-?F@k8 zB3_;mxa&`xKj#mBGX?gCc_LeSmp0d~ky*ybB1l>>>4Lv$l}}UDo~Jh6+2}~i6C<&R z7w$XPz1DjnsPS=30l1Ody7@h-Z5LGYAC$bo=Ur@v*X}2V=6E72#hTb|6+XyfHm|pi zbKWd)YO&(S^!NMS`Nn6apC8rK4&Zk9l|Re>05rpEqZu_9iaF=F1)J03B#2g_-G=6! zH|du4rj+K&C|Ke63jJ%@+L4bL;vgIO_gYt~d6P=jbvvCZONCjd(=T0FL18M%5sU^= zUX}hiP|@Vmh|CUBkKb+b)x#+`yqMw_;^Nk3$I^L;kd}NJM)yldz7Dh*XOwkYsWh!SMzy$0mq^O< zlDv_maZ^@2fgQ=;IiB6@QyI@uA5^A6i2EpcJ8r@4DDcM|whZRDO?n{ZB=owQ*vBnYtfM z{{R=e_Po2w@p+f?!s2PJBnxe9QSK~Mh+-j>va3`3#_;8}bF-e8PuU-zWnsXabhJLn-gwe7Hy(%mT6G7xuAqNPCk24!Q@$FvU=K9F}k1C5h3 zv_pn}QRF(jL&-jJ^Ip5I+g^QE{zC+^$u*pE2)KID0<7V-H2XB`PMMe58eAChAE$A& zx%KGL+4=M3$TlL5@%?Y4bwTDmRYESAZ)pR%`ouhv$?5mw#Xt?982X1Vxyi*V*u5qMR|_rGw2Zq@ z4x{EPn#rFw<`rw^FEUP-o?e4YrSvVzJJ~>v-dLT#WD1bzI)l{w^CnoafG5SzVmh?k z$s)f}Ms-^)4^*}CpP4NS!KkAv-9_8JLH{g9Vb|@H#Rod)zsP>222pj6Vi&uRN^dN^>z3m;Vh{*;%X&Dk*2NSPUT3qNRL-1uvv&>2R`&6mSU~kSg)xUF(v?+hTlghSWs1@$%xUP%0=l72D^S^2-4e#63f)H^f}5 zSTb>XPoVMuR|xK7Rv(u!XxDcWYTB-%vqbYHxf1a_#dyimj6c=+W?cJBWk~>fF6(ci2%#1H(G5$Hxp9WuJsZ z9#yqOJeO|HS#u3MNhhxNa_RDYC*{A%H2l5ODXi*~X}Z%yWxOykmMG0nrll6Vxe5~^ z(Uk4RhPle>`$~HJo}6M)zfXOCI{yGez0!6t(c}H*Lm7V+bUoCS+xZg5%rRZ-o>B8f z+)RQ#HrEoguI|I);@f;dsz|58JLbZ(VlflOH~uYvb(wIC(kB*E<_X;;)%>M#9DiI- zH{EK|L=UNK_VV(8DEQCB$K}Xudgewvlg0I75xuM)e)(DwL6kJ_Y5`EXMc0p{Gp*~m#sXyvtBjrxepV` zc=5(!X4uHai}6$JjKkLDmMDR>9l2Y#?Cmsi*_Gda5{n9hOUhPDT;}FNX#j z(0gQb5XeWXl6yut#D|B^$g>S^^F@WM8b+0O`bJ}B&`PgvwYIA67r8xZew^3nyF0|l zNd`1~{--xTYY__OYMvvf>Vnej9Ro^=_OHrVp)MG6paq}1cxOwK4;*+*tGUo)${{aI zcKcrCisV>i{-+7Ud8K`IMuL1HRgbR)KEH4yM65_hx0@3hkV#Agw;3rc3S z8f11_<>lh@98uLrCt#ZaLQMxA;AFfpl14PjISvpd#mbm3oG+u-uUA}-{&e(YQv!(C zkfd|~fE0>Qp82xTWAGp$!aU2X?Hy6ilf>gYatX$Z=2o9kiYe}STuUHD`otVSLA@%S zPr1tT=>UnLvpp`qh=66km||Xj)9p{1Ev%ur^?yju>&`~}R+J;y?Y3lge2K@n)w-aworrWZ{uJ9h?nDFl>$4ZjJf7s%fyBc`f3M z#}dHPEJ3QH?3$g}`{oXQ!p9@TNj+-arVnZJMj|30P^+!pqvg#*PV*dpr+n)7GTFSV z2d@$ZQ7d-fv}XDA%~rP@v3fAjJ}#9##IqueX6l*;ND$oR`!Wvh6P1SiG5k6ENWP-O)L8< zzfNm)I&KJvl1ceHjV7>Uk(dB}JCn(^+l^kr>dH3|LaM(LA4))bGSZZ%&owg9h)hWR zo4c6nIO9WS|JL~BbEnO$*<9+DkRr5KUV%u~ge5)@2VSRqvN;4K0q*<;xntvp5bvat z?&e)J6$C;st`VM;UEYWhj47wY6puRkL2nP1^@xjDLok($Y6PVB0G+Ax$|nF#j&0bcK%$9%FAYk2-9yXP zvi(NF*j-MuI+MYV9zvT9%??#8q7)_6(D%6*@k(IIJBaRlhb!||wfw!g(lj_cO_xs7 zG=I#0B3wF%p-X*4(U3!^M#PwTAG9Pu98+R4h-TuPu;k~?K5;#Kn%a+maF z-SOrb9+l>gGHb%$QEO>h=6_lJYjtJ`=$f;TI#ck>m_%VTNCVBTd1aT?5O1A^QLk#N z`J*nMtZLk3x`ELd=lD#AV0}vd&1r%dMwl8KRjl;~RVdltmg~It=2;}s=kkfLw}wdN z49{$8vCA2uKX-1J>2yNISe=i1R=>0e2MmCChnTPCy@uA#G6KUYlmT`s1$h!Z_RP6r z7^G{F4h|gtEC4&vAv{@bCz=@CLu_r;fDGYJCNYiqlFw9)rM5`Et8)$e zPa-6Hpbk0#*mTTp%hJOp1By|u@I_yrb-CTOs-7)K%q3@~8?Ps>esh1$QfhyjdIUa6 z^W1H3Y64t5cICs}$gA*|W*-WE((OWXQ`uh0;?QO}uoipqB@*I9LEmayZ->S z^Nxq-&11{jO|G4zYHb#g1noD}Idb^w2xn8VsU0(Wo3n9bl#WQ;q$r=%=`i-5OfUix zsDpLi?_{5t9)Hz;IdvI4!{!?}?eAxe6OFgPk_8mmI}=Ly9IvwbDjk~-4;ds~?_Ya9 z)$LjKl!i%w4OY(+j^Vtwc@4$OJeCa48Asie5Jqfe>ToenhnqT*`}B30)n#sR@gG;9 z`yhRg4{}dj#}MK)U(#@y7jtH~`UCMGHXEY$;$2dPkeGZ!pr$iXTs?$Yw!=HU(6%43Zg z`Bs3pQN(l^NRL-Emj_Uej!Z$MQ{BIm1Js<5BCDb} zNH^8&-i{@{^!q@8PTjLr+E~tLi9}xvt=o21qBx}} z%-0l1zdny?vGWI;ZFJjjD?xp0G=@sBk=O& z97bf4A6(;%CBh;A6}K@@8bPJ&9%a+uxl1RoVSmP0M+T{tK~~)K=qa0Ac;$l>xJkcB z+`8P8j$Dxh3MO2hmv8w+HlcNYbL8fGOIcIWdoqE+PZc$*0oQ%|W-#qu3K<2R$UmVn z(11ySBgyODSo0EUaarj}7>4G}{;zPn0QE|Wa-}M2qoL`T^TEJO`VnCJ+}KZwJSfYb zFD9Yp(WO}YHhNWP7+Tkhr%#J@}ZTg>{u)?_LLwW$g>27&8`EG`lFv&1gb9U|UKg?(N?L){v! zdm#HDe!PZBR^7~mH)U2{ydtT{lj3t4R8zuQ;JIfqXdBS1!RQ|=!-C+rzidV-+tLF?N+D;Kf2 zF~EqiZAUl)K zEPj0cL$TQdp$}M~IK& z?i|CDi`rh#hDgdAR^Lwb*J|d^zdL_1KP3F`qG%c->sD?qb`0YH4)b zBNVJkf$KnR&GuaX0P~n%mebuGIW^m9J_91SU{D|c{ABdl=bjG1*YI4iOXbzy$6urd zhDiM16Y8JyjebVZ{{S#F@6Desd8nS$K-gz{ z+5Xh(vS9qKY!l-VqcA9K%HD2$gM%KZYB9_h-I((?`+2>u^ON(=+sWQvd)R!Zt+upH zyn0>4ka4mR#|TE2Qy(Hwu-Q#2q#VW2b~JU_I84W$`}@7_(_h*X(L;)f6m|fbH?i^$ z&cDqs&;48T6GCkl&Ucbrymu=yBnl$5i;B>3Kx*y1J}Z(Q_V$o6{&X3vih=~jNC z`QK{x_D;}`210JZ{*8|(%DQ)$=F{~XO;$AwZ7w672TGXOFbC-wyv{sWn0JCc6zR0b z!I+rl2qWPA4Aj5p<=%I`fo<1G(<1;-fU;B(w^DPA$LubiJm)XD>!yN5ySJ$^{Aa|3~WE+TMK0m6lIX51r+Q~{ppgPn~QLM4iu%qMw2Zr z>&x1O;#l8K+Iq7ze^`2$)RWdwyVJ2F=a|NMaSI#yHwZ#?6Sta;y_JWQyvGKO=8KSY z*0_Rl_U*_#E!2k{0Uu6VER*oB9?~HB(QbwuXCM;ZApFt)0G{?*ZML@7UR6trT{>4+ zwz9fY>V%Y3HGB`#*D37nMDsv#o+H%$hW%a)c&1Jx28v^-rQNk1*Cq8*;ufm(u13L^Xg4{<=QNVa<7T)?~suVxVJmErAnkQSj}nHz43tA8kq0RI*0})N#j;kU8*bB zEQEND?Gegj$o$_-{#^e6&P7^&Px*N?{{Sp#sXv+wvPdrHo>hW4%_tT%U>=?azHd56rG(_CNQ&L+5; zv}R@51xDdeY^%^_?@OY`r-+ON0myW8+MRUsOwMM>{C$er&zm)GG)eXEFx|^}cIvA0 zPUYQ#3IIv)0-2kK6mbfO1KjH~Dc-TF@|~ZRLtD+LO$6)Ee(iqmgxBxL%U3MF!rzY^VmYLcYuc5~ZteAw;wpfX z7{l%1usK}e#m*(jjO&pfV-MD~i1mN>rJxgoK<*l?M#8+ z^t%l-2-%UhmsWamxK$@=7@C0m^AGa`bo*SRj2?e-Nq^<&7x!|Mob;?Je*Nc#uAGGe94P3qj$o%PrFn9L*Rq*E*^`*Rn9X|- zTh0ts$gA0CepqJp8VNuLZP?^;YV{ShEHwCemThMbmS9d6{NisA5979L=bKS3bX?d+ z40&vp>Q)*dUrn!(xiJ0POjJ|;2PKatf99@1hrLc)4HDKa0!Wl?SM?1?(?O7t)JXmU zj|MB@*ECHS2_n_5By`zgfmQjqy^O}=^t#Ccw#wGA8vg*Xu55JujTwsJ`&=DI zY-GlEkgsrE7w1~ts7vd68SVhuS#X_H@VTC;c-BcK-kuI{5`D{{S|%o60Zg zJ8LKipbMwB8lJ+3_27?UMjYZv{<5CfocT-v{Z+RbmZ2nJ5Vz{hj*0Rw-ksesK0Gb>FQWb$!!bB;cj@nP4#a(EcUWe7&-yYis<=EEL`i<_*=ui^Sdd{X(m z(G02$!#Q$3C0+N+qom+FIFr`#^FubjWaWOZ9H)q-4}7=5ECz5nEB>9dS{bZepWh?- za(bld;yH^)e~+bxu-WOXtJ9YuN@Mv8+?HpxKbs%am@noQqKrq>k|kh1E~D_urP;BU zGF+H;wn+Z~4$CF;ZlidnXs!_rX~af9S;<372y|gRc1+xgSuUxpTvj)f5JBt5EfIuz zG)Ux^G8p`pSJIj@0tfQ#`m)awEe8aYrm>bi?hAjxxAnu~2_WJz{?r4;skq<$kw32_ z$A-VPPxOuKR5tfAMaQ8GcKmV@#~E_~{2L*japXvHUfr{syNjtLb|R$KwZY-UasV

-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%0AuSM?q+wO0WRNSr#oNAeU9F!M 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

`!co%agvoF3ZNlJc2PKm(1F?og=@uytlSZF56D^ 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%0DG8@erO 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/img/455.jpg b/src/main/webapp/css/img/455.jpg new file mode 100644 index 0000000000000000000000000000000000000000..844aebc38e6652d19ee04f3753b3450326a7f978 GIT binary patch literal 1311496 zcmeFacUV(hvp2jGnsku_5kav73euY*QbZ9@q)Smrs8T}cc2Pl%*cGsg2uc^FDONQ0 zM#q96+@drQ1yL0EW_AF*@8>zsIoElw@BQaBUP<;|dzD#JersmdA`aFLzNJYni1zm( z2un*9ViZ9T;sinABPeinR}wCVu6K$M1Qo9NpgaTKfd*H}-EB0%*?f4-E#ehW9A)-{zkp z#ON6WG5l@f#bS6X+WN7=Sz&&x5JfXHMI~qdU@ulwm@=WMuBmCLu5YNRsi>iAsHJYG ztxJ@qE1E5`v$R(_6gx9p{}W=K{?Ii z3(k{znnx1>JmMR=4ng*jFF}HDXpVw#Kg@@t&~TU!XW;sGK2WH<{xYDPI&|$ZhS%F7 z_`)%VzXxjvI|wmyzAMda2+H6`LV~;_yf$Oi!B@mKLTuEiQNp9dgoVYVL`6iU=#pY$ zl5|;VX}Ywutdtn}8v5eh{PU9{E-ET6AwF6{Vl+)cLV|`L5;R^DssBj_gEtAOQG_dT znvXJ>ph{8rq$q=Rz)O+AI}~G}Qh-9ffM9$9XQ})GfByY9xOKYuK?kn|r77XMW6K>Iy+2>tcDo{?>5IjTLuX_258tW$t2?!TTlKET z$tN-{A+7Lkb@Nxfh0eZF+Y`?f-K%-uD+Lk)YWYc;gaie2ND?M#jNu0g*psCNG-LMD zkb+xwWuLUBGTw%6Ibdc_XNGBaO%p@{gr@71mIDzfW4#tQ>V|taj*#$QQ!wKf34<>Q zF+OrkDZ-ej3tG%5usYZ8`QiIh`o)R`IqDBT3!N+JwVG9ZYSYKH$Ex$PpQxKpq~@{> z&Zus(nQh}zd#b`}=Ui2LSEg%0OKMB%ogA4X+4HM&|zXO(&Qpc9X)f=Kc(Unq*=YHDHO?*WgM@GS zrSG|EgT!MG0VDg?YVqLfIj5E^sf%)BW-E%%=stYywS)w;JkJ z3oa}QI9`4EnDMdYgM{?AZC#}rcg4IlH#jRK_su)isb?TzI^AdasH7d=S39=$&$b_Y z{#e0SbVBp8Nbff#wF(ytwQtR<{=s;!bE=C|HPPi_Nb3(tt94m9*>Y|7i&l7CsthO` zB)FPSPJMFBS)FytTCV;2!`HrxJ+ri4U%TEvNYpxM@VPB%KJjYDOCRfv0h=OL9E$am z|6ty=+T$uKdxPtNS1Wq!?KgC$)kZd-I(v8J&$dksH_CFFUv>E>AJKDvcs}pU!#AJD zUrxQA63N$Hf9Z?d)ncLI?H|>is~_pFn7gSeQ|H}Za?7nw>6DLJwfiG6uu5Wg{go#V zjh6d`Z;(uDF00HNpJ?WO*WjrqvnfQ?_{4>4Hy$}zjh$9zSQxc9t+d_PP2xjQg`UHs zqYZpfc4Z}%Jpr%!bZQvB;jddIET-EyRaSSddCiyfX5d=zoDVO)51g@Rx)N*U zl2v#`cG}a(dPKk2AbLUQ`&g1Bd&BaZXwbT9@r52F#%06mcb{@yz3t{0t zy?K^-)PwSw$&c;0Tiy>Zh|*Liv!v#uX+3%<8&f}W$*tT}HV z2gkm7R-yNO)00`&H*fy1sn6Wa{qA(Yqa)zjLgx>g^fsOCEOTttYRMwJG{+rT8&lJL zZDsG0GQKUFyK8#G{Uc;tAFkxIic4JH?IRmzcA`z%{+L^~P{hg1fUj-?V{+3TAT$y(udO@c0lTGJ^B_XBSh?{GwIuj5rA$%%hm(>bD=_iUZ}@}j!J^_wDmslE-Hw%D+VrIV-W zdnInE*b$|6cis~FMM06&@{PMrU)ue2Ags22b>-b2*XqBTUi6tR3fj%LbwbUk-r)X6 za+f1(R}o7pYT0LumcP)c$}7~@6uY3HBQ!`%KJ~Hoj7+@G^pEwHHy=Gqkt%$9)p3QD z+>i8t9pY=oZ}2#Eb;B_IY``Yok)d^0G~eP8+$MV_m%P-r%vKI1%vvn$y*G z8>cY$_q*D1d!qx+ zY#1a?bQBB{PX~$SfO)T%qnb4VFi^DaTmr_HT1Zh!H|c`XC1FXQZzkMtxbdW~1|yD>Rktq>qZF{o$Bf@4RY z)enHJe4_X5+V!OM#qy;Su01VbO-R{E+-olSP~c!tSP~*p`)E|1OW)j}K9%DJQtOv{ zdG{|`J85Ni>L8(!r^awxM(_7ud$xOnS(fXk*4^)JK5edj#Od>0&BD=TEGs$539J2|d|X)PCnam-W5# z$7MUeyOsS%j(!mA9VFHsR9d$~od4iWg^I#NBD_!eO>M`wSq6JMH_kF+pX<|-G(I^< zbS_wR_r&dSX)|n|4tzfQdZW(Pdky(BTO8I>KIV5;j+wWk{X|EUsNfoDQyYp0VR`TT znz1EI`xf79N$!xORpfWgUjMn%_%F4LJ^Rb=PLs$xmK70dBHjIJK)UbPwM^F7*0%Z` z_k=X}eOqU4`D((mzb>^*PrAuUQ8JKpW3RQK7kJj}n7Bx1>!f$hdSg1WDk8b8DN^4$ z1YhOFy`9psw6Ut9q5HM_{P%$Y9cvCWPAAH;g8y>A>Tdn8e=g@`14S%cIB>`7I~5vh z#mDhab3L&__hLi1&Ih0QM%O8xD|>>@w9Ohv+uVD(sWSVc;fa^mH$2Ln=o}`H+iN9f zQM0Ib>9m4$`|{Y2(Q~pwzCP+t-uk7s^WC{U;)|BIJs-bjQjf>=8nLX(VcUV1MrLE&sd@y7kfb$X1j{g*a^{4Gm+Gn`g6-q%_# zzhUg&zQpXukLUDx)*ajNC_RL5TQ#fw zj4U#lcZ3B~CO!YqI7gDtGbP&Q&uc8U9_uUAjxG`e*!sZm*)`i6Yvy*3M4@7Y{pJ|8dMFVt-IhfNcFc zh4BM{KN5XU^f0B{OF}lDn5C%EFsD+r&v1}98|uGLv?>0++#G$`YkD$w1G#5@gx>b5 zZoOrgG^XRtF}bSe4I7r6i92{CEcl|t%aHp(!(HGh5wWo=)(*z;3 zN?YW}Ws{n;5b2WHvg7r{2UZs-Sd{d;%sZC%ruAb$_p1vDecJ~FI#}l)(S6?)FR9)t zcc3@WZ{pS7Q)lkx%xoLG>`F<_C55}McUkUYALlcgIVo4BX2l?pa;az2ru3G+LBg+R zbW+34!ydD_w-2lrbRV04^*U>5%cEY#*Ap|+nZBAIlg&=(-C!ntlVGm?>QMS1s@%V4 zQyZu4;`$ol9^+Zg8?9Dej;q$G5-M*N&r+LR`&Fy1``FL-6&~ZBo!je}(#h8){Cw|d z!8=#j3xi~Q_Ql_qO3**$;CZllM`Hi%PQ&1b?{99Ay!pW?x}{$^XI-7;y5nX?MNjk9 zJ>47jyl(%`wEnl^HHUyqnc3mFm1~2Ye8iiiI>L=BwUc@#oqbVwu=_;Eo6A?9?uz)< z-YR>jZ_R}FEA5R=?>+m<-?wvPe?Y|diCeaY>At=veLCdSw$>xP!BSKBaxTWNUHS1* zU*`4CQyJ6eSlG4oe;a6Te3bkyJom!dCq9qHN!%ZA^y4^RA-g+D>x<*8feh7$%(m>T z?6ZP8O)uxaO<;GQ=&pX^*yQEeSGoLBb#eKJ15w(q+!lV{{dLxxlyZ%hX}zzzc6)Z$ zpHH~Dx%%3bb%jM=ob(&C4sTKWpkS31y^Y|X@RwiN-Iih_yAsjXh&5u<5~{@#?md_2 z?+qFV?tJ#M=U~;w9FMr$5&VBG8`ELb{&}60>VqPM%2ySE7rb>!u9fB8ihUNn(RytA=GUI_t7X*n{MYrY8CaRw-JABK zVnds$bIqqv_NTU$Uy>Nz11I8|Uo21!%HkKbP7HW@Hq)YEPR7&k=O?U7JK7d-_s!8< z!3Xz6gcMcIHJ|Q0YN*tuyT_E}_&(Mn-L2c$_=nPmB8S2i;ob>jjLVAb7T@W+#rb)B z)lZ+8ApXnmPK)cXnW7sH9}3L<5!v3ix?|;&`tIvnuW$eIdQ;4RUB;%Q%u}c9le^da zth}bp@?M)2^`R;J^{I<52T~4hVXYfAcDdWhno(tiFKk%3VavY{oa$ejn*TI6CNZon zqqK8X!Evg~d$|{qUpF2Mo7gv1WK#`m?ndAKerETxmdh)jYycDxU>^o;$e<5V{qZ_TBkL^l&Z|&~O}(z^Cxzq(qRIw|Y^90s?>#%YZo{;&@2kse`kULn>~eSc zWFmjxBr-(#Sif-n!j_561KXe2&h7m^gTqK1e`#mW*7gFC4XRZIx0?JZui`p3ys1C; z(X92F$K`yl#`5xw}0{_J|!mh0JiQzj-i zmF>G{?;V`?=ET;3&2QYxT{@GyZy2z}`+~j=_?8dc`<%G2V$<;(1Iq?h-*~_Al<|*% zL1MjaSku^oWMlo7>T~@*8<)Or>Y;pA*t>LT&&t6UgB|0Gex5EM#2PonV#%o|3%3}H0dxuAaEM=@_!b1VSNq%~} zu5Sv)#)L@7$aAdM!$zJg@ePk0 zxmgetXg+cSocqj7S4W%x$232Sd3UN`?3)&Ua4|87`&W+1QJHk3JkIrc!lMl(ZMAlGKrIHF7&0JeL(2zdb}k@0o|}ifPF*}o!+x;8zrTK~F!BI}GgKZN5s27_8#RIqRz$E@*gq_s8Lk1(NPtJP7|}f_ z{DSUyq6}X%Rv;_%H|9$5 z`ZrxT@&I|fgcXdu77k~Hz@i=I{X4da1Of>DOQ{%x1kHab7X=af{j)l0jY>EWAqH=% z@h9?{XL&U88daD?A%3huj9G*C@IDQ1Kp9E{L7cw{Q|Alg)}gW2#0qVd4*}+G5<{sMZygJVN#3ChVin@yz}WW z!r)tpuYTd-A%?SO2ZyP7;&FIP*3XXi44JK=raqgPYaAWo$qeugS7dlYUe#!FXUUDp zivC_klbv;J)NMk{y#4$atqt|IU%SMCxi)}l;5FHJp5okS!|0%pAn$Nb#ps~G;4s5z zqse6FhH#C=vnMN(Rl);|CX>g|670pVPIe| zTU~Rurlu;?Pz_rX9PSyd8XPudxCe9ZFlMMfxud3tJ;H8LM7Ysppp-X-pb#6Ik&gc@ zw}OIjUS#dC@CA|3_&@PB4AY~t?YzTS5ur@)1(Dvt;Zug21NZ)Oy~ar0km0|M7-{mixsN<1^##cSHW~6V?w*0> zEM^3DX=!dW*;K>8++0IP!(2;8(@aZCTSrsF)WX8lL|cew5EZFoxK#bWw< z8IFu(sIBhB)YQ<{R@L?L@>13J)b>=>*J3hMHTAW<^qD$d`r2Av!@XGshlP6vGrf@l zpiRvmdIBO0ytOpFRdt!VKB`(8+FGifK3*EC8k%0-2Hrk;>IO_Lvb~`V=&BcN9KzPb)&8}rwxPDBp@zZlRc%;a{yuB|wd&B{ znfz9jCtX8lZ-#w1^p4Cln*7hrHFEr+nl_%H0p4Jr4xtg=lNG&~hCZy&AWvxIALQxl zJ$rSCx9?=dU%a&T_Vr}0v9xtCGxzuP4ug6I3$!(K^~`m&G#8j_X&I>NnOK;a>1eAj zuz;7Ysm1TD$!tDM2ABgJ`_-$ZnHlV9`}haKgD}_+RQj_T~BpYEq$hes)m;~ zL)AdjKu=XqM~A7espqMqt>rn~J_cp7UVJcGw#J_P0XA zJv040gME?tvnS8~Ur*(Krky+*|F2DDHX_5U#Jd z$U7>~J3L&~77`0^IuOGCpb*bsIC;aHGqxhe{7ck87V|#-CfaL4ElxDdF$U zR6~Z2y#Ct?BQ^i)i{Hjm!|_HUE=6UDTET7*wiHSh&jZ3Vga$3SV}k$%ZU{P6H<6VaDp?6 zSWmuvm_)7eMpFt3! zh*P8~<0um;(xcPDe06v%4Nze z$^%LnNe^gY7+GfHH%tE zy+wUQt)ezi+o(P8gC3%MGJKQxRQdGz%=nh_x$^n&h4O9WP?55ZYu`lA{;?u?F zi@S=4i|-Ln7r!n3M*N$Ew1k?3rG%HnCW&Jbg%afwA0>q)r%9Sfu8>?SnIL&d@|k4& zXyMV*N1KiI9KCV$vC)@D*NpCwl9tktS}GMJ6)%+`^+4*w7@;xK$1E7*HD=qGlrgu* zG)ePGPmwm0W=e0BJ}b?Yen%6e&7fJ*R?~LTvT09gpXg)g+H@y+H2oO;8ofb=PiDG| zrA(mAUYUzB)iQl!6~>y3^&Y!(Y|hy7vAwe6W#`L!%W`CMWvgWS#wm_lFfL%+{&7X) z>g4$4ROFV)Mai9%F>hc{}-a@+tC<<$Dw+C@fS6Q8=P- zTcLe|%!K(9R!=xI;rfJ@iP972P4u65XyT2Dt%`I-6U9KqB*i<5pC-vqS~MwQQu3sy zlYUH|G1+nQmdUx3>!yfI(VyZo<M$ESk72GBXh=UC2=KVCAQKTrAlQ%WqsuUoxOkdz1aim zI_iPyXVqV6jL}%Eu|?yG#%E0xO{V5C%}OnCEeowpTE$vj+B3DiwNGl->PYL@=xo<1 z)#=yO(+$6Jm{3-Lj=BLenZ=!6n+9b>5 zqp7-SsA+*|ubH9Q2D6*yeC7+yIp$9nj9K8g;OK%k7LzS}Eix@WE!0`KZsE;E0*kB` z?O#-5sbI;pOt<{BSa0!$#doa4tn96hS~Xg$Sch6)v7y>5wmE3?ddajU!Apvk5=$+Y z9$Z>yJHwW3Te3`WneDP;%bM*p?AF`evzNACX`f;L)xp$Zufr=xCC3QIQYT3#cc*lx zUT1UX1I`UDvt2g0JX$Wd+<$qotB|XcYnp41+XA=4ZtvW6+~eG`$Rqp=n{1Fpsd}a2hyMk0X>KVk6#0&Wk)2`7O#R>Qb~+ba3?J zH7aX%u6e)KVr}X={&mcCrRyiHk6HhAgUN>Ejg*ayjisBWY}&Tz-R6ax&&PF9m{(#hhwFjCG+8iuAqkjZsnS>O(G zshJU(Em`ha&$G?5i*rSZL|kaiTa{OR(duI9CH+e|`P1@`7f2Uy3Mqwa z3O^P36*UwuFD|>h_;Tr$Iadlw)Jo1>opklsHTt!^*F~;xyFPeh?TwzBAvfD^`QB{?KkzjFVT0jq)6gF)~YCBJ@H2^|974=V}s z^9uO%{IJrf5J~urDflI# zksnr~G{6rlfm=%m{r`#&Rk@MmFk$!IGA!t zcdUa~`0et>QPZ~yi^z`Kc4&dc*?gx8MO<(ZGmAoTj5A%Lt>A(1WCH+M%e$hLU z&KKXW{qRlMz;e0&nw>||FF$zE@?FJnvFqx!oTC|69=>et-#XUe zApGoNT+LXXgJ>ayC*b>q6FskAb3 zpe}j&TsAWrY8IJs3I(woZ}Y73oVuK`n+6T|f~rNF;>JXKI-BcZ?O4f`&?o!OTu2XT zfiY5XMCAw#GZ$WQbZTv8p0m7dwaQzLn|`JX+>o7=&?AAaO6ZPvRhtY+tZ-$JTn~C78witab_eA&1rQ~a%E{;3&%B009vgNfkvYKKsij*bqYCSXy7bn z*Qnu?&XJpfleHI-erlF2%nmu|EX66XwuPEJj#)cq*|j@ncbQ$tbOCDe ztWcuKS)^!PLB_U2(;+)bQwBIp+ahsboN<0R*=6sOkOw%b-|fQXS% zBui9qL^CMBd1W)U168j2q!#Q^8t#gbkO!S907=*ne!&2w#ETmfc+zfnJj1q`19S6; zac7g01nIiN41g0{2~z9{=cFH7mpovr5$#I?V&9)5H1cg`tiWY~2MQFfm^DUGD zfW)#_v;vL-{BzY$uFa_HLgmc%bY^7w!z9aENZ3S1f6<%J{EGb%XaNv(C-qf(`woYA=5 zp6b3t0a z&Q(?DV{B=)WpI-V>1<+smzUGg<1X5QO6S<8x&AD9mx}bF>ng3IHJpkY58u8gV{%6M zx-#3S%glpqwmEI4jdPAle!R=!vq7=DTwLmkCyEJ2$=jJe^b823vYjcMV#dBI4IACk z?XPH~i;{;}40fI#>u#Y^&0ic3+yD)SX&^I8s2;$=61rbw!hPfi8q7lAZWG59@PS$) zQebV@%E*pK(b8*4vjuf5RC#+{nMKnFy-2jD>Bl?Xra>2s?8a=w2UN4c=ZBkn-ql$< zUPYB~x(NWI%;t)d=1~NLq=vv)q&@JECr#yzO1oV<=zIdou>wR500qQELu=FvfU?`9 z&DVjc0D)*6fJ9FBx$Za*m<1Xa=-@qi08Nim0un6&qR_CQHj;$q15K2nGblw$&_uEu zhbTtP0BwU0F!1_cRX|VERBB~;k5KzmNOa6|cK)qjt~*bAS-?m@%W#sF1=q0`c^+9L zZRE#oI$M@h>>*Y|-{w5F!DG<%Asj^8<^c+f-wKM2bc(#8&7r#itSCiDCOxS}wbVSI9PLu*f#){b$fq;uR*`?djdJwH}hA8275L$6#4#)(A2J=O{ypjYm zHurQ^=mOIRrdlK09E+1l>;vTG=Q1So;h9IjL2b_B{a5@A3*es39NT#s0_n*dTEc0jaPaZlh|)-bLjDABYR#;G*S zW%E$LoRMu0oFE083Rs9JQ34>s0^uVn@OTJFI)$d1hRO`QL(~!h{s4NQIUpbMOka{3 zS%TQ^f?}IO4-kO|F7(>e+T<*iM)jEvrNEz?h%DLij`ed%+=6PPVgU{*K}*nz4G4QB zES~t314Q!KW`NGAU^O6I;JshGV@j-qEU>^C2$Y+L%ZNuI0-16o8iq4X8>bdP)3LVu z2!w%swyTuEN&}edz?Dejhxv)f<)}2wIS%+=CY$H?4LAr=o4Jst?+NTFq2{xl;%M3y zOtRme=sm~bvlh7v+=iP;wx zsG{MM&xu!ccrI&O9xrlb>uGLMkkg5fX`Y`-?_{6bBcs}2=3-YTxhzJzY=#IJY6=Jl zM1^w5vjXK$=Bgreyu$gwvX*HEY++G{R_|hb)K)<&Ahi+gfFC3jr&7f>yO5e8Cel=h z<_++475Xg(dAiPkj;(kCc4p)bmL*V*)g*$okVTu(JXJyQ(TEToShQkBb_^&tf(+u# z5dK)j0VV+Q+lEp(Z>HBPslMABdmD@h~c&I#6eiw1XbvgrGXwv}~p?u$c7DYDv=rC2-@d z(xf+74H^d2!n+A=fus!afoD79bihOSg~V6^{S0vAR$>2OvQQb82-12+CI(Bfvu$Hs zFZ3iQo9V?!IM24)(Z!n^&+)MB=(5^FG6^um9#j;1h2aodt2AJ#P~8tJIO)lOStbt= z0_%rgBN)9Q;xkPBEr0?eTMB6+YurJS(!gYZiCM7fq{Mo}0Gh(0P?{|-(hdSbTU^NF zDheozx6}h*0eX=0hoz1O4kQl|bO5QrS@4LJ0ME?zCb?pOgXwjc=bMp^BeDbCB%Ba% z6vl8#2HXJ>Vfg`ThM9r02nDWOwKOGI9dM#-&|-aDOcA)SiifpbHT@hTF3)O@O0^QX zP?B>2VF13M>kV#VDT$9(00;V@ToB*H~^#5h(^uh zq28IgLS>1YiS_`P45zQ9Idd3su^MK1R)s*Hg#OvX+Zea5bZ}hT3Y7!n?TXT7S-Iq` zKFoDGy0t=7=047{Nc_T7{dil`6XJRgbT*e13YuIm9+$1}a(J7F=PK8xU2-0a!?_0; z`SpB?H45pm{HppcI@Y$e6Z9`iblp5qrNLa%66-pL6bmYTH98g`D|a@8MIP27O~_^N zlz1yT1{RUZfaPcg$R_kx0I7w6*QGh=VWvS3;K_)fB5W>&bpsr-x6Z3jl}^JV>o?az z1%7_1Ji({u-K#V}6J$0(4{3EEhd1c&Q#d(%JUtBr^x-)%q)Q}$U6UTwX09q4CUncg zn&=TcLcYO!$c$m-t>xK1>f;>f3#W*^{3;&m0?dij+W+R3TsjdeabVJYg0Y5lm{eql ztN@J=gGgpH%tSX2tOj}qsKSB4>%`~sj>+KHqeDQNKIzc?>@AFY z3*rI1Xn{5N%658$1i%?m1f#a1f+Hs1LoX00ZIl25L4qs62oWx!!(A?RFJuu*tVu`X zf`-)&6d(!}bR9!0m&^#P4#C6Fknn}-@OEhSp!Z3c=IGx^fU(Mw^TNmk=ZGx|Ac%yu zofqct2&v+UjQk=E7MFG2qaoUVj|fTIM=S^LL!Rt*{wlad#|wC-09pf#2O|Y;I_*YG zN#i*bP&I`E5f|x=M9k#mFVJwdD+ZdP5jQY^0``Nm0ki^kAQFo}Ohd{o0K6*bZ3i?S z!mkV#PSYhb6NZC6fdMcl(Iqej00d2EF?#(Gz`3{`Ts7Iu9i;7$-Xl2q8Q_F)B}z#N zvvE1Z#U4$hQNytqBF>uij#q`jW9tNj6(_OX1;7ry)2f*j06mOa5WuXX$pBT!m1##zC|X zf)py_6#oF;xi$gPJAj|K_^p}C>Fl;xiIx~Oba+%X-wW2Hv&r@WH7jA zG#C(U>Rr?0s){YAzEO6w>E*__h9uWTa$S`ydbqo_H%6zP@#l=S4-`AGibQmn zFu?*?G33plGgM2`1fbN25-oyU5z>fi1|AfYp;v_^fxu(@4w20m0-6U`N3t0RSr|5h zN+Izvxa_w(UI2hVt0Y|@j5N@jj|5X2h8o04a+QV;Xh#A9pft}EcxZ$ZBu9oSs6z-F zNCqhT&=qR>2uf7Lup>=|ZE&Oj`T$)n&EdM;1TOUk$Nj2&sm;Ksh~+i zIWP~s2lQ3cz${@t2uiUS-C?3&2(e*cbR#@S6oSaT8kD65(n`D~2RvW&&MxZ#p8m3YoCZh3`Smbb}8xr7(3FDMgBty_mHsW*GOh>pbgX|y&OOtTxu|) z_Y=dQB1Z|LUJ`Tlll@C!%0nOpV-z=LE`q^O*=%7gfT#<7%N$UWI5bOAxge^9h)3>w zBTnofLS?ZS=xsKL8uAn1Y(RMC8c_R!_O2qU##CH{NRF@Yt+FR+6h0ir1Tar zEsWb2cKGbFf5|+wVwcs6!&fVw=!;s4Ek20)lHi;Of8v_KJIo|xix7aa0|m{?^92SCwh z9pieqlaVAZ;}J{35vX!zBHcd@MM^3%>E4X^I9Nt9TfNTko z0DPlKjkH3`PxOQ+W4Ht~-5RS{gMp=x6#VL+v`h$_(8U4NAc4i2q=+0F@(X|KhX=>t zfj|x&0v)jYM#z)fHF0E)!wBSTz#AK)rVP;%16DF^goV`n5FREt?dN5XNr)iV01O%I zMKIe0(G5%&dco8)`3-4#U``?~7Wxoqk=Ps{g6j{UOcp>JbORnlz;A$wbAYvy3{9X8 zbO3l32VRUjBtjj}kt_ukkr8I>IZPfR%JCK`vQKDu@t_Y>s6W7}|RnSAelDK`om2Kj`K*P+df|ecB%N58e@nkf0a99DyWVH>OP-{=?HbES6se%8mS#7Y zZCIl0$B|d5QYIC=72_;c}(QQp8A!l4;#fOnmh7$-t7;5gy6% zOy7vK_7~Q#FKgP&>GnCHs{O6s-`;cT_We_PiS;6vAFb9oc)v$h`@+2kl36QVTo?IX z-JipfJ!n$AtUi8|XY?SU)hrvI`r!W5h{Y3~6K(CMU6r@nHpQlE(?$8>dtW#0UpaM( zd#&4GRT99R97xMmHZwZ)9%kDiXJrkPMrXnf*aeUixCg5k2{(Dh4W@z9hz8AP(#U#< zj!i?J8bSmMa)!9<0TRGsE5bwm^w?p1z_yTwBatNL>58fiw~d^R&dB> zgK4|T0(VKTj)#(wDn-166xhYk=HnY!62OWfb=2UrhaPe>`>kU!3=xe9=FI4fml)xK zsOXUbk(di5cj$%@aR^2r6%q|{yZ|{_aKOmnc?bg_1P&y~zHta|aI*`N=1u^~tDK%< z#vY<{NCm+PhQfEjVZo-`VdlUno|PqY3V8?z;7sC58twrhoWcq?f_yxu32_yMvWCDS z4zksNM~R?nN`4&p1g!%{1zklD7LErrVh$SNo`fE3Tl&i<5>>_lP*A9eY+3Sxmu}7i zT6uKVl93e#ec=2c$H8pL9{t`zZ#X7&m<*4>+aq`6prI88u`n2brMzufDZo%EvWMp~ zV*6}(W0VJx5JYk$d6*0YR|U`qGBwyI^Z-t$8u&jd7lBF)i&L@kP;!<8={S`#6bN!( z4UHV*28f!$%d=K_Axj4iOVvXm_6)WKai$b*NQgOJwZmmW9I-?-Hx5Rqc_bo-Tb7wu zRzW1=t^s?MaY}4ih$A8C3+n~Mu51P}6y}1Qg#<#p((044C>|a@BF6wugD|sJg8Lh3 z%8^QLpHUPLb3jMg$5k%n%p%mNDah+U@ zseueJ+v?g25i_qVN6FjUObm29BizPOa0g$Hk)Kn0I^SkPdhE`y^39%h&uv;aw%hWp z(9hghdyzdpyfX&ZqaTf1KGI~J5>9lPs7iBWuFD9#UTDv$I6sGxE#h=iKhtDpx2IY7 zr<*yA3m?(_L{41DG-tuQ_2bD+V(^s798;EXB+3LfS3to6U|}t=jf9*VhLz~J@G@Bt za`KD=TmRMG_#$e8g`sWq)rmsvLU;+!Sr)341K&gV1J6A% zFf>X#C70j+c-!;5Ghd8Sc5GTR@aXMRma+fS^_Pt%DDbntEO1|~Ctz-Ue_w8Gj3jMY zla}N+?>DgC{R80Y%xmWO_rpK!!laCTbTm=$k!L~kn;6P?A# zKlk0{>!rydQhOe2jMrVh>3Gj0EAF0`Qx9(oc)l-lWi#vZrU&k~xqH)n4MblIRwG<0 zfMWqmp&VDWJPB4h+#HR^lMo13c~4*=?kd}$g{M|1E=_?1Kec!}j zFoz5I-yls;zALDOz^g(*Fi1=`!`=gO5E0R>6m0E2z-2qyz#B~DL}Qc@134?$%d;0j zNQr?2y0yp~KsMYGYs)y?IiWdBn*(VTV-_t zQpULLyHEtRpp~31un?@M5kV74BlQFu11HFx8bn2CK}VJQ-5U)i+mrAl2iY9ZHpncr z!YT#pg1aHvKAXGCfqM|6e;EwHKo+=?WRLf!>M~ zEN;w6)gTj4fJ7velYL`8fy}GxXKuzsB)S5yMt}hY( z>s0)eD}mO5YmqD4t|?ZW!cpkpTse$_0iVsG5x=?)@qB?GH zLK4;P1h4_vg5e1`!0nFpvmArLV~}-ZvDPa^wV~p+LBO9NGcEgP2<+sQ)zd?O1PS9k zvra6jO@*!|QaGZ8jk=w?WD;THcMmQJ3+riyn;YZK3&FVzGuVLilyxcDtyh{I1BWG? zGAg4R?;cAN3|3$x>u9hyz@L4NSs_ZTlU#3CRFS(PDNn=I(6+mj6PT^bbvn%D*F9HA zmr(Ao7E8awv8OIRp?n}9Q0_Pc5O=^S1akq$8ZG)JEY&>Y=gA-Jmy`o-JD>@yQe>$b zYE)+x@CR(DtQW)z5oWu{J9~FKfy~>?srSn_BvpRwyf{eQ>VE9sIz?#Cgact8?sqGU zc~sH&y0ylAowD$_DL=1gAHQCdzf*g{Da#j))Q8sw&PB1O(WN~1dW#n4_T4BLDD;ai zE}HgwRPWS8JJl53rA~6r~Y6xM-?J(>D4l%{L-Tze#2^})Q&#TE>$ROf#US$P!5!%2bMBs%;0Ib37 zX2KqH5tVo#1&yE@h!qW=L@07m6pzQai!^a7=8$ixU@Z(gJ=j|{Zl_@44iludKqDL& z06XNZ0K-`Y2ZRj7L+rjZX9_)pMh*b0MG39}d1Oe9hK_?H(BNcUfJ*?NWH^r$U}+W) zOsyR&G5o}u;5+fr13_6~V}*?lDFTpD7j^}1XR)Vaao*~ri|Fr}zUD0@$u-~+K^VwG zZOq<-rw3F3!`Z{rhl~{T4~D+vH-6$Qz}#^jVEy6f<&j15I4&6?V|c}LAt7%FgbW?T zK;`%y#vn!SLhjXPI8*a2kbC@){ENlja9DJa(YeJ5lE;a_gL0-B9^$IX1BbI5ZzK%i zHY|@p8qN^G3xZdfjav*i6Va{2n3qgklKla*Mm%spK;RNDMFL`iL52an1aJ;qTyY>9 zJYkO-h(h#%OP~?*w)yB?V;`_iAct`T5Dx@g8PSO9+2zHVz&n6S2x%eJDyY(^jIQWs z0Dc$1?6+__4Pq95**w*WVoDHBWMF6y0sypw6d^!7@N);AHnM^&;4T19NP)suO>rfI z!=h#DpT3f0+b#_20-QCg(&M@V_`PO3ZLX&Wisv~?#X2>{ric_RZcMaG%7ok@gX5QN z2*F1$1Ed!i{tA@jZQ-n~*P}B%G|bGM3t{&Zi6{4iSdfB*sX0kq3$+$qx4%%OY`k-h zimQE7p^|t^%z@GcA$h9t_Q4bMPa7tU)2}I{jnyqpI(N`ox2;ggbxcWgFL$@z-7_gU zGp!bNm2Rnd!F8K{ZoShh6~lP39m^MYzCEz2%(a^E=$l8Qox4rQz&U44SFh^NOZ(5A+t6EON2m8|VlL zzqi#%sdlm}e5LNB*6k+7Sy*qOKH9&Fa^G)yb@f+W^J8ZZe4RgEW1*vMMda3sf3*PMtd@1bUw14}OYoF-C zHHkUZ)r&9B9hKZQZtnq^znJ$Y9Q0+JWQtA=8I^y3l=!Rzwnr!2ZXYB{n+rGYZ8Ojy zZVWz0_#F=#><&kw5HBF&&;aF(hb0{hFG77%ZR%C>0h3xn!wnSREqTtbn2{(2i&|V4 zXf-&sBD@61-67ls1?Qnq2rg&X@kj{|m*5tIbe=^w^6G-QBJ=~uRe}gnh+xztR;hu> z!9s{J2MKVcyao{8gAYSigGj%GS`-WB1xQc2C;$Q0utW2P^oYo0A}?xgcZ4X;+A&gK zc`V?>Frb1(gZY4^4xh6bq8~jYo|_CNt&a!^W8-EOBoujbfb9Yxceo$idKj4@Qkjh? zjvhE-G06l33q&RC8dJAC2OV=tq7>#M{%O&LfS)Q>l$)8UyvR`?7l02CpQx* zvF;l_&2-6x4X3@Zr9*D=wZ*#fiGa1iiEP}Wfzv&3RIWDpLh;3@N3c|AFJPO&3IIz* zbYu2cu2V1I>d(BzuN}|K1fYz3l_PV}T|M(!msgbmBev2gWNLax_uEyld%EO}>_v$* zL5J2Tu7A$iAD)axn>mck=$Jw!)@eY+3H_hW9G!97lasJH_eBe5tU4{%Eat!)9XRCj zuJ*WyO!-z3IXJgiU4 za<@!?zh><{i_2?28_^^$ZlwQMe&4rxsmABER}G_^XtKUXSsy>nzF|>1NKlVD>eBC* zDq1|6Ikmm}(aPD+QvJ$IKkl3FSI*`yIe3FME>lbTVB*X@kB{AdY3;mUr}u1f#{8Ui zqPJt<-pmJ2_K$a?ZIEehZEW_WCI}SIDL)qV?b2lFb7ME}XX$)NJT&1>UrpkuUOT(} z=kE9qEc=jgx#(6xUEmoL&qVc*sS|GNQnu~8=V|8p&C`pXoz_$^=i6V4&5S?aIMSiG z+07%*1^!35ieu~gm_G{M{d|%8Y{$tZrJ8#u!?B#QqxO1x)d7omfCQ#<8-npdLD1o= zpwm3CWr8}s<-n010M7)BRnd(zi^G$FxFJ|5$V(QGc!PL>wvV9G2moRY*WhfC;DmSr zv2+&MHHk6!7;-V_h=76)Woxk-4|vcyhNlP@q|*mDgDwpic8*Fd4XTm3IIv9-pa@;O zWE4B;1Utbe0L3b+aKI)sCvrwv&>eym=14zb1*h~F*V2S8=n{Gu28I#R(5As^6s$?V z9I+c`M`9b<04E8m22+H6K&w3X`-JrUP8SzHzX@(H+8f5LfOEXb408pYM{v@R4t8rcp)sePRs?5` z3uV+&H6UQMUFDQs2(m~2A(4?YajZLOL=eQ5f*>j(`ass?v#nf4lL}$waJM`+AYj_< z9gTEmq5VOnyR$C4ZZLRgUsUG$Fm1`G^Tumt9m|;b*B;|uukAmNH%Azqw>*C>_|zq4 zy!(MU&kSo@K3{a1b@6`v>NS>j8xrW>9DMTcF4sGFYTVs93-rocXhG*!aHl3Z>oiKW zENBlCS@ve@K1oTPm5*+y)waHDTN-A*$Tf4U+Ja~8pKqn#_mmUMug$GoQPiCIL&5OH zz@-_P>aMevN$xpopWEJCG`jAjkMX-*b*$Fghm*II75;y8y>}p%?H@j@G_4jA+RJ_@ zq&*askxi(K5+S3ap`@a+O2cf)N+L2#L+YkNOSq+oN+~K0sf_pdoR^;O^Ste3o zkj++!cJC}mSibn3O83Z+FPHx)X?^p|c{Dalu~(q%&zFoxEjGMW2c$<&*sgPW*zaGN zLD>n1=WVNa_cQNI$Q1$SLh~TV=WYkuE=+h3Yk6+=Tx-vx`}GH&yw&?OHXtrP+J}Qx z9Bn`q31wuxRVjw6#Z5$rY+nSIQ3#mC9|ax6adaHB(wP<_Z~&v;^jkffAZ1SXnfk{ZjM$?L;$Y;z(Aclwn} z3PHG;6iz0(hpuvP$#BP&oMMzvkX}P43VZ1wY!dw$@ZaU4X4yU>IG`XdZdYOSGz2S9 z2VzY~+qV=!x9}9A3eW~#L3^%mhZFCYB@e_%g44Md^alj1~8Ut)S z(PKo}BhZEmi=qc`?12){L3eXuH)PRaL`CevK^ji?qWr0n8^zqV{#59&~1=_M`Jdn6nX5tPj3K(}RpH8Uy?V z_!L`<4~r_BWr96rOMoDKOcJ^@?Vt>WY8Y&pH=bFK(!9W~7N-z_#H}oc2e8HBS6y-J zl~h|JGzw2ErW06A6H3#9{!NDk0up4^+$N-Sz~chDk~%D##8!0;3FM)4dks28Fm z0!0Jh1!RtyR@jA}*cyFsC%Si$!XCgW;H14Aoz8ez8=w}93KrHa6_RcVE(i#g9fFn! z!!aQl1!?eieGs8}F^Ox64DW^Jt5>*Ec(p zV-;=9-RFiEoXgpynyJ$NhSze@$95a^bgdih>febMn4IanSfA1$t~_P8R;G%C?dtvo z)p4gxU3EH*a)M6>8Y(ScQ!x0Bq@GW*_{bXRZM*>I;Ljm4m}xgT#gGY=LQP2}`&){G z_L3C9lYCN?9ynN1&n0+lNnF#tS=tQ}&VO*)pvhqK!hH9dqzQcpUl-w=252~B^uM9D z@<#fpD3OsEnAfwJ|xrKv3#=8LIH<6>y3>@xBpr9)}FWjp!ca552x7*b63tb zo3*A_Ab+NS^Beb*rI!r09+v!cF-JgJV33j5-Z$-DGe6&tn;qNXnzp^)tBco0Xvva}2^-?Bpl%`vMGw9jBYf5DB($EF+i7yX-zSDK8qO{*c!wL77 zz4t#+Gopd7etBZ#2M7Jrni_NcXVq3{UViF4clqllHXQW9=lZS^mA1asA@*W86f57ldyl zi;(dcImHl-edL%o4*M7h$OLGDuyK&I3jrN6vI)fu>d$bZIsvkV{&EbG5mz5ctuo{Tp;fqNR-#g8G>8h5(N2NY`D;Y~WS1t3yE#&DX^hp>2sI(m zXCV)U+Y=O9Np#O2ch;~ zGUC>pIVR|Jm`c*DZM~37gEzrXh!J4=ENO|X$l_^=Y#z4u`ao9@-Zf0IctKk*Quu19 z0}wkfK~iXoi*W0k${K`9VZX3lN}H8<+s-`EQiyYzVkbu4+#X+4!&%9Zyll{}XXg+F z-jt(M9ZL}-in~N~L#xn};tYHpGerCVK^y7lYcR`o5-Frz>S0XvdCKLokTSPuh5tg_s^lIf(&#bBOaMU&ik2T~cou3DfT;TjK znXneaWFf9mmM52YwoY=&wbPl2vyTf-z2TYV<`9^&Gjyoikvl?9E7x{=FAlI)v-{8# zc{|0;)O}pRxm+W%;j8d$$d>2Ho5+`ZKDRA+jdiz_MP1XJrdXTB5Qwz@$|}xn0m_x+ znIMfLc|f6ryJcjNS*OT=$_f7*b5C&zTBh{i-A-eRlNwD6W_8ZgPH*cMa=h|=q1N)% z>#MK%Mfx<$zui|nT4I89Aq3^pwvA)Ynrw;N8SNlda$BWZ<41mGWXbRnNm<{OTP|;} z{I$#bUgO=NS4yX?ow$5zS8hS>lZNuq*Sj}bmx|lC=~PVY6$slh$@;<3L!Mt98YS0m zxnQGu!mMkz=q`Uv_ju)4g{n4Tod*|o#+nq4PZ^`R>{GA6af^KUlz9f!v-bY-{j z@bIQ)Mb~Wtzm3yverG#9osloC>m%RH|9;rProus6R&H?0kd)MkJq`)2X?q^7cO2lo z>C|A2GpoNjv>c7Q_jpfGCL%$-?ZOXJGTfW{wd$%cT8FCgW%q< zBJ+NGFDy{5Q7BDrnw#7FV9@QiKkFR}u2u#wlTO@iHS_c%)5=*=Uxq{ps<=lhmqvej zFeK#3!jn3s#kb0@#x(|=nY&nf*A_3eNJEq5KJ6)8l?Uz)9N7CTuDPxGfAGZY-HPOq zB6M-1t;(QZik-*M)wA@CkR%Rp1P13bl>oU_AQsXitVwwbz+;;!?w;B#W;-2F!ahff zLa?60a?ar(A4o{@0j$Y{>wyT~Kr(?4Bs3f~`Vx*6gm9?sWPl0aOe^#uA{`KWLq-8h z5lG5_6%*J^ga}CpsOedjs06PebIFaZVOf;`uyBxCXWBJ;LeM544cbv9+{eq9(AsBO zrxx6RlSPd6$eKdk0oDevVg3L9K?9KQ*_baeG-QCokp_kX1_Q4#$y$h0MKCWM&;pdu zG6P0}as0+iMR1Rq6=$T7%2US%1e9gXgFC1#JjVVI3|}ADGOV@dXkn0y1k8kS1~nm! zs(`$dX<-FG<_~A$`rn>G8b&Y=aG21Q@D<2t50$}^exTnhvdmM+*g6m220&-S_P^6;r2wS5kV`0P+LJS;bis`yxYohN^VlfSA zyNR81^I(zEv?xehM3Yw3gmtA@Y)AzVR)_^{J_oKbrKC6brTh@Sg2a^<#)hOzJ>eZD zAsgl`ewtYZw7H}tUcYT>PGH6??F%SmuwTMTcQZfJO{mfQx=V<(^J9moZ6AXR`A|ZB zg0saA z&setwN7w8qS<-Lb+4+%YwkhU~_@*vY=e@33xJG4m+o3^IKdp-zy(i=N0O9_3+zy+x zI?t~)d#84h$5XD~*C8IW_E+qq<(`qwiT<}lS7`JK>@KcH16yQS(b~=C!qASf4Mu1L@Lh$Eh;C5(d5-C;V>7T5G7g)|_*R!5lGUm%4tOvOJ?;jvj+6bZlt zo-<&wyoV6L6m5GFytap5npZ!yzTD#1cKjvvA0-+trFA%clTnEy*m z1RI=U)W-nCKKXzae34-@{SHvX`~R1$Pg$b)I?$G8i-yjX_Q8Q~2bGb50D0k_jAH)2 z9N*>25$R(MXw}G^z&uxniYe9#p>uvl)kGG|5Di?x#~E5C$b5J~Uj(r-B0)RW8AyEx zHzC~Oe?6d>A@rg@l&sCbEtstSS5X2K1)B$_7RdMInK9Lao@enL8*aOcq^QaJzwNsB3Hmn1t>26bCE^Ld97A^WP;6RWDwXu!s#i#?lAc+Mz z!esoz{4hy@!WHq&WO-j0vI51D<$U##8HqGt>v|~TNePS!*3>}H8YF?2*W6TSQmn)l zh4&2FI%amRL&l^VNW6%5_l&P6z9|SMRmNq3Ru(x8lI5YPq_~GngPMviS!`wcqF&HL2l6Nkdd?1?i*(UYNoyQ%UkLtINzT#p$;OV5u`YOjGhZHWaJ=oE3#P(ad zj%nns8(DjUZoeHL9X08ld1%(I@VURYHl_9Gj=S~I$!CPI=dF;f)s-d%&)mi5CK?#3 z-j)`)8+LJhufVp;zg7`&kPHC(+Wy3c;?yCZDR{Hvz^&%006y*e^H zf8EinvpV%w>yMj?JWM_;rM|2@)3>%X&Cx&p{H>$uh1m+RS>}BIV`s}7=9RU}Uvj(> z6Q-iL^>=2DY+<3Fx9P825i`z;A1i;I7~3nbJZJrkiR&G&=*S#L5RXFKq~=BUDwUkW zgzuM0jruV7r*4P%C;xjXex(%`rWkpvIXKOz@3vJghg)mfCCqb(*)Q6 z)-mB;AIQL=>`REZ1UdxZgdOw+Ce(3^L1Y2Qq=Se5^)(2C(KSdz48S4up{5+n6PB;>z^eR`V(fuCr%a6br)!Hqjseaf}{erLN*+@W0H* zIUO(xmr{SFo8O6Aghc ziNUaNpxyty1;QwaqpUejQDUdn6G3p$GR)oODcukViIkMiq`Ibbqb5X#Y%YKWNEyiR znd?a=b2_tEGbI7vCq@C&6^IZ-W|89s;Xa9f1#$9NaOO#xUknLAjTxfhqbm|GRhfy4 zg0Yx|tuHj4LSQH?1C|MvFlEK2057n}MA5DPW>IZpukYJD$N~aB_Q5hkea?%Vfp=fR z+pXA?5+`tBv5>&=fL5ASd`9%&L`cGFI4&RpkaSNY%MAo4A*_czwj|nh}e~BZi%Vhhe^&kBk~nC8gZ^V(Tx1pG4sk-`x4< zM-=R{w1krw`HtTZJ*912XRL9mO2C;lpJ`cK|=KCAf?m6Idd?i zk{4b!RNVz-P;;gJyomqqUmdz)A@{amE%2R+(qAggy z$o;0g^}EbssTG$)>V${a7^DV&^&PcREZW$;eQ+P4vO#HId1=3`EmDb&nU`<51C=qKR3hkM%u-zo;L&I zZ#UjhZj-SNv>zpL<)F8bNuqzr)rX>2XMdCQ-EpgVYIf~fo_k{5(J7m!H90Pu{!4p& zZMz%ar6TOb%nGN7x28X~xY^n+f0kCPmE0>Zdc1K*%I_HY@+%iN?lkDW71cUUulPdh zvZ?*z7YH@D+=^07lG&og8z@2Esn;ww`NVzoDFw9_bL9T?JSjgScBkKj(>qpHem_}Sox9}YXtPiag~6Lw@4s*% zSWHK*?(w9@Z3jHOWS!)PWV{-l@at-RopRUJw3pXXduvWxf?_yyq3HB+T1k`y#H>y> zeeR1&B(#ZAvSd34bs{EQ_77nAzx7%>>nfmWa7_R zxlom|a$RLCTJ}{vE2+8!6B)42>N%AOgV7-iul)=3nMh9}v|>sKye05yj?cSS ze`aLBoFXvDQ4kC#L1X-EyzpPMbOCY-!AwnvM_9y>3nLV62Dm>ESXO~AI9f#ywz4xu ztON36!&GK@0?Y>t$miS>&<4>(_J#8_V_d}J-_Q7ryFd#xOPs_FyCQ)wm0;wsT3_Ll z*2RVdNct@22UaIiVHlbM<(M&tRheTwBP_ImW=HeQOizqUD2fsaQy}*mEv7Ybu4oQT zsmo-;#9W&5M^@tv|Bf8yEcA>i4A=lftH@Z#Pf@baE9fzN6DY%?eMDJsyDn@~tmkB{ ziN7PB=Ve|%>k9vLHDi~HO(0j!t&Yt^d(x6se2}NjN2&ukv)Fb)gekLB$&z)7H4a@7 z;i#xn2t%e15g{XSg!RB|wWtZ=0W-THT8S?~6G~1PCF^9q`DRMk#1xPv?WLD?W;`+) z5oZL_Kmrbr+m2Z%ml~Nx5dn;uQ0NqSKpL1z=pyIT(EY~&roOtw3gy$ zY=A&f3EBXjW1(l&N#ait~Q#Yudj~mCo*cQ||M(JZ^sqpYx{;Ty*eirYmzAIu~H>u!?a~lHay{t)~ z(y%pm4Q?tnP-t7*X%%#DzGq_KDQ9QTEa8?2x1<9OcMDYN8Xfg^+FKfJD{bgyY}+?cLck@F2@ zHai_2!DT^lj6{>8?s{=EV* zS&v$hFJ7O#@~Ot!!av=o#`T*QeYn5xs)QQ9tX;!owx6D2w`krWiJr~6ZL@w~4O221 zRA=}iWc0Hx-mJ*h1Df*cxjTPfNfquDnD>>h9TKD5%>xpypL4IcH8(xc=YmtJVDspX>`@DN4~rjZ)a~lFd77gaFA;0>+xXc` zqiyOHehTyM%)WQ5R7Jx$v3|Fm&G{1-EF&(?6V}+_y|64sV9cN+J7?#*y1PrQ(=tz5 zsbn*vtKmoWa@_-$&MP|2$n$aA5IH+mt10!LyTcCt^6gpo!~0L(c{#Oo{g)qBd{`1N zQG01bkw~w=hs(9E|E!J)6?na}D(Av?Blu+Zh^{QXV~5(Bc2ACS)5ona+>B7Cs1+&aF~dC4B1 zWj)_Cu5aZp&hN!)=)as-iDM7_p+r1C065NPpeDqZN5(Ew^x3y*c<6soPJi1V&4P=LrJvAQ06DeJyc3MysA+_IBb2Cb z&cGl|oWHrC5z(ihG42Tmq$DN1AiE7}plM)=VOL_4*k{LM3KO&h0zI}ooGL~01=9>x zlGwCw)=4E{?hqz5ph=bF|GkJsx}g<442gyX<658noDt%ARSI;g6o)t79KJG9!g?~I z(Hj8tP>wkFNeL728_O% zQvNH+no7SxKLXLvCPpIue#|7TmP5Xkr_|k?iUyB|yC+>5gsI1kooZwSR*5{bO;?ydAC6{x< z+>EXTo#3f|aJZk)7}7sSsByV_*!(XOazr-?@U(Suiub#k`+m8vDwFa3k#XImI)iq> zcfr=v&PT`FFHx;qH`L44ePC&8)0q(GJ)v^j;Q42}_L*S+{I9%;w9hPxic&8}9dP=j zvi?GI?t=Q-^qTI0@8^#HxLZEyL8gg{tVB@Nhb<4i1y=03y7}PEJZ;bQaUrQP{e6rU zHr{N#EZ0n^ABedd-$aYs#-(`sg}A(PLcK>qWtwn~Rp2{CRdIc!m4x zV=Js8DjpTz@_Nv;H2i%;lCY@gr)Re7j+pJW5-c#d^~(FsoVjX~`1R?VI($mjt&J!& zo*0T-o1R{A+C1mD{(X;CPq)p@jQnXJt+Qakz(Ad<{;Qg&|MH3uNPqnD@TQ6jYwEq? zP6VzHmhQCdFkZM(b423^F9-c#`<`J}ui0y!A6YBk;o9DB)tl~9=dF)wiY7?@xpJd_ zQ=Q?V)qJJ!p`H88_N{U{p3>F7`SO&4d=`)Unf*9`XZ{f8XDOlbN<}#0to{|@HYq0s9>IA!kPs0T z&XrMSlKo3nMLOREaR4(9Ar_^@kemL25Qyv)sKiLaK!OWSWR!>y)k|P>hZ7I3H_ zh~v!IXbo=+1cumBWFuMJU}0-v|6|||D@Q*37K9Q&b1lM4Jz#7GoSc6thk%c4E20cD zDW03-k}R$PV5%10M~E;WSKl4}PY@A=T~u=5N|AzvAWKV7BpU2?nJ{hhp%rB^D5soQ zAP9XIFj!B0KoGwm-q)wVK~jZH4Q*4<4-9*_5dlY>?unwACqDa<06aArv&?JC! z`X&+srW&a<6Nsj@xPY1D+DGmNcE-oxyg`E&L#u!eu@-p}czqO{^sf<7Wt3L{Z4cG6 zSUy#n85GV8@ws6%rKr1zHR84va@SDJ+?p4Xg*W8t)2m@EC2Gx!X4xTZI(Dn+*=|yU z?+vMMw6tCsRH6tBj56|6+lV5<&x>IQFkxXMzYDNlz&AqAv7vEUOG|LNjEH%{>p-#B z6cf=fDnQXC5Duw1XS9+kf~7xrSsKC79f;ZDmK+rqERLzhUyfuo3_*!7rXd(DLvB+7 zG%VlYv)CF0A+YTHf>tAoQ&uMR>J7ruZo$%2O=_aYh-VHt)wlv-{8if`_Lrr9~Mm}jTzMFHy zHAJ$cRMOq(bk^e4nZ?p&k!nAijuuRm8dER|&UR^m?^U2LW_QKAoNjIo7 z{@fsOr5B$oC8y--E9s@>DOB!q2*&=sWYi!X+?3|2h{_)hk(~$u-Tg&*nzUQ`fPGf? z-VB*AF3z`H)T$tANA1QSj|BCrDk=%#7OyTn7^;!la&t#Xic9OyXXnc_ZrtlMV7ADj-udIi7v4q+tFp@ZrLN91403KLJbSS-|3F#gE8{O7 ze-^&=&nkDjqGBj_@B+VOr?>dk$is5h;b#1P`9tTHjL{ z=7;Ss)xMaM@ z{jlcCzGr(r%s9KTN69|Mbdbo>6_V-ap0BI5E$a#E2~(Y39kIwqe4%Sp$=Nr}Q@--9 zjhJutslL9VT-wZDjCVsq>C-L?orVD`(&PjLudGnt{5y8_x;skebDd3nJ-#My=oL8B zyfiPoOmL&``IexTh+4;>;)+dDr^6dEwf6kz72r3=sVo_`V7jXA{Uwc)h6~gT-RNfE z+|R<}hvT~XTfd)fkez1pZR1v|n0=;l)+%+fK!7V4?@*l_f(v+OpmK_%^v6O|4 zWiFe91ok~}0Wnt}V~zaS}RfiLDkr zWW}UoMwEDWU;*_2+ zB!d-UJ)>k8=KaFZ;kQQIA7)9HmG@xv)u5S(5<#&@TUrsQbDZ3v>&DV3s6YjKdo>1& z*@vtFWG3*J@B&;TP>PFMHiGM)ir?LTMtL0Eh6qLhOj#Y8BqL~38$oQ!v{jH$qzcx= z&W7G4h-w*_$S0Te+0u}T!^2(*nT|CUr4*t$@B=# zKnV@D+?@7#P8F+-;!3hYd`!BKur6IYLKDyg#SxSgbTAK-iB5)~tUuZAaIXYKyg_4u zK$S7j3#EL<%gSv&A;Giw0bLorlXLZx^Mc!?)g0AjIf4mpN+0HCo{W&J=h7lZpS0rL z#Uw>7QY6-_+{Qb;PRaZta%e%h>Gq#gGo3r_jXwCP%e=DKTZj0})#}S;6&GQnAQ){c zIa~516m|GUm6mnlqgCpf;t}3Exl~Bl=6GAk$g5uKrP~boiI*n$W#*dtEt3y8x<-Gs z`l6QLp`Kqp2Jd^qJHFAqM4@J+*OJP7eI<9-&4crlls8K%?rXcL6#KeP!Z}p}xqr*+ zqm4dk@NC7m79DLmOQJ{6obbH0Iuatomo}=_~i{?av;wXoP*J>$o+Ax~8d0_GVAU zMvq!05vbdx=@c3^T;@~IH!Z>Z2B@YtPAf9H}^`q1|O&(|Q@9v$b_S8s%H2UGdl$`>X81=xaa9 zExsseR+n{b@0xUDOxPZInQ%At-_b=@&5dP4PecrTQ}Q@Q>3gNs^Pm;N0;`YwTGuY| zASLbfi>pUVb&j{KT3WfaK)>cpI`3KB=67Aip*3Zby#ibB&MQq>@ix`*+40w_U5%H- z`&X^YziruZw&P0of(z^CiK)jInW@j8_OU!)=bNE_YTd26on87X-t74&x5se(hWm}d z3r)3(zB!Hdy|(9w+k^WvZwp97r*6vsTJq@2<=?fJ!)MN@Q#xd$ta*F#oQk%bV~?~J zgzA^9kn%aVDq!@lo3c4?Cc7>@H+WWW<(X#aH~Pd7RC=rl)&QWhD#he5KMac$hUp4N zSBSh1%<#aXZeggv6&2tcf;(~y5Jvt*Pev*K{R3Er!3B~I^*NP<-9>;yi$CKjvYG*! zP)be;wO$cQfMZ7#mZ?0Ok5I+P83Vb&;UL+F z5EX?`Cj5_e8VV;AS>&4kZf9|FG(tTqG()B}x>^yeS-=gNg^z*S0vQRBTb-p>Q?K-> zoW((VZ3G_>V-*oYVbOuLv`v_0lGAYzUx0upvVrMSP#EAFTL}!p$tvuB)yy7=JVkDg z!C05UnK5Ha1BO^h^pIpofFPF+Kz~%oSqtM&?wy7l$ec#De)L@kE;yUxgn9 zYP_r$Cg@NxR3t6z0uoVNGtdginbLR2E=YA_B59UQC9u^uv)UIy^ct-2;Bf2;JuD5L zq99{(BSBDNY8=%irP64~1;_ZQOIL;z@5?)*1s1{#Eyd2rL)f$2rUKOR#?HWQw~+4O zrQf9)gF8u#F7TkxHdk@f`*hAAXIBO)U5!A7xrFOweRvoZmu^RRAE&rxS#)+brOBWM zsGTLWy~8r6O!cf!d$~?Lr<#tSy6OE3^AxI37Vg7t{<(B}TP173&pewH6oi)Gxgb!% zqP?AR$`u}KU2yw@J8W742NqeL6LGT+fcFjn#D=yavLOt7tQxFDh%_vS7+y@yEsqj!|AEIm> z*nH;26cNq(lV8Txh1-8v#(Uws;m(APBU3kxs#mylzvcPGy(cH1IIyQ`Vbr|WmPdkC z#XCfaueQkhddb;Q#8D&^7+GKRLVx)3fwN5`%5LW!Zng3`zBS_P>hxR7#mqz} z3Jp#7-!{6<|76s?DZ|s7Jygne4lEPT>s;YEyx+>LGiH^bK;1;oMPD+b6nAW`F`bip zagBnFchb_OlDz_!Go2?ak65MGm5@D0eTLpP*?`SM23bz=~6i z-(gqCvOJZ%On`v5eGaU)PYlgelXVk6-I)@sH}dRP*N1F73+k z9r^{^eVWhSjB!h!;-K>*OytNt<-zNfpE&jkO!dC7^u+PpTfNWDl95fH1L3S-TOD~@ zRmDD;{b>RIOjSq;Sudi(G3-gJ{OE7QB>c2MFB~4aPl$k3F}05?5Ko1Z+m1&7 zl*mC4r5t>mdI-D-Ty>*^Tn(%s^A@w11wvY-5G2qfD`SV}5cEmC0&;8pf5-&C(zT_e z$lz%-D1ipGhC^m%)C%`cfOQ5^WHORhh!MmRwo=RJISVr;NfV=oOJol55ls%O1p-?; z*&f+skcI<;lomcGU5+6a{S9-;=!2TDE;>k6+b^+!5a^<)3YyiziJbX)?rQm;@E#KSn{2i|9ej(M`6vY$j<$G|2^_MnrO@ z$V(*3V9GiRG+3i=@toEfK^?6B2=b;bZ$^YVwzG{O`kRB5WV6)DO&D%>0tInSH|icX zBJ$-)1BPYoF;8q#K|CZc#89W>g0f@^f=3b}w;Lg%Fr|obx-4g|ghn$~A9g^m45j_> zgp>U+D9khd#U4ytQRH5lsj>Q2?Dh+C%N-nXlNK=vQO?kzB`81aE=8zeN;-1FBZD~60jM^Xm-gywkv#&s`pN+ls*)KW-3V}7ZdRpDFc^yWM-y=aGh zIiX5p?+OMepNUS&P;banXuDsWv0;Lpwe?UbD}=l)d79W37^ZPYBI&k{Qe5M@$N>dm zMPpUZr3(rP7c}wC1vn$6NOYFJ9cZ6e_2?U=iYO)7nl&xx7m7*i!qeAfb@2->>oF z$n9IlR6JB~Uj8Y-X1YaxkDwWfcinH@bbP4JpK{VwMSRe!2jVq{=H_Y32CO$(qif@z zc5TfQv+sv*PMiGZ>M`l0WfSsa>z#hQ+PcwPaNp4Y%dYH>o`2rnKe}>nY1flWH{xVs zBxhGIkr*jIwEqpsTe)Q_q1ID;6Xz{3em3>sN8ijL$tU)-%x-^m>)YBfZ~HAZ-L+!d zh~k0U8pq0AI1|6{?efogc8`>7pV({VA8YPuU&gzmCvN8_K5#K;sMYDFX_L2o^Mjl+ z4IKxo1CH(4WBI)Tcg_8)9{d_)BBP-ZI`Toy;`@P`@l%c@jGJj-XDZTluco?AH*&6; z+zgY9v_-o9NAmy3o)MY1MRdnkqa90s8kb4sU&*!VFYr}bGU8B=@0Z!vk7{h-y}SQm ze5AET(y^o$w_0{yDjI3n6Weny^^bUkShjpjMgaeH$pDY;<4+Tx#qXP`T>c?o=ShiP z0f%92nhwPx!;U(PbBsC}`t+sZ;*D~DHosUC=-=R9KdVb+z ztR+A+e?x7dC$OimjhR6W*#!i0Os^pTVks)x%;zF&PI4s93#5LW-AF3xj@K7(m;I7~ zoN8XckVNJu!cNc`J5zW+bQd#rvlIhV@`w_+kh7#XsxOv|tWunH2gpfO#YTpl!v7#Q zs7;7+{$U3qrHUYqiRbLA>>tR_`V=5Q{LvR}#(GS)oIvK_0f^ep!qi1{V%&CZA<0cZz>!k;U!VAR+gK*^zN~nf{ zK8TGl*gg*!x#%(Jt|-?4-wP_#;M>%7c9j6J6q66Qh3C^`l3wA%Lu@X57KFbvc?e|& z2qXW7(;V0$QYWHFn`EKYYzrb%ONUJ+Bg+1$N6Z))jIEPG6o(=VY!Xlq05br4Au6q6 zr!l6bt?sNMmy8Qh3Mpb^Yf+TF9_i3o<~fryp!vZfhuAhGQ=*m@u6Uvlu_&0}kkBt< zWRFr@@z=)Hz0wPV2M}+CosR8X+yRw7p$S7mJWLI&(MY8au%;!4k_q`G5K9qil6R0s z5o&%HIV?V~RhmH4P79V+FqHSHLV}F}SzPla#rhYdnI$bMPB(Qks*=Ac=hk%c9Bqjj z=|=4vSxcJcsm@5s$xt*z4}D5A_=!0W=G6Ept*pmcGS4g+$(Kq#wWugVaaE+Gdh#ME ztH>iO8|`f79oaNY)@-&;=ZU~B7yc_Jnb)?W;Ypf2o;#y(DwXwBxmVR+synNuFY~^HbR! zxv=_Q&RQ4DYjxe;cAn1JC*9mFxpriKsjag^j!(U$EwUuL1Y-sP;-9oMAu>K09UA(YRsmrtahUHSBWfoc0FUcY|ff4101KMjnU@@V6-IktKg zH`PsahggJ|Hnp|i8vpzrp4hPBz?Mrd;@6q19`wwhYEMLT%nju`TOIf@!&GnH5+vP_#fps(Sc`8FPBRV(3^UFtM>~%xA@fiN50Ln z5S%q~Le`=DtG`Ask@ksBaG4gNJ$L_7flmu&ww-Z*{3ccG=LZFP5TDK6G5uu5Ca z_X=CpWwr|Gmo^jcUlRAq3|-T`N&Cm)=qIy>1q}8+b<4Hey!6mHVK~KltBFNkkQ_zP z$4noX1>J%Y?deLhN@i+k1xpZ5z>HD@80H`z00avbEMt}ZZN1DBD6H}>c@qI0+rb(i zap>tA;>!T!ZKp(Ie9#yzo+3V3uypAG&$&g2$5PA}hd_}IY zK(09^VD>dm$b$=aV4@IWEg!Ta-$>tczz%wgr5(wPLL|7efL?w4kp$R(WofjIybAnF zkZem*vxv|KRCv|XhUbUwHNpc{=q=glxSn7d@jB`!S#zjd01Gz21QIeEHE|<{I1UnL z%_ifbTCz`JQnc`Ll<>!oq=b=1Xu-IE02xKO**e4J0H`Cpr#ul5YM*S66`**uT==_; zsu^kXiQ||)ASw$Z6N2o(q*0c**-zOBfz@~?mDeJL#hQZaXfYTyv2X^|H(-AuClVE6 zg>X+EDqNPp*^$OlX<3epsjJ+5dZfgGIu43!eB%O*QAL(!g05~sm3Mx;3)6NnYeYog z4m6I6A35Cifs>!HK7=9F;xrfBwn9Bp#X!mL1&<*|txyb*=YnUg=WFuxFvR$mzMOb6 z`3|bXnbZJ*QE^r(30s}SD%YDN0O1>AFG5Xf;4}FQNnzkc3OR;iW4-eaG*Rd%vV-uo zsNGT!1kNi$VgZeia|#YH$Yo@1i)7g~zRc;8JOH|Ril378A=89`2Y7M*9-*(048sU+7CndD3BE#hMm4x+H)<}px zEl5-m))y&$HBWUWJWJMgY7W+l!SX!$2BAt@Pepr|V3%8ZkllZ$8Nxa(v zAEzqH8TeGVw?#S)lUu<#+mS7-!nWi+r!0tRLp3Xk>h=(0JXO zRk_jE(*GHfKU30p{+UJx!Q$WtE5;749ls>BO2p24DQ|4l%O#(do;0_wc^kAibX{-F z`!QE{l!_Q3z&I-yLJl3mTtsLwgFMbC!ob!9!W@N@Me;gjvg72_eJ>njp^Uj2K^A@k zsepPA=s_+E2-Jia6b6HHOc0J1{%h$HAp{_61E7PNBzgZ|=!PAj1DTj*A-tQ zh-C2Q$@=s+#Ohzxpi|4KDXcYyGjNIGGQmETh2ta`GMFEk!4R`o0U&X|4Vkpby2OYB zEi@tRnQ<6V3#5HPAw*@9Edx@0U$2;L2gZ63Aze2Cr$HbF%$)Rn)*t#KYmzgqz|cVB zVFEpHKpa0~Y6Gzt^=8(NVR!bEA%v! zN3Dz1ut1`GExMq>UW`tJ8hzr^MRSj#;`C*&OEJK2WTRtNs~jCjFxpml9pv_S+G9-b zp!^A%f4l_)$MRxixbKw=QGHq_o6ANEx*Ec_Z);L)9fW!E^;7r>aX(U&+^MW16p^je z0?A9DR+=)lgW~(vgNhD_=eCh_uno8TfKhE#;k`ko{2f0q8Va4W%OfC6)0Tl!1+%Ib zEfvgu3BkfT1x7DLQQc}Q&!&S)zNZE%n?zgX(&Ugb$89H68wPaBFGz^X6=oWbYS+ zaxINwN9NUJY~JR+;$6f--;seqFU@wk_L$aeUY$@86%v$z?Fg5={mHs1I#D9YGZhDEAU^C^&X*pyizaz|w}&zo9{V=P?&W)p7xl0H z95Gen+LkGz^Bi1c4vo)VbNF7_aWS2JqOI|fD=T!8KjfbK)x1#HK|2E%WsV8Gc6WzB z|1N#qeQ(V& zH$zLUk?w_|BNop&_+Z8CHKx|5FHapmQn$n2v}fg>nmQf5~e94SuF-$*vC#isieL(o+N1j##@; zbkR9jq-GADd~EohZ8v`B#VE)t&P*R+woB)q(WwDp!ahExog@Buys8^nr906Y)@M7Dnjz7)2s$6fjc z3_yK}K?*PBIr&%4dMD>{$LByeYT`ef@Sk6iN25(XPS61$tM6<7asem17BQjTqJ#r; z#(5OKMh#Mp@4rv6Hx0eW^SxVM{R$v;Rpc$j( z^e9p>Al0)E>4L)oA;L3erRz(l0Buu58~$Uu48c9x&?Qy{h7f|&a0&OxWG9AUQz1cS zWy9yB6Ou8BbslU$6Icu$C1yqo1IR7SK$mfl7N^w!?D-fbn-3@?-0(Tc-YN}?0Q_$Z zL~bCL+J|Q{XLtxnR^oT+4Cfc&?h!|4^o5?tH1=7osCWNzFyv-f8czDKE@ZNnU@1&U?i7xu~9p<0S*wZ2moYl428B%6p01&W_$#H38Vp#2btjLbJXue zkX#8@w1wKkW8kkKgqo4JgG3@4DNP=Iq75+wo{vx}SjQ-o&21FjX={yJ($EYP*ATWl zVKM^$B!MIF9inJ<@d!dBs@Y@{T?6ZxtRUy?5ZMweSqX=R`7^wR)Ehb9JSMf^GGQb& zY9Zh9A}p~M6jy*sp=7Rlf=WQ4Rw#8qhRI00tA%Pk;y#hd2u>55T!30{K~(77Dy`rr zq#G8PZaoPCMLgsyqo(w+sQuW^Q^}|*0waz0J3g`|PvLc*0`8}AM%eM`Qa|&XH+DIs z8K`Nq`#niGf&C2@0+h3P9W2kk;#?`=9R7M!qg|DloX4SLMFZ?&qE<0f!=vbB3SbUv zH@{Ta7SjJ!N_=rJawB7{XQ{UZ_x~W)t>*Mn5oWPnO(%;wzZXRogeN*2-1f`f&PLJr zbFho2gp9*Ib(4b)l4hT@vXoWZP`ZVmKKJm)0Na6c9MW4?d7--eiA41onW4uQ$#&^> z@9n%Y&GB+l^x=8=2H*V^KkR&IX_#Gb^po(6-!8^oPxVSYI%Xf9Z#%i_L22@dUxUmy z{#vy|V6}#8nT^2mc_XvuFLd#b>KP0g()*QBI(nntsTjk z_PjW0Vl}vV^jWtyrAtz4ma|w+nv}e5dAgzaH6`;s~ayX zhdirkT3GJdbGyUZ2w<{F3J?yC?CONyPrerjKXBHB|7&hx z*x<|^v%cPZv{dcG&I`Y*&li0$k(b?b@9f6L9;b@6?)u4cyH%Foo#Z^@<4on%_c~8i zpAE8?YJGE{?uqF#b%7rOCRaWA>f-88O5JWx;*Whlb3mC-tK-JrCmfRjm;lv53Vd9e z45i}^4t=Y6RxqgykqVL2@IWc_0R&R)Z^{ur>c>!ks7^f9bW?d+;O&<5pA!xTp8+QE59__qirpL-w6 zK;BeASH|{9xztNyJ*Xn+G+nd+I}v3IvA$xEdhO3MvpI#Xjp8O$Kr*$q45|*);SoTV3=VD@|3$L`{Wg>i!qDjdCt*Infke z%Ra*dP_yyyXXAb3c+=3QD>|>6)L@?0AFW0*BV9it#H~$Vm3?}KuB~Hp39k!nK{mzd z$b1(L&e8SbeuZnMpDj%)<9!PDNV+tHB0jkA5~%n@c5F6{n&?ht(vY}@FfjC<2?Y7< zZfeG1HsmMj^ZMcT!c(+8{cy9^x~0@fX&*2n=`eY3?t` zW|%Gyp>%d7N-8TiIuDv&+Sd872&X(kN`IQI4|Gi*DC!HV|en-6Z`4P3#uQKoYI|oq$+ZMhxLjD<2!7(h^?Ngve}L&u(@FU*=6VM zEAJ`XrcpF4eudC26}7j1Q@(jC{m|h%Yg*{99b&fdn@P(1j7j1L?ulgCY8IKlySe$B zZS0MP&Rsf3lNQ#;1$GCb0OiCU-*RQ0%_Fj%WH(Oi2_C=vYxe=A3eSK^Yfi2z9`;MO zqd`4y)hs(l>00-s!ZG_55=R7eKQB=zUwF1FG{bvCuzJlYw{gpN8-2XLpu%_4&y-(1 zl}=(^HhCjY?ATLtsy?S&=1_v*tr2xmAx;}5+>Xl4XucNiXwdPg;kN%qu|h)?60S~vn!fvCzo}{_uExra%dAfNv^_jizNcj6V4s;Xa{9^D z)hiOdKRGe}@cqpT-_9<(VsJ_4&Y-V7r_n>*!$;>=#uT+aHaZ@mz9%s* zCr-|=c4>%eREzPA8~n9XRQ_Z&Tt4V_Hzq|v=5D6{!?BL1zAPRyv46Ju`I8?@_kC?C zofu!bWqQTkvMYnXdXx$8@c!NQz)$hZBC8tvFCfX*a3|L-mgoFWy>U1)q^W1pk6!`b z&oo&Gn1q;Sj>%|NKB9coM=;c`yg}x3-me)p&I!peOTLcJ{=BLtV(K9wuZJ142d>pE z+%S1u$MMmeCaTxt0ucZS0h%3vnPQYtIG)uI=qv764{&C6 zP#obuBBwSBNdkm(u*1<#AEe_mNSSb&k|6}_80lZG0wxpy@yT>%jV`jjqHT&_D-=T7 zzZI#mMwD^Hha_%Aul*l`^-%+I&wW%>rD(TuGi-bmfz7bEp*IYIk&^aN|HNL~|of-XS|fj`IIQpCKJ-MCOq zoJlG6LR{I#u97C|#D+N_JNzX;Y+`aB3z^A}+myy8$`#jlnsKpmY+Uz%@f0 z=pn8wh0FG!-r8$x3vpIlF-Cmkpu-x#*!ACOLUVAqQy)-*0ALIi140E9TsMjbmxi*+ z?x!5+JC2XcvdGMMGQ80=fjebUvVdD`T~;0jmt>!)1JW}JqVoHcQ-muKXicbi&IeOJ zc(LdeFguL+*{E$MMVYlo%jcvX)Oyac98WZA*1!Y{9GXTLx-DYAQ#xtCkO|D1sXQWN zB=T#Zi=kQ_F6>5oaHORgV9*&Im>660(z{KO?dFO02>A;^EF07^@YNuN*40`~=_Z9R zXFznY)}iR_#oJV~DBND}U?4Qg`B~cQ<{7;vC$8{LC|P%?;*3YIv>^Gkj$-~zZh$YX za#x866=W!-UbM`RcMG>cku>YApx?bb?Sh|DBb$b~nV%mPB(Z6~gcr)gt!&~Yv<2cO zd}?f-PkJ-P%i&5ezd0aY`yiL z#+S`sQ1hxgaB4uDyKL`S|y%(SOv(r_RXz8Wi)fd!514^@W2EyQW>? z4ZgYzdRf@9^aTX%)nw=CA%ekeiQEI8*&nB=O?Y2{nw$G#|73M=L& z=f{KIPWU0W&^_dIuRx7@uR!3vnw<`c#}+7VTf98N$p4tYofS!&HQEKGS6-7tLn)I`>F!iXB?UyvKtT|YMpC3Zq)QNxkXA`a zkyH>-P!Le@oogSw_kKUV9}kb5vtzBbH*1VJW+jUkIlNA>c%)t>wv&=vPC`ObT2kZK z_9p%T*ZGL6adyw0et4eC_IL4XctpdU*wo#}8rJ6NA=Yp^@lw=P*JXwcjyIf+P2_mn zHi2?SERLLIG!&(kFRbGUIk#H;xI3{qvQ;8gyuGcsUjOjj^~;rgyDEpqz{M{Re%hwP zKE-f2S~|{HuY)Y?TOM%?>x~GCFCV^W%G#(L+bMn)#o!Rh$@QE6E+1=a$VSgg{09#i>CDBd zqzg|TVD(jR*H?VRztXo`ZPjh2;Fs`LK5I@*&cT-3$Tv}oKQ#&}@th*#eyr*||5eG4 zlSy67Q%lND!?abEqu8=PHN5KhDvk4jO?tLAzqrqWYf||)*zr~(v+-pl86KUuSi{P% zJCGKzIHi1joGY5R>eeE2UmcfASc=$oMP6fmQJ0M++54oRdtvHSxh})I&R-J$JUL3) z=G*6T;JEn48!qoVm0ylCc`vcj&}vWAO-s~8Fc**7bhVa#3O(MQ7sr0ECM@q>YUTT5 z6C4*;MunKOnw4m}Bu|uAZyOw<3a&;B2M&9Y z3Ba&nlrV!O7}lO4gdKtjjEL{UIpDYYH>#F@<3h3_SQgS~tT^!d=Yb+&LFb_2TSH*M z3c;?3B_m=DI=~y2gJrEkL>gR52%2F1vq6mhT?xcJwB;gf2gsDhfC!lc|FbNB0{F;~ zyx9(784Ml^NC6}Z01XQVuSIY;vM6C8|84Flbry{j;S6ql5uzf{z@Px7O+obW4e;5A z&_yAW3cf)W7Kx)lkZz9-s@LZsA7%x&NhNV!r+HHem zSohA;`zl@KAhZrTg80B@?unerG|F`({$N>fwKFZFkK|Sf`sdxDYufLbrkVmuH6=gvtNnp!73_lGzM3jWoE!fI*MCml@rLCl1%ooy@LPeY7~A@I3g zhL-A389SU8f9QQ}xig%zN;^%Xdl71MdQyy*yB?)aeYXY}2 zlIBA2JQ+bly#F<1(0xTrf0?hexl?4~Sxbua!JN)Vmz_)8Ukd5x_!x#NS<8HDqR~_YVZxDR_8x!MF!|jz9R(~FM70%$qXPkYa4f=3Kb)QZOi zybRvs%cxY3I75i+g5cxqTmCVGYRa;I@g55Dmr&E(Jd>iU^Qvi~X4Fhg z=z(&uhR_P(TT2_~JVbTUDQ9@d>6N_AAT zi_Km-bMNuZ<6@txGX8LKQ|)JPzVDz~J1?g2TA45bk5aKlI45Dgr-Huy@6e~mfOMzP zE&`nrAb$txXy#Z?0oWmtabpEhzF-R>n8OMp(9<>`zctQiu)^&Z^bnj5ZM+cp=mA8c z%o5nak(z#TpcJ098#5w@UB4X~9Da6xD`as}h@ z*mf<9c1U3Pn6L!K8k~kWIc&9SXg5b+!>$BA8LjFBeb|abxnYz6XjjFdmk|zMif2*a z1msbntr!{tWBV6e03zxzNe?zS4DKSK46R^r@9N-PLd6J3R$zyQ zxGhkW{%fki;b`QbWPyc3g7$a_dMHAJ2jIjmkN%DISVuSn+b~*OoKFt*QC}0NkPiTM|lBBNZ@4?4N$^^|; z5yl9;i=c=Ap#w=3YRMjlf-0fK3U()Qu>Jrr!S9G7_OVw5XZ@i$0xn`%PT*w%|0t|z z3w-tuy`eq#ae6P-xrEP!Jy!a0;zE>07XBd&~Jp6B;Zek z9tOx@GD2q4}T; zgM9#;*J)}k;V%F~bnJ__-=sm`GgmVzhWdSQP57%Bg;)_G%V(fJ!l3}Pg?1rzWpbXk zwZ=BvWAr~mJ{a$HXs}?W1w9r<=!A5AW(+AI8&3h{%IQIfIS%Y0lmxZp(Sn!cxn*oE zIIIoA#LipY)-Rh2IqyC}Q=LgmF?XM0&g7Ss{mfC`oJ6~jfx$;~g;g3fes76OC#Wl! zbiJe08HP1gs2df7h%C7ZS{e&|?0a6v=CTiRxKV6cF|6uF^(!;KoO>71zEgfwl)MA~ znbKN@*&oBty=B?8wDYfNgJgPGCmi#Z&%0N;?d$$^S;YPbo4Ci|Dd_@nyUwUttLtU4 zJx2R^KMgv`bTUrOhtbg4P|BXmTBYr06@N^RkZo6?{y2C8bM&3B$YtImH2b*2)6k@H^VRgd9;gd6W2KfIcH$>zp&^ z=oJ%fACcC>^Jg?@#Mkk7Uo{EpGM(#c*4W{`z*7`FK zgIdyQsdQ-y>gGa9Q>7eaw32&H`;{GI3w^1r`TfP+5qk;ir^%sIGv({li${hz>xUOD zU(&33ntW}1>;J7l>X47ao7tx99hbZu7Dk%i@r{8frS= zl=Vm}a-!{#VBGApFMkGV{7P=@R$rmiQ0GdycElj=ebsZH=#w8p3Nng+PcI*Hq~Bg0 z6uTY$MmFOoODsf2n_BlFw5p>JE({79vQ5Oh>>YiW_@I< z!R~0wCmMX#o1<9L+=Z{`8P{fSRZeezG(YNmEs&Ko9*L!!gf$s zSS}D>yZY`s{P}2Ky|#iP8vb>w^@RleqmEfhBq>G>Ma=h#mUd&znll)xXkC74DBmWRXh?S%N-{DV*wchPG zxGMnZ1SlrLsT|a18WVu9T?83?sH8*-gvrAnF?>^mGCtN2E}>l*{`OJiUL_GPf-nRD zgl~Sx8!?s zg3=BN(DfML1WB0KZ^#h|l}ycG)r=5-fKEO*?Xn1l4^05DnhrRN4fi>a8Z`eR+zANR zilP0)5b^@SRu1@R1llYDR+a$sYRpmwsW!kIbVbm+{|Ui>apvv{$ol6B!n{7ZmgpCMmvFU>?14|DV#uP>Lt!Vbp zzc@@}ox+QNr8Qv{kAR{9GC`jOWLTng#PJ+3pChWlQaev!01y6C|?BkbkL|E-UB&9-(5<;f)a(Wv@9sw1!*DRBn&XY ziW|-HAzvWsbq&h(-pd8vKRPJT2QMQ^p+?#~(q z9z1a!baTJAkeZupeEL(n$pp>mk0B6jSqpVmAukKKgmii_7=vp1eHsa1R>Q5J(uAPN zW=m|AF3k~GN9dTRQ%f;gShLwqzLvvZ%dJ6BO`~^bRA-8~-|y{cP*g43(Jd~oi*c^^ zqtX%;GhTo4quF@+hDs;k@U5*zyBnL49i^T|^`~AfY1Ay96;X|?{N-R+_tYcWj{e@E zyZbj?1B-e*jww)dS67%!z2dHr!Z!V|FU4 zEOL!CT+5QlD)MM>?2GrsZgSBBynI#GF;ThO{B_!RZq8JV!3~t@q@cJU#(=in&OD1v%kc~m z|Gm2V*7>ss*QCpY2dxgL>*rn?EkBridV^jk&O73gI*+jIjo2{CGk1OG7tc91;3pGP z<|f+b+Z9p^&2uQqo2M8YyE_!I0#P-`PLA0gKQk5a0ME*2H{#|Ed*_7jp@;k=k0zg= zdV42LX4*S8{AOQALY88T`%KzW-%YO;)xxmmFb|U--Q_(&b>}VA9-Z%>t-4q2%}~%Q z#r5uwS$hwMDI1^trxD$|vs9mS-Dq4-@AfDk8#POoq8ntN?2veJ`oL;D=tqaoBtImK z*cSeaw_uY&BP3c!XLxqf!}k4UwRQq`8uibY#{4PW+_Jokk6-FKbEznJNnwfx+Q*(y z3%`@ptV8E;lJNfBzj%}-zlE*v#??8Uc#M)e=q*1MQ`pXk4@X}5RHdLWx2g3PFV(Dv zi7w?@&;n7`5Wh`J!FZ7UB;KMY&BDM7J3ooxW3^&0+$eA4HSZS-=db6>&;JwEv9hr5 z%H!FIB;nlR>)+3j4w<}P`ltWHs!-n*r zLga}$60hC7j^9p6->KW?^;aU+H~p_?k3TXs+Uoomiq z3qQJxJE)sakQh8U5wlaC7tX1o#9P8Wu6jL3KK+IK+>@xc6}J^dI+bnM%?1On7%2=L zy7W}T@ZccT;qk!a@+i(o>8;QQ!Gf06q`pNWJo9#M|3pRRbR9aeG(^2f>w8k;e?60b&@Dor%+kv7zJe9}pG_9FjmUJ%|uOHWkuE zS71+tYrV&9=^z_J5)_~@d{>D6hm8^#2TEQBVHg7X0h0dB2p|&)fw!B8AqHef_xL+fA-sW3$rNB~-GWZeE|Ws%m4`72T3AlSOGd!xAlb3y7T zfE?~Nm{p5@=Y<#$^aQ{XL$HVkPLjXP_&;(#r|M!LZ*Z&J;ssN=#3kLjy5&VYmz|p*6*-^X^q`INS zK(%VKJD|D}vWfRzvBC?eJPUeYyvLGK;BP7pJM!hR)1xu;wq(GkpJu=iDgZa||< zDQLst2u)Wgu-6>(C%~T>us%p<_;nLSmZ=N?cYq?iPfN=n6Qb~5y8wz9(`n!trHc=M z!h%fdB1Ugy`E>mTRiExVT=FexU#E>h~GpGyP5T=XBx!PIvi!Vs!X?yrY5s%jvE!9f1&ZE z_fPWpc{cp!4b|v77TY3L*?~#q^4`ugcM=*8Yxc)03g~4D=QloC;7i|{dGt1KD=U)X z>YoH#->q=#(ARt|%IY)glWwKtd|N@2TJJb+L{5q~=h!Wf>J#QfYjD=F*&I9R6rM~p zw>}cjw?(;NF&U$|HSBioq^4YN~=F6nJ0mcROrN)+0m4@gX#Q@c=DLzFA&pbr8k;<>HGH5)+LV;@p`kFYCE| znc(PRVwNSD$*L`-Pq!*|;ZMrHp)lsE|GvmQlwv5V}Q5i*%FuefV@MEq}-ZdaKqA%X6E4lZ4RH|^ZM`sx)dE+Jx}qS zbIGCE@*^cNy%J146TvC#)>l39%=0MEP=8F`ygjMtX%%>e;ziuza>paW>Pr#_@Qy8Z zhz7QICK0O!9vggXenM^j?LLRgo6zAS(<5J@|ILZhS%(F$RZivWYA$pqa###=RV5T@ zE3>Di;gS5=A~*QVaG9%M=lurl$Dv29OetpiawY5G#`N zP}-`~lx22$IEPQ|rPSqj9@5l~zFK9buCHuk-^(jS#8WAL?^J-WAh+O^Y0BGi&te%b zWG7!ZxTTwaY=W1tc15@PaqFvNmI9gqKB*}b0^(Ww>)$k;`dIl;^FlIB)I>DLU{vlG zu|JPnGl;xB=4a+PZLPMwJ$C&j1ncsc-0Rr@?1lm!37kXOgkcdD`4N9C~ z+odW7u??uc)Dmus`X3`0x6L5T!S-RT5k40{LA2#&4`aqMY^<=sqr)%+**kTwlimt^ z^WSX`=S|y-SN#V{|G|G0H?;R5sBnBp$VFQ(c4;uF5yrs3_x4dJLBaL{4aI?9gN!$LCsa#6qv7#van_Fxyoe!u`se8zwszyYPTf!8k(CWAEI zy$S9CVmjhLXqQLY1x`;u!-bHpaQ=5{xRn4DhPuXLDC4701G@^C`(y~9;4B;;fCDeg zVvV(sbdHuAPy}~b%n1wV1ZiuSbqx>!wk6WNvC3Ysq-dT1q+W%JP`ZTzt_rA*(GOS> z+~|oq~neveuTRDg0+Y`SD`w?kpBsxHhU;#4gsowlq0wmMG%c!a>Px5 zSRmB^g=r&h20Az>9dHLo0fh=&@Dg}}X^OH*O*m>XGaS`>e1>}&u&ZD~HW-<>n!+Hr z=t90MpsUH}|A-|kAlw7kwtp{t0E0bxB})!$h#MQmFkQDkNh$OaVdx_s|4MwQM`7 z9puB%!$Sb1hQK~p42UV(N}qsSRvKwxKFGD~r-gF*cxVZs+9Z13NB@LNLMP`MHM+Qj zJ6l=?Prs#?^4*WAmQJe*Fj#{EixShcIgqkN_d>KFjfP-zUoBOAbUuC%?Ig)iY9zx! zCB-Mw7kZ+t>@p`Om6r+#?cK7X`CUsQL>`H`*=HW%VRSQ&^WRqW_Gy0K8`;u*P)y*& zt-K`7hkv4Z9NZkb=2zA}DH>*cYE&3-=VwxStggP`8?NwEc+} zWQk8Y6Cx#%pe*1U$J^u~Tb-%?Qj7Bfe+r3YbF_cmkOAXc#{0VF&0RrN3~aCJ9e??( z#eA(g8)(|x5vKD_J9zo5oW`HyJY;P#q^INRXsW_O4vjk}%8|zneOKJHxhZ7gYDUxP zoMPAS8me!%avZ;m#&d#%4obt$spPWFUP}$XXrM~zT9@ChGv?^L?N7T?@C>C38y?LO?B^#o13h$hkT#mSw z!71+5M3MZnGtr~YlTjCa$L~?)(4wwTecgrkQ_;- z6Y}Gt)T`Kt?IG8yk3!gsG|I(3iJ{HXKqRyK#r^0D}Zr+gHlbeeh`%*eY*+x029})Xq2p7NN z72evkeN5!=5l0&<_t(R6&H|;xP*=vRr_HhUJI#@4m0o%|*;^GP5nIeP$8MO(o0EBL zl5ymIWpX=JCbKLu*7=G}a{slZx3uJZKL$%b|D3-{hnJNUT5)1`A)B<;gm>O|xTGa@ zrQ)c<6Z{vEhXp+>qBB2}*|()QYi>LB9}jkOmr`oKdVzVw__3y(x|)8wK=xN=rgQU~ zO?=mWGHRsKR<-io)Z)#wPRPH1wedvjI!%+z9A>ChKP4lV8R2zDLMUH!F_2714|haX z8W4pd%*7692>Ulc8?@mMW{7Ff$9YG>F|ZnL3yF` z&?OoRSYrvPpMVO>u+*6U0IIto?f_n6U?~Dh&~D%ev(9P)lGk%+Bt6UGh-u z;k7k)hqwqoP%`^0#$U8AhN~=_xR>?U1{xHkZrl()_2g4Ov({!LqAN|(-$ibMd+fti4tbU6e zclu;5QAUbND_y_~&u$CSBY79ub?||g&Z>N4=C!Q+ME+A76T3&aco>5W0%qe^lo`HO zka;D#q%3G(=hO{}G2fituxg{^JzSEz@u^3j_s4T z9~6g3vXw^Y0n@x#$YX51_{AcZ{#DoOi21$~O18D(?A*P9CF1wQLw!fiHg%b05wl&C z_EMXm<0oEEx+`rLqiv$dvM=P;({C;TRd*95j9l1TX|-z~)NUQ3p1V(T?}?`3Rx(v< z)278m_P%)P&fizlh|{`E_|o^YOyUtcN~N$K^@mCozpU!P4BUVdHutjUHd_L&8>hF16{!*O%&uyRp}U_FWpt2bD> zc%m3>GeqX7`H!bBb!sIaRA4qL;>q1t7s#J86ZBb4Uu5SAS9ZDesYWtt z6mebVCTm+TssY6)4SfUN?cq!1R;YllpQS<2t2z%W52t83 zxizI`-ihCT@vcgIic+nI zc+JlD-7q0M@#^yUZ8t_P`{pWTnKi)*HI7@wC0(@%()4 zVcSys4wH8F=+@G7zhqCG4;tRE9!$423jIky$*fv0CX;9JZ7bQVd_2K7_RPZ@4*BFa z3~wG8AeuYCN@np~>(F@bTtd{#-v?UpDX+`N9h0F6B}utQ)*jdU();0}a3SxIkg%iH zAA`O(C;6&Ocb$5Eq&YKY*c%w{rn<#f7tCxE<9Q9~^7b7OHl=Zyqp`TA{PWA>6t$D_ zfBTnC)_A`|J1UAOL*ZUEID|)KB;Zq2BnWNWIBbGInkCc{6?S^ey9}b~3ZfPUur0zi zjB=F#IS@9f!N(vj)Bh*(S{egONW%Re6duGGcIZAH=$hbHK+(+4XXDA>^ydf$RdE zbcSNDn8hA#fuZcF1DMVIpHit9xqxbxZ~;h60acjqw69h8E_dL2tjawLJnrxlfkQj^Q|1C?XJ0 z76E&0AX68uCNlbQLqLvym>m>_gF>Pt=)D@ju7J@Tz;I?*k^;2S=-tBn^I-p@%5i9X z`{8gzs4!m)b|7S9xqx_6cwe{$8r=fFQp1P^5H2JR1_ zz(8yGz}E<*S^X3=AF_kR1ICpf!lWnkmU^B3;4{az>oINzW^9bJE?&J-&~T3{MzdZl zH${wYp;h%HV^-^>L7^W9MjR$SE1T!tIbi%=_wp$7UFLU32RvlD9*F+A+;=K4nbs;q zz-2?=jpwZI$U^K>*La@k?jX^zV^6eF{|H|XdK<@+c6|{4>3644AL5GbTdz%67gofK z*}`X)75TWd)HUl%M7EeS#RX3?x)IbW+a$&Ro)3KDTu?poMm&_bSwMIF^ItsjHCu5j zr$I_W|Lvylnrb5%#CjD`$H;s7g-S0kPV90%5hQ-#ymXVE^CaF`K8mVEbLlfzrdrGMyPeO;kcm!@9ZI+L{y_!B!a+w#0t!DL*XBDz!-{oAs$ez0%5!m!? z6gsOU#FT~Jy_9`ccm4I$oKahWne$0DH<=Fd`oSQD#OeDPHTKmeOer( z{N+lm?yuX!n!owFDWdBnJ1!s9A&imR_Rs6MP+LZJ+bT-ww_8(>a;g1V%%v=qyH`#8 zy3RIq&utq<{>Ae%FDE8=sPKk~)yKl-p8$-QYx2!gT*;3?=&gO(@ zE_XLqkEzrs*j;jr(Z0k-mHrpcNLz8+m_gymg_qWE&AEAdNp-8YO)azTzj*EgFEZNt6QlCl+Cf<(xy+WYs}8QVk%l7%&tHETaB+XB`fvz{YZQo zW%(kt)P|@_iWb^65P8vA9jfi6mTonuAi|{#W%IWm0_EWD9 zUhtnv(h!HCuzwqXw&?Tw5D$$o^F@^j4@4WcV#9QH*=~>VG zohRVBaLUL#;(=zuoSiqas;ga*WwEJW5B=Xo5#otc3*5wkP8SCG2lFixWndz`Qm|t{LlFy!9WNfOv)9V3eo6@FX7gi z1oh--0i|G1U;*Na%CG=yMZ^-9=k||#=m0NEcZS(wivTDNw_rrGhsZ_5E71z#KEG^%8E$B|@jlpgX&jpsM72aUX`(g=^mf(&HL=CE-z7@;@ z3!Meg4n00K#MH18$!B9x*?Dl4vHY8xDHIr)4O~M@gQO_*Qev(qRKpDdT}83LP2kX2 zi(%}gf(VfBE#N?@^lTRzz?2>}tzq!se8uu^K%sk!+%}j^0>Q0_(AGm4ew5V$v7He3 zNh1X>KfEu(?c^j-X3KodP}d2HMB^K<%dNWc$ews09d^v*YP_LNxWTOmm62&X>j)1a z&GJT)6R}@dZf9IOdnrO5ul)OzgIsmpcfN{B+axMk?heL7+u1jW7$P3pbap%%F0(mz zslV7UJBs(L4VxbMR?0))xuo0M2PaRf8NJl|E*$G{l`G}(W#f9bLlwGhtG)PJ28m}S zbv#_Z&mB6q{xeQ9L4wl8`XmQYwEWZomQ%Lhc`U*u&F`L3FbxkmYF$}ZRd2+|{UBR< z=e*VQmpiFj%uN*9?9S(uCX0`F`6^5Vhpz5~*5eg11#xaG{<#@V7!|DcJF{r1@sjJE zqVekVJlfsG%cUVcC)}W{u)%)ol}-hT=P5NsQ{IJocXU2+2Q;k|^vmac3a)9J?n`v> z59A`O=o2w8JxwSXl|of|Nwr@2^3Pu1vRy;L*Zu)XeoueCo84gS=3bm2jJ{sV_v^xK zlIeMy5i|4RJE7HnQ>I2K=UqH@D%F^!`ZczRc32KiXSfdy#p~8qKMlhR=h0q@*cha) zH?y?5RW2mI%$CJJQM!LFT)K1i(6;j6fiY^jlc|2XyR`kB!6n>(x+5wrV*RiGZg|b0 zGO9@KOY;}+HJ|%Z&ZOc7Imh^p;W5vR?z=+O_~xeE?E^X?r@E?m*_8yZrwn^;(7ADc z$o!qnVzjvsh5y|6;8I(dgOL80vALmWx7L~Cx%j&Ux|?pMbcyo`A8DB=-Pn{wR)si@ zQW6QCxhu2S5l}imD^AFxGp2mw+tNG3$YMzwVgPV~*{yHi0%K14TQ({=I1oLks`NY- zqx&R{GKKx??Ty~ zRw`9rNlC^_IfqQY{y21Yce=&<%C}Zt>&Kqltm1th-GWZeLVwOC86T!q@%$0YJk|7s zyM=Kp+k>PyFsZj_z3;~9)QOu$&71ma5rIrZ#-15;ZwI2%Ni{16lIEHZUDzuBY8Yr5 zq=zq%{&lIIr78aQ{g-rBy6nU5@jDMXY0Nd56-)2@#Tz?Xd*(p?klKbZ)cOzhGnrCd z`e_@pD12h592^^*7bBORZOiRSP&o&N%dou-_oKml~XMU*W=% z|Fsdr3$G`>>n!ZoyXaoP-$$SEZd+knd!TyP?W{bHOdnHZN>%$~R|Oxp_#2U@EE&S| z^r^oa=Ux7BtMdHjfIjD1C(D^=2~qWxGrw{)>EmWhh@J1}b?j0Ld{gy)>_b~~&a2-q zc7t1DS^mSfthU~p><8ZaybZPGdv;XiN5tUu4#)V1JXAAhnS`CZfC%~EBpA@ zYgP*LUayQ(neKn_PJ4Td8oZay-iZ{5-Lh#4)w!JKz58vl{T_uYXdbev=ZFg2W(;?$jg%e}M2F-7; zP=c!D4{Tqng8xuUWSU--lf86AP-a*=u7gngjW&B%#8Q&P%6F#vDUEI8*UP+*zF*u* z5H_EoSPc5ueNuJh{4!lqYTgmmA)aM>XP&fkFJ%`Z{7xs{wGz>7|E3cqLH`%8f4<3A zzj2_Q+i>?_qhLZC<3e7de1lIAO|3Is$hnS!$?>MXI5LaiE)FT{#tU`TwUx0>b7J4P zDBE_0eb!(5R!W{e{Y5m7r{&kXS+=8DA=fl*7V`>?rJkR@SEi#7_?(9Fz$3^Q^XVNxUM+<>DZ7pU?hiLNIiPp3DN)AgdOw4@U z?IGh|sfdqG$@i2@1D9%`ro1TsRKhR1KdGD2$5meUa*|AW#9XWH>pn~=n|?;wR_1d} z+o&ZehZC{)i9YwcGVe-z$zJuuJd9y_C+PHklT_K-$Z_;W!q9rmwr+=DEA`ha>JyT0 zbM(UFzWE$>58Jo4pg93ObSo@E4HnuXX&$8*=O)XMq|5TJz{jQft%7k{grw&?2gMgp zTJK|j%bR1-?P2$v(?QSYAR&#OyVb;}?yK`v79S6rPMd6pcqi%XR^dmks>@i=+=*p~ ziVzje>3u&=7e8m;?_+qycXW|vyH3IX@8F)+H(Na9(Jo9(bE+03I`ALTLtG}t zh2qIb5IIEdG${CwNC%=u7}x0l#=rs`2|_?op;qwqfj16|n*scXd83JJm1Tu&e3BWixHX2}cC^{H8878M9*I68Lq~Y9h|Kh(8Rir?7hj#a;ydC^>%TB1yv2;yN7- zwqdztg6WFgj$Kl2_s;vm*JVp%g^Na(2gJy3iYp%wXYHMyh`%rqCVe2CBKx{Gn}g8@ zJK$>eZCfSe>tUcboQNOmY>ZMw3k@F*J75xRH*g1=S z{@9XVYmIMcTl{$0iiA>jeFvm2$}8mhr4{&{>twIF3W(Hv{^|vrZleon%T8?3Zf39W z?R`5Ngt*v06gTC&T3tQfEX(>Lk9d0Ea`4(%#0$}|65C7Km2_WJ{QBec_vdZxGJD#X zW^y}>D{>cP=4I2jYv}*U)^F)}cq=Pq^^W}Jyqx=ImL#cHmbK|tyE>_lBDP8W)XI_; zLmF%K4XUbYV$b_L_BGSvuZ< zX06+V=awzA30<>HqAy((G4EWEliMv8t172i73zO@9QtxKuk!8Yw-YJfS$VxK)S$3< zfk1*S^uWl|{a$k|K|Stw`sO%%qB|*xL#}K8I(uAv;?;0Y33Im!NwgFpcqRRpLOi0m zLyzYtDTuS+iL-ut;SyNzOv$)twjuKkU#N`gu%^n}w=Zky)L&@X8@Wn2zE8fM6s@~H$H4#-BzI%x zI~(^j$DWTjTrXUyaqt3t#`Rx1G85M~TqxYf1PbLl2&AGPS8m)S)bJlR`pG(9%*5th zk)bHwJ$l)aABKDFFmaPjpEU;CmlHX&Otg+Aj) z`CN7!rX_`nWm%62{^CVuxjAx)FBk%AD#3Q=Ok29i+nN!3{T*l{hWM!Od02@@8R{5 z9wK{4pTo=@?)_S|PH-`LbVKXNsG&!nhq8~qhgeHZk52Q*qwAD{UaPk?!);{89J^>f zYeY{S2%mh&@q%1)`U$=>9}~|JDON*Pro0>d%I{MJ6U7IlE^!7T_*AG zM{`f@^FQ!zL}b8V{c}Ll!bJ-|x-_kGZ$xe+)@J!gD6qw6kE^l;oqf}+w56}EE;G_9 zSlx2|PSj=)E$Lvut&}=P6YIF0iwkLNUnA9i&vv49xi)pOZk^HyD*PQ!(F_llI=IL?sFPk zv}a%D$t)*FjiphtTe*~m9`pdO8VWK4e;44oP$&tcp8)xQf5NX=nlq+5VmZ4&M=&^r z(qB*_0)({dNdD4mH^;TXL>v(4;lDKPW*n14t!^-34A2e-uFyacXaq)yyntnuW~TVv?Ee--*%Lm|S$mWTWGZYVi1eZBq9Mby5sTpef+Q~RI6srd z+`CBmMc<(dLcABYTo4d)-aNi4|?_p}UVpG_mK3iV0$Mp+obf;vm04hOiWhEzM8Sc}D% zgFN|*KtU<3gR8-##B^pyA$_H)6vVdCxVMNOTj zr&Si9hoc5}37M?~#tDxBZbgya5)bz$gc0CIjNG~KmSNMwxbdu*{5Ugo-9r(TxRD|b zk5OS1=Z0EY%%SKr>`_6@70AYdaxv``$PU1CTNHB!Q-jN6uk8p*)rMl1w_U-<4Q^ct zcr_3Ohi~Ii$2s_e!A0GJfLw%Lw-)UBTCkc|Y+>Bi7V?uw^G2sY2{$aZ9C$RCNFC`=8f6uEoHXe-+Hx9~>ijaIe|I28Z zvrUfWwF31gygzF3y^BMm=TiBCx$7>5?zq$J+IRiByu4tvDcQ;;U2R!DHf|S}Gtk!g z*7R7Lg?z)Ch8}PmCu;N9lyE&DH0{Y=pS%2qd&s%0&8YO!rK|_Ov6>ZTOW&-<-Y%w6 zd@(f{?>m+i#Bq_SqDuMP{`l6!X6bvb&Ph=>?1)*_FIca(7nmIyHF`JGRVrS1HS1ii z*sXGoh&=vja+%nDDVe{E*dGLBRDKbD)%~H5u%VEBOY2CQ%)*x#@wqvwdxZvfluUiI z6kP>Wiq|f*e$o1EcCbXysrt-MMI(nz&kDEjPpzE(T`Z4^PaAG)?$oXk-9DJ^rB?vO zL>fB&j7+NP*1)3-wy5Ou**xX=#%1>Wt(i-D=OjRr)gW-$xNzyS{I$Dfx6Z7|N^<|j zyV04_Gqo=FAaF^)x>h2%&E%%_wU=|tbXL3Ne-h#eCytYw`q-v=`pWF+4ekuHztB>% z`knCSl%+f;heEHPm-`odhLta0&NWVGkMbSc9O@B`)eRvnNGI zOvu_*N|~EFOMWZOC!~K&Ap9WjKigIVS-~81WNG<2G6_zaO|-^+{D-N z3v^$Vzc3==Oy{~Y)b8b^-jS2J9>xn=88eneAaEf*+{-y#^wU+R07W61)e2tBzT~<$sYSczUX6tUz=|M zv7<5V0ml-r@`8z%w7d-tUB2Cxci$g=1;N?s8t)As^pR$=hA2`0e7t)}_1m+3RL87b zTZRL&Msk#mg&BEdtVZ-p%JY92mCfR5Yg|d1WwOi|Fmh@pP}Ha0UZZK2luSG@%zeru z-`2)MT~aSL!25X!>xP%5r!9e{B>&)apXY7_aayRarF`r4SOppd(-O))0*6m3aYdQ4 zl!{u@D^Kv~{DoNt=C=#tc-LsxMMoadc1`q)p`B&bdL;t<9A_`yx>4$K2&d`6VW{WaZ&u4FuUg4flOh zqFdbGuFit+v1^h!Ue=qHDBvrnH%VVz&}z_-X1o-!G3n4x>fR>490 z^v!|vP`~N5Xq~31w7yW`WRuDsr2)>l&t-q+R(sQ;eLrT^=XHJiVz15;H83s^p|-F4 z+&j*1^9M}j%+#;b8Yd8%-wX4U_+pk7Hb$*Ps`~5x2|>Rq88Q{A+((l8n1oxnzp^Ax zq^NV=$qu~}wOftn=l4WKa_(sjt&7K@HK^iawBT=xm(#EGYLsECf~^>T`L<*$AER2} z(se%R#9;P`yH5^fHacYYbrJcK4*jl|*nB}yBc?3yg2CDiU+Y{S=jHOI&o*mk#GY*? zAG>w-Xa)ImHd49LG--DH;k?dR$!g8ZBasz{c?&37|2X!BdRRPH_E0RinpDEzmQ@yJV5HL_on&g7#KD z&8O+r&Rwfak!{sDB_mhYInmgNtiO1~-zxe949Z4yhXy_xKU^OPg%-SgV(dNC#Ma94 zIS;Mw$KrmAbDp>+YK)+$4 z6)rY#1*tnY!3X1Aqga3&77+ITQ5kUr1}+067=qVagV z@WSPQR}&#Z0D2BWf2dZQjc9^bI_CSucrNzC6=uOKhDs`^!d1{vLHjX86a_2ahK2HD zTo@xI(0h0Vq$w=w&I=g9e;F{!z<}Xk*Tm)FV{8vcqY?X<#mdz}DjX0*R4NCfE4V04 zG)zQXfv}(n;!2c)7j+m00mq>`j^Z5K=r`={s9;Y3=!?>b1BIA8BLwa)iZT{}5`(Ns zk618Pl@(1IaZup5|0psn2`+aZ3vz@6MBD>{iZiG-4XAu0P*MUEF{E?io*B|53lL=k zg*Ktk95E}zqhRTf6j(401_{W0`5`FzvkJ<7V^SkTouUwacv5IU>CX}%K29Gy1*2E+ z+~E4Sa)L0zy`qHR#73+c*YRXU-;N%V1XaJn2UxEEpW>%y^?7w)`JmUl|Zp8*NP~B^}b;B`pX_ zcXxNUpi(L!-Q7rc$IuE$r%EU-GK7Mlf`YW)b7p++y??$xgUpTK zT}%3{%1brT#Up)}4?pwP?!EV7?+t~G2%^l8Mhf3xl*N?$iz4D66nU~kGE5rzZpyIR z{s4W9dXBUn=hAM&EBcv6P7rE#w{xU5Zs5DTih0%9C8`NQN>XxNv!3?LLcYk@F!f`m z`DfE-tqpF5VJaD!xB?xOSa1!gobw&W`(j}+c^qS2scIz_7B2kHZN+2=^o21p8~2;1 z!$sHn#~GfpCO2lW%zKpP&M?;EkSUdOgCJY+WaP$3y1KZJPL^!nOu9vc^RzGDgtjmJ zc5usp?dZsD1#&*#mlkc(<3iemH@Je~z0|?=(OFOJi=Pg^BXz@0<=Ct_?c%{aFPx4% zsCsc%ZNJjQglXp;S}s?bVl_x;!EI97oq$iHRP9d*1=6Y^56XJX{YSJvCm)vDa!R$# zH6BwtFEO>p6a6Gswk@sRS+~Oy9eCo>kr~qL=oY<|?Q?1=h=aZ!H=c^4?)GH3=)-r1 z?qoGd^3NYwQVd0GPF$M}^4Mm%8vdfxw683%tSUXHxmCp9{z7mf?uX3D5%1xvr?ej} zKCQSu;^-0dxmh#DY8iI$ObVac+VzA>;OpTMcG-)-us%*EV%^t%>4DiHURshCwDhvv5m7P`H5I96)w~#75bB@&o|O8nkVwK z(SqrtaCBHZ3t0Um=51>+DfSGsm=9ucvfhX>J|N$xuJ@M9A!j{iW#CxSiWwl3HS?yO z3DQ}6@)L*iV2+qlI=jR!CA13l>)n)bUaKR)TXC*;WdEX+sSz42zqnU;qASIdX3RUt zsPk2xV(t;AN8e(+30fu1f;XeSL3;DIw+V9abtlq{zVhw%2jSZN^|KYOS6@g?C#Q9f z*p2IXOL_zeViTW>NGX{M&%tL($aw2>&z_5CGbuVx5`5oeA51=7XE4u^e{ABlt>(;j zmoS{*H8tFoz7(ax%}g&tp?m*QcoW>2K1S;e8q-Voo)oa_x3;9xzk6ZD?C*v&yspzjhA| z^`I;XDynDC6^?=PuVPzR*)hbuIJn>*rF%f<#)Hm2n;};`3BLBbEFL&)nARzmJ`8@D zchbD^deGd_``lqq1Jqv%2yb50E|$0Ff8UR#4-S$dSBiT*P7xk4ED8Gvo7NCBS!0$+ z1l`b{RSo1YGW2gSdv`x7*=zawrv6}l%sg~Fa_}nCwXNGzz;i*Nim)nq%9Bi?l+njQ zV*Xic{CHx5#4p}`)^%K%7Js!BP1#78qtK9v;5*c40Vzdetcn~o9E)IK!#53BtktHD z40R8FC%1#TB3M7@}X_=C3BN7Wx_KB z*bCB%l-P&TWJ=Oy#1Bn5*}IyxbKhM=BiZ1onuPL?#y|_Tcx^^T$ z@b`9Z_1m~Kq84@~{qXaa4vCz*P9E(**K(QvHe5cUvz3a8U zk{`N{Xq<5yzeF-k;6ye)Z0c^_G@Y$%H+ek5 zipf_rN3V$?sbt6=8~6>AgobA##tVzho6W>`8lSc;4da zoX(C(R`W_g~*vi5R+1AROl7lU+rB0L~sX(SXcNlL0lp%sNJNU8(I#G~E z2GADLcLEIXuXvOl0lOAK#RRfE6FLx}7bso@z~>=^gm{f0jpe^E8~D-&K{>?xi0^-- zfDr%z2*@BX1r&b$7gF>`7(DDEP#8c+&1#P!KaM>p{Rj>PCxN6a0+>RRf!bR_b3-&~ z1wlK|)eht}d!T9xC<+Ir#n0Fv_Fw%?);~N7%@r&OiE@y!E%0wBLRusMkUL@w#0#X; z19dSF_5m0h3P%DJDp;%=hz$Ol3n-32oQnw3A+Y;DuMH^63?>7u3;6>PL3|Gsg1{U4Goi%+WDl?u0I#4<2lUiK z90C;qBW3}RD)KXAi4YR+Ap(N{dDdxz>@u_f5Vr#nRUpSjgDI*2oQJsHzx{yV77`f3 z6rr066?s4#k3eAv#JpGw+M_`z8`=`^On@tbCk6s(hWQ}O3-BsH#YkvN3;A3@D@8H{ zXczxg5`hE3H9-^?5R!6l0Pp}By~pThxn3=Iqdh2(+x$wTfY?hdHV209v9tP5>e4S>&(gEL~wHe-P| z2V@bgjo54ea>4xo;bO#{>wuVnup;Tb4A2w;D(3;=ZYYurW>dmnJl_wBijYrBC-f}W z>*0V(p?$D_;Ko9=;n3DWI$%DiLLLaInD5u&>O*gbGMS1OGzIIf5er|ag72JcW?Wbj?M}VF9xmDB5 zwtk5BDb|RxO8Dl}63Mpvuj7y1{0c<8eqe2nj{bQvMCHglLOGvn(OWa(iT2cp9=GQ` z!I8Y>QVOM*?tqqX$zK#{s^D5bAKYn1TzV!YLaBB1dLMI!?}PD2stvFzJ8wbqXnxeV zrXMF6IRT>b!^!L^`YF209JVb6M(G6#n9@=cUUARZvOka-So z>ipo)c1m$cv$|X>VAsX4B^qFe96AMwq{Yf#9Z59Vc(T6kMUQ_d9z?YAbT|qc_9iC+ z(J2SF9wD_@XY%b4#q{0wh2~K*JiE3SlTUqKSwzE9SqC;eD9xR1%Vg6L`93bGTD&D; zW0}{7Nk`)hD_qofw{F^w$`7pXWzL+RyRkI5ooqkS3KC}{X>P`u*`wDE%~jhJNcJLD zn#kCv#pG>jN?GJnX7#-JZvOX*Z>FOyVQ?B91AC3bHw{vU@EYr+P89u9k8lCD^rDX> z*(Q!S-+hfkDlY_2TQOqKE~`GFCZXo6h; zH&M6#i56S9&rI*qG>a|&hR5mgPO4F~k;Pk1YGy!wI60KK@4Q`$ceP9~k2#z2PEvObXzDR?8sO01*}_1( zxVBw)SFrq5EsOPIm0o_#Gl@fUWp(>|jQb5+?<;KlFy_p{+CP{EH}9rjv8@b^=zta` zu(>C=p-;+TCGZS^kv@V8w(&(??WCxM*|fD!OKaxQ4bN54$O6!Ml2$5~%)>IUEk9RY z8_oYnmA(I%9LtyZE?41+loKaIil(J_+940Jd6eb5AffBN`7eI~$po@^LXPxc4pViMA+AD?`dr;LkzKDhGJqmbX&>EU-rl(`I5JRQpQG30gv?;#Md7$U&q$~VLJql;=|1&r+q9eWJ zB4|$Tm!226AA9d~ew$L|>k^Uqj1Q0KOm@izrpNB2$kC9BN5|iVoxqApmhUEU!s;rU zdOw5fFEsM7hKHxC;13EkOly7;^QzFxkR60a-H!dEr102k1D8swv)tQS+b<|Dq@H1m zODWKHiq|ZAK2pgL!;`Ah1$Dr=R%ZR{IsYtaBlRZ!Z_|U$>i){dk4Z%8svlvDh?lO< zV;&cj2Txq(=d)^1@_X-}Br%>H%~?daf6pI%_99%_Pinuf_S@h$eU3VYLbWCy7T}N~CH$2z<7Qi=cjYBZ>pFZIqoP|o^|I0svk3irLf*X)h4*~6vFG%4h6vspa)|wzo7bMh`i|vjA zZ-Z&gfx#h26$MiJkaGxh1TtI-#zf2)G^~K2A#yrEXsZrIL+1c^bpr)bIR7%`5Z(pF z;|LKU0GSBLiquv9+lUBc)D>`p|3R5xD#ifSH$kRshhPo>XDxzFL7-b|s5A@!zX5Pj zKO|^HV%LFsYhak$Y}hf32bwMd`ySmr2x`%QvSlzyV1b8Z8Hifq0%N0-$YFD-!|4m4I-f% z0s(uV>O=@lfVnCFh6tFA54wRsE`N|>#k6?Xq8ABAfz3L2!~7=LRuB?}a`Pa1jCgeZ z9SgP!3WEa-4~7GT1f=%?Q`pl36bFK&hxjkXD`61gSha}am329|x$-VfPEz`(N(>;~MEZh<4fyHt>520X!}Ft=D-gplL| zKe!eIu%YdA4ucw6u0fuA{}Cj&*v@%Kiva}407XOi7wQZ|1C|1rjKQ@F?j`$`cGtw-aW8+-F_k18QJH9K#qLR|cJF)xQG=%v zMas>KpqXh;W@c&ev{4=Q(*i%2AWuhQwl3!qeK=lV$^|{ShXWNpjgynFLq$OUSKmA3 ztnu7l43gWOtcmdaYr0o`PKj;~VX@|hJCsAC5$HBMxH~Psg~zvIKM_xiQ0(^nMHw#q zGRVq-;@(KfD0<}C6@W@O1pXs!lhkJox*Oc~R_n`@g*{C6-xXF0(!#lk9ar3eZ zq^~O(WJnKk=W?UhoRVTOFmraVjSFR4vUFYx$Al)P^q~!&<#b-Tc=&ssjagwmLi8Ryt=*Xz$?ZxsqCFh1; zUcw~;aw)Od=j-t}FXZ;Oo0EB!XrfrY$iGmgoob;xAPV7`mfHlbbwrbHzNN|8=Uo-Q z&JsV=e&bf;)}B7RQMvT{%~jniDsQeox=}hi<@V9|Z8@dImEik_*AbP@nSJIvv!efZ zLpS@=%xWW+lLoc$CU{ZYEYmCJGPA1iNnQ*O=1Y-l!>ewBqZS6e0H&PGs6EBrjQQFp zK1LhbZ*&DNt1p-MN7>*nKu~h$lc-w`L#7H>O*~G*g;0g@CO$mX%$eMKaZzXu5)dcJoG9RE?ymBrDN& zZKLH{MceV(y&H`KrDt0Y1(W?A2})=GQgl9F-j#K>O(+n>Xq64u{&Tvre&#c~5#x>X zAXi=Z%69EwczRR4iSzoP)PeWcqYJT{2Xnt)&iL%{O#C2Hb7NshT}iP7#>g0q2T8kZ zg3UGf#exdEo;bQUT*f$Jlg-R`QJ+JtSV$!1I$Ru4_fBeR8 z&=&ObY z6zQVN9`j}_Kl>@9P%3zrO;Y>uSGOZ|-H3VKV!LtU^HB$#`M)Uj8{yf8jCpe&YoXPDr5+vA7P-K%kKF zMl}6a#Gu;v9U%pO6OZ1;uZ+b3;$GK-`*x2*c$ncj`=Wp*`{Jl^Fop*UoA!GG*-$x;rLlvwigpmy>4PhLs&*Pj>hhm^e^GSO zW?x0v-Y=M~`-}2xZj_NhE+Yv=lyct`rz02*ec#zy8#-u6;_EQO5V;+?TBbP z+PC%-k{U(>p;4Md#I9Cr9pa7SNsfp2Qxh!dcoulR&BhiiRVK4e4s*#ZF2-yp`c}hz zNmqCVBNIC8GpFKFXi!zJ&RU}GTFsyb*W`JqQfm*Ur)1VXR`n;KnHuEcWv~c;d{X|! zr1E7f>d&fEnX|b&{GS$w7FgZJXT{DQte#YwZnG?D<5lyfdlTrAufO)Ce3-zcvqMpu zNlv0VBM&0+q_jq70S=UyJ_@Y4#Kr>y+~|zbe#3aT{_XIBy<_1OwCHliEoJfyp9(yHFAu{d2gtmI5o#A z1rEhVrZj*rjXUJyglgFD967h81mrXK8;8H}xb+)>ltYKavDeO2j%?0|nbhC++qZRK z32#FpzFD+SXFvYDoc9UVhc^Fggq(=ibIs3YGl7$PB}?wqnm2_nf^w0gT+53_f4`c? zU?~*CBNmPLa7~P#E#xms!5Keqc&s3INIza^d7#nvu{l1Ql39t`Q)rw|66h}0$mgMJ8QfC%6Jf?fcq5YPkQDunAU z0;dA>=8rfO0b(VPFcyinkm5-QwIOUD7m@H70sZg+cmYt)juZqf(IJfY5C8s$vG<|s zu>S(G|3S`w@!9{+uV5nJ(g-ZL4ubAbC>v-)k&FTqsX-VOpx0XfaDvD-m_LLTp(*`W z?}dm_f`;M%Ya%S6_O$`N1AYMzA_eBv&~E%&KLXf;!w`X7@F}99EdsOtb9O3)@E(9! zkSYSK9nlLAAMs0DY&#N3L#P+>gTg@&21MYy9+Hbd)%!?MMy)Y1=+c9@;vN*{hCPJV zhbT%r1POmcgCqzT(gF+(73d*QC;C5QCkQ>lq4A-l0@8KL436L~Ag&6A1SdlK4^gE5 zt;+}G25dP5n8BIY`@(9F_m<53Fdp2tF;6td71L7crOE$!_fY1cmRD=3M zfXK~nf{86rAXK%8sRPgsO;ij>eINvnfbED6K!_h{PXPk*pacveSD+OF^k_iEVc-ym zw&2Cm&A#E=9 zgdOBbdN1{-$9SnV_4L?gKBT14&n$Pj?%3ZtB197yN*(ihj5{o4m};d%$X<2XOV$V? z6&a)am)bO?XsRxhRPGu#3z^4>-`}nrP`P%v%D6TkPU-d3UU8~e4B#_+PEOs-_fR7iX)nB;v7<9faOWKX#iY&yQe*E@iOU>>_!1|8Ghw^y= zlaey-Tk{MrzhVyfFYNF9Xbs)@CL*zabl=d}m9bsHm$yq>=~C^USa&spuosWH+iedF zo?4EtZL5VCZ}RS-I3-bLv8-#&$Siokc5R($l*tu5rlqUBGVSaqz1uIPmFIXrT;`{i zohQEBn`Ba6`@n2qMdf|^7iH`sASOvyrD7_()-T^m{vG2f&Q0c6KfCoG(?fpvs2Y!- zlj|N}bsRfdE%D0sZ5>WU2i|a37tDE?7?&y3 zP&yD~e9hKbuz1Q?Z}?-R-s9P@bXc7a8@&!lI$dGu_p5QO$J=DD9}%&L56#ig+CMZk zA|+8ANUU_>IZ5T+?(Q#f4X*sY`V| zIdL!?{Bc}SQZiRied>GUoVBVTMJm?jCoTOWkspd4g;(a$)EyIsq?Mid%&zLYyfI63 z3PmVS42-YeD#y8DhUHoi?9k|RKJ`r$%M1;>(?4{wb-4}l+oOz+m&IfY8owxWzy&aT z3Y+Z8Vu!A|f)}lYYy~Vgh)P_?d1g$;C%B{N$xv8;N?T#Uy& z6@Ev$j^L8gs`bTzb9lGcU1QmZSp&C}J~G`e*TOp2lbN{k3h5&&dTytu3}y2-!sfgx zq{2n1)k|U{IZX*MMCk-ixZoPK$RmuLPSTe<3OMvk0p`MSt4&oQ^y3;I((i?woq_7GCKz={AOOY%45nO z#I)TVg7sSXxG7Gy?TV80z+&1~S)X>5s|fQd`GL^tHBrQc>_w z6B%4@?zp`Rq}gFDNi7aG6c0d0E_==CHC{5B!1(v!1%jz}mecPMYn@TgMG}70(kC95 zs?l-eui6{Yv@axAJ?xj`I4io-Rz;-oN=N0+unCJkm+?jL1EN-y#B23n^X|wa886b? zI!$ZcsH(wS&rGmYmj=+jv(H8ztuCA2WfeiEc{sPhoW&nJ!3DaB2!s+z^iYP0y+2P0 z{FC`Tqn7j=Yfo%r!&g-Lty|-hC<;*|YMlKawN7{%C$8OFZ~L|{aCqz_#)j~71Uqd6 zFHKvPt#W?)y78?utI2AqZ9s_yN9_d{7w730>{N3>KP&Z=kAGMcI&n4HSGWA%$RvL4 zGtY4G zR-Sz6QA@VTaHqk_p?Fqw>ZU!9n@Ky7o2(;?x6bzmCXew1hV-hRB&o>QDV3`Pg*=P2 zg5Qbiejt%lCrhy0sL^fHV{4~?7a;jlo_+&Mg6Q?bgzN&(?%C@O&pA~PSDpV&zt>=_ z_|de?c|T?Mr0bku3XH74aNi_mgciRa=;X^ub14jP>b*dE8lhAObk=hvx(m!KP_;5uvt zaTXRW=8wm?Wnft5+1mLm;8BgO$$oeFzLYKyHU-N$XbCenc_YM{?r8F-7DaVoUEr-4 zdPjA}ScFJdF3L1JCm(gi8fMGZnILml?6*Mqw*xMDb1?~Irm2$QAT0z;4Djy>M~|G9 z&$(oE15ZXuo2ZkHo%O&Q2~r=_+XX9FOoIQ;Y!UC#Bvp_X`7%G06mrvyC8;R2#Cz>q zwL)&qB$kli0@~RY@NoGuqw`n5SV$H>tE}0LvkRKRnM?80|BN%@Jz*xj31e-0tMxF9GUfz$pWoFe<4kkC;X1Zunl9O0Ah9wKF$^>FOzl#J6qj7#yML{_W7S*9R z%wp$r-Xs-gYVg>MWl3BLd+qn6T>mc$pQ_OWkM|}Gn~BtPoY2hW?#^@kHOGYTk7JyQ zpw0oke`Ab0FR7A7Zti!h2K}$Zk!}6GpCZMNWSCy|Eipecp`-RX5| zPg&IG6m}#XBhq*w9rrcnF^7K>!)LV+(44{=C_ezQhmait0f85weFfkz9^iijE`-1$ z0?-273XGWmA}4c=f+ExqMnrmbeulF3phyq`!pIlsQ~-I9*W^PQS!sjAAT*B*l_EX^ zLDpiZFFF96P%sx@bjZsS`TMQ^MBD$ag2ZqDTtUYoXZ8<@&J3GFiV_5fe+8j9W}qDT zPc+kk#B~Vv@^2srpd*P0)YKHZ8ghY%fgtQ^1{oR{(KZ9ia%9pVG7+d@!P>xQyvRi& z1|_$nYp3>0pLb{}j6fbAS!K&%1W z#|+1YK@}jFCcxmv(2Sv51b!fB78EW=fO|MtB@kf)hcReVpzQ__6>KO)ZS+q>Fdb5K zfLJn6a$rM6h|Lha0uKymo>Kt|HzA7(NKj;$2%JEmrmBd01X*gVq9u zh3=5)0O;2W_3{CN=NUS{70iL|#|R=KNNp8xb&rEO1VLb45_(>JL1(t|l1?aKo^Rj@ z@d9Xr)#UwcBdZ?PTKmJ35sZTh+RZ&sHRuuBwgCMTVlLoM0ombi6!d@LK)T|CX2&2! zg5*1V6*mwp53+0<=0it=NF`|x8r49QZIm{={*nuKOj&`%?|POu^0CtQIutRVF;Z5J zR>38*9{7LNR{E;_5?wycq%VNwWuI>i4T^%x)k@I2OV=gy9Usjoc9tPoIxk7s!hyS8 zfr6o1mvNP?GEP*-;Dt#m;X|<#)%fUs4$|PGJidxrhj!EO1m|C-VjVHkbV1KVG?O3$sHu@O|o$oefbPD21_INSxam>86vzMGIoYXiH->Yih9gk`H z&HY;U`Xk#ysq~!k8;oh$cO4h?E?1x2ZYa;CKc`+0C2RQB(ebL>wLj#2Q5D(!#mC#` z?}lRqyq(ftCUc}_n9z>1KO7Cz6Z9x1BgplvcQ`IJFbi!}_H)E+o>Ww9M#%wvLxiiw3Bqq(?iX|1k)q4dm~^ZjJ6r zsd05?%)@?#M_3&^6p^@|JG{zIv*J^u8u0DV(Bv$A9Z#i16H=0Nlm&T&*`jcBW>Yn| zo;&O(OEp$Y-#3XMdaWrxcc!C6W{x*P`|Z0DLHM0wP7G8^L2=B>_GQUrUN-D!T2-di zvD2IF$@(>V^L$T%=La{c-LM5O`5!%#k&b)&9C^=h_4Xw6YN{UOdt58xII?d=bo`<# zth*U`#L2sG=4i@Je>&D@|CzYt?L(4;$hya;sp8B+JSXlS5=C{jQG0X+MziR5#;qP1 z-H1)qs;kIiaDhElw)KC&$&%t6`7%=+d)sQeU-hQg&{}$<<}cot2YGo_9viQclWBRA z7*{gaQO>r#GrB14sEA|M&#D^v%&zkj#oSrQJ5q@6TPc53ptoP>;E{QqqvmD&7ezG> zyUpJrYc79u_mXdDzKQlZ$6OXoA+E`^?YwZ-e4D55$GPXK%b(vle zQFUgornf5vm7Homsd{LKz%-?PeoM7^Ret$lb1auGmu}-=$6sH+gIV)s)PcRf9G&QnAmvD z<0PFH!8>vDnXL10QSBy16E+k9df2v`I)LRz1B!idXLXOvHS~-+RopFwoMr`6>3FaE zq@p{1S*N!zWlF%;QdUL-N(aa{wR2HIGS%FI*MOSC=|bbWfr)%cvWy3IIe53FBE^OM zN7*-T&ff`=LHFh;Jz6;u1zft<2NFGAOY~G%pM>FKUK#xym?QDf^eoRdTQq%ZU&Pk( z)8N6Ez^1<_tlnIN3#L;knhdW5%7=p{5`BWlMmNdPS;-C74IW$1tzgLftj)x1Jh;~& z8vC^ce$}x0T=snG;hrg1VR5@ULtFl%BrUDi7JM1TtkaiOgT5)YHCGr(VT8*}s)io* zo}N?&Jsr8}s7s4tbdqMD#rarn5!b)J+kB!z$+EsxJG<3Qf7X?b}0 zQn4sDMfI)wx=Lrftl47M|-^{;2;MvKfx?iEqDI9EO`Ai5$=nzA&XlYH$+`nF|a z-P1YlgH{x9S4UMoD|cS9$d<@Ejoo*M67&4rt)MV6%% zre*=Xv(z_!>+Yge-(@J>m$J7x6tnB0$-P7TOowCI?@08UT<8<|RFssKO#Q7DBVWts zLS}jV$v*tv*4e#{4l|n%UTA0PmNtA?5u1Wf&f7DTd?#W|Oi89clc7xF&@t^=ULsRSr8_&kwjfs?`OSUxhTwgm{a+UT6XQhWx{Nf}JWcsAC&tj%`Z)C_IL^8iH@N_#R zIg2Ir#i-%0 zY%M9v(}rYL?b!7}kryT;qNi{ahVl;@pMUogE8{(vRbIJLugmj{_xHte-91E`MdyCP zkV@V=N|8*V%2Mz+roC^D)}X$ALSr?P=T)zjbAwjwnZVDzsaSD1ELPO*)L3PnjGmzV zG&hz3U$Zy8#$|RZ+{_neeN5R4G=0IBD-``KkGjEe@tjq?_Bc?3lFYs!gN$yJhp3W- zXP@9tmF8_wR^nlsNp4sp7Ot&7q}DJsgT`m0r5M>`Qq;BPfyi~A13-usj5 ztQ?7+Y&=n!*I8xG-NTVR6oqOpSutzoZ_@Akq|!9=>m=qAkYgB)qT4AbuK>trcnC>c zkbK~uS_pyaA&3hp>oY2$9*7Wzg5kV1m1P}R#@)1DV7>S@Ef&k?<)WEA6Lc{_YYXE)* z&^1^y9QpH~82nP*5AWV92`!0hOULLZnk3m5*QK;btumeei=n>@q47&*~Pzq`*5eg?rRD_V^fFei)sR9>(WM`n4C$w@z3Z@NI zQqn^62A8n^fan_uaVVgfhnix7k->{RBG&Co?Tms4tJkuOW_jN^HbfC zeE8my@#)o_2fub&$y=*?WSGvKVVEUZ<#)69dcvT`KcV6isPNnSSr7Xo<6%?Q2>il+ z5yTj*oOJHsTd0IC^}K0z&l)2?d?lEn=+>U|TE3plW&N^2Jghq9#ze%!QuhLvA1^C8 znUY}4rtVU9TFZxoK9CIB^eLhWTXrwo zlk5>MYjWd^+@~-Iy76eu|I$3_my-a`2;)1k@cOM@uepl0R5P>a!uf<+DDUDG>BWz0*-k1a<*4cLYYtk*fd&QzOwIqdS9r|Cx9b7oDqKcYVe z$J6I$Lz1N?o{fcjIo;;zR4Daq93nUuKz(t;Qz`RHR`j)duk@f36$z!^cWIS}M+HHp z0&F2Ea_S?jZ==;=?*#VvL$P^&9!sKSR(82=l`>Ii3Z!w)!mqfQ@|3!dQETrKqTyGj z$jk|bb`VNSFFFaxFYn{ssE-&Nt5K?AEOrfMmZEteX)|55yM0Gr_i56^ea}zw8V^4C z8kx3ea15=daeDQpoL356Pn^uQA$(!WY^{UwdTMtCvm797sF7XnxSC+Hi z&p)q84%pk?{)l6s_xx)w{obW9E48t@^ulc6id)+59z&$i6KrZ&1OD&7C{Jp?3sAFj zZmRM=n`${v9&=0#OpRyZ3I4EgA_iwG#b3E?wRi7RtlS%K$;`JmoHzQVU^skKk^?uT z?+X&?bp4VSRAuTp=Cglz!>Q!(Y^1OC+E9A(bw@a=&7Gv_yV~j>4_Dp*_nqLJ+_v3O9WPog?e&tXQHVQU3YEw{j$e*&OEhA55R~s?E3iI zZp7mOx4+Vo2~o7vPmB(pXNns*JH)%>1I`$~%nmc&ZkzfqtVa11KlCq-Z=O62U^~Z5 zq-iiLQuqbz7v4d5 zL5<+iR~enopPpihvY)&Ys~h6Jc*!bx-eAphEzPL7>T+nF7=qu}y|$WXc}WgG)AbOE zU?q@Zvs>9e-n{I(m9j}rPD*g=HD~#H*5jwve{$WAlsq`dUQo&s1{c%?d$d~7IMqI6 zV~#v6Q2XLRrR>N%T_7rQx{}8QY9aLm;WXmJ_UqyAG_VLm!Jfvx5=xnn=6PH&y6zUUmwJLwi4ukdG z=Go(FmbX|gyiJvmb>;qLjCILXteCN*Vvd0IEEUgAE2e(%rUK5y;1lMJ(!!m$etI~3 zzkl=vJ{xB8(&Ud+T#MNgBK2|mGOjf%y}jVXd_cE^W)ej!tIXu6?Zn*0s7P=-^yclY zte}+4y+#fU^cJJfR(U~ljt^A4?~YPnrQsRnr`L0*XB&w=Q}v}vRkx&2Vo1kqnuLqC zcPakS{!pI6vt{Oq4f?UvYNG_ZZA^YPf0pt!-PlD=er~$0X(wE#CzH2l>xhocdr^<& z=u)>1TmJWZ9NnIc7;ZrlCEpIr=xXsaw9S_vvtNX4>2x145KDddImwye*>*kcsw45< z^AYjmWpv-4E5nC_CwbLul|&3^9Cg~=@jm@YZz#xEr5mn-J`#(C(S)K`xR9TFbisB$ zgF@j*=E27>cX3*%+|=B)_hX? zCT;CHe1o$YuGPNo#L8@EAB_v^Q=Uz#a$q@^vo}qB5KL|xFQ55~k4T1po;O7&hmbN` zw+Kb+f;s-(%{N7giwBkI+dbKnoYLb>sS!EBy)pcpbt|DD@BBGVP89i7Y5-i`AT_d~(a8@=FXPHh<>ar`cz=E9ER(mAX>r@rMA zSQvE15TiorRaQ5_(s@%v;?l|Pk5?8}$lZtKsk$PhZb)g^RLg!cAx?)gmm^qIb@&dz<mEL zUHYe0T)tz1vdZt6@v4eW#-mqEl6ktH3x1qfzMc0+4~2s11+Gz_)Y7D*bmeUg^wjZl z?R$xRw2Pd=y0t}%H)}jDzolPk23Md*pi;eK}SWcy7sf(lr+u3iGKX|R&=pLB=+Ik zVtS*CNQt_D2tE&mh;*NO729LA&)O&0`S>)0ZUv!8I>q{225R5)s>e!v%6K2vf5`V> zT4@q)-l?#VgUfW9^kFw}C+e)WdN;Z9H1qwWv+wx?PD|2~BPF)n>r9?@(F@DCa#zvZ zDYPHz*;+*3`i7)FT6USl;LH19b7vG+dM_|7egtd>^acD6?t*jy$ol+Gi6=s54{#`g zCO`=#1dW31bAaCcUpfQXE9W1Nf$Y26;>Zux{tqDoDEoiZUl5f6z!!n6L2d`)5Qu+6 zU6KFe41*9Z2Om5J10v`PLgCcJ4GsjECP+sFF(POtp!&lfq$7Z5AA-4nbNv5h`mJ2Avz?k3=XhKkV48lkoniXgU3?>SC-9y*>2%S?5 zl7C_~tI$-;A%{queO+YBLBs`{4Pel|fe-(y5J6lQp$J4Q6Y4Gu7|Z_@O@J*1c{7k5 zLTifv^Z{9a!Ql=SfE#4}I~0VViH_-}Ifr?T zaR}$aK+nkv;{%P(-lEhX$9E3(=4QL?KIzW$!XGTU^iG2FuNtGo-8-;}kBLGGS-QU; z3UkX;4tjhme}8I_o2Y!D!Qygw=S=(sBb=JgB@3%;a{Oq?d{4)6Z`H%&z%UL^?Y7;u z>VEMfdL3(hvu1f}_Acgm#jJp;2{9ECwTIFf`hlv2dwq$Hc7j9?H!0Fueh543;@y*~ zMrYw>zG1wO>|piBt>s|yCQlLV;-0N7Z^WQ&7N1U;vhwak32aZuPF&l&n2u?}gO_*z zigUwSmqD(C&Wea0m#Z*Npn7%&7Q7@+I0%*~GY=I6U$X!nLxNdWMSS zxB^n1c9)&+hzhm^vVno_tA*}L31u8uco>5Lyw++b?b>B3Kv7_4WteMe=abj3jHx4y zV#{TDrjTU$U=lPb_{YB}k<*{Dv?vn!EiBDHu?rXc8Ou6cDnHdZcG7fJVF|rVxDd~w zRaeg zSwq36PC55IeUvp>fN|`57*nohbw`1v$a0wGy3OQeen*wkrC}cdP5u)$=Gpnj1LmK+ z&sw)DXBuq_mYCH7NDqzYVk2pz58p<~RBe)4u(?YTSKv`AF*BJb(&mIRU*Enft0{%^ zyvUV`JcB1I%jLL!6l;)hb6t>;f#z9qv$Dn0X+qbuz&Pg^9K)i*m{;PWT5O)|xAC*> z)?c&TZMQ(X=U)w)nDp#Cc>s|PBrFk-w(D1HD$6Lp4IrcLw@?PH9EQ1xCk|-}k-sIr= zUluasKQsRuZoXBLvrpXd`e{Jae6B)gJ;pN``9{Csvr6I-iT&OS-7Z+2Q9;HxsUgez zOIm$rCglC7yJ{X!GMlUn$5N*_Ci&|L&cygq74~ywV**{@FsB5s#oQ@Vk@_(#Zq3-B z!<@?gZMklyJ%?;wv(kC9%2o-MGIveQ>YNPUA#Ic5ll*pzDn)co>13N0>&zdnq)kd?@5fuW>8geA~x1HF%ja8H<^dQC_YUUW<-<-@!}x z*f`ImLajo;JKv-HHrh_dst;3C5KV%iUwaiE0LP^-|0JxsBskv48+^skI_hjyI>~xZuXiDei~Da zMVIaCn*9#%UHD$fP@sk4dyIAPbBoneUCjQu#Z=hT@S3pMxRVFL9|r|X>C zjRB6IMkas1UU98vx)i{ak$zok)iQe4GDiK-M;Yg))vG@O;tfxdW_(mU><`?B&a-?* zFv97VjJ#T}+X?+VCOOdV%r>5RJoOeWzmfC%pg6yYCxjfWu#GwG!k9(+5i@$KFwQ&4 zGtmXb4^&ddf%m0THQl$4rFt%KGrbod3Mk4B#bLgl{Ucbdolz2^0>p_elXfgc8?b;f zEEtdP^{~~>_zDAEOqp|TcR#Q0^05swoR6He(kuEe%24k|ds!ASlSi^ahg<2c=lDf@ zoRu=<9Wl)Y$JUx}^ul%HIdOrO zrl&q$-zG~T*4SJ!{(Qlz`Rhx%h|6haGAce zrHEGrB9SD?KBF&M&tF>bs>k3mkCXEqedQ{`a7}6+8F1FczLq!C1F>_XpIR5HP+HVW zHl90-#GF3fre+R9alJy!B7K^5PulpobC80<@_GE-hpC_@sPh2M z%A=l$=xxQ~qQ_;PILe(OLiw+Pz)J;fygpYt2iXpLQ1(8kYQCQ~`<_)c_m3$#{m9L) z0phd6WeE2OlYJa)FSG1C_9*cSgt+L!C?K;WoiTg!}jH zpIaC9NS!&Z8!$X~J(%Y(0smntRoBQ!=+T0pij~8HqwJ-A0g(vFjSNhgU+z!dn#liY z)awXwA){$bvf(R84sn8222_P)D74{p%Uy`oZp&P%Kk^tu7uR3aT@H2hJ{Hoz+eWss zP_QUlX{(Sj5uf1&YckZ&P$aXB#vh)*+}_Ge*h-3D;d6X66ghC)etOB>fwEH}C)R?++~!p;=KD+79O5pX7{I z@q$J4(dbAY#;yz$(=u#5?#f^8nt=4Q45d0s?)xx=$5`j-N&^0ZZ6$;6dpR| zM5^`$@IS>wr`QX~KW%s+O6(gYA|W5n+-?(I(gKQ@-@{1Mm_xvMNvyWCFJA0rgGF)VZ$SytG?YB(NbOlIhMXPziX z-738km!=66=;Nx$QI;;Bm}(Y~?t0Qtv3;^}=LYZd0TvK~P4q6<;zGtw%JpEk3;EE4 zZ80Pt7?!d^+y$kMK+*+t3~a5Tmj7vDw?GB|2x9JzK>|ntWNv@kqLg`_5Wa_p1Rua8 zP!|x?Kv)AV4j~m>vhaoP;~_Kx{Id?Vfw%+mG6k3g$mr=UTX01}#{YVR0`P86hp+{rNgxA(BkeEYjUo1d0P0pjgZi%5jjRDBw84J-92yWjZ3Ng} zk_|xo^Y0SSSx`h8yf=_u4krR&eF~sSa2<|x`*7f!jMlJ%g&5P@*_|xq+ev zr$sPOIHJLG)Bzs>bj`sxf|vA!PzGuQqSD}tc)RQnGr^0Q_W+)f#&`Y(K0}%NaDfw^ z$O1+JnfW6^w_Zhk95SZ|Vh;-BJOwctDX6A-A2KBUCwD?%J2VXr!PAG-;Xe7`uHYCm zy5oU}K3%xb_zzV}!CL_^nASBY{tn9Mhf^N74}g6jbOMja1{AmnC+G(dd;|3p6e$II zl^_%h`i~%6*V93=5%V}<0r1I%kPdjkf*!z)lZDq@e|?-4ws>l!bYPtNO>LFz=P9iZ8Sh93d8ezuCuE+omj$KnYlG` z)Qsddv#9hg+`kCPZGNLR1hInO5Azf^f4qKj=3h-RnJiIU+!uoAaOTUg;B`e5vEe?R zlC<`Ea1*$@FtJg-&vQZ_Q98QAenK2>Wq1c>inhPaUeUic7}EMs=uJoGMGzg|y=sjS zBI{?-yq3&}=Uv}Us^#8dAh)vT;BdAD=w_~7sHplo;3=SRBasCcP|1y7H^e@Vi+Nh_ zJ|r4y@N_P1Cn5JZnp=J|vys?*GSDWMucdE@_Lonx^J&|+x;88PdM&0jC(~yey+It;E?K@j%H(UkLovO+1Fx^& z`;6rM*d|c^t=H)<>{QN6gzxP8|=-mhO&aI+WB2yEDG=pfA>Jb%|QI z!`xq`tr0_>KX6yJljfx79veT?vlSIo`wxUVXC|``$)o#SFwSmkMKub)d`DI<4{n~o72 za+1u@%9Al~K?z25LBnHtBC~7m^a4JK1En`lwr3@1R(bBlBVU&>Y*E`z038s-->3j62hFj}_jngos!nchQ`2 z?t4xQ+b+*s9R13zR`Q5=*Zo9vMOXCLn0z+eZU=T^7`TM0tbMA_9bZ=+_ zL%FnC5ra$N2-e7{ z)}KgytZWz|>xhkW8V(agHSZer3!K%VT)|dcK5Dpo>g2D%y*PGSpc0$^z>LbO@ z$IElhjo8z{a@N$H;{FU~r;U$jCE0B`Eyz963f^%DvxQfRHHml_rwkSvGm1XP?y}(_ zc6XT?ygMDt6yH|9>=(MrzM1|-O_^ps}*2z=RGK0AITqKiM zVFxwTp}87D%=Hw_GgoFmY!bszyGU&^a3@5%F1pBz+z4K?rzZEQ$DVMdc){eX2C=t3 z6aEU2d>o;C0*k1=OtNoG5(#>b`7+Y#to4D6OxJM=V``Mcr+8F)gfwxUKn?qSL)c2` z)T&uju3(zpb%OGNO;VP}XCez>ir+u6e%ZXQIv_R?o#smE>%k)lAj*%=exkfR;If^J zrnpYa?Rs~_pkI4vU*yxXa%7jc#%h!|*^07%5v=+Oxy z{EJY3p5{gS$b>CgHK2N#>aye-M`e#OS>egoEgR3@ZP;8Hv}M}qKd0gu&i`!nQDmN- zb0?F27K=8tnf~GNLl_U?6n!M>FM{?98kSPyg^&=0$8lqu$*ifSir82un_sQCy=i<9 zj%8}b`RrMr{czau<}=T!cY6h!YI>A#*;X}Y+3I|F#lgk1#!)MhJ@HN8WW z`18rOdpULqT_g1ispJ&1SEphN2|al%>IAD91O3V5B_Qar*Bv{FmNh$-ev9g%#~X2^ zpT;#@YqnW!sA70;h=@X{-%z?(-ygc;Fz&zQhdLH>uo>rs#7NzV{wZ1lMTtM;{fuih zA2#w!WDxC{l@q(aG0q%*#c zxbjm_gv$?2l`H#K3Vo8o z*5|KiR5;`QsPGYn4G*xylPVNxv#;Wf`VNn9-+7y8Lr>!SQ1i+DSd;kh@yMfO9?h22 zMOKk?!RdHOJ-1UmR@B7=zPnW)s+Q~g?>1`~!DoMVCPIl!#p@3mgUI7!YpbxEtRDs_fOcvK8p zHjz|2s;RbL8`z3iw`MibkPl7nKDK=oyquo=?f3dpfEW!MA3?5fgYBwmW)RPL60y#9 z!Q0lvUh+P)1;?i~*G^XkTz1|W+F|&M{mHD?X~o>z#iQa;Ufnua;vO=%uaQtzeE? z#k)QNzr?3akjGCQDbAfaqu2}@5UHFF-;KN$N=Hv_5I;b8ARkfW+(6to@rbVHdowIr zNOAK@GUZK~t@tO_)K+gYLwCz#x^=bGz*Jt13?yHMN4R>v(TNI|{x-(ETgnXB{MGKF z25+>Oqq9@B1`@7UQbd+LsJW6wS=$|oyMRrwg4Jaw(OjC5%S8>*VXj!xr|WHs%GI99 z>Tw@GYsY#v-TCu?s+zv$OojVjrhb=tXVewNq+rTgowvy?8z-bI?N+`TMG*rPj7D!cZI- zJUt9>%m0pG{9oU=AuiGXA7*N<9`28OxL9!h58B*Fn(h(GA2Lcm; z1p*Y28Gc){0ZQ42FT#JlFy2a9aH$LQ{y*XZstXiZ2O-q0XKn$Mf(A`09^XECy$0!4 zm)nP;^DN*&k6L(514y?u9w5sHe0YsA5Px_d5Fe-=Hw$@R#6#eFdksJo-N5|7LKza@ zW&xH!^MeNO408K{`eh8+oB`T^VC=s$pc@Q$34%^IG{VUl#Q1?vfSmvY1A>J!9bEp> zX$&(gy#v@2Y6fv9L{(t8|E>f<^^iAnLuUQ$;FQ6_K#~)rP64eI;_?}|3>yJv21tl) z3XBTQK%gNIE!O~s8q$Cjnt;Sm=oh$6T8j!3s2v9}6^QX;(T0YvUr-+nl&-mEum}JX z0d>J^$rb%ee1gn>0g=yx5*d)&gmgGqt#@Fi;96j`not@bm;&6y%n)h|*Dk9d*$iSr zNLd2~cfrqp`X4A<3~r=8C=|B})^$z={wzXI4dkH51>R#oist>j<{=%PT)Pbs2=CoIG-Okk{nSXc~?SP?gS`Ba6q$E~S{<(({PwoZe> zSYT#X9NRltp&IF1NSg5Pcve&Iv`gj9I_;(^aZa--p2KIrz1*EJxwRP_ z%X*_AK4K*7E0W{m`~7-(i0YeyW3{O0^&_gPq~l<<`&M{Ee-YSTbkQ}3{$V1{DHl>E zS}mq%Joeo(j9PB_p6E-B_A3ihw*}?VIqn+8J#`G&thx2d7%l?cn1~NQth%0WQ)09G zsW`r90|GFGr=7UF_QEnvg-%pnoZte1DGj-CNPLHKEvt#e^DCw;#mZIowZVk9#_tU2 zx0fk#j%Rb%IAvdus-+7l-Ux`t!0usk1s-M4Xt53aeu;Md?p<5QT6y_J z_;T6W6sU$07NOOB_zr6YZk0?bSo!c&PF>&EJbI z@~K2}nZkux5BE;rxllcg;iz1R5K-x=`nYsPEq6t+A4obohu0cY_j(3JK8;u5ogHy= z^M~Sz=mB*4f{24AAzQH*5e%j5a(83>^ULv8{W7%M_@|5pNaxaULfXnM?e(|0wE#E$Qw{Q{zuQTut8A;oLg@v#)t<9{jzu={VdEtp%e8rt`u)D* z4ueRPgF(#?;`?5%bguZC9X?OD__7D-5MKYm6Q*dISj@*IxSe<^KSVbX$STatWLu|2 zz)RCG%-;;GXce3v!9T>&C2$H1e4Fl3S7K0{%7k|F>^xq9f}UR3q&i1Fp4OgEsPL86 zAH_jskeDq!cjH_qxH;U(ylOmIG)=Bx-Q3a|rVTsV{~(Un(;uv z&?w)#+K5ZW8}ZRc?TQ)>oXPmL*h9lbjUGkMhHc_=!Y#zCqC^~aewA3a#aSowouf#| zppEC_u5&+-9k{M0XMB$BedbiyUCY~|`zNHLo;j&i>?-J!4QfootGCgtrC&AM^6+ys zeL6g6&PSWdPA24wBRIF7$ZdGr6~e6M9dzSLoG^}PD%$>wLaeo-tP|19bE~ z1!Pz64J4gkJkc)`NbQo5c7}Y;Fv+bM;|#g6)vnPN1!F`~p8d3Gw=M8-jBMZJ=}aup zW7f=XJjVH8Ei=cTLilA^L7cBNDQMUT@06YdsU!0(+14@dm5AqpidF>XL)4F!<3`Jd za#Oq`u7tnMuM;ker6z(FYl*9wc7)Hcz;Wj2({n2 z*Sh&UD0RUvPOx7^*J!>8kvBa~e-D5A>w4M#08Ea5Bs?j7VgRd%cNm%TW|3V1RWj+4 zyrtJL$5}X5#m&3WVJFXjw#Y!N%=+_j?Vpp{KDF~|CD`0A^Zx!X+H>+rr4t#yUpS#} z=$!J4CwQeeH)o)^ENCosOL6L+4WY=NY6!McQO9RAhQf%(g2X_-FrUVuA30 zhV#$>F4zdB`2f48wW0_%%xxy!Ihn7i(UgmD^&7b|;q$jk`|od3hg8CSsX(|g^7YU1 zXkZWh?qCn0;i2QmF|KLvnFj2M1=&h*fH3WT9BY_-ue{_2Yy<(b0cR%3&rLRT-A&V- zA(=-_X8#k+X|%(GbVaPtGo$pJdL&5A$YFSW`lyx6Lh^`;;^&cnP9hlhiWJ8y_C+ePdaf--_TBKFWVwU-#a%TsH?qWHq>vLly!PK(i$jhDt?-A)@Cbv z6!)@v0Fmi3w&(`sPF0~#ipCbLClj6T&n4y%8XpcV#FR-tnx`(*JNjug^sQV2b6M)D zLDO#Ma~uOmKJ2J3HskNcbDW9qr*zuwEvhz*nvi>FYt|oE3)c z5M)%%UWekEt%j%v4G+p&Zf+-F7k{jIdevlbSivs$QTqkj^5)sLvAT7DxJpoNuDu>X zV{HLl8^MiZ?Xf4t4>Dkb%D{jlS;iWY7N809Br$DnZerhcUdK_38$=5_k<(Q;^gQl< z@Rp6~(CzTXg^g4tr?#YJ)gzL@ePa(30f$2oZ1%SGvftT9?8Y#>Z&8h(Hh+BjiSa9E zjs6+zPX}L3G``z!lZ_&Bx(*32zv^b|jr7uS$c=^T*iTH-aPtT3_*9 zQ$gsRGPF+xq67{kk3qY0xKo(19wfj4SF?4np}&nP1g>+apdr{7E3JdQIYd~uTmUK) z!_n_n6M=Tp@Vzh8K>L=Nd?EPmjWC;(xoBh`s;wKR2r+m9i#6v6wfR=!y1ljz7 z!Y*+0Kj6**v?8!r|I*r^us-MlWFdw<8F1?Q=d=fAJArrW7pS6B4@6V^BFI}?7+eEB zfLmCD)(}o+Adw5e8(0|##32L+{lZri%I1RZ6J-6t2CXVAMSEJGAvHK7>;V+b z2_BeOO^`JR_{kNJ(JT-rLDXbDSlrt+#vp@>XMh`_s+7=k18&;@v`&P#cMZ5;Sk{!l zjjnGUExf@4Iq`37fT}>mBNb#}SVsqd8@{0S2hr`XkD(_A#4|#R9L5f8|4{gp)~ly5 z0HO)QYePa8gKLcNI8x}r0*|uK2k6)ozM%))@488iRDFgE%$fvHA~f%`<@K7faEOO7 z!8idlg8AMiP=YvDsK;3_ayQ5k9Q+OJIC%REm+%BgZKd#K6}wewWm09UGb*Jvk81m5 z&E+r5uuGkOIc}g?#mH0p_zmQ}_{d&I7eAq7D7S{X>1A=``Rw~bX}ShYugM_F1H9QE za$WTe4U-%Cv;6DVgLg*AuC$Mds*fd;*!@CC2*h{9s|@!7Q$CluoG~Q)q8jaZ*xG9M znm*h3kD+CilP6V(UWzi|zCYvHaM=U4@?n%-s-n3AP5sk*QMPT*D(aFPUr{u+UWqiA z5{$l3{bMI4b#nSM>&*>axe5N%biNYO4Cbe^iXaOwqdZFzG!9bVmK5$^qLIY3=^=gZ zJj+T?Jnv+lBVNfiKEhsIuoIC=5|f^MWk_uF1)oOy>AKoJ`CkN)zGt@a(H5il!6!vEOepfqkmu-?F0OhdKj9LzP({aWmo`V_!=Wt}vlKmsjI{=W#`o>#~> z#--|{%OPTHG4%BU4{?9U_97`TG8Vz^anVYfOa9Q)V7O-@B~A8ve%*Rr{Vzh5yH!}B z+?mSa_&oy`+r*~#Wp`4w_LJ%_HcRgcEYArZN57cZQAPbTvKZU0a)N42nk6R;ilG=y`Zv02L5T+8j59^1S&Takb4gq*q9DX~dfCD_T| zcRfRQ78m42QPWrKwwh|lRBI@ob?HGA^5laSmvCuUy6%_zC1)M`9WLVoL>`0T;zQSM z_f;ySs0M@ALNb13##b~%lrzMT>wH%YoP`nPC-|Tmu}^f2`IMLnHh3UD2mE3@5f?}$$KNNvEykhIf*1077D_LNoUK!6SLKS;rV7a)AdWte$ zggf2jv&6mDm_V6mFr;Wt8tsgA?UYe}_dxVUR1y<0ox6J+_~QP0f|;8VB|6iIPU)i= zY0N!No_15)wK3{!z9drRFXx?%j!#f|l+va4Vvy=BLDRQ=X+i2&vk{Iq!Cc!T&K;3O zGNEVRl-$@i@8Ky0SzYubECT03zBWEN`rKco?ZsWAFohI_RGH&3WRzVRRJLzl-=E7F zL};xGUU(1^Td@!e+HaUe-XHPZ_DzYGI<}*Jz_(B?RpeHL^-xd?*!k{WHnsCkjHUzs zbfLFcpLyNlyY{vw_@~4@cYpiGXDEbJwG-|a zkxC$svoY#ZV3GRj_5ZxTU_a->@n~0EmhEHtolu_md>0=fq|M$?0o9+pofyJNWZ%sy zlLZauuQfSg4z|xhs8)@EP-NV)v%X;bR+@<)$M9u9X7;Sn5C3w4!n=cPe-T7;_O~0^ z8=7NYlaUrOYjQ`y2&m|G(y2DA*mFE+FrKFjZVCarl!ygmB+ryoE5th6JhN$De_=H> zW$uo+*>Q;k;%dL3Vin{$8rB`+%}IGWGdZgYn4LpAE2eq)?CKNo<&ygCft5gti0i5W zB9(>BPj^rJ9tK*Njj(*4Loa3XV^x=yQtRYl=4!6r#f*`>?w&nOh(1~2Q+>Sb;jUS= z6eO@Xg33cBSty5{fma0c;+8~7FRw1ye~jXaG2j|8lQ{P-WGO-X#7ZsVtPzWrG!MOd z-*E3Y`5FfP2z-QL#kFMp7>KQ+rr3BKE@G%2cyy2dy=#ou=F;742`th`CF`B+F3&UIK68j6J z)JCbgjSjw6@u#kqafvflA&h*^X zfGPb&pkCWhL+qR!cy)wm@_~{?YdpV6rABk%-TkkUf!apJmniqBwwJCc|J1(NJeAut z%|DmsoThVn`Yn}IR@DcYcPfoz`c-4%rB0r@@=vXnYYfZ`{05xjPik2&@jPS?T8tk} zShL;t!P83~RAZJCCJVW+Wt^|2%rI2usFs+vszaHc+DaB~k@jeJ@WM-ZvyHAUN&9

- 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°kcLtfv3-CBgeZ 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�Xv};JrXq+;hV1!_l5`{+V@BH&(uaiOo`Z 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 z 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[<-!i zx$B25!{~d*xMnwqYZ}Y$QH;^5g>(=^H-ZYwtIEmmOChK3#4 zc6NTV8ti1U$sMPgaQ{T*?2i2X?3ovc)&HpO!gcsrmg70lo&d%=VH7}nVM@{O^f^B) zGp)*Xm7-F1`7em&d<^oP7USyQ-O(NN7-*WnWJAYPE&?^Io{!PE3PU2IR2^H%! z-Qh67rRai=&MMA`<85Zx;v{3)+lNF$IoiK(6o*JER4iE@vn+eazH+$>JtX^e1#dz}WkLYJk4~Z%Ocfh0J5-0>-q44gYs}Kx;UHO6)I#$4pXkf~S4yess(g zFeXQ&kSw@7q2A%FW0WO#Q-rejqSj{S#_^bs#LwlS-|o9LbyrGc=-ugAoh%L=X>(2YZ{@T&=@`EkTn>xu87$Mo=_AMXPIs$Rl zrJ#p2(_;DVMwYuU7WgEzD;* z4dH}2T1KJa;wsMarI9(vnsDBlFT@CfR)H3*?GKpYXqLUjC=e>ptdyl?c(HM%f0j)nHAew%f^z9sPq@oxuvuZOLq+8 zj|E7Q?<%b2bGJsyG60V~Un-Kuu>FTG;)bWpw=_55tYO1vNma=IQnqR&Zf?#Hq($ZC zKMKVbu&_Acp^Fg1m#xZ4HLlv_K>^0#j$Vv2gdyoStK%_|{=L0+j#Rp2=l~dF(`8Hj zKFH0uo8gy$?y?sVry&_egfZoBVk?Y(erVnLIe=aht+uB2AHdWYgE4WSuhW-1zo+VI zIfP!Ua*=wdQ^AuNSy|VQy{QdiPk^qEPRN$H=yywX7hrMnTuZ;+EtbR^hz^C zB4R8>S&H~^cKHP}=EbTg&2KU%HE>;)%DUmej^)5bvz zBAVQ%n&m>+TfGOctyE)o?kH5%F>g!(BCNwBSn|vZ+1q&3$t$ zirj>9A*QU9?&?@2k_nk2ik4H9l;kfllL9_-e)sUZt z8ZMGiB$rism&9S{4RjMbBh+FifSGSl*J zGxqf-A*j@%s7I+WpLM5gsnzs*GGXGGIYjC>6sRm-%OoHY_M1g8^s)r<_vfIp`J7r- zLK)AWj{QAr#W(~~dd|-i8J3>2B53qgncM%PU5&zl2|AitPjMWR{`t~2v?m@vN4{`R z%jw5B7oO2<^Te@g^$ACCv4~_Aw%J2YrHN*%ZyIS$N%04rUoss@x+=m_uzPV2>kh2k z^fY9gb;(l}ilj_{&Kd+=`Qpyx%(G7bkPJkiMs#f_3942vIf&RRd>tFr{sHp6A|uHT z7$c~-A`W4F%HzLpCU4v4ZR1d%fA6*d2Grh%v47Zc0%nk5^y3uKJs0KqwrV8J-_jsF1naY#kHy#kcrQfkEP zLpJ}?LL(@t2ZH}N_$3;29*wxUv$6X=HAFJ~-MH(4cG)iWE4Esq?9=Ndv${Mb5^i?3Klf@yc+9w#IR}^_g@lEed96#xRVYQy*h7SWBpWySg$J~ zUFt-s7wjWJyRjMgH?i{!$si~uuKH{{h@RtMBFn~-$~XxPMc!;V8{lqAr-A6yE(M{< zqG1O7k1#kZf)9)KW~3X!3JPc)!>izL1`v;izQv%>Ge9z`U>NNYZJny3;HD+;?=3q4 zi-j?`H)9m*0*rUq=Z`)R^L>D15aF`%po=YxM$Pzy0yC=P-O`OR;EMq>slpGPIGszY zyH@!Ize5qBY9+d$>)jJX=PBs2X;UUT3^E41==~@|f+c&_!L_@|7}!ReZL%KZaxE2f zCO>3vKg9-iW^$Ib7As!e%;xQv+0ja4gET3&TH_46gp6Nq?Yt(bm6}lA!L1r98g%*x z_?(MwN|$lUx;H9}J?3OKQf`B#+x9c)9nTB0WK{+th=)eDA)H zU~Ys6Tx>r`W25CdxzhI=n)!wA1>Kikntm+O$XR*wy=32Z%+6QiXrld23O5z=y-#WF zPDQZ%;C@JRqJV#@TPrBhcu@8qpxYBBugYkUM|$&t1LWNB^?RG8(r;zVVYyKZ>SGo1 z8#9hcN+;Llp7jtISzvEj_;AJLgU0xZcg9U8lT=?{=lf}w_>Lq}`KHl`n;OZNmU3Aq zmC1v7V1`97qsZ~An%~lVsLZ~ZU@#W}=F(5g{0Yshbwrl6^1KCVhxicIzCt2qYEkAX z^8-$`++I{5#H|HIYqHx|vkN+Tbo^-+|HZJ3R-^_Vx)7F*Dc*n#I9s+{TkCxk#(b1W z)=>0*?sOpiV8UrxS`*~oJc6ikFxnAe4dzIDwnA;(c9Xw~b4oR?j{8*m?(9cke%F6Y z&&8Gy9?yFpVl9b)^j|%4z3+r%(sThmdtqI zdtzt!HX2_=>#JtereX^Hj5;9;wxZRo632rMm@o{ub_tm%KYctozqQM`GJl7qsPOtV zYu~d(`6T8$UE^caWsoEo^##eHOeRNqKTh!;?E|n&C#w3+^u^~X-KG1IB5`#-%0@JK zu7RKF#g{r`)7;UVNgd^I8rSTXF@h|37=(xO)eP6~wx@yw@!9&37~DfqM=!k%4~hS% z274)^XU+4xz2mL6ovpCv-0ymY2o5&BJGk*tjITmp5PluY*lN}qkcsu8Q}{tH|Ct;0 zua$twjn$ddImmPCzD{vHCqc$f{AK2f)8K{Vc!8onuOeDD>#o-2P*-MbDF<6tf$jTZ z-Q+s_0R59+^qNbPld;slCWtC2lBhn^tIrJD=!_OV^WA3I(7xsn<+tBjSenZJzkV@smkFUuOWK26{Nc?b&s7dvbNF6u|Ft*veRIce z+>xj7Dh>PqB$3%Ey>RrJ>kj2tySC6(6DazfOIM@bBV@HoiyHn-j#pPD?6pIG>WGf+ zsSvMPi|%VZT)A}(qczR*oR!4>R1=GI8H4(PWj<^^vtrEis|O{`zOtz@5D<4tuU@R`wRHsxWwY?iK}@jn-VRS$hcUh|P2uX<;SR z0iJ0#bFiD-b+{VC>ApU=XUcX?i1f#!!iOV#E)W@u=n4US?W?2I{*|;gRvDnKerVL_ z{t!xu8^!*rXx3>%g$!SYb0bW>j)zc%;h!t!iS}4r zaLM<@6rcM)Q&GHBQtWe)x__T5YsO?L2d~Qa9VSs<8-Qj=kT{7P`%gKpVXmomcM3qu zx}+an#sv~nDee+-OVw(oaD`~Y?A@C6A6KjsXgXe?J140CKPA+_kS@-Zw`FoG`8A`=GEEtDbNL&g zfhPlvtPMYafD%;Lzr;qBqY;RYQ zWu4CcB2_b##2~?=$$PhlFQIg}^pa9>&vf!Yy9linEdkQ~I?X^#wk{ChFY!3IBQA`q z7H_~!Os<~vSNQ19a3v3_WO5}j=Sdzp&tjjANLCJiqLU1{d^^NjbsKvZm2uZ}=WQ$c0b1 z)S?e`HH~I%aN?LuNgGjmi1%C4oBPMq zqoL4+*oPg(neYGz408f1ku$4Ge zzI_slNv}d6ueh7=JOfjBv{9hms8}+IJ(D>qGEVPXzaX1Ivxob>E_$Z-Qb_&fFnV}) zW6;t*Qr*V>AyNtV6dOJAgRZ*TbfftJJXV)}^A~RDGK9MlTaCd`N zn>~E(0#n&p9zr1fy|3(eN{j%3y3O^zd&UK0h`306W%k*G0bQ>?I@$)#aBrtl zp9p%yIii37ahm`@_)2+O%hM||#qUWMaDOt=B?NyR>6X};niDF5l<&kgDs)+mGcSq$ zoBLxWI6kzuN^8IAF>uGmg6k3BQ?Z*J2;tX+M%LfKGT+h5K z95+~ZQZ33{TSf`ynb_R~0*u4d$7q z?*5y8e=4%L^fgvejfzx$fSZcByR&V&x^L}prUw?G7uOqgnkFU#u61FrI!<&nnB15J zxtsb<<*az67C%oZ97g!gwyx}?R@YyQQ)mDm@yOTjMKXj?`d-5l6cAvKjwbhHwZkSj zwA^VCXK|@MFW4gG1q1Rpa8z3bC-LhQF|6(n#*!Fi?&fcAYZqQXs;aOHZq|B6Svl|L zakf!M4xGYb4kHzqhzRMm*LTe!SFVDKc`rsX^yaI@cYBQ>*vzsBd?1_jmNfnl3 zv>^aaOj;bxjWffRMEqC@@LbwK4r0+Y$-M|0Xr}?!Qt23%^!Hn@x=|+WCvUicG3G+& z5W;mqcnvtqa>Q-ih=Zb9gzwaSk}YX=*)w#TF$k6t&?wDFGr|ZKs>@c1zqkZ$9;51Dm>$ONt$}+)VglOeYvS!VkRp+q@X!VHx&B?381S_fF<1zmt9B{lV;AAB-HMI zcSs;A64f(@9eK-H?t+zv$KuA+tzA+rc*qCYCogS7=0rovFoLi4HVHI^_ zw@=HuRfndLt>E*?SPrB>TACaH;XXIcUB!6Zwq4Rh>ei`}tp zITjl9lce0?{s;PxJ>heXZQT*p4 z_PmIS8l00&A)TA#uoAJkv0Oy&1v}-0zWe6#I1(}^uvkp-Gf=FEea)*TcfH0>Xrk-D z7lYAwC~PmMWr5K3i@EP2r?pbsU4`0If!#oeM(FG%QBUo zrAC%SEIrx8Ak1plH=>&t47Vy3AhkFHhJtHo&LV|P*z-ny0Vn$~+_c5g0E9PJ#;{rE z{`iNrh9~h8*v@I&G;^$=aww2t)e7YYG#12NFlNmN#7 z-jTq`3KPVhQCpL-d77Cja!Vcjm2XQ^o2xf#hBA|180UcDh3Db<3X1CmY2O17 zHkIvimKIzJ5xn+*zg1WkS}jnzo9xhbkn{@UXfw3$V=xD(IX*h$rNLv8$e210M^9h+ z_Yb-x)aY`Is3&+9cBdY=Y!vM1bsTOKwcUJ&pJqT&U1PdD|20s?UaueLPMnoOwC1Rb zvdKN+s$AmU<<;#Qmb>$^EZ#I)=WlxXvvLmr!`h|zq0}{VWy+X_Fyl@si!Qq>)QhoP7?CVU7VglyhHaf>d zj&nbxDPxzUbm-0D%DKPxicpecaA|M~TWnHKb4nzHUw*nnxl8Jgl>*Vj7Cx!9hb-KA z)3lZNt*5H7$FXQOVy`C6s#J| zc8}c3-)*t?3y0s0kC7cx1N192I>6Z4ighzSvF{<4#Xn`&7vdgGA9ML5LGIU(tA~hp zm~Ct`RyGTvq+KiN*#;;(X!H&%r+}nHf68Q$hlL-Y3(@&^2so;G8~1P_Y4EGfTYz^O zbUXKUk=s%^i6bQsiQDX*RyHwV!9tcS&O|`$<(ee8QpV4=?yb;j^nV4wsA&KHFYW*T za`!v`H`E^id;UN89Rp9^*{_s6>AvsD<$CV&5%fU~xZ5bjkJLk5Rm; z_#xEzzVZi0GlQ=~p)$)1sM!Lapscq$_$xLOwaFcEboc@^Y;qXc?9sUmRBj`;N~pc5 zeYWa~rGQrJX@rIQ)Km|VAf?j~x?YNHtv!JpuYblX4+Xc%dslP&2iv^&W_?5JClRn^ zKO)?yy3th;_t*QSkB7O=1H-Q!A5CYzCpIoc#{8Xl>hO62X+^(@4=_VDaE=t6Kc_l% z7}ATa>ZqR!LCFaqskmgR0;+Nmd?ng=6@s!nt=VJK*uYvfAdG;as}qGp@I^4AYCAzy z`MotKaBh%aON6;3`M(i>eI;!bb;=6Io7s%vL~|+rPbtH$x3+a{WEE$6I;b^%Oa?G& z{Q4{gc-~U#$Z|rR=YPH*k?On|Pee2?_2|W=G`Wr-34L$)X_=3rJOE=Z>=tEYspDPJ zvriT5D~MQbZNz=b3!N?gH5OA%a>N<@vr?&l*Pp@WTT~dA?bMIXzw*}*QpF#6k}x1O zswi`-8{c8W0MWE&T_A+}9Z!dU(6mr!$U3FSc;J?%z9D?pu*Sl9Tj9h`rrMQ^$9X=@ z-4~g%y3-@!D&O$KWMbMOIDoOD_ElCw+=<|zhY4B4{M-1-gr-JA0|R>Cr-P>A00_UANXlx@TZxfDC+H0=?A1~_ zebhP;$|bXxT2f3W_V+iZ`j#=>0E-SGN;)+iUn`7L^LM!Z{mcWouIT2qZRYeu2o+iF zY!qspfs&a)_Pge9jmbfEiwoU8#0{hA^4z1xiUvc1qj^ zxP?uAPIIacF=q|UsOWpAS0_$=p2R3sr>lW3by4#P2oukNzJfg@CBX?J)0+rjO=H;*-qv&E%z}#HFu6fcp%lPBg-k%}GR)9dqf6Jh3 zi6N)qODL-@`<@=?JSdC%R4~B2>Ilm$o@ZAhluwSTj(rwSGx!cdnE~fHnL0~Ks6d$- zj;X4l)sQYY@;pY+AAM0A>)^h;@^YUVb^>L5H-x|Ow zk_O1%n;>ITrB*Nd481$#R-{@OWEWow}}xV_J-KVFBspx95o1Xd!>!1m&H2l-XQ*0w5ZnkpeQU<-58k5+o9HE z3;jMZRN9C~`@bCgZ`+me$-F62zQ9zolcf^j)#7vU3>IxpBr|6OpfJ0qNsZEFJ>j5d z%wRvm4JT|I-AGcY7Jkv}QAEY#jKhYkC$gf{m0b=V{MFztE8lP6qo?a4?gI#`k0Fy= zH&QQd!o7athZ} z>n$BHd_a^dmPEByC;2^wvX9~TB1x358b#9YSFjhvoFT9nTd3k4f#pX2e3Z(_ zX9o)kXhNUh>+G$y(}%^zHEr(Av9Mu*LEi|h)2-Un&>KQiIx>(es<(U;eR~Xqc=&ML zcg8ytWUC~o>1IZ&u;oH6;CU&QgbLXfqE@mIz;0{SmA!i(Lod{C+uo8bv}r?U-bj1jf|k+#jWH z!2U8_{lGn1ED9k^OFyKLj^;J&cPQZ=T53i`Oa#N~GjLUlS&?M*g&~CHD`oL1j96G0 z7=tU*vE+X94$k&}KbBm%rDVOs2 z$x9TZQR*@sZJ}_L`7>1y)oIt&d=_>%=iT#M*YO_isUt|=^1hcI7c#O#+DJ^lKDg_t zLmc%k!@KlqO|7{S(p!j`U7VeyEb0vB>L#lvg?<&0(_HWcTP-}yx-D5DqIlInrS)_r^SAoku-3Hxn$ z_aD-MfUyRLClo4E-PrNgZzg98BVTPwU39S^;^p*|@9$Hbs&GURRGKf2X~YbB*2MkS zpqHMPM{zVnDAu^nZ$46~!lj&A2K4lY@l5p*(+MGX6nqWkORbpVg- zjl1kcMTGREt%xjeVnW?fGJ1BoId&7l{zkYfmCA#i(D8R=vLEB**mq@4$4(26j zAmfMP2}{NGOGEbyn8MRM?n0ymMSXCE*7Nql?SV&(lVK3(Edx0 z$Udh>X^tJP*};n@S~u4Co!TV_x^H2r)4GTct!P=M#8pZ_G!K?!*w(XL zz@V|DG+l@GQ(;(sZod&LiMdbO&9bahi3`rLWzL10tFg+GIVnMic6)Fh3*@KmK^3jH zUGO3ylu;cE#Yz|$Qkvzo9El|X?62=h%K#+;My@c zMTk-gtu^{Ja>cIBpwpYy`L74eQOGkwCNyTF+z7JbY0k>!3f{*6lB z4q%8u)(usgCe5~93&wvD4cY(Z|5)!?Ro&Sow`P!A#!(p65>&Y1Y)3>8g@yHk@x?tm zZ>yFjw!V{U!YIqJj^-$^+-9PW`D^qguGT0tYN}ldkd#U!g!oEfI5vjGM!;{+9I-0o3YaE|C@5nk! zxgO2-B60N{Swfd#)EGUR6sqB6uShosh}@j3b89u7oqI%eUG-x#D=`UMKs6IzHiJ{u z_k;N9zCyShF$c#Y5EZPzzhl6bmuT}TS;qkGA$+P z0s?n(>WQ)jIjQgo3ZReL7((z=QqZOYpQX}S6WL%0Zq|e$-W%KcO|(D{Nc8mwu*`?V zON8jo1)QTj+Sv>L4wI1}1&tC1wDQuc=}`rO$_quj&62SMMFCh<97?YlYf5vRCNJPf zTIN9dJ^AOI1!K+A+n6%M-T@(gUS1}HpL%A{*Ui@NyXvKZU}9cF4sg5l&`#aaY zLwmXME$JU&9)-)%#;!1`_t@wtExZ_-Rw;8v&$@jMN$nw6=mfzTVO)x__WtOv7HVHp?`RZs`Z=b+crZp|-m z%PF=hW4?NPyS&v=ttbUYobp?+XYksQ5-Ae4L^eXWqiPvOz!s9KjY`WWv5QO5&bkrb zN#_RG5)E)&<#Y{p*zhECAXTf2nORFkISt+wdE-OBe0tC?1wTi3|$O zXNWA;HXR*_O>HBAh_V-nqfcP9VRAi=k8GkFG8?KMO(z_vdm;?wKdQ_CD91sJVSTq> zuhzguYI`ueMgcX#^%S$619bvi8g3_QfkVQlma0|qU|-PYphC?1w9K9DbrK0(F)lFpCcLs%XR+N9#-l#?ot?jge1r)6Rz>FJqqqH}fIQFMFz8!ajFXtUPTlby(oJpX^{`>CUQ}08yjKS5L*&JlX91Idm1X z%h?@l)@KvpS|OV!4wRZ1SA}oQeAKp+0}4)Q-0y>V*0>W~)0yTQj(6K&A0+u@Mh(b} zsy%ghGSNPmNVL>~?Sd5Ls&(8(h-}$u0>y-4@D+(i4X&E+Oft}0?(0V)*hKFI@Yr(i z2z~i~8SZgwiDOG0Jz(4#ctj2I`)MBexkMcs**CQhRur~BPu13?tfmM2vLu{NsylgH@-e>sjk*g3-@cI) z!xoz97hqOl{$B1u{Ozs{f^RSD+ENMCk^8%Y{0*AFR5uQy&&i1C3il?X22=;jXYhP2 zcfXErzvDdmiqA*`E8-wz;@8oJj5Epgls3vtp-kKVh1xA~$L_>uVhA>Zz3g2id7Xu0#v{;=rO%7wYJ`W>jhz%WR;4!>=c zTzUIiug{oYN$d@yx21#g^k&NO{soUx70?7tJp}`)kk-l3a)gLcOnXtk5MS+)QyILy z2k$WkRcc{TZjOUs)cdQLg5TSk_84ztqyuzKDD&#y_!G?3zM+(6=C8EcdCG1M9#79E z(yT_obrOCh+sSI#VWKqR*(@kR=w|_KmfsL?NPUbUm4Pw30dL)pAQz(lx=?;nsNS&d z!e7g)lWinK39F=3;(DU8iG4t<(g)3A%!^4~6>X(n-{MgcTTMOBb1{>KK)3r5Cukej z@s&p<){G0IPaE1tH1*(=69Q;;ozNGCYWE+Vl1e5hZNRf7Nvsrm?9BQv>F~oDEpya? zRbe2$pGI24?;rgx@U;Y!v{o{7$)Bfpf^`$;+V_*R_J>)fLZLHjDcAZKyiRnm{WDhH zvoEqj0B_x}g`ufb`r^}?VzrAgL%jtMk0^~X8otZ6IItK|)-LtbMv&Ts-r^uc`22RV z)iV{n$tkMY;+#znUO%Zaaw%qrPdCoVg?<_Gb-4Vo0AhHRHE*={CwE{rV(!^_48B81 z9}Wn8kEby6vt*B$cNcYaCBT2BEg0ro6Q{VPlU1^M;^(}EA&FPq2aa=WwA3qORBKRV zGvio8<%=6BR2Ghm4EV8ZTHenm=&@Bjg;+r3p&s+^t7GnA&ai6PJPxvl(S@-7m^;d9tDk%Srsr1I?`kHbO^8^;I(5p8 z74f_%j+P7qaUJ8;oO592$mX*p+dT5*p`-ttLfZCrwr9O55!Cve^W???Ah}h9h{GnlB8|~1XC!AXspty z;^-oLD%7pJ&icwrL~v#!^# zwhcN-!y(e{ ze*m|4)(ZXf8ebqog|~U6SG2IT;WomWj!j^LrIS3l5<{C(=rP37u@tyQ{@31U$$U|^ z6nm$t1BK{QX9sRbL-R1!4jv?1p^0W$$uZffmAGqFK#d~RJ#hRyxe;hHB#s*mYHxhp z=!`Th2w`bCTf@gP@OsaNkq#syhT+8BSxqCN&qt>cy?d9UCi}zdZFj#C4fx(;ig^wwTm)R1aTNGQo z_YcsV);=5aGr}DjLEwtdw~}5r_t-He^!ZwXvduP`>Y|agdU*6&%n+N+5Irs|*Z_(W zsXX73Ub-NHKfcG)<(21JY%SV-b4+v7YFKPyq)XXy@@F_Ec3(-!AIE$CY|hP4psW9b zNfAvE?vI*U-3sMo} zc~FAca}l;W;?`}VT`ydkS*{$pXB%z5PL~RPaX=drem@b_FJf zZ4@(%{8u4(VDj~Ez(Lnwry+O72CZMYcZ~p>3)hBR$(n^``AEkrpp2aEOM{2)_= zkK~2ie|mJUh^m?GQ^72@Lp8U?Lt$S`^+c9Q=2U?%3KpfKjS2>e?jW&joP+b!+nEvT z3t-n9mE*8aj+#nBnw6q|k3%W#l$Loomjugb)zp+}!l}qU>CAP6O`=knZNt=`3{CNk zBgz`_q;8&?WX@5#PJv#Q*^~YEStZ7AZ$W26q9@`q?VHm%fgBzl5R|Xt9$uq5Ub98jKo@u8CR%a)$MM(`^?1(DXlgP9=;C2;Vt02 zSqRI=^v)H@i&y0s;30gjI1OPEiw2(J-d5Oq7O%{drudWOZE!C3&97GFVrNBnClvOp zNEDet?l@Lv)=k8;x^sPL<&j`mgc{BF!aq_=Wz4VT)hf--)*hR85ppW4+J4qr00QhG zvY^XT3xhE4aoGbZlQoYvm7m2fr;1;$ZbBvG4tVL0!)h=g|$dw+N zSP339{KevqPN7776i}%%a!4IgK7Qj>Qh5nESWmyT zU1DXO#o8fOxar*sw{v1{FiR6=@2CX4V1l3hD=NX;Nr0T>9_$5pz>sJ{Bz)>fCP{3eL?8uYleAZ<| zib$V4R)&5>pTJziZ;SWidR8c=FQ!bndjY0lDeEQB3erDugM<|h=07EKrzJwM>!@1* z7~QsEU3Xq}yTRIH5&Mf#)z_$k6G-TT##H#ir>ZRy9Tekh5q0w`c}8|H_rLN*oxCtt zbYnF}PziQ4FzoYBo-|cpf>-+%b<`+O|30iSa%GmT15+LYiHqac2>1s`5PeiZ=dAU_ zfMU8}v65efi5~krp~UHC3>)Y}hAJWP^v`#CJmFBbaoknaFUAR_7~70tsLwEKRRGO> z9n$CUwC5$}LgVfR7_QrdW_X|2+O^wlzI-H%kq+CpQ{^DQ%I{c zF`0QVynm_gKq37ik1k>PTxnHu@Kv#|qdsW$pS1VT9^4;HQ#eIFQ74WUTz(8L~mgVW6SCB6X2Yg4zEm^;QpEQixUZqi;WK=u*-juQ~ zVN&vZEw;a5*bklkB|D}qj>JCnyB3T3evE#KHoZ%-!0c|hrqz@CK0>`4Ej%PHinteV zrH%Q=xzo*$vw+X?MkNqn8S4Glk(nzJ&w;LbOLe@12CTWQm)E}j<@3?Ag{=2s3QQWV z0!O892*R@21=cjHGA%6=(}4@W<-EbmwksTr9er%vRY z=bjve#j+faeS+G5ojWZ2bA_uKVq|B;ZMt(@m%wQe7g zcePsbcY1rHK-J`u>zT%FGks$Shi)&I6h^wS;L|0eP*)pgv;mfFft+c4D$u1F#e z%7N=Tl97_@&eMPE9Qx!`5^lJsF47N_fA zDbqG?+ul59o(TbpY98a%1r|M=dZT%K56b-SRMQOghEDH6{eg=v0d@ZLCbf38BF(fs z{?+_;dqGyHYVX}%HJ42iT=YM6cZ=|oSV6@|D6H?D0bysAsipy?3r5dyJukasExu-* zd#b{kB6Wi~fKZfXpV4DE!N@CsbNN`L%6`ri!Y)V9XK?bp=+2j}ohk-0x6iTtoWKhL=;(DSQY*$(FHYDozrMw7RGzPn)ufRHf!DMsVV^v` zp>@Jm$fn)1$#dq}W`5^O=k+4Cj5YF6iQ}*>Zvi_zk2C0+<;#TjoerApAa~6MQF_%B zVYBtg(J7;NLirZkQrJv24p7`R2&6h(qc;?-iW?ex}zK7aIS|HYKkUj>q60Zs~ z0&e~KOE76x?TKZHdwA&^9$d7Dp_+wlS~;^O^o6%o?1upQQQuL_3m(V?6W@c14g4$? z3H;5LiZP+fK#N!Te<(T+e>U4T4BI0%32JW=w00G(O~i^w>^*Al8Z~MwF{7wbwMSxa zs%FJ*t47V%Zi}i>lp61s?_bE1-*Z3rbsgt%cCrX$QPoGp&yw;3qw0SEA?=Ia(0Y0r zy*NfARM$i9ccH*xEU|ZB9$$vFBMq`)3imD_b8yq`Y-t-HmsKi_8K%2^4S9*bn&^U4 zer*3I(=r7yWby~h#2*gO@O67NUFc4-GE3UD2!fCIjMdQz-^FX~H3N=KJ4o2iV4U-T zWH7_<>9e6bz?tRMw#VRyQaPpH>WnxYLiHNW6vs*yeGU^_APiIv(8Y+&?3HY@iUOyB zQWqyf3O$If??o$JU5;|LG=k}TBl&I_Iy_rS?n3|_zls`Z>A{5)TQ-IJvO+mW#-g?J z+X_$4$4-wd0GxTe+p0Q59epx_*u##mO~AS*X64e{|6JmM&t4BeS$lY1iP&=Etguc$ zhk1kkHG80K=EcwQrQpi8zw$jxeb~fl$QVLStGOuL%b}PVwDZ`N$A$Zm$K1Q|DfiVHe-xb<|&A%g} zYh%f&{>UPk5`^epE|W|>NOQ5s&evD#B^InQ1Kq<)go2I_{<@|WkjQ&Jx}ah5T1JtP zYsO~LTQV$hi=#cvlqBN)+pnL!CPyo|Pv}fA%o=ZHWy&$>32I+gM|Nl3)pqi-qO}y{ z&u?55;`QclfEhg$@K|f!PgHMLQ0ZBBVNI+azW<1wx!WfF>S{BNGe3|kLyU$$i{dBo z&{TrqfE#D5vA0z>+kf+a^a3khH_0i_(akx4>BOf$2RNDkj&O=;V^j*pix*9LYwLjQ zxg5~k%^F`aqnengf&{cxN zmh2}c-luiaJmv!Qqs!q=I0OT_3tmfRlYcHqqG#?oqH9c;KQb;D(72S1)exI%&I;AE z6BzXVPkivIKUg_c9acv-r45vhGdm?v;ib*_EkUPWO<4mRmO&tpCxnKqY&F8%v@wld zId}lRYAhg+L`G~FO7=XY+E0e1rK_(8!rJMSoDwu1YKt2HzUx$~uR5Zr@1$Hb!*Deu z)vSCXxV zdL=@#80YcimSXLEhpC|Ep*R%Ct+WQT<@VZ%42bz9(_)+U^Q6UVO*PSt>v{vY4Y5a( zgLpa$6Dxqz*gdqGwzRs&YNF|Q=g|;zNsg#cf|?lcVqMIvQ>y7Ag;F4QYN(iibtUlw z{4)%@hH>ETT-+Had|N|5B-K7(ZIswr^V3x)-?eCabOsbs7ijhx+dV=e?M)FRff*`?-m5y^2zN@z5;!~=gTvvi1=2L3<5|E+8$P0TCNx(iWzbUFxY z(i^Axr5lN;Bvus6#_C-1k1P{T z3cM*k3F0w=YCR2K**68H(=dt;qtpAxICru<#_qk~>pJnp27CTx@z0=e8f%zadrSCQ z$j&iSmfH0xpcMPwb|mmB!=_Ih75j;WhLtKj#seeaF+2J*cK3ncd5ox^=XTtz#7Px4 z${WwS8LKN$KTZ5qbz-WH;Ds?*wAbcGX;AWi$o-(Y(JFwg&`Y~@XbWY;53r2QjrS5= zJ|pNaR95pvo>^)CtJC;`dX4-e@~+mt_4wK7$xie3G%9lNnS|sQh1}AoPsOO(f7rJr z^}F%QEK&V^_l0xNC(L3vqrIA^chNo0&w5%jbf7a4<4U)Z$8`%qcRDCDIqv?YD!NY5jlVWvuMrZpdphcx_IY0k zAz82fAT*nlYJ0o1eh%m+S_jh6?r8Xdnv@`&0X-E-Yoy{su99qDyPV?zuIwoL1NyEO z8vVD7$K5*I;FY27XDr1Wm02vV2JfwCS;%m7J=Z7&G`2q2uq+~+(If( z{0fzmHIk2|21rT_4`XSr;bn)YX$iiu7;D+tFIBy zMYE4HOLy(JV#%2*e|B2MzYF=hbeG+C}Zc*9L^*amZC~Z zpc$L&EWo+tD&4h9g|DK_Eq1#2h(}_WF3dS}6%0OSg>{->tV~^oYQr2*jqJ)&HAe^W z1rP2f=}D$|J>`+T)n~#;krQgx()$a770okoLjMujdOo|Z+n|eoVBiyZECaC7;yT57 z8&5A;4jLYREU>=ukFXJ$uS^unq%INK{ATF!>^~hgxYOylF9?jhNBurOuJ~sY{Y$EQ{nuWx ztS`$8rl(Dh*pVPzPk9;I1H;#Jg{4DDdGrpU-%5&ky-_A*8HE`=MZ3pg8!!$pN5j9Q z_4id(ASKNwWN5RZCY-EMC(HO*h$|u#J}f4B6G;VFurk%zd7P1mH75LuNXOV*{))CI zTsc9ewpVddSh)K$j*LD6$Wz5CenWvZ?bS7U50tR*f`3(>^-QCt|JPY{jYzaGYdgYA zPQ=B;c^Z48wD>8?{UXJX9uRFhhOcNz|BIL%!)9H1i-QzI^Bf?f_xYrt_kh8v_<8eV zUBq-Vmgu+YJSDJpO-Suu$_I!(z;EC`qUMVPpIb9M^nI;A#O^~=>X_QmS2o{gM#>(=SAn7DZZy<_Qh>?Xb`mR6Aw-p#=ciy#)a8h!WuAY$^ZhEY%KmELUw3A51TFW>d94z|3Rf3O1> z^CMPO4>5lVEg`F_YOJ-vV@oPnyn2`Fw%_%VBb`TICU$u*;69`vGlR6-^m<~gH8(Fn z^2YG4ke9r}DM&kuFl2Pylv>s>k0_t?xHp`UtNdW?mh$q10y(9Y`(&oPZR6o-B_mQ8 zLj5p^{%NDbcTGB9l*|0^VDG)J%jv0K5@ru(N5Kl#quFB(kYW<<47zPiI^ zD=V1)75Dxzwq9X8Zb4fAfa023CF0GG7216K3y*OBS5a>K&Okmyd-akhVVB(fT&0NX zm;c_Yad}dzpW@vQWw{=RIrb0J={*qF2I~pyX>(0v7;fBt<2M@9PyPAWls`m>BWG7l z^>OiWr-X#hz5Y4G=F$aemry9^)~AKd+aO2i)%Ny>S@c4XVZY}qC9fV0ipQmQgTzm3Y0QQVPe_a}$J18%|uIVF>j z>^iLh!{cF=n%e%*XCf7tqkr+2_6qsUZ+~^uu!MwelQP#0Pe&Eqid;k-URmbwammVb z$kQ}0_sqT*`GQWNO(1AR+Bpx=xNsp7Y8+h#;f3-&4T47BrBVMT*ZIw!a>|hb7a>|V+LYw-b67fQ2pWORGjUO>2Z-f>) zRw6A>)B&LjbKhbpE;sgC0~8ut$g)5yEJ)I+M#NO zUP}`COJ{MGCY15n=M`*~L@r5&{2no0+&ZiNK4sMT3Q*1_4O~rGZU3IcTElpNxODOQ z1l*?GL`6T~tFY&l>X0j5m}%@P#PTJs=RYFC_kVkAiuTI4*6HqTF}9i=c%(E`TcL7l zy31*(Jl7q1>$kI&>TDSJQS7WXWYMf>{{THx(&r?$#wbAWJ)Lb!iyPizP7@8y3TNIu zkNKxMKG3#e+wG_;j9oN~A3olVNk}iqgu8l1s>K*Ef-729#vT5`GyCbOEKTiFgqDI_YnO-CDol*66yDnOM_I^2A(t;_GQvaXl2Ft znS3c1=y>;w>hR#tu*et15<>UxLAFypmqbZVaZ(R$>|@Zd7QEwZ*Juein@f$W+EY60 z18cHAWfyX;RJ#o89#3jP$Kk{NwU~sKu0_4=oD`RNEKp;eb+epkTx|6p5f^Q}nypD! z34g7oUEe63RC{pX)TElYy?>y@mkQyUDjWmsbfq_-y}|&7Q_Ctaf5Dx3#q)r93~sAX zqQ<~ZnQ@igKmQ+*{f##h`c>uMAn_9tRkN4^p7#Ab#?LM}ar%vBc4ax-1oFaqREQv+ zL|R=dBdUD~iP;-7_9PIrr>9IEEmiuIf}DP&5b?@^wUQw~6x(Z70hd?4{jwy*2(xSD zxRw(-yzzQbrBE;EFFAmI(f}~5d`Z50oJd---#;7Eh!RJpwR6OGCW@~?C_|Qh_dU6* z{=?MDL6~s~m@-vg$t&athM^T8`M;(a5F`+tVT$kiDmEC z`6kI&QlGcmG<-bqRUS>&;G)>VT)^M`qc@M-fv@RlO|Oib6q?m9up`ep%+6G*hPI}>SHybVYSm}m&dn}qq-f4NwWki zWrSpi@9Zn8)p>k-MJ{$fD^Ftha8t&BO(U!qICsmA;(f|h2FP9Rjoz{;w6qj3ThtaL z)9h8dCcv}}BrJLJgxQ-`(trtkVk&pVI}@;6Ttl_3uvP`IGRZn|03wQNvuR^0J~HmI z$viOcRf=$$Hu`zT?~YaSNRf2aH}`%0JSqZ2Mo?OKqyTem`bC7cB!}Sp8hq*MWO1bXMFpOG&;k~lsMudNJd)~Ir-tUkje74KT9WmO7;Cj7rXq%YI zu@03s_AlW-LIk0cCGA+#VTC5SrU0S$mFKvCU%X2lHKr_ezA4gpJDKbYbWsh{_3RjC zbKWgrtUbE6j~Se`mWlGjqDCJK6tYnd&e?_qXxS|%9=SG ze$1Z0ng{Wv|E375!Woz8hJWc*zheb3W7Y8$3w_`evza||TWHo*^}2Deb{0U@QMpN2 zi;A=lp%EA1e(0_T6a-Q{my%_AZWD(mwjGhsU~*d9NtJ38&!)_P%4PWd_vKIBiI&%H zHJ5b2v_9WM?LdQE;A{!I1t{ZGZeWaJK8F-the=VUMKl6)fR2eN7PH67rsTrz{zf-O zprF$FNNKZAQp7gY?jNn47e>hizTS~;5+xYVJ5uU`yytmqNqp$lU^OK}Aa`1Kh!kJh z1}cqkbg|bJd7iObij7T;E;bw;XdLlOQBRchz280^+g2wY^YEyMh1B?d0Bkd!} z-3?58pjyR2+zjixNaGHuaOBZ(I(uw?WRVoPMrmjj$#}Q0L_gJ_o~c!AVv0{6zcxM@ z1vi>`!o$vtb0rI~i)U5$-k%~-azIhSAAK~Wfz1*6R3V>ZPZvlM|3EUE0$`w(5=B(A zJ$JLV0H2*^RI`)09N^Js;6aB%O!;oTC;eheF!ADVsY(`!NN8zkbtD{lTebH9OSh$o zX@lHb#O|jG3-WCdhPwL6qQF`q-9{TKNf!0iD0Up4z)DxLa5Sq@mtJl|)vZH;NtI)} z$!Z$@eq7nL8aWhQxH8dTd}@Hkwt46CNZLGOCeZ-R?6&&=kxc^xCo-cA#rsSGwod4$ z&|y{iDq9{210Td@sTZgHl6I-#C?vEFjYe}3o{!pZJxU8vjRdx{J>s~~;%`96oRH$zq@ z8G!|xiMp8Ni??aO+Fb0hqTD%NvO7c5Vh_B9<_4DMrxm^PXN*f$Wrx&}l6LkH0flFp zB#)!&3e4&%IA|eQ+9EHwKTteZ_^Da-3Q7HDrRSrCBoHb#c`^HuMXp#x6E1X(u_l}V zZ<=jp(a(#Lm`vj^c1Uk3D{^3L*YVJBLmQVdOaCWgIND{Wi!7~92EP8eZ+-eAWC%5b zpLCx4tEf?@y&S`2AcovF9uo8CZ*!g`1RY@Qy}jspiZ-w z3iucQ0x|Tt8jfm801pEW5^FjYtG3r4vjsR1?@{9+X{ZoVlG?#Beuuc{M|k)z>QzF| zHmamB>#H=ZR`a9My^qyYsN_muDDZLAwULGy=z`?^`dSOgP+Z#+P@UNK0yJXy^rdT49LmHZ5&L(7)ME*RT^6oLeCQ}h zYWUVsoO>b4Cb3a?jRclV{&N6S9Xn9380^fyKW*M8X316RDP-qT)ZYLFLLtzB_))CD z8%~#lME*_46zR3-Ws?j}oBC0sm_p0Hr1)^cxpMzop>D$-eU#c@GA9RO&) zWg^tF`k=5_z!+u<7M@IA0+ri8Odo2#3+fP&{r~bhJC&NU{IVbVZcZ}$`^k^bP3dOu zUIv(4Y2GYeddCS!?#Pm-EIB&;tcZb@3XT-DFjCR zKPMmesM`K``S&H1%(Ogw`ldXF`()ZG(QXRcAo-(T$yUAVG@<7vn}L8a)F(E*dpTwG zuJvims>~#?W&?o53L7tHUV3&TUva;|SAN6eM6rJOB}!JqL7q>OQ70pODm@>SqF(&_ zkI3X6_lNFUUF9cab2paJFK#)-v)ovfYxlD5R|`39E2@t#`g8T>D!WD^$8@GU;FR4u z9Zm^1SWy$TXT@#Z{5{l^xJw0FBabTUU6+D+qV)kWot0o;)uUIDHc-#K?a*VFwu z;fFP>e5t;0Imi{)(86VFQ0tMaIcg>XCYh7=PZXI!VTU%Uat|_JI_xcGwi9EukO2 zw!UzTXP)rc;wfgaDP*1CZK=r6toBB=ZjfuT-SrP8(Q9n)!EIg5BaU`Tv!6ulGu0z)n&;?c@DddNBVY~f$EghTfZ#tR0& zK+h6co6Y_RtJY6cv0;2bJk4+tK`=u@4ce96?^QmY6V5tT=3A6kVY?O1wu0^SdWdC- zWq^1|GWz%LUwd75mFgEUykA`)<@?e2EWdIJEe54C=0bV;bYD8v)QaEnW6yU-0+`nr zR->B0E=mSE>}hblJNb;%MCZrDB@*wt>h1jy563(U{v)ahs1&AXt;i6zQ}_5xN3FW! zsKNR@Bbl62e3>lfGrR`OnqWj&g`X*2Jp7gQ%8-V3f?@(^1-Y(Fjph?c9B+R9n+^Z3_J!+ ze~|Bfl#s2%aMDeB%gGl&vMe(uQ1%D(%LUw3_qW^9y0bY(6p}|1LPfd2 zl8O2*3i$?G&klx~dBYQk)LY!reo=NPo{zl)V%8@D!7gHX18w5Ed&UUkshylb&$0iA+!?**Udt7F1AGjRgsaPt^j)P+ zm@C^@>=5o(n^h(C!uR9pe!h;ru?sO~?$_dh`hO3mrBfkGR8vR{UwrAK(AOS73O z=--{yQgkzZqm6pA+k8o*rIczLO~T+zSkhBd2t>dp_9g zguDz~ycRnBd+C(wA-VM`_fCRMI;m6*p?XD{#}4WoBAcORCIxJYKEX7TL-h>{$>~u8 zB8BMe=p2TnA+*0R)Mt?U;pn-83+T(buO3Cu#Wu`Gx{YCSzr)CU_Un8)o$CBerMH;c zURI)bFlQ_mjL&l(ad;gef)sl^fM^VO>Qzma zw=)(zwjEgy`y^05u3e)CQ1W-=@OhSy|>k@Vk1G(4Ny(ll(j-A3kT6kokQe_x!J)`*(LDdWyM4Ka8uFOU?x81JI#q zvtnsiktX{fSH>wPLAxTiS$iiGpgY_%dzl#FRLWgrZ|r~SL=vlIlt4TStkL%fAm`b9 z1cD>K^f=YB*AjmkX+K0al92%6vyPqKH2P1eR-8{r8~?3Ii0SOg>T=clC>+_uRq(`q z(lL$A7Wug0lC!&@TU^5-We7DV&>;lZe<4}!dtET?R6{WxavJ^QG5)FOGU!`nlww!x z^WW(-O*JBg_x>$Ce<_vvGM<;`SKi6()3?_K^JVav^7Gl31gn#4zRaZWfKx@kS-!m$ zrzN*Q3Ft9rgE`64!v&A#hT*FM23+%j!{{8cb_1F9}VH7+PvI&EO%L>Sy|9go0^J&Dog$h@wu$ zi}Lw@%xW0rjjcXo+6R%H_?<*g+t3;8f(z8d z1Wj6_>!K%aUNaX}DegXOk--?bH_? zhx*;mh5nMBcWvwQ^TocKTMs@hdsGc+R&FHxTIo%6Sui%k&g|Vck8k(BRn9$|kNz6H z6F7pfa2D<R-brW#lPq9}GE+DiQ%3SeA0N8OCBs45SkZu9MlK42FjGTPBXa`8 zWE9Y@`RIEBLrV10vriILLB0vfv--*r9+es7l8jnzazMVQnA2O&o7a>+D{7RFAN)v7 zkqeEI;&}oXd~Qb9k0l&==|T7Pc|>VYce&pL)v(B-pylv-I@R^eOUuqQkGYAE=S(lU zxfRAuX^_aZtwp9jlAPd1_C6^(q-h6Pqs)9aM$_m-_^eT-B& ziK{4^H(nC;G(GS0K`#Ssm785_D1+eC)hC3lV}| zAZvyqnK|K}QO>6B{(A$Gto&o_+NxufT1P9h+9G_tD$=km`KdVFz+t+yFu>iqlHs|H zqE%A2AE39WjKJX@vjo!tM;DrC zi_?j?2NR)!o~A$2Wja1A0!&lngyJU&izVlD$(r{0(6w1I)4tn_Sr(BGe_19QS(=X7 z!CcVb?(KdiN8=q&a}MnWHWhtfJvlk`Uhn?ofs;lZ`sc}on6@YB6T!T|nDy2s z1?>}IME~jSOj02;;hfX`$J;BOD$BmRX%xV=lPVVecG9#6m=WH)!Rl3H098 z%?&B3{=_#0mhEAzp%xvUGrcZw6b2kG%Q?S*0z}%^EB%0OF4@@)3`oADOsT3Zn+j|tMw&T{bL5px7yct$|<=pe98){8OxsF zx1S{f5E097og9sINYXmvG83Vz=FT=^!rC!G!#6}e9eVYKwWAw9m11K(V5Z|#R&#z< zf8T#rgYi(HT|J&LnZQCPXd*S-m}uB5HG)MeqbJ@Ijd)c%!x`|V_Pjm!stPUl&W@`S zDPS)=#rYb}unoY5oug|tX7C?8oXux67rL{ull6j8qGStWldw)hx4)J1QlgB?Gtw7!iikYvdEEC{4fn}#ztbiKDkd1j zBnN7o1pA@Vu!PBbfI$;$3!^#zL*tkQpHJbNNb(tZSPf@^ZyB9{sUfT{5TakDObsyZGCSb@JzOV>Xgc;ZREjU}cT7un`|COr}mxoXYnwk5LdG$#3-Yo=|ia$KqQ zTB8dds$2QqG`j|&652rWc_UYGdyC1b4Z9-n5xztx6CVG9BeKPN=uQ6)Z)1_QAT-QA;6IpU&c zjP&@9#z`v2hgtUznd`}kl{p;1)Zt@nzt&wA1d@8a&}L(Eo2UCWw3w8z?~mvWl|$K^ zHcYk7yxwQdNL4__N0?x9vpanhLVQ(ncDmT1F>8(Yguo8s(Sv=wA7P`v`QqBjB&KfBIeo_8V$6_!u-LKRE(Gfufx z0$gw{aQG>{u70~=u5>6T6o+feHPkgoafAkOOq_*mN+peaV9I1si}Y_6Hrpju65jsF!5qE}q{Z;T+D*w)#!?$k`j1ZSzOw+NSoxkq#g$+f*WyNn6Md0&fe4wWPn3 zsvzTcUSl1Z`#XTcZDWkOEOI`!s5m{K;SsD18JKZ>n|(oPKdi>0113@m;d5ruwb8NEsGGX?p#i@ zipRzaFlX(mH=Wnmlj=y~riA9NwIl80%|15i=?tF$tg_R;C@ye=MipGt=I|1vcL407 zLeTRdl}(w!uN=UN#2ou1NJam*@TcrOS6N-?xUJ&I^dYt8Fxs)b{SoIh_fgr3gsF3E zQ=ku>t^uTKT(b{SYq~#BI*9)5u4JU@svuSEv11AO2bZEN0C)@N3~+f*eW zH4X?dJrMV?wMIT&RI|1A=v6z>^x+0Z%vT!$>5V!PN6&lp`X^F7+}B*7aVi@f4d;^3 z*U{i4C@x+xJr@}10_n&QuL%{Pp5hF-^^D{xU@L7>L z#zW3$qq7)qfL0UtF4~5MzVP}OQCGrr7@Mk1<1>+8AtxB=hJg20iDB^$_uk z4Oso>9UZ&2!xYC4-ZCwxdy!HI53`uF#dR<|KS1svF&pD>ACG=V_TuPt0B255z37xz z9%M`_ro~S;H@&VIG;$54Gl_-AFbBd2D%*?NKFC+SU9?Aq1a)b32B8P$RREwu25MDI zy^Cg&hLQwd9cwEbo!BSEWR#PrtH01B#EXAI1~wCPvHdWoyrs;~Xs(&L00Q5Bs!DDM zjM)$G`(#WJH#Rs8A zdP@n1IY6o%w^Et=sJh>vh^{t~WH6|@_?NPzR}|1-B33d?-~71n%=mD?vvS7g8XK2P z1d@8V1MsCtMl7)7ROebsmbgE06->q`1GOR2@E9(RB!{2$`X}I4G7NheI>5H! zJ3xRbNX!M3@q>nhjgRbb7PQ?EcEhvC$eQKROd7rcYx!pWbL5p+lryIMW)ZhB^5&*V zJST|a`Lo*#TyaTQc6k-2xz+7K&HK%(CZIr`Hbn{V8!;O)k;IqbH=-bj?2N*NA%jVJ zC0(H93TAN@fb5py%jn7xP;ayWGzt&8Vwdxqd^u~%KrVD9)92%f>UvUnMp2YWtd4BH z15KQOi)|X_zLSIi=ce6*G>b$>x_6j+SlOV4{gLvUl&P3G*ntkTh{;hNMaCwOuuUUY zvhL8&h%inWlkwJ=Wghhmsgg(<%QXQ$5jQ=I_4$nDezp};gUIJNm~9%mGaFL((;X_h z#>$L%eY})38g%%A)~q7(FWe(hJSQ^JXi7z@DcjZE5rEj!NLeqdzR5EP40v1Ol&B{F zd9m=U?Re@bn}XO^v6BF5C-g|WV0G-($yif%M8o9^_?#rZaO$sA$wkMmaqA0VUVYZ5 zD9=#3waB^_k`?BZm=gKwpe(m>tIf3>egCN#W+I}3v|K(;7asjN=H>7AJ5#p1>C8OM zHy+l=ijWV#!DF8OfG5}udN6M626)zBw^y#C_bwbUK3w^og`i%G@7c0uyeu#5;R^>o zF?kI@qs$1gCthJo0;cc?5~YsEDHe;0a!yZ6-+jR01E9U+GQ263o^i&X`W$zHHpF3V zvqL7}=dZmqCX{ET2Yg;E$`$F!dpQOJA1i&n6Tv~aK!bx6BqhCMlq`&hf$Q4r-sBz~ zI^OXUuC1{S=9cjv4{qkER&F9ktX%qx-*ULF7l-|@3U_w1{g23Hflvfec;I^M!6_Op zIXxFSYzNjZn%1f9{!VkzKw_P3=ryI3QC_Fx$D!~>#>Co}qPX)Ydbp*q<2_}`t^KNv zjm=kT{X5&GZU6&UY_s}?!CMK!u*d%1-kVfgFV=BU3KH>TDjm`h)Y!NWdhd;GQQZRK z-+K0vJA>qFUV7E`Q3!vI9+kL$YWFsvAqiwV9PgwQxN%-63}h?2q(6jj`qVpi=1uhT zQYtfmG|vMs3O)Ekzw6O>nuS;lwY+;Gx>b55?4Ml%RC>BMdusJfNwF|r{f=_+Wh*7e zkxZfGRySHad5ju@hM%sSZD&>b)LDQ0JmkeSBMTA#yR`;fzCpOx^Jjg9@mCL7U+P^c zHr-=cXutE@jkV?DtXhkSjl9=w*>{!nj_0+PzLO?N%M5kNzkQ;=`fg_HUiYeQdG|^9 zNawlFr~@1Ig!~eC2(5+|iKa}-bhj3ad6$K#j#(cOJxkk(Yq2xFtAO3f>$-$j+DXqW z-X6c2lhgLJs99`0Auvw(_^Z}J_8ORJ})&C-HZ--DcLXYtB-7+j62skQ9x&a30D z){!S07bOMr1LjIYkXXA}u_4+x<-?t@ZL;_Xs#>Z>_*{_O8EX#J z=&ys=d=q`dNH)I?Xir7eT>YtRz zs!ftGH4{rFFvj#vq4 zssD(Cm!c^e;7>lP%~vyCzEgTG?K3x{EqY5SrU(txaWIXLG!kDNZjvtj6`~q~(7sPi zGNN*Dnd)3R;*^^BVT(tAQCt1i?TFBr<*TBjT`uCthPMA|j5GMFl$K;3A~}o{$e6&+ zDwMO+*G=V?P8Aa2%G!ub&s>&QYsYBCEWUB~q@jW$Nu%?`ytUQMcr(cAv*NX?h7Zwo zFtePY@t`Kr6wu{53JtbfENzOEM%@?stwf9BeGDOa^M+S~%KUXQb~K>d&l{0=X1P0_ z{Qu!7hc@mGl}faEAJ{Z%93n<9fn20mjMGhm;C$^IhaP`dC$_o4MN9f4^sGLP%>nB@ z%i0^)&?E}(<w8H zqLsN|%3((*#IEGnYK*xnkn`Xm+l$|M5T#5nddSYqB5vqYrdFyN%}#`Af+!Ov=yK~W zX*aSwb@Lj`D0$Pbv3vck#%CFjvU3mS@K6ym$*~qjK=GNqFI^(StNxL=e~VzC=5zpG z?3MgL?SY-XnRRUlVqbmmAJh8U2XsqnfZKOPLjmY_ULW0|_tzD8xuJXBx3~k2PGLlt z6mWN@U!~AQ+hSj4srwZL!QhRCKbzjULfzV=@{O&})i*f0U@)KYYL#5k_9x9QIffwy z0eDeC$u5!So=LY{G6trN_ny9Cv#+tiCiBw()4~^il@nfN`%$k`Xk(44jSUBsPgX-q zsx-wTedC@*o6M*z4AaJosDoOBPDEwDR~598#WZ+g(?R>Ii0TXSLZ9A?0uu+#xJ~ z?6`_kljm)ljo7Ijqm{bZ*?v))4tGVrN9z5NE( zu-D|6G6QRU#*EuM5#2fO|1yL_w0t;zsDIGz{wNLgc`iE}_C9lw(m$&E*++7V@XuId zg3iiLJQsCZq^8-6^o3rj6u#{sw^VV7lx(LiRYa6A$ZvjC*j-Gc((ZZ*Py1HtS7*%# zD*-_s4Nsojyp!-CmiXlV{yAPHfhhV_#_EFL1OKG3tznN{g%E6owJr(%qavO)-$sbKBtbHXcdXoV#Lm*;};2pCnvwpC6TuW@9 zEO2(wzp3bpF)K9<7O+@+L2`d37Y`*ZyT{dnm#$wT|I+9i%b#tIB1KbuLEq<;CWHc~ zjMzkGuDa@H%)6exA1ck!WeI+0nHp8FQ_?mT6R$t!hPhV}1cW}kXOt^sdfxB)s^3|N zhMsT#CQK#{^UudfC6qk&N`gS7uSUB&v*#G|RVfFvEo@)h(zpUq4WpL@@$YZECnyu& z3(VJ-u(^ysaO71Zy1}gXdqq+h#))AoGD!H_(o@GOnaC}&)?BjJ-1t2N%LENhPJ?Cb zTV+eI>7HQY*2&A3Zr7ij8|Y3W4s9a<5mKJm!?4LxLvUz z`%eXx;u*+!`>DzPq~GlhDB02xfPe62H&)wM+v{!IqXmYJsSj5V3@WxYB$8&>H=Jpy zhNK3!{h!V9whpQm3g`!$3;RGOBz4@pigL0o(hG1Qc7#u*LT~0=vSfQX)Y{7^OS;^i z1T#J;GOFZ}s!7yK@G)~h3*FrjvJU--$HIFDSA&R^sQ%~YfdXdMitbV?CX$^C?G6C8 z7qjxp_X2*k&9u8Y+t|{i%e}JiKkfvzAK4<|9!bhY4HX{BcOxvB@fnUEg9UwZxS9a{FIZ zl`Joeg&RbDxjdRcYYpnr+k9Jz(Blbe$5#7p0rPP512>dG=(v=26sBuTqo!U=d7awwEJG-9@yWQUJu`&8 z_D;wJ@{K^RSKO-<{>gvOi0FUR(`zM}mANQO>Jgpqrpqwf-A(1uDoS^cuDPs?{sdq)_TgcF$FMwa6V*%c{)HTHic~s z2L4F2QDkrK*6nTml`G!^&wuaJo#YIoe)>RZs1i>j?kNq9jPB<6a*Nc+ks7xn+ z@PudoWIT^=M%b4Qs!P=BXLm`@8fg~KEFLUU)%H&YnK%Ug5q!EObW{9%^tvvEPb38? zRroYbCdMZIoDTeFs6^>FUZ+xHwz{9t+UJ4=XRjxIt6qF^2P{|F$iT`B{vSnW8P??c z_u&yEM&m|zo=d1TEy6Tax5X)PjD+v;(7DBwOY2VAI z$DvbhvuUK)OTqJ7rbK`>I$~taTGzxsohEuoOi9n+uvi?gE2}kA& zOTS?7mP%1=Cv)uEFgch0K5dQg%3r2hk&`lE4-o(=;u{&gK^7@<&s)1Z!phq#8~Dv7 ziyt)Xy(?nQroT_DeN<96rA^cNKnu%z{CHnzzE_7|OFZhw_p4R+Gic{k7`wKaxW zyu02dFQHdOR+9N2z+|Dwr)J9Z4sp;t{(RPm(m!mVy3qvI89~fnb_WEHKAOP@^N0PJ z5zcrUOT-z-=~u}hv^}+Hv(VJKal4)GDs-rw!bu??bPe~dTeeN8A;~?I*&h;-r3#s2kAc$niBC_Sl-B-TC#@|yMP+9sk) z2sRO9nNTA?HH9*%Qzusz9q|PgMExhEn9;GdCEh-dxi-zNXQzPRllP9<+%_qIZ|MDEhoM!g3xRZFV^RML1G>$o*jMj?Hl=TUs-V) z(Cxn%=MTZZ3AMt})d~dgohGMXjb{SSRfpcC zGu59AELTs{4P%sfE=&jURVTE1Wjr^&VC-Mai`gvu_Jbra4e- z&7xlVKE)Vl@ub49O8xIZE|8npP-79--!{e6#hhycWjcu`Pyd@bZI|)t)XL?VZPbe1 z%yP;CVlcXz1fNXJ0H5_xt6@Cdu-6QYkTU&NH!|pkNT{ILTnBfIWpJL40K1G;Xpv^j z0vD-TWpBSTETA`N3ozLimJ1+TN@+EDC6;2&W;st&gQa+{V~xT8suV_$PPMkwRg^Fe z;^ntKXBOMDwQP857EGC&DrO^*+W)HvR7tgGn`wb6q`!dUIk=mdM~E1QTFzIFKxi9W zC*~kWegKd04dRxSY@Z!0FI|9WHdJ~UB0r4pb&^Bux!#>0VA?lQKI~%Z1={XiZ4H-s zvr#U3Wx8^6%=lr-CA0N5WVU3~&EFBBlYL@T0ULg>23fGGI`^>|Bxl1Lz@}-6$t5-^ z@;ZT*jp9emIAX+O`b2JvLev|k1RhDSJNMN_Y?#&aXOeI?i)wzREvEBr(~N-zFFHA= zbYyrOC0mNx&nqrEe}o9)R#RHc@Vl5p3}@hT>*!8sslEy-uga8NV`>Xu+Z2klGDSl@ zY~j0z>1c>4YCmKreUV(z7P_V;(kE)$q-hqc#FD;45lW4esGk7?OXI!UM+#a?R07$W z{SW$y=`=@ew$K*Tkl$~>K+bn)Kg--BZW%rGM?Y#qHc`c*ihC)1K0Ft#)*hIqGG6)` zu(c9Dc56*{EfVD`C&%d=uWL4NEWiSLuUzo_??7w{{6(~BEK(pPomr8xc_a~iFRsUe z1YtLz$qjvA9vY7tzye+(b=Fl|N3`E0fDVio%bdb=ifUz?zbDAxgO3O6iHpmBRA#%2 zvR_j#YT@>($Lh9~q+%vD5N!&FCC)dVpypZ}3QW8O63o}vN#IEudoa5AIG~1}Vd|^H z1a;^=8r8@4`p~|NqySBGjB=e2KvvOufkY$0X`-SJ%2X|_%daQUA#IJIpL2xDz_Q(3 z9o5zaYljom&^w?DM~UnmOr8F>ywbAFiv3$9%Pwm2T<^uw*k78RV}~OopM=lkYdXR8 zkh(0RIP#eLgsPFpv|{$_H0E7>MDb&CP{+3Bs?^OC?BPg$GGZ`62P1oH+Vez5wLn&u zLHQfCH@QEty`1BgfSkF`cm26Uo9RX7O3^Sc`;f`Kq+Zr<*(;kdnCv<^Phn0n-vWCk zc25f*$R%uaF)COU?ty)r{X@%0UXP@Q@$^a7d9eTfS6_i-Z~F6F)UCt!kDjrueEc05 zWr42V;N98pyj{p%MZ&*~oRz5@7+$x9mYBU`{P>fu$cjVsjq;jJRa513o8g%#u3zZx zr(5+~&p4xKPXn^ZEe~qCA)SwGzR3(}KUH&OK0I-@vdF>X4<%!!mbHCGVqIT`37B*o z5q&G=wl1CHta(jlLuSP&x$J)Cnh>vrG_FSfwLSsY>J_BHt0v1)rTQqByAO`+t!(&% zLKL&FPsww;6fGD(=|1kkJklk?E3O4@Jm1OseKgu1eLsWS{g=F>9pI1kNfis@g@(Ia z7m>HM=Df@?;{E5l>#pQ>rK8#Mh%fx9n9z7V2%d*$6Q^(slM7VAKW=2SWc-uH_n~Tt zrZL}N_-(rB2eiWa)4#6^Wp%UC*ew*KE_+|Hm3;d&#jX*R973|O-XtK?CL`{s5F~3i z`j?YDuCiH>M039H@y>T9&NktaS;$$^T3P;`8a#u2amfH^EP>sUx#qe`i8t}SJ0x#D zu48>U|Aq4uSK^2bwJDLVkFJ6~NJi30cs8i-!e*aeov0I=q}H&B#!2jju<&|S4ZWgzQrL5_c%buTiKq;l@4#CH&+~=ChT3(D4el=`O7%R#h)r^oT{(1Q%og;i@SWqB)@%rMFtLSf-(_Nvyu~ zLJHkMBZ0e}zh5fFn(aVc6IxORqc#Tv-&h z5K_|NKr3OVQ0(pgC;d(AGqiH};~7jDU0KRE<$CoFz_0LvifSmPxf|;Z(e$_WWc#gq zvOuCI`E6CFbW{NK`U}54RJ?D!Ei#iCxiuSD5%{-eziSd~)>}3AsejCSC77Hn5lUw2 zAgA>{5GCTJ!P6@8 zNdbw^Ozyx<0=E}#>OWUa{<)Io!8?42jO;mV5IS6uOD<-f z+U0H1Ld=Qg_FVXQcxa+Qav0~;HoE%jOp~n_jr+n%qdwJZoddZG?T=;2BJV((&M=-C zi?;W--~S#ts$cuTP2*%AC7TLxj++Tz< zY3v+yLMun5wW*w6A3NjD1AXbwaU)cO70lENvxr7*ViSq0t%limS=7WNRK2oe}+fy7`bhrQ7U>%5;GO#W<0Ur@d@fJ6p z2%v6s3R@;nrHHl&aF5k+}Zy9ExTIy|9_u0Kq(lYB*IlPgrxgs6Kdx5UJLKN+mM7hiW^!c!Se zi*zDS`7l`LU)}<#5XG(6{`1q|vgW&parT2Tj;5;4qzz$^uXWyLXg6#qmCD$0px%6^ zMJ;@S44X6Hht8jd6`p7i#iuMU!Oe+kG~G?`*F@Cyygya7K2xvQRGjW(*Z%=Vd~OY# zqOP$z`&r?}dpp0KMSdLCly2bvtfp z^Y;5|2i@8d4~JS`86+$-t8-@1fYL)zCd9nC2$|rM{2w))P9FX!1Jf>EIv4J|H#=vuIuyBd<3#Uao_1wC zjhRONe4VypPW?3_R!^Tu>Z#ay>g+)YgGVZ zVLeRW@Fc~?$(%Bru`i%n3mdyhwtdr}sK!)&l{5 z1icc)8I#+l8okRNBuBNB2thUC9zWgu|I}|L;lJ%+z4mYOUma5|8_Q57l|~=Qv}%^l zO@=>RFF9}*7Y?h@cuF3WNj?Q?51+lb=x{N=?ptz_&>`H&in_M_`#yH)lDPDm@sUjb z@FDRh<#q%=6DL2ZrKkgr@@IPIy4vf+Poo@`C%$(nxCFW%6ui=X<&0Q4Y{9=swNc!! z55GrMC?@bk<-fZL*x2^ea)%xE?J2@IVQ#}pJxo78fE{j+03X8 zn#$&>H~>whzIn_Ao|v0^sl$#QxH#x)J{p3R18{+~ODyJ!goi3rwW_Jizo}P*fcmOmr)-*{9dxJAoE3aruOA`hpdMv=*< zq`xW)B=B0-x+n+7aC-{GPPxTU3uQG_!JJlKq(7XN3JEJ)^lDyT=N)In|LI(OL7X4b zMKmzu)vk1_DvnXLjibQG((BpP(r=#-E!qS{TgDk^Zh|uoj{fP zH)}l$30rD^|FE5y_Y2?q*cxR^p{mEDZ0ea{cy<|6s#AZ=5aPOJ{X|ihzYZ=n(yxa0 z4~l@q73uHT;C_~R-FDKLkXFiSdaBApT)xI_+}*ogVzv?BfWMndX)vcsqBcMf`vy!7 z%S7B6AD`!x@5d9rVDV!M-(boQxEyj0_i8D%SE%@ZI|FDT9erBSVUYhZ;2M{a0gu`^ zX`GY1HA!_*B-d_6f_W+S)K-Y_K-ib*b``pt-Zm&-ZT15L1fRCitMl>Z4#G!8?>7<+ zoq+l~=_?jH(#@jWI+|ngyq`U+?=E1+37j}9>${ydK=H%8@7M=h0cI6W#O8mOk1yL1 zEW^a*@6HEwo|fIe^82R4coi?he6#_7UXDaz$@wm}E7rr=R6n!47x%AOIK3*ziZ1AJ zoER$VvEhlc#+9pCe1Epy{{ZjM_-Eo-n&n~SaQI&VDrfTm+Fa?JShljqtRY-&g%v+Ksze1evTw;H>1TEw=e;Rrg|fm1+UN!|g~6 z|H|uHdT9O-I#(uC+$@Nqy{S`A`r-877{09u_rp%LPC#YtoWvN~D+Mq0Y5*gUf(8r@ zP>KmxX+*u^LP|-uoj7$~C1X4x>koA zCCi9DN+Z}_?S&I9X(b2(eYJ(?kXk%`bisV^VAht|DvVJ^NWbbmD66H$DW%f;YkJnP z=R;}XjE51N!GpuNmLMP^qNZhpL_fJDqM|DfjMEq3sR4Je{cy)*;-MUHFXM|Asu$(w zT#^i5lN4&wX2N*bVuqIo6<1jFtFp2&c(ckgLQX@}ytD=PhenoWF*@byA-~vWF~Jym zxq(j>ofj=OrYqGFg{kUxorA;p4EMKt80Uo4eIQX49Ix{-!|c_6n4LC{~>HmX1ZJ)RsE>E6r1F*S(`O?qgcFR@)c2(sfBM5|@^rKp7*cxCe|M-6N5|-R(LD z*syY>Z=NlHIJ2C#F_QMJ7JxM-P6nPH@>8Huf9b{(jP1dk;3!h##2bwz0-w$zpz1ow4_PojF~t&&-b zi}OnmE%NPB@iRR@P&J^Av6gZRGA?8rY6p}qdn$bNLC@CB?Jm6>)=Diy%`@L4LOn0v zWKb+avTiz6lp$3V1URsE#;Vl~dD0qWrz?zrewM??Qp&nC*%uE|S~WhS=LXYPWqrX1 zu}D6WPaf(C&d5qCBEkIvOC<)!mF*^p@R`nl>p>(lGmaPzf4c** zJ4p3`oP+N*M#oT74k7o0hY&UjrS6D3a8f&3hiY_lCVdh*9g8 z;wgwsOaDbKDtNKIz(~&qQmWk}HnWlp&4omQ#Tv<>UsI@fH&Ltd)Qw_P78!-rOG5mG ziAL(G(#2f@1GGC+mR4aEP@1e(9fA>q6#dar06Byz_SY^&lfKxl5!;++rJbj~MofN{zQaw9D zRqab654m*4RwY32GVs3DJ8v6l31&g|= zC{Ujb#39!0Dt`=cu1k~$$JIVkf($S#a}bxpSok&AyZ34*z5Zh{=0=I#x?B$x@pqu! z_I@uoa0Gz_&2ouCLluc;ooDbipnVNQ=+00I;^yKG(S0Um-*@4~(kIhD(*K3Iu89@b zuSUN_;bbch-rXo<*9w{pbNq4zrc&L$p|E>tJ;1s#-o&jyDD751Agk`;x zE16dMBytq_`&m|;U{o0HqdF*O49#)i(EuXW0yc|*9Q0j4Ja@_gK$1bWvV#%(VjX=T zPjpl|w?Qx&Kb#|D$vkLfh;f{Oo6OYXx2|mgsQ3J17V!LTx~cZ1lPJ{-RBsP)F0U-b z_ptBIbT^hd<^AAta+yPT2L7QxU!v(9fBzSN*FXKWH5-@gC>fRMhyD?FFbOItaipK# z?h%Nwsz=v+;4%v$B1?Xa zLf~H6$g>rn>9>($Hle!o6RksnTn2&WW>kweN>NKgXvO79v$Qo0GWzYBwVW(Z7alOb ziu8I-oOVa^4o7Om&_Cz8Ru;#q6!%_PH5rK}!n^aFECHj3!0*436?hN3{^75zT>Sw< zQB!?R-45{4T2f~27jHToI{L4rxEh}{i`$wLEP4OdZA#M2?cLL? z=W|giwcdt3nZK;Dw@7rTdamri(r8{M=MRIG!ooP4h=T#3b%z>F^GD^JpPtNl43eD= zB`D?2Zy);&_3@6DFgdr_m-}e?gWI80uNJyud;P+t-lt|M0Qy-~vgroa8j@QRuHnx+ z&e)c`r57A56s5D?>!;q%5#RONj8rBm)X%%#ccmu`Ve@=WtQ9VU>EsiwoR9wTvPNuk89;kRI?-%JGO!PJ7psC(iP zEABGdxG z?{V-=wa@Y-$y&qjvjf@Fvl#08viWI4e5Npti|~441WqRH&}z>y!T1U5WNXPC=U=PF z37V%UUd+Yqmn$x(Hs(LNk@hL#Esr}`pXPYcSAnZ@d*7U@s(&P`djxMV;O{L z1ln6QmDAdeF#KNU{O26;6gYBcx}_cwHqKw@y7*vK>>=Rd-NHJ=*XWyyuW8I)FK&WD%OX!LB+PM3bV| zWL)Q1@kXjg;zgMAl@$mGEbfOmRyI8QaHZN+HiBYSr}T@Z z8ag{OTp7UG=^Nl+Ldr8Y0L>nU;a;~)A(7te@*pO5n~ zx&5%&W4W&j*6EQJ{M!44NJpl!G32`*e9~0!(#-8b98m8!`{K);PY)uE&1_ahp74@V zZWFPAGnZfVG9T!5(Ti#Hl@P}nykaifwwW_vUQ8%)R0$>F=_py;A6Is74 z3Mk zUaxv~#napXJ4zf(x_hXcnZuqB)ML}^Z;oN-rNDZPa1V%CB2}5no%!y%@5VaqfM6xa zXcAF0iGxt$R{9{et{55Z9Z`4d1)`TX&Lc;lhV}Sv(|@s1!+^kJ;;b{zK1r*VER2X& z`e<`t{@?0WXX8_MlAG|Q6|jw?_p1fGuecgOoic20#8h-tcZZT$)FV>#Ck#smn`IVX z+;FYqB95t+EuV~Fm4_AYacQLg(-)%Ey`a|8l7`q$`;E`|TkB0P~^)s0y zh#l8_qnB%xO*D)D6MTH>V&FxpPfmBWVPiY}-Ys8Gvl+~NbM0HEruQ{!2bp--BJy*v zEO_A=tk*~Zr!>7{@VtZ9JM{I%snc`r}^vs=QR@_AD1KuYnLFlph0|LM?er#6 zF{YN}5%(2l0gN;7W`{L5c)D+6nD*|@?GH1OPJa%A*kde+L>`v~79k<1F2o7;f}S{9 z)U$T^79TL*UJbRSjJNwU0=pbxh zP)2$fWst1~$gAoyY{CZhu3HL9`fT7@FkBIG(acPsFshjZj=ZVzW*fb;S=+>P<-oMo zs!(Rs;Fw4|v7eO|19|+6#M<|!U^W?tqwoBstvuAtE>;**oPmK^`Z3 zF*YKKo-TeS(_Z-w0|}F<0((sq_CC08Ay}oeYN#K`i4WPQ8cD&GdOw_gAG}T)Gif}v zeE9^l$DTkzYdrD}J76U=K+?g|H&m+xF`5c2Yx>2uT&Dw&7r0akU-eg00xi^=NzZ+{Cf_iDap3r}Kw$J!j?le6-C1XY|042F6> zM*1NY(sin8gKk`p@1|07uuSkz&OUtWDpx4jlJba8U(kEC@Zdk?0$Z~XTN|BRdo8p8 zQ7#h2Fx0>F3~sb1lk>>cqm3wRqNWh9C0dfGIZ*Q|`R-h-v0WcfO(@7j`nM!6i9sE;S66 zGJ^y4oa;l?()Au)F)k(M%Iy5-G-T8EsU5+K* zS;K{CCcnFfg6T(mdSy2`I}gJ>WC5FK;mfKL7p6*TuuPr^pr38QU-zIZu)?)M_&zO$ zj%~!9Y>6pYB3rf@EZDWY6Y{#KbTY`%GheezGTVc8hRFw9_rkAc@bOxB*h7m?xq?!K ze5sNO2MsUOrqki19+S87jSd(^;fA>K%RS_r$gHrtH$&~UMjMk!TgUynp#;FG@=2yU z*{~$_w_@>iSzA(+ftU+?owWrYK0naeRW~1@czHIG*)(4yQr&_4Zf<S^Y6`ZCxu!C2qH+JbX1M& zWa}9WVcx;wK;c|cSh(3k!B0Mr68UX51o`*nvBgt0la|V~?Q7 z1oyo1K*!+Po2bVViGtKUfVuo#7!6(>3?KrX$;TWnB~N)xqM2D<^sRpf}=9?r78s(yewxAfm5%QC9m zhMKg#1EVjKLmWv-s&1Det+zJ+w| zpr*Y6M!LEat-hB`>P(Y?#zkEM17}U+eez^WjIILyP4`Qor^ z>LuS~^YkjcpV~n~`W-g)`bNZn(rj_W-Hx%#@LT~H47e#Ve2suVBJ7Z$qaC8rbe`%Mlc~KsE<7guk)klP}7hW z`e&vFuUVlXEbNcmElewi_vq^_Ys#7I*L@Zv{0f`7NfZUS-|LsLTEL zHb{*G%9@sbKVEXo z@0-pOvRF|^@Ni~A)PA@)R{NMCFOGsa}k zy_LB-GKVM@F`{+k>Rr5TxEK03bOkMjhOsmU_TA0xg7;<}JvjV{(7M*G1wkpsgohqM-Dk^@QFSJWmNKMtxnRLWa=f+PW0_|)` zV$uU}(>r)1i~AIIPH_ zWl72*+q_b$q7m>HoB`Kq4bb6iEyn{uxAQD~W|L`9W|K)0R}>l`7gLumO+ErDEsj{H z5u8}E)MC~gwjg8nGRht&cDQ0BI_&CW(?Mt>j}#%RSe*k~D)UP(43hDjN2#=ZV8#U# z7jd)>#(pbo{142ZVVcbfzI1YgH5fknqQ2-TsvS=fc2Dl8#x??G^MFKzKj{LPgC>?#9_8cm_ht zD&opDzrmeau3D>-A7x?`a&51~ye<`kL*H3Vw&cqT@jB+%^xSH0dh#C@0lLc+8_6k^ z&KsT20!-Sp5#{T3kES=sHEk z^D;1GjwioD9K}2#zw`%kauZa824gf=wOF0ZGx$jKCaPl%Iy!euZHu>RSTa)W&g@pskZ2#_=)#c9%Pz8IanF{h^>r)c-1F8#X7$d zz?@t0the4Ji&X*Mx+4pHVDW*vm3oe3YIO%mwsbKJ0@;1I00Nb{37X?ZzzO=QL_&$W zEhM8(k>{ceK@swsp%eN&OoA+}g1M~zR~srS`^u7xKROs~-ux|Jj$+#fQ$uPB>#(0A zl;@N^uf>xL)@S6uB5uAF&368>Y2XC4IVv|1)+(?EAafEFriHh9_IRMSM+wtkYvZrL z-ONW8e3u%QwGf()1cM*58j5O_qRPw^iZ zqp6e}>Y#(tRKiYdE|LbTwz$HBRpc2Avn{RN$_7hn4s{0+=_aX$6!{Q}ls!|VJYGku zlcKEqTcb&wc2@q-EZv`@!HC>UWyUL~Cz!4G=;{ivTqOxorHD%Wp#0x(q^n56>Za4P zm*p~s1d=WK#TB7f&!T@n6I$+9O92Bikhe2rgiA>0fX^yeTcF`k0G=9Xsi*{;fk1KS!gcZu$W-% zPcir-ON~ZZ9jn*g+K;&iqqZ-To^nue$Y-tF=%uD&`33}EE0@qwg8n)dbe0LNt}aLQ zDxH0#F1+_d=3870bn3Ta*$OZH{*J=akcSHTp7mUHGYT6g!r6;8mt6fD0Y1r?z)a5H z*)P+Qnb`*G2w)145Ms_R&uTI&PK<-OR?Aaeh3V#PlDBDsNN07hdluNE z>Q?E*HK(qd39S)oqPhVZnlFkPI+xo$ogd~tq3B;pcP*^0lAN2i8=mC)np)rDbF$iX z@Zx)hB!!AdpXVuZ_|Kltd3`SSs|hF-6h3d;TwJgv+Kf%#7c;A_?mcCDYda@ZV>U3V z#K-Ava?Qdg?q!%hzV|w+9s2sHIaA`kk+{C_=au4jI|FKPdY1R&dw+1&3^{6@HoPa- z&Dj}0u$sqBluax(!RogrOOq`*i2?47a+iY4D}%=)!>1&-{9`rDYto6{gngclonmA0 z8yV|ag9#ydiGGM~SorS=+Hrd6wePG80r^eA-zT$Ji%L8z&#K%fMKjjAh~AOnba<#n zM5v9cq@c}WxRiYObclyw1U0{t`P)DCM)}f`YCeYPk@Ka8u#^%13FNqOjgQMZDNo>k z360*Bu5&d&Z7ullBdHS}2hW&jQE;@$DeD}6R8Hw9aJK)@W`?_oe%iHy7I=IwU9Ss1 z7QlQ&3^QVawy%f2=aSCSaSKZG_{NZB20x?2-1iraRdC34=ya^)R6-1*mBCU`2` z;Z+&Q$zx9VpurtUjw!KYO%*mYw85MlbhNix=1bVV?jq5YSJ+tZxE&+Gw(vn`Gk-7G zK08=KJ6{(o3}xd;`R5bs<-y^taLg@(EGsPi>4*B_K!&jabMoZXyYq_) zHd}`)YG$CSx+C@EpAr+1D`5HaA<$7QiuF*?Ck;%S z>4O9`%+-0^C|l-XgwtUk6bGF9R1WS6U+Y3RnVvKe-3Ts8;FE<<&CCJ?f*mf}Qau)3 zUvE2gvfQWMrY3jKQV1?2tAeFcIz>v?iNi;G26wVJsvmJ}Z&!g1%o zRso~7Y6Gk_nlcaZthn@8fS8?WW}@jrA9o$Np!<|amfqcQ@H1Xye!GbhG738SGdfjy zRA7<|`-Xq|bN7Ighd$CKLc zb1%c+t%W}&q5WVYbl2j&5O>&%BEeefk@hKT zO`8bASF-7SkHoK(DNs49?HnKLJvgO-iM({P^h+{r4ssQCC#Ng0kMXnWy$mbh-!E<& zu%$8YRzqC>)gJ?Kbc^&wexfwYztxg!0kS+s{SLIW>A&Yx&Q&g4&316OM{HHdJUM5a zn#xuzwMCvho_-r*@#=5>5KQ!y`LHwA$_I%pk>BBptq*^*G#C|MvN-&Si84>1sqd^& z)J!hprPylFZC>3daWBe+bXRRbMN}ZpMnv(CzA67^gps7MTg5(@y2-dT{TMnLjg9a= z%R5Azre{t}etDguB68RBD@>)QPcm~2wM)a!ZtWHxi!`~L5H=E?%R8z~BY1cR+Tg|I z7RD=Txo};#ljkR9OAs*sAgFpP%|;}Bt^=H1v+SvdD>9^fgE0feJomrbF)5M;EM>Qa*IZ>_^}Z1}yoD=#adWehMk3Ad>z{LO(pf~x zuc6C={-@IaDauM~eUU9=630Xm{J6z7ub1G0op)ej4OKW~CvY8W^~GrPChW_soOKBkd;d?8^vJ@LE4BV59l`eV8v^Si1&# zJ27|rMd~Dg>-%pXwyQamvPjp9hV3&aaa6$3g4gZB-xTbfxn|u8$(eQ&yp^^%Y+A<= zUa!Vd7rXz{ST9J=U#OjfczJVz0P44fY_G=FPIBfnYd^{Ta8tq9Lz2lytZEZhk z&gYsQQOBMeVE<<4&3UUHU&1Z=%YApVce)%ntV_mRmrMRTQ~w$UGqe=o`!B@XChq## z(6;(Ck=*>&s{7IqK{IUG!RfftiD_b=S|C~1OhoOPOzJo3qRNNZcwY10j_bd+$Xqc) zv`#NcdV}_C<%apOaaZ(O@RI1`4~8Gm%6e6n$JJ|}9;4(saeHN4k>E!HbOMPwzrp~L z+N|L&4kS@|nXPP<3I6H6-@Cbqr{NZ)5w&$Tt}0B#So;%FlHZT+o1o2a1x`mO5Qx5J z<;;!R>(?!&LS=R62VCaQYRUAde}QL!_uDnNYlmt)`GEFRovv>u zykxQNvmj2gD`LQmi7G;P$ffV@z zApi#SjS^$)H|^xx6J214U)7^G%OhD9LErDD4s-9q=!nn))uR^mDS$eyXb6|28>K)8 zdflVLuQQX0C6|uNg#Dob=8A0dY{$S+ax!%KeP9)!in@`*sHyAS^9&5Uf?l}TSJX@w z>63idUvXd=a$r+b1XbG_`+hnCYa=s;eW-O`0L9(5AL{LZp<>4W1N`cmyk#Zht(ub(~g10Db;Y{!^TrybF#;|*Dn0JP(%o69Hkkq!sRS%GQ%(q_|5jA^x zoT7WZ3ZfBPVe@m_Q=uo|oid(PX-7+-X)}M!wjMl3tzG@7OU=WON(J|Y3tfsw2RAvt zIv*U1OV5n77YI5YNkkYZ2HvZ1TfA~|g8d5}O-6oFsoYW`MmOm4g^#1_0E|q*R zd$ULd+8BeCXIS=~3W*{5%*N1PETB}S1g1lkxWd5ODf2(%PiU8 zcUBjgjK)G+Df0BJCF2K4vkvV}1ri&x8-CGVq`>B?J&n`?cB)taL<@Rzu#3pzhLcx6siMdS0_1xWgoSXq!sHdTnIdPU)00& za5IK{xoVHkD1rR%FIl(PQht&`%v8xG#faXH#?~*exWJDAAy)T-pc?A^9jaeIB;djx0y#;``DV! zx#8+FN3%z>1QDn4#%iro`_zP%s)Ya2A*Gj_)(-b8Fv(PQ?)-VXLgIFjgP)9_a!%cB zgU#a3aO+@kZN}9W0Z;3XIK*&E)8NbC5t;QuHAM!qY)Tew+Gz&!brvs^`97smtXwv3 zrBebYH{!qKwl&a_d$e7u%o}0$a$##b%b&k(SIG*h zv1;9O!$zc+Zx*P2-sYc%Ik55|U1GaW9Ap}|!GLBwwaN^*lm96val$~2&w8(id`2-4 z84>qxjV5Scm(e2z2n5s<8`?}qyl(5h((<|b)L92iW8kP(y%8#vG*5|iA9j0eHF?+F z?iDJnqJ2tFC~0rT6F);LNqc3%Lle&gH!!sGoYQqWb%#UXOTcokul#c6=ma#LOrF}q z?x^({N6_HNOO@yA{Piy_8YOb^6c>2OCyk;c-HT--LTpa~=Kg+;7VOGWBc`$V(C2a@ z)mp72rc{7}g%#5DGJiye)iZj1Km$K>Kehbd5vZ}Y`wELXtP+du4CMHA0eXSJ$}K zb%#y%*IpGunO9uvy0*yX+9NI{BU~d|cCM0DAv;o}-~Igs_uj|7=brO?FR2WKZ6y(o*Nd70$)S_;+MAn+EdIRGZBSl zMapK?NcI1lKDrC_b5xrum)zH~d$dNdN3o+OfRzfqq3AiQ%l?z)v`xw$K*udZ`i{6K zHL^~xGQNTD2r|D@tmT!SGT#z0@@EdGD$5+M40~joAsW~qMk9=B!+Cj}qsib~+;*}W zxjU&4RHduEWAT2uy+-R;ec3APl0T$cHSveCsi^?_J4blO+KgtWGO+x_;uM4IF2Ao& zWqYFKU&(fcbl!FxA=VpNvZ;}wWr1qy?X2Zxnz-|QX{#Cb!S`owiCXxgLrGARz9AXX zZ|B`NB7-iZuiLt|xT|De?&%5_c`k*`8Xw&pthU!NKP0E-ex$bUF}91uG`I|Vq)TUq z)`a=1L7qU^wsQf-)30qHH{$&@iYgg5#oZ%>Y#3~t?}x9~Ve1mh1+5FYiNy6g?Cqdj zxq`Zbxc&7)`!t{NdJR`-KT&_vD$C~9soylPE^B{Yia?QLPdaTy@gR0(56N;;ZWgEf z*HWH`4`8i{n|<`x4CxUoz$Q`hfpw0kA=p4A)_9L#;-k;kh5@88%GfAZ3g|2-5OQ!b z=pcftL;0|$&q~&R7B-lxcs|=^cB}pLBnU;pNbwXLD#>Fx9|xfhCIm_iWjkAdyYf=APqR(#@A0Z0wUBL40U8*=F%O}FR^@b5H468mJR?`lIOzNM9{`m$sjhjpuW zU)AKovX+sg&iR16%cE9(!w=OH6JHV{JqQ?gAjhd~1LK7wjzlI2x9NqVTB0FV9;&JH zu33607{q(KQ}g1bPa*2L7~Wzvr*5CDXP{h1T=2-Lupz{j1qOpTc$bKR?#|tu^?AGX z#;#T~Zp2V0&HIDZJ@$9mW!9PeWtc}&H0s}<+DH%{7sbB6uMXwnjY9+>qta63fq7+H z&dD9W2KmeFIL?m8A*T|OtCGCZ2*l39$pGmEyo}|}!vhZiq~MP|9BI}C{K5tCLb@_w zMqr*!I{$HYnAANwDL$~nRs3^NKlio?Iy;-Bul+CZMcIAS@cHbUg7j2zs>3dtnzzk! z^Hv+bu?U)J+er1Tm-?^l1{qhCFr{T@%v7^bcjwaJ1L|=8MrVY9)f>NQUf1`xlZ)fT zN`)}Uh;8AUkekhF`0bkvagwXwm8G4c0Mt&6f=00$0&!81z1ci8?C}Bq!AKbL!#7%~ z4h>CvB#In`hhw#WQ5$Jv_{yMe^_&J%=6jNZ9k)0~ z-b<(na@Hu7?ABIWN{BZC1~%pwYp*ua#;29rgB5acwcmXHla51_Flk z7K}J{bN$VqF4CZ$+0b0yz)y0WD$?Tft^f{&1D^Ny_!7BEe&M<3jD)(YwbS{p8WV$> z0_U3By1$+se11ZOTCx`wJD`$Xw>lb94VOF@*k5>Y-DTXG5-5G_3Fy2nL201cwk4;Am-fvH zPZR^4h}4NXcPAotGVNA489ss0zhh-?1XXq`pbQ1NgcX+f%2bCp8!Kj||*Bh*-y{iFBefH_!K#Q3qO zNa0P##%jS@=Qn;KLi-hew!+wM+5F8+f(tE}-h-VqNzawd6O2HpnNX-quHeJsz`RCn zUA=kL3DIl1b56Ai7{&!9h{d^1=GV!wk|M>_v1>GW&a zmc`2_-xjFZU{Vlmyom^NwNdWPd#JINOx=wM?xSlelyvCHpRb=1v&5L&ZBpnTmi52O z9nV3U1|VMx`utGz^h>Tz=8~4(R6o--x$q~BNxdq5Wba4Vdf^@a)wsym*m#C+3;gS3 z!o|K2k(RB$G+kp)^m8a^{v6?|+eZrI7GIb-b;TH`p+>hIx>V`QseNe9Gt-|gXnBp! zw0yTgSyM+&a~euu{qWyn-c-a9oINxsA!(s)Qnk6Zr@jZJ$r+n#eSEJ!$V|V#7hw4LV(J!W zdKNm#bqrNAdX1s+2hK+?uq4uhdgm#`K2oD`D{CU4QMa}F=lFaAOxE2VAQMJ&W9Z`Z zX0l?xFZcw6;Ik|Wc>JdNJKMBP4#;Y~HMXOJzELhl+0kpy5Qhx~=5r&~*v?l=-dxOS9_X`!W??1GSWj`u{*{gXkgzSwtIGzX-E7}G($fibWh z8?M%Lx7`sGC{5g%-@pX~5jz-+hE}iv!7pUrBeLN0tl;axjs$_)VK&SIU!2G(F9pbC zX4g4V^OU+!TH*t;KVGIL#gAEgZ2vM>U6Gs>eE5%M{OXU@y5=We<-DD*N9+m6o=N?% z{H+xXO1xSS{Xwm)hSoT(*g0vG3<1E=9LC)lH~08OU9t<`t(tiPt{gfTKB9dqdF!IqKT9JJ{3) zTnoyg7U0PDi)>TKybuwwN_ws+*L`(!2W!JGXQ&RGTTU&Ab~I0A_es-RWDE zi9cw0$8hC?s2y9x9@1ypMY~--{=*F!`<$zr)M9yyiJZmf3z3ETKRGd$_$IlobK}+e z$(I)rIz02P{l9Ii-Ko6@X%oSJG^CIY>DR$OFmp8c4Zx*M~bjn|lNjaIy!vy zSt<6ppG&CQ$Bw{W!!@ct>7$m>2b|zN>uQ*cA4%50L|~UiGpGyxkEZl+6)TO<2%xqQ zs%v2jbce#NQfeQjgBi5XgH@`8P9ERqrClnY7mZS5Q-mP2{Sxf`Prj;b6}F{sONIF?x2%-3Pox z-OiK919E_oXKiSTta4_$rXIafVvzM*rHBMrn9iI# zY5A-Xpw_)anVV&|!1f!ltgX~Oe#Oaduyo8Y!_C?ioPE}%fWQ0YfvY(?xW*gyN;hhU z3|6Rc{M|#@Dj`nx__^Ay#Ts5UY;x?(Rk!F6J!>%_4jncy4*N%w_auz$_)bsrycJSi zHNlp8jcdPEESpjpGqAyb>lWV|Ud!5X)q^J==bGlYzb4A)?)7iPbQVRoU$%J5AoRI< zkFV&4?W-%vl%SJmd_@6Q-iMlw7_j+a*l6v~RYg1Bjb2id3p6!+(+%g8bBZ0O8L0lH zGS2hoy#S5Q+_Bu+#e|Bxpm&x*s_ZwdfIdxgCY$?d z^ykDQ#xk3`n+a!kw!Ku_xgCkLoOz$OvPG0(&p5q}f}^^QT)9YvW@W!kBxPG(@l_jB z5727kvp4MS4>9Lx9Q?k2^%YEK+9RN#y@2BVY^g3URI&?@>&v}-^sasbIkB{)-0(M2 z@QU}23^T~fb*@kJ#|zK@9{H0DujIAr&FAl&O<~^~`!*V$8%@T%c`oq%BRbbNG9^!{ zBz}tx za@cHkkY#M;!`8I9gOABCf5{N8!v${sZCPK9485~4DB;;7sg%EY;S%7y9_k4*W@hW5 z#-PGtB&Z*WhntJ+DeVNC-QZRZD|)1ryk6|n52ijF$tSxHzt*a)lYU!V;dYx^0YG)_ zUc9@a`(K`+l_&SnKbp6fl%zt)6^qZJMPKGzOkB?}o%riW`K}xk*mWll%aq-=)MhWE z$&pZNwybqHJ|HDi7IqE*P<>bh&Ww>N4FtuCST>qMQc6T6@K(X!4q!! zKr%ap?mV-WSG=}+A^MKM-dIM}{f(o)#h|w{gs+A|#WRYt!gBLnhihhuMO~dHn5qyX z1^oru|Mz3t8|2I@cvTI{YdOP-7ygfV{sSf~zDAQM4}~`g>|Rp!qdcQ+XL^W}WzejI zJJKdam-o2lo4)z>_7n$36 zW7=2B7~TyV{dQ*J>hUPJs9=LOrAZ>Her_34V)74HbHBp4GSFA_F?0b*OAT07 zg)cs|uu9p}OodF*#nX1#4(pn?q#bgOp)q|nlBtb~R6r<=rE{|Dy{_!HJbd!1mDkUf z$Ug2j250G7kFtXBF|=z$E1^kiy5 z)>HF9Gm}axQN@?v4MxwVD4e2Bg3}kw%AI|m>LHK?J^i#WYUTatJQ#S6Zi3XOAz^V@7&`jRI`zyB7CmDRz&8nRgoPZQEf z7miuR2o=bS9)P#EcVq^247%aj3USoulHU1^C<+NUi%|n3GE`L4UKt+Ar#f=}UzGods^&2_HUKLEGE%2MWLF+0ZHQTFKLY4|qj=ipp(x>%WJ=(4MG zfkLaI1N4n`10D4e9Qg7dytNzSB2d$zJ1vF;ybOsSP@5Iz7(n&Q$H{kN0{may71R1$ z5_=l{x8fhoB_6zrhXgLmlV*mtZz%=Pzkcx+mMw5(w&L+K`Nk@lRVhybwR?KikKD2;tF>D4xH|q!RP{#FTKP{n4QQ^Cs3W?y0YIU-|c^NOMSOm0NwmaMsp)? zB&UV1ow(TRYhfWTmC!9Uom{tNuEx)=HXxxO3@wDPm26LQ&MW!^*2>opWRC{KZf41U z@#(I5z(q~Yc}jOqC9iF_?K!&HHqw*U?vKj`h9l+Ls3TPq8nNvUsk zQCmq_CTi-z{3xqf4FTa#rOSQ8&;<3#+_o?KZ`C^CTU?54?u^wqOiFgm;0{~t*O4jj znaCV%?e-D<`%8*UH$Dba#2%B}-_^)hWkwLo64^ez2|sI>2f5wPtoWgk-3O8n2NSoV z+&VslHej@)+{VC+54SAjbIVksJ-_T*l6p@amc%we26Zzq4MjJUb} zU;?Q5%Q=Ss%0gZ9TD1JE8+6p4O$sIRz5bSHw})eJ08>PrV1{4zOsFmDV_DhjT%Bbu=Rw_<;j>X$Qr7wJ3L*5nS_kpD0*;maV58XlPh%lbOLN?KkW$ z_`^bVSeD!9F19`2_$8^Fk8_?_|1xTY^$ompI~8K|(ZS}|li1!+sa8CqKllxr$V8n! zJ`j(kV^wwgke$t`-R8GdGo{pY$&78L@ONe^tF-A|y_gIIk2+&x%`e8NtI_g1VGCd% zNl-(mkhjK}Thf#rr_J%|aH@@oM^W*+!DwX{Jz%1c85jVEH!mPTCX#eF%Jy*0-_~#qx1kxgUG;evqoX=wlIVF0nfFM%YR^(0 zm4tX)t^})UesMr6@>w-lVR5N4C`Y#V-p&ChB6~;;gO${BPSR5v52}jW^X^)Fo?KVq>kWel@!0=fnDe58aK8O@(@ zO-IX_V-==(8OoOI3%FAoEvP1+vHEnRLJlFg{&ZY0D=sd*MR6crZNM(JT)t{`+})KW zP=hU-`z73_24;iK!dwLin6PN8m^hy&FSw1nO8wXhl}DR~Ec_gox~8h#=GMSH9jZ1E z-}{E$hL^Sa>v*qhvInQjq3SKE`WIMmix~?B2lH$S=PUR4G3*~UENvq2WFCldcliVh z2HU@7IW^Y`f#x(>6d-FVsv=yG8Sx(G$+}v(ZNTf|@`A(bNH`>Jt*quFuQ>BsR*jjo zZ!9CEbw(hKt(YaOjtp!N`AbW!5MONn35B&Z_n3;oO8*9>`CjgH2FH1bJLhB zv|G^v28=^m8PW^M1&o3p@lb&9@hb6pMj7M-MEb~SO%ClhoR2lQhN0U1i;@DQ{^`uP zvf~i0D4ee*hdY#=d9XTqdal?|-nu(7RMQovW_v(iG9nZ5#NUpwvQos!Cyp>;Vc~;~ z^N-fF0bHI*&!>Yp+CHZxkrnot!^IL-;v6&uDs3pB>Z9qbAHnUcbX>U0Eduj>V1Lxz zICjH<`^!Ks+U@6?IH6~M0x&x`eEno(EBIu9Y~^Ed+bu`+oi){Y)gLE^3^722XqFU& zlQFN{&(ObDu}oSl^oL9!?EZ^K3uJ~mkn(AW*JXJ#BW`7V`|k&_Rr3^9-pR^zJ|QHh z=jPEM;j-THq#TxkOVGLp;elAOcnr1%#wRI1-*!Y`Cg0|+!<57y*49F2<@QT!ujJ6L zgAZ;oy7~($p{AQb;HaE$(3(;UMsYu}YV@wMxkQ?kMy!b-Iy+TLl4vN=DcqW<5O=d~ zF!4@VfBQgMJg<{K?Y6~lvD}DToO0%U=P6L^9&t36*->1^3!Y&orPyT{m@5ggZ=V~@MB=-vL#(;DoEmUeysw5Cp+j+tB_n{`e3|Cr)YxdP zV0L`G?Tm2GM!AgyhDc?IRz+tMmwBZHrSw{5F$fKwWm;pP3Y?aw4m(~JTA~eFOZa{sTOy$?P zQggkBov@E>pl=qm^@hgE1jbDed>EC=tv84gG4?Va6IN0QPET6x97whCxyg#^&w!;v zv|gGs9`BP0-T28^P9JCL3ToRp?Hi8H>EzdMFGJ-3{;PvrNK^1jXfo-lyy`xs4f zrSnmNPaE5oP)3zab24GaGKuJu*MDlV-vGXDf?$wr->_iA0V);d&Bu-*4~^m~);*JB zue2qNVP=e!jP}Frg5OEIUZoM$@4Luw_LI$=TdKIH*NlU+SADH}L#1(CHMCt;cl=dT zts4kZ>D{E;?XbEmH!rVG{cl?1hZ6yn31j||QCW#svQi}8)6*J*D4~X66cRU*$lGjf z*YV?xxVC9jK->eF$#3~Ql-g;6eP^sjm*g}rgfRC0Ljr1Jp4r~Yw9dm<`Gz_IWv;er z`@EeXm@fA@cgUFGwxg*eu1&KfV`y(op+@bf%pwCx-27HZG>x=@ zeRR$gX5i&hyB+G_Q}an8!{fdv5aYk60O)RYr`A9eP(Q6`o7$hSE!)0NJIKA7=m zIX&-D=_MM*xl&3wgKzDV|c_>0MQQ~JXm~YI2 z3k0V8ZX)vrWkEkO$kX)_(F4guJ`h>n_Ea8w7oY7%1%XcW`53k5$*g5)ln2WUWTpfZtRYoe#4pqNnb$rBEsni)xSlBgvVC`F+yMph9iPn!qVlr7Ugdd^ zjBzOAs_OBP#z!m9%pe}UH3MO;JVLz4SUj3mj@+N55tEUR3UDkob)1-=-BH!n&3*YO z_k|qThOxT;zx;P93Hl#RO=c91(^a$$^6WUNYd zP#8&csj+yFE~9z6M{Sr83Z#dOt2-h;DrNXv@ z%F+zqiBs5@ioyvYJF!voqrk?^Rx+!>X<&#OeAjn?aVd(*VUp=&N}U!A>;_vVx0n%x zk)_-xdw&ZmX8Ss%#7vNu@JlCcroFeXCV%QjkR9BIKfH)YV|$`J{U~7>98UNCm~5?; z!hf3nuvI~PP^-g7ZUDg4$7+vZF;5zBD{?x)UUmtV4ottO(7le9 zp^rWp$?}%va1_~uSq&qMJC zT5(dwW@|o60xKn^?PAwAOm>Y{vO2I|2M%h*CNKH3ZMs9(5o%vhp9>n?Zq=48q<85m z9&e^{W85-ewK`>7q_s^lZ#_2*!CPt+bYk0X1odVPnCq3B-^lXd#lPB;bMCI6e+~&N z*DM*4^L6u*3?N6Ht~LzeBW*S*AP5tZ0p{~l2x3!JmC1&d;|{wqkPBULSlz)nZA}M$ z+aEFuFxpn#>@_k2k?OmmXuIB)eslCu>)9Sa%qNQs{8go5*BYXSc?Gf5QKFZCL-^*6 zGjPp}@Hn4rfZes($Dw+kllmW@f5I8=G!3>AH!X$x&VkEH9LpJy<@z-B8BXsQ3K?=; zVsE5lmk|U~2q&|T_1q(BGm{IT<8p&0aIE%=grow(lvAC!ZE*9fU_yMM{iecv#rqp! zWc0x25~H;^^m>ZP68qbqpk_IXRgQI9OIkBT)!_uwLgY1gg2B-^qa6K@Z(*k?P2L;} z)*mGHtD-p(CH3K=8d0kayn#Tsg}S=Ij*0`$mzh(3eJ}-v^0i-Xn2Kr(7@=B|I%jjC z)||lA;PmQ1W)>a(D-da7M5|Z=^`}K&kGu?uiA`UaCh^Ki#Z~$$w_IbVj*79bhyT$y zrb^5Db>0M%(F?!ao!)2$;iU^cX-(Y=boJ`~Q2q6Z$4Fx;ae9ELJ8` z`F@yWra014WTI&B=G|_aJ1{o2*NQqLQPF3;->W0B(W>ZS1t>&> z<;;#CX%5vZ`_>tJTWxLDQ;hS`8~u;ZAI+I@j=(>7zn**(C29PV)*UrW_wnI8ZD}aI z=BGb~>XRY%^;LdW7;T@EC&^T!^r4p8*xTpQ6<_UWbDpWj5ii*TsrE4UJm#bX35=Ts zcW_owRwXy>wsT3;mn(#uFpAGjfOOH(uiyl|ON%<999CMrZw^MRvhLVz{`6C|3UMlo zYdIGsk7oXsD;PFD3S!JNy*fXhRmBZ>5KjN_oGL8P%zftQu)rAzDl}IIJQD6NJuhxk z1(-B$bAQrg;g1lnQ#i4%Jh3@>5R*;d(kEcRAJP&-?eu8PVSaZ`AODsQHB=iGu}7+@4%NicUCO!_+2om9HiG(ZlgN6BRF zgK|5-9M+-w!9SXj=jyA>x2z&9i-YcsBggGLIv$w4;Yl!T8IH(!t~(Jw|2u;Rmbz7x zKey}E9n3m8`IhC^-^J3rfc>=HXU$>=Wbb~Le&kE%Ev3q6KnI(~^zV?4f*he# zYqxXi00s=>`1Cw#6$f<~9($mqb%qN1vsKVetMp8nF!_z@o!g^E^|m~i{TZfkJpB~S zT+O&2%M-CGS$6ln&C`e`{?J>BWgMQrYIb|3D$5}|`*qdBH3r!NC;zQUW8$sUhT0>*ug8}niqMT|gDU!K z7F)8Yix^%2>W$*lmFm-fG=V*M8eI!(6#UY4Mp_1ozlLgaRvPz4`01;JUjWo3e-z7C z)IU>NdRV#ilU&j)jXRQ$z}-6;$qrarQkV{rhpQCrEM2_*N24g8t!bQmTV6-@CT3?i zV3Zb#o!@nL!5h+woqPDxoWW!Xe$tSJHg@k)(-fcci_C3M#8%w4C z|8uspx^>|6=H?B`qXJ+Ky;6HW=%cT`E8GP`1`-@rAz{DN5eRaei`3>!gy?ZA#g3Qa zFGE34S8EccF07+cg8nMyS$h@F%iZ02R_(9cK_|rxtE7O%R=8*BsdB~<-7TwI>s$|uqLiMNM z=Jo9NUz|-MO~#47fVt9ZZ1&^cc^>pxoj28a=R@fC=1SUJtPnt@tW0-D-etbUXQk=h z54bL3F82XYrqH5*>C<(1SFZt(QRh@4S93~*L%eJIdF@*Kv}vA>DE~Gb*(qvxI}c5K zomR%vsV{0l&pW17Uwik?5CCMi1?jcSbjLoiG7`tPXQAFloVNUV&LhRVn;Ad(n&NMZ zroB@gQv;<`g7v*w8q>I#RS}TceP5T={|1SzA^M}aOcrRm#E z)On*RhY!DR(XU_RXH+*Rx!)gmzh!>_z+;1tGl1$>v@z8tISY7Hm<#%z_eIz?6@K>) zxB9i0kfIvf-)oz~YM)Uux}2iMf149Q%4XE5Hja7er9}$t_{@8%Pag^fZRY{z;ED1k z)p}QYEu;w(iNMtoTkF~;qa-w1LDWC$cv)(=h6^1=WApGZEVdRHxn3ucTURy+j6m45 zCBNgQ%*RB_4}O5Cx0cJhVcI=e z+x%IQJ`BpCna#gCjMoYsp6b}uR$^LgNn+F!TPSwt5X!611#LT;(tG~8Yyq1Mqx+U6^gh=iSE?x6tjOjq zc`hZ{G>r5`T#EZs-CByghqdaIv=1`c(qGR5G_(T^(_BF;PV^d|wTd-*eNF(;)KDo> zvAsIt^U>B>5bT1S0PPYR8{F%nD&?#Uz+NA@9?-}N?MNH}$JS0nXS14q)2bV-QCRWM zu%%JLBK3PY2ZkB=$5pGTCaCupZyE0uQ=slvTUH4I30Z!S@Nz_aYM%_Q zK;C91uyb>V;I8QXpr|aaZGUh~EP*q`A0{TRuMT=)wCdfT0iyXlB;+8hhdEOtC&jN{cL`}B_7;C4!0s!P*SvF)Bf+RgOp2n*8*5=b~F4z#Lt-5v%} zsGrMUhd1^$tgZVKed&iuW4si;5xEadNMVYqtR?m!PSqis9vR_%Ty@wO3&C|vCjM3 z;v0nSKcc~%t((&JGzWZE7&~iayp7xr6Fao$H2S{_u`5lm#i@0gOAwhglbMKKVcRsy z%m4?34dlM6!;#R+6n~6af};=c0QaRz_uuSMX${zSLBN_1pBWvHPJ9MEKeFQ3jjQf0 zZ(tQS#He~~N?ICaE@z-#!OolmOkHOGq~S7S3%D=vWHsKt{7y78n!U>mS?0)*O0fR; zTyga=FWfhZ3+FRD9k>8(QvO9nEkat@ZiuqboO-}nd`OgIw^XZa-xZIV%E++6YHlVj zy)f%|2L@Ne?P=Jq{z{^sx0A@;`Nc$Z#haxXirdR^Dv*4)bU9(=eU1$T-h=ZF`eav zRmO1K7DD3E-)Op6Z|PH|nJ|5OkAnJK$(o@WSwxPkDpRz4z<`bWG!VSuE)LY7jV&^$ zBDobmHWPv;2&NHi1}5yO-`Fne!;&Nr80*u2H^prk!cKM5=W{ASPOVJ9wT^ITbqcQ8V@dkrC(U7VkDkYQ&C@5zJZ1M@(LeIsz4dhOSl?|5ri}BL`U8t(?)O$h~ zmtf%P46OwbiQr{k_@Vh$YzLr3*?Q&ia|*Ab7vd5MS8mIAn(v+}Rwp2UE?UJRCg8+n zAYHHTeGpl$*LTmNyWC@EpW4)Bl$}|vwv!UR47yf{ie?GkMB(b8bnFMv6MUWK?86a8 zDY=iZty_)AHaSJ=!haqN=GZd-0RGTYVYYe-RPvA_E}gRBAvjXzilW76`52g0 z@qKsMUFS8DST((E&1)4h1V3r`#?cm8QFgV2MIGo$<+jrRT%reFwonAe9+-HG*8B4(2T zXK^s!XBeZt+s~M9EscDwDf>BAZ6&2;6t_>d7EKJI)Ntmi+b6cVQD^+*!mM5k!(O$) zj^wVM)t9f&omF?@Qmn1BN@r;f%bGM$Vs=Q#HRL_l*43M?1a^-pBl*#M^8DzP0_^7& z2*cIQS7upCZ;ciy-?C(?Z9ReOq`}fhFbA*jJ4rYV^eV9cuj0?_I{h#MlKP>g47cI& z^ra!?p2)ZBO2%|ODNm)aLF&HH?~qppUvD`UzD?=%`1&|hgD00z4c%2%E!R6;>^+O{i1PqJP54e@ z0Ub3UWXXp>hP+sh_{L5zPY4XnCe3^nIc4Y^7yd`ZT!Esz)W*Pshz{wbe;x^ zKfX`mJ8j7S+ig=M(IoHr~{b-Kney~oC7`l)B*sr%BCAKZb#8rXJ*a`Rc>+3M<9knZ;=bto8d}wea+!EcRny#T%E*Yz5kLOrEe(S-~?fDsb z#8C5O`+vZB9~W&~E?S_m48qRxhc{2wy4L=wOr3#IN%p!+m3N3+^f!UT=pe z^~JiAov%;V(NWGD>)NU0q|4i$^&>~mQ_Q2RJI~}UCaw*Kdyk1U4v3~RfTkCpQofSO z)i*_iW0JrS1*#mvFX}$ox=ji}b(L9WfIIsZ>OWKeS?e4Tv&uHYWUUbR%5`a5(f()< zzCK^NP9N3PWe{H&B0;z>K{TgbLy=&32szFd7et|xX0a3=ort#0xlTR1@h%{s_1ytI znL-F+`WWJUDP0^MMc}4TtE5V0*yI5q2PJ5k^|DHn&b3j%^QJM{>{SuT(-oM!U8#$f zpJg-#?bu^eI&AqNU8U=xdlNcgej%oPpgsh)^&F3zZ;0+;OYs7~Zq+R5J^Nyh%7Z1N z-y?RFt!Fc>4#_r2i?z-4q_SrSw`MP42+N)s#=L9cFCX|d6RHo=4r46NSirFTqhU%e zt6e6z^>)WH?TF5%UREue_PxKk46YXV0r**STK*y%>j;|aAS<$(VSsdB0Y$CKt*0{Iemny^#2-67Hz6ye<1boOfG!dv&v0BcmTh*w+2|!AGOlJUS$8 z>NgjdBMf1h=%0>rxXd=7czmN;x!T9v2kLXQw}(R)dEIIE4yn?dmt5JnX!1Gf+lqPR zA}%)7KmW-#Lr-8=v-EUcz`@~<{?Z4-q2C#*PrR2kX2T?_nL(mkYbKq356yB<$D~B> z+J}wRZ|;J(top8Tw4O1!5B8s_@KdM)ch_v0BJkC%(*>RHXRdPD2;=DvW>(y5W0Ktn$gQ z_(MdJE8>#m=moQ9H_5xOgDo#P0jIV-Te>4a-3?{sJ9WeYj(b-hf=|)MwI^Rz^mD}~ zdIjv;Tf7c*$DS+E(Mi+}!{F(o7N4RX-jbtLg;)9{u}BeCVlm}(wE^3s4IXSQ+2Zs% z)hz}>mYcE|89>`o>2Zu7gj2dh1VsE@^xwMF21F%p#GsX0c~&@YKOOfkI(AoaK) z6YJma%>24@2yS1g^}e;~-{(cJt+dG^EtV0CnO0g3|IxG!{q}QT>m>fpUB~Gr-(}XX zQ`Oa9W}d?L7Xb4X2YclGQ%z`??(Uz}cR8lDa!z_N+`p&pHupks#Y5>Rux#w zu@9;LblZT;-yp|G1;%llKYS*lJ`r7&_wa%Kf9a1U!U1u~x|6jh{o|8yfVINJ_LK7_ z5Hj}Zm7dbClZ_Ee4>qdWzn;H7e@7`3WjCcJ`kAjo)R*|bwikc0mA|MO`r^V{QOc|X z5~dYdt+PrQNbw(S;!l<6z*K~*z+sPso$#hfd{-J9N_VHxQaqvwZ zcx0i^I>yMZq0^+iHqL5)MgJ4)U8bAbJh3$Nb(G)eFP&UY$6i|J!^eTe_wxU^H(X$Jm`=X%pKpV`bzkt;4(Q zukV+qDqLvTSD}70E8^~7t!ZD_X! zqK;eoZnxVGxy^`KC-wTpCX(h346#cMwEG9b`ahN}faY?GZ-T^FujeAdua@bq$Ec~2 zNcZDq)4cfyz`|VziEa4xh?l(uW+49 zE`K{8-Erd+E+8L&e4d+{nTFR9?g`5FQ8DtK8=8tiGvxnB()Fftxo+77rCKfJX!4e+ zmVpbM3#68?=5k-;oUbyJL6#iLykrJK+@Z@yE^CPrCXtU0gyX~w*Up$6 zjbX&PuOm+~k0@exWNXy^t{PK~EX46bV6LF)g{LmI+(xejIAH=e%8?A+&6RJhpzbNhYR-o*}FK znYDI9cMFwRmDJtc5PGAUQ2}IMC^a7Lai{(Qjd%k!vzGfhHET&@X_|gXC z=3>+9Rod49%fy*eeW~!1lYu8_n{Z0pjT=%lFXULLL1u5mq ze?R66ku&&5!;lL%&q|RUCINJ=oLB|zPbWsT)&6!8lv5$;Arny}bbpPR3CbvOhNq?S zQ1doQ`oqa`b9LD*Kf{AheNw|Y^t%r+fjo7I4H3G;+8s%Bhl*9V@Fd}`J?&Ono-ZI66J>9gEeU`9Vv?EKwWF!lEZvY zGrsMOyf-K(K4Pq<((?wX9lII$i%yp9w#}o13EM<@AAwR_j`lyABp8F?wpEz8q)1V? zus$C*U;+1H)}*d^W)p9Mav35@Meiqy>j2jAme|mMIOhka@ScOqC;LrqaK>F zImY455>UZ)z|$KxVI`5Ab*XMZ#IU!G-KEl9hY;do8u*B7`CD$D$vujIvfxG>^vSCO zWUrP|J1HIIyORYkPK#tiGhDgSO=9?^PY!2$YJ1|$^F!Y>T*%N-h<{L0)WYVy1OO#};lPQ#HXFF{CWqg|4S|*X` z5=;6ivJ=~?<2z1Qk7$wBoDEf*l$zHv$aRXHpi_VGSq*=#o56UyqQY8i#y!B3~CQ0xnQ*UX_nFlxm{D_s&p`t640{@UY~mwNc|#VUUO&NEzPlf6NgVu379 z?Q%+gA3Up7a#T{PJjk6cm{pW64FMET6{mJp9+_mJvK&!)vZ(Twcfbla_mRhC12fRX z(a4|VV)Wa;A^rhOW(bV1FN{%MX#4+WylQVXGT!k0AA_uIY(308;1ky9BR@D$FAK-f z-3|=ht;oF!uF2EjI7R33bCA>-hq*g@0w5m$&$bPC z&-ke>v`4ly9^t-=Ytvh_&WS?C_OM4Ak0HPaw;2;XV^nBwYy9V1GHo{on-bP=xugCv z9HLq*!A(9`*7qU0Tmz5)%^lrt{@LJBWKij5>4@Pbihj#t?hH>Z@@Qh1Zbi@lo=YKl zA4jg*(JM3dq|p}b>H)*Y}o$fB$ey2bn4<}J@q)6+4@ebTVCP#r;G)Z zg>=NZ!`Uh^P&}o)M$Wt7dqv_r9rxvtzbO=6hIai0fi?JLL$Z0Oe4PjJgS7!%2rp-T z#35%U%PJa}ut#k;jugY#v?mx=Tk95P--a?cS zJOmRAdgHyTn~=*U1z>W!LdKcO|KbIzjH2dilg#K7)m5A2bH1BU=x$&#hgZoVs!MKI zG(NXl*}#0f%Zfzbpm!@^G)4%~jsbdy*T~1&+gX}nxCC)*3@PXbEUJ5Pw3nbFxy_to zU69;>o)riv5YfbsRRZLw&5lbufqiD?0nIIz{>+ex1Fl5nJN7)N*1;#JdzY;D2yV3o z_TgmJ1_+p@j%kz@c8wPI{x1`tJk9fwsK_aDk(iE^HNfSorkT*yfUYqm*A2cR1$0sQ zoa{6#O-j;t4b#F-E!4_8yetyq;!4Du`C3oA$Y_39oP(8l5=gDy6cOaeESuY26~n@m zAClz@2@ghys2+?1#{84?s0S_i{7M=>gH*6BncdP1S%cucLcO9s>#f}DMPIz^?1Aq zN_f~Vk4|>o&rB31h7b9m)2-R7#QU67q!pb1;)Zo1u=)(()#0=@D`iM6RFD?BXa4fh z4;B=j=}bG)Emtiw10*-dKb`a6>ZZjhpBiGsNBK(cfk&;DOsuN^BgMar5b)2_`58-0 zov=@yf!A}zq8lmW`mMUkvAg4jUZ?dC-3)y~aU*}-eBddDMUr5t@RqY4AJo2Le4Al0 zSH1J8AG9H8EM7|)Gp!kN`X+o~mDKrvgBr#OGJGJc!oW-X5Nw}-h)kFVdozDj-;G*f z!*OknO^0N=!$}(&-4rn9crFLQ_%}%a))JfVHe1UxEh!aW7fgJd9X}+-DrbMxaFshD z)7P!uM@-kRD+AHFmbT*1ea%~@Ku#wkidKUhR0fmY1M;DC4jjZN2r5@-IZbHSe$ z;@{sBTtS=3$9K>R1fja9gpXE=d~DW!>(a&t-@GmRl%Dv!u(Jj64T(1)2M-80;*lYV){GuK@TZ@B{uuklwt3=R!MPNeY3W|Zf3 zvd{ee?f68D`)F6rvR^jH=|#Nv0~>$f^s{H7f@qJTG3RMOc-^CKAnZGd{q@|IXuBH# z2B>~h@XF5Y1Ytk{Ex^}&$zf;1yU036INN8rY4LFo8);X8GrNF1OUOzdXrP_N+I{aZnB(& zK-bWhU=$}8Jggkzuz}C^_R=w*xzAUu@3prHu&k*~-mpx1JbG;?fM3n6Xm&C{tK}Bs zM!`(kf+$-~p% z{&9FTjD~HJ(y)yXcu7H}V-jNpjF3`k0VPC0Ml+;Fh;*l%Yg@}Hs9B=Gst=EBVtS`ZsPS;ly`PU; z29OyV;}7bu2x#3+7<$sWz5HUo^&pGGXRAH2*1=}$U@Nmw(-p{(=pOH!S%uuOQCUN2 z8sG4m%j&nVM||%K-6rWVh}8qd#FojJIolav&!*Q*eEI*>~BS#C5sI-qa5V{?2>!xcJQQqW<~NF>L<9vDa_3^z+LpK&BO!dig|#mY~red)1}R0@=}na9@jU zZ8SrEW@xV=w}w4hWyX^OGE0gN95YAK-a-O8MWM59fa60!!;U+BA&V6l9E44dTBwz?8+wI>H-s!rSS~n^LGx` z=R0`>l=qG>Wq|3Rf*|Pk=BDs#4nU^u-Df~EMs5RfL>|-8$y|+s%VOKS+Tm7rFcy93 z%~ZVR^g$QZnhG0iKi)E%qPqUUk=D)`C^_kAqfi>+yGv6e#AhDe@S>6 z!1#;6TRZm0FF@@DeGS%PZT6$CnIqK&Cks#c83JD!-ik>n@c46N=QYE{-w>Xp3` zc{MUj$q<+fIBbu}>M_UyG0CS^E}s_Dkh(sk->a4OH&bdlu=;J5spA5UQd_ma|L=cI zo3jUO$y4ST_S4gPq47(y`1D1mDaN!0fUih@{_DLDI2L_?>W<6;yXez!*Uws9CM8=v zvy-~m`^y#Td}u=G35d7zugw$`21?O7`n3$MzkBWfd5VuRm-B#vs6D<+3?k8CW=)w= zs*^8a(m_P(^QOTH68GBpFeZ5^B%U+u~;B` z`@wWYpdSTI+_gRa0|~kTm|G)dLbc@w+E%VcU0sJaTVz=41FeEo%OYW#-}{N^eP2*p++KRrLPfY~ItY0Us~ zt`V9G?6Yp4q~)u4vyt0jn<@2gV6qtU`^o(HwNFj1?=@}GFHD7itGO(5&`0HU zR=%atHl#UloSl+*Y2LVf`0YE@w>)vviFt==@uqjI-&|?c_yaF;43m{;Q;>{g2)&qk zOz9G}8I!U!6S0lctQp-v5A|H9j~L4b68?yaV)HI8t%3o*2nfD~MpKaT z0i!L2sr7GX6lb+yB>9`I6yL?Cdtr~q&on)f&{6aW9%Fsul!6S@r zQWthV*n(jJ_NK^gYKzHk%;&PFkgE8Bn85|^@dt6kA9#n$N7+2XgL1y7SDO<57RsC# zZH^kVAdW!T-XFpP?|&F9>fSPc9a6-2o*VUg z$#c=v+WIK`88yi@#9Yo|d^J(f`*nAOW*}RyYUc$;(Gp2V^p#!xJ}yp&`}(l!nw~Ka zq5IE0N@XWyJF5&Azr1!MMP(NJ)0cgGcugAkgfh~_7w8j$Yu{FuPwaE{ruJ}v_=RFy zU;D;xnb(*%b2$ZM@%rIw*}XoO|J?dM>Zi(x;^%VD}O^6ccSo)Oe(-e+*u74D*!g9yLOeeefC5_`2(u9E;-8y`VVi}ccF zpt7ya#;)mG*CT^YLox9@{QZQs%4~i>O=~8QZQ0iG;rHXwk+}OCdG4RNmkd>cbuA^{ zFmMtB6m}M#o^zOFH_=VbbKmH-5kNNB>PY>86}@>aZL&I%3C6+c^QP}}oGXUr8`C}SXsLcI zpHR@jg)7WQE=t)%x*XH#!^+)XXg=AtK-(et=>P>dfWB7IG9GV-a+ZN>X5#20+X{>Q zE8&$X2R-XRaJ&bO)I1R_dip{9rYQG>p3r?tRGAZyM26J9Zq}DlM~BjUe&*z4E>_-c zlWUcC-|`h5Jikr$43Y0IwX zev)dEeg-Chp#u1lHTR8jb*J|Ro0BA59-a4&j$}JsdB6-NXIR*$ZugCl@hxq4SVwBm zNInv(Xzs$h!6<_(v1t4Abij};-+n7?(e}}4>KWj4*8TFL*1@3SW41Cw4uq3T- z+V+tIE?r`3mpoy8UOAK&mA&;Qv&L61t~#XPrS;E{28)~|lY9F%SD&7qO&=VK%#Dqh zn)%$@Q0ywrlH}5Ii@g0v?%57;GGB*I#>@xro2{Xj%b@i+>qdl}#TKmiM8!yjsp_Z? z%bq6ZF6;1~(ev{;P1*6jpR%!djcngEd&`9VLs`jkm_?zAmRk<7kLUX_;PJes z`mJVq-lmGsh|h#k)I$`!q>Lla)dM_=fYAS3Dig<4v0QHx47|padM20SEc)pSM7eo+ z)4uDuTt}NWYibOQ1NAW*$xX`izC>5)p5saJA4O&6azaN1r?hxpeiVw7t7q<^y8uMx zD4H8arcb3ViZp&+)3$(t_IGZ(w*2g~75?~@r?OF}ixGJ#{rlz88xuxcY1tIrjfIUo zXx0a!4+)(8nut1No;cE#CoquC|oK3%7EBXD(gXIPWmf}#~xH6<$ zG?0B9O@#s509vMx%*cBE47c*VZjMua%u@6MZM|o~kX(M2;93Q*&j>zI^pTS*DsAlT z#i!+E2v_43F7}AzW)4jqlYguGzd+S|^l40)zW*z+&yBd|ms+!cuvK}uxZj|FD*Jd*3u9_^!`!FB_pj8%#R7c*kG zjJvCkFWpos{7=y63-&}7i2-Q20qTy+C1*1^i;=r>agl2yzRUB=v_f1Q-R}`TB`bXb zE}1qlv45umjwsn*ay}MM`U?%KYa@oQK!ZH*=2#={(F`@#vGa z(c9*L94#{xAsG3HCW#jErM&`}D~81)lGMcm0MxCc!YhtK4I6dEAnnjp09>nAq>TZq zF)?13EA7^IZl@Qk$VyyappATOcdn|zFVEJx+<=_+cK1RnnIlY!T6+N{paH=4D+FBZ zN^MW`r&eVe7?|}~`e$ojvDv`ZJ%zwsIp;@s+F`HrV51)uyOSln`lBLY2)$X$FWGsl{CRGhs!&Otk5fv{NR(*YxI7_e#kZ{|lT^!G}8Y}`Mej9@qWR2H$U z5CgW>O??UttF)7sRj)T(-#2tEt^8xAiUf?%{Imy(kEHdAQIeG|c44GXx%t^bR!26n zf}m>AFtABtPfYU>2$zA{j+!>6x~AXhyz+etCe=zqVn>HJNy2l!0g%!R2HBgJPb)%* z;k_Q`&z-u*(ND2z8XQm^Ij(#CmL;!u23;s zPe%HqE3*yFZC2Zj1Kkpz`UO!v9@fl~r)ULAob?b%P*`iAcDz|`&2u><$Ekdt3x{9^ zNwU#q;)$FcF{nRYxXz3jtk<^G$&Vx#7BxZ?Jg#4sZ(4;#TV2%qqLLC~4{n9oOt$t}r!SR- zI-!fly7ljU@6XQa0(z?o^eu%0P^~PllaqyfJds^x znk#T+RJ)kIz7>hN5R@8*4``t=vaEvCjEjQ7pL^xR7+gneO_{)4L){i~PfPwNB8$uJ zIp#oHwG9n9Kd|y7wr0s1srb&~A3jl%Q*SUN9HR9V1_q@0piEAlEWe%H)a-l_j)Q+^ zc^Z)>wd{UUof*?wg$1ehnBE-5n0q9!HOJs&L4dBc!T9j%mw5kml8>WSvyKq>fy#n_ zOT(hOMjPZbYsj3g;t?}z3&5>Wr<~TUyQ{352(MW*3hvhj;Rw#e zqe{b!0DAXtNI?igv+^%tZ2;LL>IBJFWoqW*9FT50W}g~k_%i2UT;WL`Oil476vKIN~ezN;$+MQPU;-d zyLY+E>84px1l*v{#L1*ynE@W-c7O0!AGMuT*tA|d{IJHrE)w@22yqU;lr+{)H04o3 z`Dk35tf|D8{-ewM&Mve9?+SF0?i>W$va&3aHq&zR2v*fbfz2JSac;mqOuT)VrHWFE z>+Q5PyyV1bmJWa70j7ZCO6ZV2)*f^mafPaV6}shB4nKD&E_H%&T7f?=G)n5yhoVZW zU^nUL8_uS@;cYg|RzD6B-7bj=>o!iMA&gbXwXou8oHf$PTA7Z&8oDdHz>L?D5eq@A zsV{)%g%t0&c^-{6BV(%din-MIiesA<-U2kTu$I{-g^pJyl0t7}nnyBYFt0I2%_E*M z(;_qJ+_!zG5T_r|wP5I?o5@}8-mz?h?=RzQTwkI?3{^e*bKkOa@(-->S+H6y!3oH>|WqCok3}0tj+;jNdx7Kk?tmntDl!GoK+tpdt@2`` zuN+X_ZeHjUBKtUr2!~EYA-YXQhjT}B^}m{9mfi_KBLBp%;BO`5o^sB={q_!6$d0ON z-p(+)^c2zWtCJ-fRrS|?tUEWdb$D`xAy`HDWqvM<3qWdNJXiINXEcs;)PiwS2a@&`gieK$S9Oh?`**#LceW% zpC=L%&njp$)p7q9AW${dGrbnNTG0lm20Ong7PsG#V^;%CB#H#q>L&rM&~s*QHoTuk zUCPC5$zaIpO?!`ah^l!9mAFoB;Da_P>0QKw+kvOk%kDaI1DjV5Tt2RNJ9Gxh8k4Uh zI7KIQ9>1i7Z(Hhqtyt&$!Ifmk#yH@O??wMqp(-c@)ohV#Sy;mxhoZ%ki2P4?FZgiK zr7nQ0haG@f`#jV1y}C-MJ7`C?HdW4+I6G=R!Bmak3qunxU*|*5s{D4T`-}>%q;H?h z)_$#o|8{m7P0Fb2_CpQ}4I#gc*0WTdXw-g3beQ37F6)q|SKOeQKKc_Ycj73YBU{i} zv*FigeG-`iDqH)fyY0dVGXV|L)U49I{V_7yue#xk9O8y3D9zrKL=Srwm2Cn2%zhkL zkTOvyI#YAw1xan0t198tL@+fQ@t~O{Zw*@0aG{~A%i^#uh>)k4fBvf1b`2BN3$vKT z*p}?vDF52|ugM_N5Hb@!tZ1D2eT7G_F_ZglYeM5-NrFl}C-vycpIN<<^X^9ZFDF9< z|A^GH2$dFX3Um9Ja(~f!-9>(f@n|=4Vhs|x@zX|-b+ne=|?jsuY|n~9wh!H?##efaoB*Qjf( z;ut0zx#dGGkDcwzE(XCtkR76{h8>^j)$Sh;zJ6VG&6~8V{Zq7w_7@D=OiPi*jPSJ* z%Mb0kTYC9^v#4qDsBJxCl&1|E^=-Ht<#^x7<1BD#pJiWQ-4( z_+F6_$0n5A5@AxkA z^7C(-xyg4{5}xU(BH?rZ>Onl%EV3N?f$e^)VI9{j_j>j-jicD-ygxkL7i~f7j{kw= zQhEOY`!4w-pV?&9+oOFRcdmZe|t2wneDGAX5w67GrqBq}989~QV$W$X8{jji+bDd^&jxuPMIl3)dM{Fwe1-bi7D+7ap#@{w z$WiK2@#akR;f)^_)-p1e-;#Zs}o)1K0|C>%#5=)>uvdI z)%8_n_Mv6;XwS{EuwMtlS&+7c45(Sj`PjDY^l5_yAXw)4HM5bV88Z)GoP%l&_~ zJS0iJZ)haMOm4gw{~7-!j`68nNHmwNJ{cy7*jcw+%{DFL$F;i#bOIBE%iw~N3J_SV? zA}s$8OJw#e99Nlj{CYbxz$R^fd5Q*+@@=QZ%wmNCzzM3j*AsBXZzW5ci?#lKX_nKd zSL*Fa`6|Zd91jE4h-Y34`8A@92p>poiHv2846ZbqpdGXR#wV!vEW+XX2-W)fzyi#I z9n}n>5*V0zF0RkE5N!~}i%-~0tsYvew?mZ!Mkj!SW(FdBoKPgOckE_*hxW#lP0d8w z)s*RxY-jJM5Kw(Y#B7{0++#WG#7n;k>WtQLC#N+am-ih>tFAv z(55`s6@GMfek+0~@UnDY)wZH>j(Ac{7Y0(xgiJDi$+0fEc3m$gi$T}6B0v)+6~TP~ zsCvq0Hak?bJ&{b_kUl|pl3i&tRHdfMER9XlBaDLks8gZr?StAHlMy)4;$%ydTSL#N zrfWt_jIITFnzyn^?HvqhDj$ljAL>GJcO{}ZWs;8#Kebt?_x^23RadNBy|Cqi!{-t39>A~uo z*$xLPcb~buD>hN(tG(;3OY8<6QEPS0=gSXks`Sm!w6n8HLN8N=FgcQyszQ+aMDBk621mAy6{_0B5>YbMI~gosooTYOTP~G9zAs9> zlGP*o+oQphvZ;DTXvzpiXN%O5-@5IOTItINTe%n`p`4awtRP-v<2VM!n1VkutQ<8D zk~=Pc`L6P|#D;z^mPR*KqDMX%6IVtDj9z0I;qJ2PW_Yt2tP!8BIGgO&chG7jY*K*J zoB94swMK1@%Pna0hK|5j2d7lyHn1AQxmiYKXskXUil?kvAuAu1&YAKq05 z{FYSU_kF&-B<4IlbcdOI9bkp@ZS9L4q?=yFYum=!RN!wg*ZiWAf8X_-1_S(8!yS@G z=X$_HnkH&)SyMgVTD;-a`jEXJR9sAqs$s+v537i0tRp;(^zb%NwP!xEY8>kIOpr|$ z_3f>(8M;b4{ErYAqQ{%0YBNr!+tl~}+0Vp}yCr(?**0-{H}>~>AHD3>4l-!i>lA;D z^Ub&Q=gM;Hngf{=hwpmLC9@|-{5)?N5Zmh5c7zo{CJbpET6;B+ujF107EAUZ(krKw z7||nDm|qEq_>+amAd?Vx%eS#2Td*W-$Om*6v5lF3{Q!T0_*gnwHxQ zitA+Qg^B{HV7B2boLh}r?+gLr+#`U~&Nps{M84#8%xMj#JJI#y8fdMEY zJ6dah-A)m0qJxoZM1qi=puZd!d@qR3 zcV?qJ$Ot3%xmQ?lwcoB0!c#@g9YHoRtW^f7HQFOp+yIzfgn9euSQL>a5uuiL;T%=(&dq`+=wy#el({)+cP z0#gu7IfkN<)j%(t<%&(#(LXEh5n=IhZQqd6SgCq;Lwd?h@}SaM4T> zPi<*EI^PIVYZq(1Zcom-nI_xJ1k8#s3}aEIP&zuP|3EezAPMIQHmjS9byf3=K_e~h zU1;W6m)f+qF#xNCxve9;+6kTetMPD@;nqF52gQ(GuS7jD4V=88HsdMOVkO7)*4(x0 z0Gf|muU8u%h6kIwE7pSbyDff8%2Kaz>nK9KFW=g6(#O_p#UQ_ex2v2WZqq6Xu2wD6 zY_Z7KK0=9aIpo6I`(iIM8m$GX?2&I0xK%Qcny02a88lW0;9=Q-Gtu08k(JX8^)Z!Y ztDwNX7)V+3)_N>hnNd2LRg~NjSwdfw)HKS-L+Jdw`qf=_fyEheqjJp9M511qo&3U# zBF~JpfP+261Tj_YlBIjoM=Fr26hneU6g6QHfJeU6{M}fAz8->Sl7gf=8u+wBedjIM zM@bsRr3`}x6hcg48N2G_OWtkRW#Iq@F|KKM)IU>wq#1D@F2a3nr^)gMv(}OoR!cWb zvQ%8Iy72J)-UcDz+5z4qJDM7)jyI^JmQEdD@mZC!4mH$8PEFrGyi5+|EHo&t9R**# zlrU4Tqq4jp&Npu*%U**H|2{`S*VI=VLU4j z)O-4hD2Orda_i4Z+Mzt#>uMf}HFG9=8O&C>(ng`3p~)l5{L0KXHAa1(QSDOox2>J@Hk5d8{X z4P3-4{Hm#+AM*sm=yEBr-ZN-aNsMU7_Ixq2xB-sFd`yj@z}W)`WItA|bA#k<^Q({V zFqq+Kjf!dELDyAAqlPleHx_W!OT`4;7 z-Vm(2v8YtD{iv}J6G?_@YWXL23h~S4M)}^ z?Jnfrh)2(LFn|^C<`9f`cSh~~-HiI_73ystcCpC#qi|mcf(Z=`2(Fd{MLFd}9QjW*Q z!-8!+HKo)Fw~%ktpQ{C^iO_ zq~zhCYweeB$R(J{^D|5Izj~79>Xn4!snZ9V|BYMv@~{2I__W=oLQ6z8ucRoe@qI`7 z)j*vL0Wc@d_KK6cPJQSG-W>@aYWwXLHzK7jxo8X`2WPKdr!sN#i)`LLRM39*;BaaC zs_o0qh3hj3{^mV&7g*)LuivMvmQnmSKV=eWR4Uy>cwlqAqx|k3t#2ldFN6F6UWtZJxOqeM92oBvH5l_=g>I~7Zq>VXrD!_aed4U86A$NlvT^5`N}17 zKF#l+fWn?x=n(OEHg%oc`W)vS>a6$Ya@2G48$v8JRz5`~qU=5AY&8$_rsO14f9;t; z@-SB%{uJ>hFiU^_uI23V8M!QQKqk^X_Qp>ypRD5lHsdQ~m;Ff&Q};=BRblu+fIsC- zII?!OcBzkTKu#<}9mws$eGP&x4OBb6x`^4jaP|Ir*}~J>eTODlyH)&~CaETWYin>P zz~^J#89|@$L2K7a-uk=E)C?YP-w;A}OjkK}AL(~ZyR^@W#R4(WGH?9iYd;`@g`80B ztB+rbr}gotWK{u!oH`uMDtSK7^mBK!9iDw^0Mf`)ACjC1R5}fA{PU+t61p2QO%9pq zq0f{{c^je7C0+VSmMnTl&n*;l7qyC z2VVy;G;vff%lvLx+MgFhxZSW}#cuDL9uoGIUzxO@G+qxk(-&?!U9w!l?G3e_`b*{L zT{!Ld*|%CPsLO^}R`&^@3wuTEP0=<7S@+hasPBudS68X*?waa9WPYF943>HvP);Ut zgUkHhl;3?|n7T)fT6}LJJWF~3`M$Yk*g*CF=VEUIX_G7bv%$!IQXJ&=I45_lkri(9 zS>0Jw#BC41@ai@xTFAk_!EoLFpU)xd_?6NkmN^^ttN^uV#y*t40ms|wMt5m)BNavN zIs=V>o6N>O6KyW;pvKrBpbfs7evjL3q&0@3wq;Qi#2~wS;;~!7qqoY3aMW*$_@szZ z8~SGz{`Zz`_7TPQ+omfGKnVI<2B>D0Du2J9oN?*<#W}O|?5dY?o2EH!4Rl}G++gy_ zpmhaeG6y(l#9BC{e3AX-hH`zU-Tg_x^2rOHk1@!h*E)ZTu0}XA!nD~XHi{r_H(#LK6_z8G;>-G#ArA|<_{&?Or6w~32~er;tl)<5s8ZWSytk0KX}@;v&hY4@1h zXkoGViR=*HuG-G=hV6W?*K^|&<0u6^!}QzOp>oa3baDxv>48zE_t~e*0qFD%Dae`e z`eu|VwbNKWW=2W9_+hH4UafcAe;_!Jvr234=R1aNXE69AhcsQ&W$bO_>7>H9{~6_l zO03od)KB()I9_49i!}5I?jKvFt=6WwqjXZn+43$MrZ)0C(Es_I#*4n_KPQC>V@cNS^cgF%xo$D&gbfPt# zg7DiIHIXCfp}A6EYEw*^G}$Nw{Gm*{ahe=ztPZ(SvoTCSFg~?Pu-yP5s6xiG4e8jB z3vzsZ+OZQA($r?oui0!kaqIIGc%5l`rGlRkZ+Qf7Y5ikGX>|$}*}xy(`s!Vv%AN@e zFxud%U#Mv?MPzkUy{##eQe#?JpasV+zW*c&CY?$69P+fs0Qml(P||osXml(rbIJVO zuQRuw2Wj%@)~!!#1cmEj6w})9p{U|}075+jY}KuGsJc#^xEwETYar(4`}lU}&%W7M zr$r!J6e|Wbaza>?ZKfHdw|`8u{%)8q8 z{CVTyuF8r=dZz96tC!58O!Oz%Q&(YSD7<{tuJ>&_L-d5vx$SUz##;&<;&|Pv1XHpp(R3 z@_Un6n{L_D#T6suF&M}%i7daPuM=^OSAG&pb2%!mwc@c*L(V8eh`y?&?xI^iEz4Kc zD(^gZ;;yil`Jt5AmGGZ^WAi@E=y{RLowd)EnSc3q){0h%VSsiQthL!Ph8*#lNWP5W zTYIl1C(33Aqtmy?J8EhMLND{RWqC-gAJ$I6R6U(Da|@bkn5#FHIW3e3JN7ndG0*I+ z)B5IF{p1-;G>Wq;JZETOn$`VT&7a$-D5bmHe@p$8#JcY2znpLx%5r-B%sQ&0{}Gmk zZ9mI7XN=9;{A$5}pmlr5U}nRXUK_0Z(Z-z4eEwtip#FD?w(AMeB79mfBA^ zJG76qYfe=6w^p(U184Q}(=F$>68k=*zjM_$QPbE*8qME5T0wmPn*Xgc3a6F%!)e8W zYqdXV^e@|WI2q0H44FG9%2b}}GncdrE4BYi=&ZkD2(9oFyC2DZbroEG@kO!a7WkqN#H;?$ZLtz7pZ^fjOt$m|e>>u!KX|m@`Z~DCRTYn+kR9y2EQoIu@4;S{=cfC)N z&Far});C*NBjXKyB}q;FtsT!)#5;L!7OtnQ1^1;uYhU@0GJ0m_wbrt(-UAFxtd=or zeO=q7(UNs^GpkghB&ov;+;(Rzh?*r^ej>P130W5Za#Z2Xdxq1fU6qfpfp+nFX2ghQ z^*n`T=PhS^ zC7jt7ojgKqHcgKYWy9;{&j2hfynH8Lah<&N?n!^vLFb}Nb)cvavq6{~P@uFyat=&E z9mF&Mz~Ma?rF!!Ji839MvAEjNh}2SU z=izUcxS8{U1ZsxAeOknoZ2H#sd;oRohVgJEG`KW6^j?yzucAI9Z7Y>^U+U}PQgh<5(0)?QaM2n; zC+qt++`N_ae#{rMfvYDuTh5}Fd${Vpl`sycdLyUBm682LVp9;FD(%RoC%$ELqIQyo622cuE}M*p@mA`72Mvf(YZ+>)FV@K?}eItuELy90E#;R8Nw zSO)KrWIrptdRJ}4)1TXM3Br~aucKQZju2YY5_X%}-P zw-#G-&#OT3&GtndzQshV{RDJ?oe4vMFra2ZQab9FP)GG4H6id7-+b9)?_5;vi`+Cd z!3~~ow=M8#1%KAE_($1@*K=&EEBsI0&I8(dN(qgK8rXc&gJUqN(NWs<-V!M zK;D?sc2yENAuz= z<1)EH8hbK$TvyPPfHwBK5oZUJp$P07DXc|?VCkP3ct>@Jw}z7Q!KtR$oG0Ob5hP}c z1nU^u+-NZ9`frV9$>K^2)e^xAeuNy3TjO9{bhf%;qj+~&r*E*av%_6Sym#~R(rgSS zN%20){~j9!F?h9FWs72{LLR(SWrlZ<)^;yndn>mxIB~g)r@BED{3!5fj9h#5N^>E@nZ{5o7{M<(>IMd>%=ZW@HdB6~`xxh6VR@)%9RZ{?^%2L}N}HZ?%ji*~zWLck z_LTb@F@oWmESiJW>Sg|xU^54*(Za#Q-Y0i<)je-AF}iMV>hVd7zgG@}>%dkN3q#!u zTh!qEvveH3V_Ed=ZkywCj#+-5<06@DHQ3J>jhJ!4WB`6ly0|L>yW^^*L2qTMJ@@F^ zyXlME#&SXuwTqr^kKU(!$dGF}NL8qYuM|vSKn768q{n6}s!PBNLJfH+@o`M9xGNn+ zfa4kfg^>B#5@zm3M1D`XXc>OvCLS~K;KC{$L8H(u_?S(5Mt)3^i>+Q_s#Bzvpw1M$xM^fE6Ft8_m(zf}2Xi z4#hY}zONv47bIs)Uo+CUVQ>u7+5f(+X^dO;k|WK2yh_cqIzp6**HK8FP3SrR6&w5>;xb%O|nRG0^VDSlW_< z{>WE5?@|w`guAohr>Pm8e^2Y|J;<%rkgJ(gj!NV<&}*=_9)`pvXvnKn_UGlJiJ%VZ z6ilqAY?;nAFZ>W_W$7rEV3@mdX{PtSk1U9C2Qt&BKq}=)jBfPbcdU|V3CWSdadP(N zSDmdHnSiMWafjSa!&etlS3_>wTPN88Kg-ZSS@czxxSCiy0L3)D46VY3;ajwo2wP_O zh7+nCRe`T!nrg2`wG;2G!_#@&WdC1&+}uOo0c47RD*;IxRjn0kx&`o*(+bi5h$_qP z0RZ2DE9U&-!+&Z(ZZ;qsVu=lKZw~2rT07NUAc50>?BO0M9Pmsh3-}M_-Xn?eLmW$a ze>utZrzd;NW-K$b5S0AZ7OKTt8xMy*bz}uE_~yAp;n=c96}`dxT278$;)N^@Yt{^< zUn2L`f4m8YQBGga-Im0RGH-muy9WvGa;TL{!U{bKWKw8XCE_%%{ra1=p-kUynCkWN z?^5k*LyiEA&h^pa!#*3Gyf5soVLm&9Y0TACL}0&oVPS2)5p(rR%ggTIO{`;dC@?Ch zTV9fQfu^wDuYl`bs{>e1CJzFTHUX|(HGLJ~ZHx0^HTQiN9sjX9PX109jM1``q_8jx z{k|`=)OKr_l`Hwvfn;~u`@PZG151Ixp*ajU-%vU3$hT}5=G6G42KjD5Twf6{k|3S8 z!d8xssIaLA2`dltjT&-k2?Pze8;ns)@GcM8BS#nwT`4&DnRqlSBSp`_FuY0mYt?>kV<>qk zTxT(-)-s2w7HlvSZB6l_dd<)|$-gxLhySXkDx{A(3HryfI=Kvca&>zhkXSb}6^26} zEYrq4iJWLye7W|HAR~;JDxssz`ff>BV_AcMdD~~RX}D_~o^_UJ$Adr;70O}Ww^QEL z|Cw9W^XiRTXW|LLuLqdah2cu*kNc(3qBUZh)S+z)Y4cK~(ug|4tCck;SC8zxns5SY z7_G^8Tkv!A^4uEG`?RzeO+@ZT(CmsX%!NjF?*Ju;Qe(vxQM`EbWQ@gnp0KOnZMb#RC8&yJdc;h zO*-_82=R0s^))SUc+aiP4byhC>I<=t`{I~z-oK~JBZi#f*Jrp7k1y=&$G;7?eUoTP zH|$v{Yi>AM0^kr*=EisaxgTt63IL5>6+Jx@f=mY+EIdm?cT{bMNq6@NK7Qj;4amlB z(;sV%lvody|J+M*7fauo4ENNmH`uKms~->jPFrDn*1$#Fe2ER&8&Z|zL#0LK$p`zq z5TDmGLad|Nm3eQ2p5x~wl(snq==3eWR$?~ra3)py>GavX<5j&4ok@VojXPdkk;=!V zeRru{^wP1=$t-D*+LVB}yz$acZX1Lf49N(YGA#hAlP2*ctOXk_X)o)A-uv@p%ZT_* zN}D_*%i!@J*|=G*>cymt^(k=-Y!S#}6a>`_B4jJlaSRoD2gj?Zm`UZ!4qjb=%81NL zx9qthH?+?(2#!7q?gN|XS9Bob>W$Ya%Fg|bTXHup-JcLjUJw(&r>-vMUTy>Kiv6|j z@HcPFSnS%?GgYfC-A_EjxEccvUTJC;ju(b5dhug~!W80W_{wmt> zT#`|7x^%nIrwK{}18)B|VUIL#R*+Wq-sxH{&VZsjh;=5OI!U!Cwc@+WAd<22KRfDm zj>ZxLB%mQ{JTp_bT^;*?J=rHdc}elADF6stS&Ji7M*dyc@STPaSM!0mNZaXpZ@hr? z6}P?TWQF|sP`&o^!DE^lhd<7%#*(T-^;>wc;`ylP-lT}n+z@}MU~5a6O1CeTs0Wb0 zwodE@C6s_CCi|T0u?bkMdKTeF8y;%q0x=WQ)(w!-Nl!&5b;$!WvfzeD!=MxHpNrie zCC+=X=nQiyO)11u7vn?=|N3Sx_H&M2sope9yo?nhHQjGihdW!jjgo9_6?s8YDgS64 zI&BTLPKgYziqo4;GV{@(84YHtU~W9;FjErKGyMAlj6Jxk;aUeRlMuU<9k)*~qNtc0q*vkmzyB4%jb;|U}mE=F^ z>0quY$^lO19!HfVU#7&!!!W(7fgaO*EJL?GGoEQc!p!t$1)N<%r7^`k$2!(j$F7|o zN)aFjQZv!1x_~c=xlYfD8O*%XLu-@u-18F}L}ltj;FQb4Tf}@4M;BTG(Mjs z7cak0PqGBDkG&(kbnLj^>A7odjEg6xAq6mbfqi@kp1OU%a!ofE53;4?pi$|KP#~Y? zuB_ALb1J|YmZhf4@s>a2SO08PUrG*7SI_~8zNXh6155R`RSCv>|?-|vqB&Cv#%`kQR%LVv_tJ{0AX~a%`b=1iMG+33dgdmQvha1^- z-GB3r`_-zm*e8@bn`FHQd7l6Dr(`}`e>zh;!r%?@o@Et`!L5-{p>uhbpTXK$;G?-0 z*~IE!t6qDXdcGEW!FG80(3lb*n>pXFhB?}yn+^5rGS8g#7ntRpW%CkLQd)oYFTtK* zI>F8^M3si&FnlFb&nyNiPNW&WPtKY|XcfIk0+seX=o=j?gOs{%sEef9v$5O{vjbp3 zR-PCmni5TELbpAQ;o=6*iwSvbtSR&$uS$eQi=56R(x(Kb{oTPF)Zs1R&J^=;>y&@ zT_vnz{Phmu{%%t>GTt_woI(H&QJZ*;#x!pD&iG1<4*H&+g z9Yg(F;Z^q)beNMcyjXAuaMuW$Rsq)T8R7i$R-gM~^S1&jD2}Cf$|3aUg9LKk9!cRz zo#fMijmrcgFvPO!SEZ019g^K7-U%60&! zm_AT8A!psLwJd{wTGZu(q+vgF9PEc4N~|0S%SH*gx*GsL=-_A>KPIYFr==we;N^_M z;abgS)xaLtNj*B-?_c32ZCH zGr2y72QIY?^xs*+(}%FfH9PfFU!jFI>5{#dQ$4bn-$zR`YAYIOVy82-$;9Q-!l((9 zZ|$y_tsOeG^oz1iAzOTBplqT0PC2*1X3CU}q)@6iCn4DCn0ElM2gA44OEk2UUrt8| zX@iOl5lMCp=!9JG8~hYQkxC6J9~+S9ir41Q{4qV6^vZZQge3h2}SGUt~hdy z_2qE^XG5K89JDf4=UN^vQSs!)L=0$dNhWnFC~zBmd70Q-%sk%Zqp#2~*c2A9X0#&idbQ5J`P0p}fFGQY&953$B68U$`R!kz6u9{cr5m;r0PUpj40~VO~^0N+5S0r)#v?mOt)p7bD@JT z*g#^?9zX)cOKox3Uq42{5X85x!i*>VB07Y2ru>nU2uD-pW7 zh6g(^J!9zGv4s^%$*&Tp(n@54)@sh__1RP9y79ur1%&8N=08@wE>Ln)7d%x+&HfC0 zAWPi97Sw1fCe@r1^}C@>>|W9y9zSYUR(N_FRVpk5`43dl0?DH4;hk~T!f6C~w|}wBC)a(x5cUBU!gmnaGIPY>$^%eO0~;d^P^j&AevsvmKx%Zte%@x5nuGXTO4%R%rstCjjhV35i_!>OF7ge+IUd-L7A!_exPFy>*ji31R5&roo~ES zc0y=zc&VeF!r13BDr2{_61Mh2D@%+tk$eRXpHGRIYT6m>d{DaBGg$Ar8^DTmCd`qh zmfQ!n`C#8p^n><+#=LF!p8-vc@tY|=a_C-2H(1a(39$e=(LT@B`^q6B%InEIZwEF5p%A>2h^;e?Zhe*(i z(bj|JJXu9L6;S>gJwEd=trS3%{cWe$6zxC}G>9A;_&VA~jGZGa+hqD~Rb3IebFkl5 zTcP+%c){yA(uhdFhd_@2p*Pq5`nrlw_np9i_gS&~=Nbx++faJI?x}r$1J2ABUS`nH zbEt^^n#_QZ&K>@Sns)Z<+yZlhnX=efY0ViiVLHv@+9q~yRfzpc;Yn;>%s+3pHxE>g z+3C6`3!}E`_IzUYpC8vL`I(k;?Z$LsjOqFxpt0w$R4^^=OKmIfI2yIBQkmK5I1-_Y z@G;u6>`k^1j6Dq=ijv$Ocn)>SEA7@znG19tV=-uu4QouEQOCrzyg}!mqcGchrCMOZ zZct(EQ32@S1-`UT#rx5C&Eo{{PK>S5IU2LrI<4#D==}}}(HNcd+a+#ig~0Ku8gtTG z{afgfZjLBv@qMa3BUg!$!e@o}+zb`3@UwwgT~!pE_{0eBArSknp4s&*lb~Hu))n)V z6gX_J6&WNSI*)LqiHsNQ@W&?753GG(mL;M)XVo0_*vvH7Kk(vY1J3*4u7ek-$q9^WWv<=I#D@>ExCHPMOgH~` z!Bx-u9W&>i(LJgH%=OYIqtCpKMYt$ypEK(3rktxu@^K(H#z{QV1Ds6k@Bm%J{n5#k z(TY@@2#v&E1Z2TiLo{Ls&EBRjD*6C@e=RLklxX!q%^@yg@$`?QT5hpz-c<;t8jkv! z+v!O8ccV|;pJIwPoHdFF&w+Lf`MIA_Qf8phSoJXJ(R)Oh3xy}N90>clU3>qkzA3l9 zltbJPP_D$R3EwO)K` zTCS5yer}94=9I^z9Cfj%5~aOXjJ)#0kQG z%v(fjbV_odjSJ60xA*L5IGVw-q3OeUOokYj1KS#%zpUYuU{ zrv7^X2XoUAKu8E2sJtNQ1Q^h+?f=LPZzQWW%yw zpM{*_ ztqWYTSfx1KbVTo|043i@|W+AqNg7$)?}4G(6@G^d^_o>C^&A44>R&}PxxsSkJ%W<3MZi4FAT*`efQvNa)!9ymcCLsR zeoVuI0~!t0e+pPMaz((6V?v8b6lIziw&Jc#ny{OJ(rDwTO8zYY6LDIZ&)kc#`v4YOoqQ<*atK7pQ(Qbkj=)WaG;KFCKAV1z!K( zms+ zt{;(&TNM{0duEv)>{?{VecYl&f>vNdRhz|v&}A#ve^_<1TJs;0HyHIJ2gO%=)k=h$ z)rX0xZTSXsd0X?=#adT!w2-$wV0?u+JE3B=yz8j@ZU$2FAT=*Tzd})@BiboFDNX{y zwWrMO@T3=n`bF#PupLQJ+CGzYV@6a-;4^xw2=qhEEjXn5fL|Q1+>Ir-mrEhE&Gw^v z%xOFDI`k-n;gRIYrJu=c(l1N+EI}2(o6!V=~e%BNog#kM~7v+~h(g zgsG`bCvYUgy9O1q$`ZqiLm5vA(Glg!2G9cMOW{ljuYI?ttXzE39=Lc0f_X!~7xrqRx;uyD!N4gC1&w(H8sw`hvp zUs8CFp+!|&1ou;o$4E4T+ra$~B*ll_51uP^Pgw&>$%Wro_Ffky7hK&Y^T~Y)*DUyrZ5p1aIK7 zsrDmbRO4sc!1&iDD}k;lYF#HKYwMR;(ZHHANa+h+0VpRW(!IMkz4oJ&mF_s}6hJ}R<@8DY(IiH8LL(o!+9arrN;98aSi&f8n zMoju7E4UKv@FR#J{xSLlKR4$XIkz?7*oMnC&eh~_ed5DIPWM_g{U)RNe@vfgP3x); zzgvxTxm~~SzWN8b5gEp?_CK-&?D*x_QEJv?^k*re*p=_2ZEj_tIT6=guhjaG?$z9c z+31BOKkL`E5-sA7T#-UGc~{3dKLW;xHhrgG`RErZpup3r`DLmeI!)z0)I%eWp6T*H zw^WoaiR9?|gs~Ef9$hVma^jDd<;jzZ5N$P?gJXZ!~}M`-9@0?I35X+_;LI!rf<@H-<5dJ zf-}GZ=Tc!_X!I5Y3Spyy((r=;~`()uwKY4#7@bs6==z@J-ZBL|cn0)Zq)ELsb<8-gIexFMgfWOWaN;JbWo3W`1)v<4Rv*%QC0W_0EJ;rh2!s( z^AAC@c2xbTR7Wk%Bx27Cg;X=k=m6+@0!50yyX$cveAIL9$wD1zH>iBRebrFLTp1?X zaAA{f`_EyVTP&rOyol`1h#%Ampp1w4N^rt&K73o`$iM?9}uw)_8t!3U22Cn{N>io zkzmDRJ1P1>KvjTYp0haY0o6YBXwW4d z>j}#ZN?v*QyPKlKfL=AI|Gw%)w`fspB`fI~{_)%D*PR zAy?bA2sobHF@IgvEzFskP2BuuHX3b~MLnTzV1*cOOPi`(|J57TKB{b4M> znT{D1ih)ekx=aAC7Gz$@F@bY1$wnEer2J6aky}x)qI+k~>k#w2sO-1e%;!s#S(y&e zaDYvbBVj$1!n%~8mJ%kt>b6z}j&Aj$VTE&Whf9}wvKM*-3`zSMvV2d0jD3JFtc$(p{lLgLhf2g~tdL~tX=f1$^eu`H|&2)qCx%*(vb>l(fX^)tNB--*Rn=nCXZ5RoE zakc&bglmUg9XI)5bo|>sL#;9(b>V0!-w(C%1$ujT{KFW#L7b)`2#HOoZNveSEmPRE zcD~t}5(>jufdQQ~v18Lc#_BGGf$J$kjrsMde{HT2Ac3 zxqS~OkgGOGb#XL(iDL#ms;f`HEd-PWtx)@?d5rP`;OaxP!s+OXd`QRHu$+U)CN$-G zN}Pp&ch2?qHoos+mY5_WUmriCx*Sk@WR?Tk3n=V7*(+j7a+|JaOuUwgypRJ;3F%qS z(YsU5iakX7w88LbkHN0G&cTTv2HaIQi)}oVl#+}nW<-EpFFb!s*sx7j=vkP|jl`hK ze(rroR(vQ)0hzo0_%^Iv9cVcq|IWXqfd%VLjy19quetAa79c&*Cw7$@28z6-n)G3? z-$f~yo8Ool4EN9CyY;0SbM;n{0L#ywM`%}7T-2GNG*(W*L^Wp_IH&W8Jr*+hb^dBy zJPbLKj`?P3WaDg`=#P>v<6xYH@HJDIGqoeSkL6B}#~?}y3!~88Zy7>O0Pel4N~d(N zDv=qHQC`#Fk}q7C>o9XyN~gQd&9KFkCQ|}!Q@K*Pg>ZW86AZ8c>IAoTj))|U6=UC>WEohnNC%jB1+HERS!Wnh1>?S-! z%vGc8b!h^+ak_eoL9@H*TzE>jOAG69k{M6BEGN7e=QG}--v5g-wojyWl%=GgazwLN zhd9a9zK{m*4HJ`Oj4uUEA}!bdi8k)}VDAi2AwL{9M7VelL49!R3~u$8bw-n) zDl|GPe;3{<$Z_qa#C%4%v{Fi-Olj(60XMR{iVwrtOuj8=5m>V3d#x-?!gO~@4wS&? z+o~cUua+w{Lmqo91hiM_K7UfnM*2L&Un@0)H05W~mhh$9bW2)PDjkV*kpkMwf(C13 zlRw1|K9P*j>u8KJz92;HM0l?QFQSV)*Jll6v6)@VE zvBX!CTBxW{debMHq*nKvLDJM;Sh^<{JKGQSRaSo@X8ZIg2$rUh+WBpYE+-50U8bhn zo_ixJ(Y3=vP_4}@CVSWjBa+nL>>-sP=DHp5&lOFL`{PdO;>`Il>4fj|D-uT8YhkKPY=zr`Ry4wK*YV3jyk4t3ajw;+MvItNl4bwH(BB`aBh;r3DBZQA6! zVnUtlxOf>`SlRrNR`@z!*jloRWrtqyE5@`oLFgU_>8`u2EbML(iSBT!A$vHy>jFdJ zMy$bBEYD=p{&})El06_bzL`>XSmq6``I)d=p_by$+D2JBn3!MA_iW^zUKtx=8uzrg zOJ#eDt&}|9D^>;NmD~7yf#{3Bg+r|j8(nv~;kAb4hLn5s=Kj}OIjob7O2@b`^jWm7xw)Onu96_y-iQTHXiN}$^)8o%C-ETVqY9psfdsqC_7Kz{iO*# zmXZ}vvhZZPM@Dk9-=(Bb#RCEz-d2;t{z7!d^nclGSUQ zLgdMyT{VO2Zyw%-?O;|?5ORNeV0<4Q^Or;@p!Ws3GK7=_1n10V)HD+sGSo2@Z# zopkLwo6|{>wl+t&r3B2GZm^pIXjt5o{pMr_PE0C}b50P7o8;?3!?d&!U1JCpwF;Af zK8}ScEZre>HK-|jCKu+@Gs9GVXLO9DkZ;+{-Sk$iRfTCez+_c zW}`I4)i|v05{cy4Mcs*ba&MP+V#D;MtdFt@X^((#`}KiTef&1`-AW;jw5OVCzWynS zTQD;hQFYp-)xjhG%temc7cu;6A&Zt_OtebG=^=rIKmI#jC4L*gjJZi+49pe;UJw2u z*bh21Qw!G9wV1M}=K%l`Qj(LfF;E!4UgQ*&FG5RATy?^nnK)Lc)}n4F-bQA{jKoM` zt*yBclHrdbYZKipacmve)NV&pzXIB4JyJr<{c%$+fP2BI5vzQo0hco4I=rZF$`jS)rT>U8$TP&h%eHPp?A`E;b zrb#R^n>|-=eVo{pfsDdU-KNB=0KZJogf? zWi7~=F@o#1KO0d)0W^-8t=*d_jDHl%pTyWNlucP$^)icxSQ=s&?sr6VQ)`$LwX*ka zt@v(x2su+0Tu~9_tOtJXj|Un76DlRR)cxM=WRB^;DCVY{S3rzSw|;Lzq;t5w$IG_? z;pi`K-vn<*2Mpc~HvHY3)M6;OG&TEhMNpIekHeY1q!V6lusbHwW3K;!PJi=bYqjfE znXEaR3^!{^zVCrojd$)?h;)iuHKQTXsu$N&iYteMK!cf`&_hZDk*P^(XhsA7BDQLu zvN&F|&2G;_CM7Xo-d5j`)@xUUa1Hy~bEN~7vUU7%W-^W+6)=?2{+BpEVCIxoR zRdoa$Q=?GL#E|i9aVxa*N=h^F*isN-nZvpqR8gjf=T<1Xb;OTmyv*@ejj;^H#}8LM zpC-9Y%}R@5Q{qGxJ7IVZ>zu$$YYC-_dE@hZ#;D^C~vR9GK zTp#V!a5!&u_3t;uozhezyh`ecPiF1&BV%#v|MIdVJ7oeu!l>_RX(71so3rH-VP!2B zP7dy`4Rdob#7vR>t-K+_hU~X+X$#8j`^Zh-FWLzCg`hd~7Z52d&G2KPeFn-Wz4g3s zJ6y@VXlqtlLV|z8jo~q3#&doDGf470xb5>LdASh?bbM59dhe%T6#7)mK_XH{rq0f^ z=I;Ji=}ZY@;paw@I#a$HM%2jVVt;a$l9CYZv&E|F4G~gbj8%()i4R>O>sfdWJ?3&k z!n<>$-a7g@e>}3rL|llljvM1=OzRp$i+cma^#4he-7*eYNcNO7vG~rz3!Xc&WG^T9 zIdzw$7$gQp+}Z~;yVuyB_Wfmq3pelafncR;qT)3Z-3ydP)*H8x?E#Ns)zqdju)E#(QM77<%k@~ z_a%ySiNp72w}sd_+6t%j#W-}l98Nko#73ee--<-+mV$Ep+$*!UKE=Qmge&+C_J>UC z_#>Z(h6hq}8H1clO2`n`j5{aa1v!@rbBn}Y2jlkiN{?#j`G`@%si)KLWLB*e8iy;M zvJXplr*TdOrF2}o+1Dn@KLLFeopqOb2fE(!yI=ZSs|Dw^|8%8idY$OkbvFTIXM}#- z^>Q;gm1d)2WU;h-9zi3z5FwfwY-Su=n~{FsY_(*#a$swV?WyuCx+d>g>iu~Bl}FQq zIc`c_5zJT-Xhg0M%aInRx~e>}s|#!wbA&O&LKAneEW6KEPi5t`yV?9ZJG>C-ugS{e zC68Y9tJqe(JqJqL+Gts)o3$=3g9NGW7{YIO>%|s*Pjz~nWh;sjJ(#Y5GhzNIPe(0u z4p!oR$RJtUO2HCmsm%!sBma&)?;=Y53LT^EmR%db}?fFQMiNCddm}jZ; z4k3Owt5NKje3FyGjf%MS#YK@|VjO5^ZyR4k+X2#`-OQ#Tz7RR49!;oV#6O*bs1@*l zqxW&(h^ea-<6KvBUZPnsM+;gV@z74(*sYwzS(NrXH8&{yGZz`!qP_)-d+?X|qYXdF ze-=D+3tYscEG=&9>N3bzjs;PRC4E20M$2H=L}I-x!Uf{5k2xb~F0pFSSF5WA=3XUM zX5ttshq|Hr6>*wG$E~#-FV#9b;ftDfh%%%r4Q&U*B?us5n+&I#gUrFlNk)apk=ihs zvD*}mDUU?&v)N2<>+;#xI?x(pK15>N(D%QUwXp0C0Gqm*5q0Nj(;$_r z4PqvB#{sK?;QO$)WB0c1*TK>w?)`K3&nQ%oU}g=iM-*foN4f3yqg>U1mOn|t)LOCo zaPKC=`<&?1ZNkJjkUs1foLpXKz=WfNHh$h_bmovcMY*o5M782NDeyO*o8gPj0Y98i z@Jf?Dc^>3COd0{#JxKg3{E2vIO_UWF#b}TVb*8ZO+Oe$R7$zItcS4;Lni5WQbT5Ts zTRVyla|U7;!4r)y`YZ|_L8xjq#605QnwG8QE^Fypl>9S`PhTj&$u2 z^z1$me_W8-On43Jh#oBaoj^#hFx8jDc8cYft^M3;tc#rNNBMNX>4(nMH9@7b0B+b7 zrJU#L1wJLJHWm9)idO}F0J{F3mV5Y=e63ic{?DEON4{)Tb!3MJEr7?ge)a!>%?%md zzo;+6SeA^YYTogL?{kvvY21IUECw??IrpGh2Wh!|ZnzerT|iZnL{RReW`=oA+*F+^ zN+~<}-}Jx4Cj;RnevsD=CM+Xd@F9J->scNfu^YuQQl}QIufDL6A5khSdx|w%3Clq| z!T&DmME4e2M%6nj0gag~mvfkLl5oAmd<`Jl3*RYkJ5xi~@(*CQMQ($aDgJ9M95vTd zHORWfD_aKWUXY=I_HgOjGB}Y_v(JZ;0G_i^x@TpBzm4`tn<$4~R&@CpP_J2FN&wNp)!Mt(8C`;1+Fnj zFtynQokyge!KdhuNZfXWVPp4*>n$1LRQ5*{Kk*{ZS`=|&mKsnzt56F$bT$WqZtzd6 z>|JpRw?JCl_B#AS&}bo7-Wm>rcb^I)|%h z4=|X^Vefj@qkowIb5iJVBZ|>Z$rz9!v@?KH0A|_+jg&*bFQ_Oq_cO9ZqNDr?b`D0! zC!8xIv`Hy{4c9VzrK^9pjv8B=4ObJBY|p=a;%Qs{;ax!)Y<(8y67JiH<$i;bd|Lyi++tKKyk1hs#fmlu{W!CZg9ns@S(hh6Z=1qv~vunvm6$#O3^?1?%l4bXHm*?c>U^lS& zeYu0!je8EAzco7|>}GW2@N3=6mxF>beQO8JOt!IFh3oe~bdXwB4I_)CZugOGl(A>vA}8pEAOjTY|v;^!@;5^hUPmcK3) z_EdcOY)Q#DX$XD3#qM)vVl)s8uVJF9W7Xpa>0g}QA{M)`){3wj&JE6~HF5CLZ13hK zOWfS0sP)f!6sY%E!;qT-Rii*t}( zS?$oU02#Km>pvBl?z9M>)Z=+&F$Kss^L;J))_a#81(n!z0b_`(ZA+W9ug=8flOBYJ zI|$vZz$z21D_x)KfAtgzb$-@xbbD>knR=V3C;_hF-!jx`rSffOZxh$kB8)YXayGOIII;%Wl=WWIpOQyAied=OQnp zUp<-{ulWcVK!NKB(%5agXyl<$&RRT9c?kYQ*jVd?9J}-XKgIBoc*UTS-`>qf3#!@r zzQZ!;&z6RWe)Vnl)ZG9^81kTh*GFJIy6oCLAF=@WlPxCMyYrLX9?^_R#wH*!y%Y6A zg^!#4lgU?TZy6LHASIREyZ(UK|7N>`z3ahgGRqY5-3C~8z9Yh&?&aLZ2U@FtZ_#C@ zH(Hud4psk(@doF7lujlF5rZwvhp(-k5iaT#`gf*n{toLv|HlT3gJv81*0r)d&(W6U zn(M3iP>$(Qg&F|z0Q#e>dpO~@p)5_cNjfN?$xK7c-aom8h0Igwhck5~5#77t{o=fQ z&pMnn+F|j-Ae>{xtk`!N2=+#!C)R7qegxc8p4m4pUGgWG?uL+_$3L6Tq7ZirC zfbPC$-XefA=go82bY#;D2DuLU~`lV6t|z)cP~o0O&ssZ#=XV~eK6ays1_XgEy}N7cDBl_lMU`f2-Oi-;US4+a#fVF9wDM_7L5(AYwbtUG zG4P`NaJMJsj;nX$F`&jJUpIdw{EL&r;DP`xw75NLj0_$FKc#_=>Iu0L5|_@oIBF^h z>6Nb0!T1x#<|Jo4chnKj*egj!*?a|x%<8Y-n_6=4oCw1JuNs9_qf)t_K9w=zi;$DUVXbv9ic79cb@2hNM18-dChQsCCEEe%S0NjCW+q zyx&o-*ya1jD6RI^pJ^9%{B2Ft_dA+G{}1#geB3`Uf7lLSllSOT0d?;4g(1`xW{KA6ZOe z}&w3s{PQCyLoiGfsMWxHRn1-=)J**X9cFe?5xIGz^5d?agnto*WO=W%w8m& z%Li(!U!H0Mzk}g<&nxLD{!qU4Yf6XiISGk~-ow_>ojxY)7sGB=rr!tYY)8jhy|szn zD|3YE0dbVOzTDn&fFO(6*66U!1Ghf6V(Kcsx_Sxb*FDY8R3GuJ>qohjS((UE<5hnv z8_rO4ZcSFXkD^fAh&E9ngUHlIZe~^J+NW(y3y-r zJ7zDWi&E2`*>t&Etj<3jgYO&aM2j^M8Wvm!@8*l?R1~NAxm=!vf?FqydQ1o0XP)<_ z$`8xE9|1%3h-T_Z(LvA+uBY6e6F-C-ue+ZoIA}Iw5ameo4pYto=}EVZpRbA|;b^XB znd6N-8wLCRIVJ>*mAKN<=JQEyvI#{fPM#>|-g5(mKM^hsVhtyKG~e_|6IG_wiC#IN zJ0?#^47&M$9I!19VLuprd5P*)h*9S`e!iB0bPnIG@go#k?A^`|bnto;YK^|~1*fen zo8~=us50RTsA+GrsF(P`V5sgAV&`|kwO-wU9Gk|eXrt`8BEhk%SiF_fd#RW8i_%zr z8Y9w2isUD6L)SVG?(2q}ZVpRRT4;FI3sytfn5xF{d^Lyg#BwjwQPa~&K!8-3xoR7l zVm;Og03a+M8sU>;RQ+ujB&xTr-$}g-OEIdgk`%))wZloMewdS5Nh<{I$x-YRhxs#+ z@oNmlSB?Z>26Es@**j2$5p!EL7oo8Kg{%$;o94Ee;^3Cx)&Ft@Dqtncx6QHkhou@l z)A16M9+TD#E3`c(wz6}ZQdc*c9Mx!Gv_V~_fK`^xH>y1ZnKU8tFp2EjGd&87kf3+p zzVoDgyFZJGJD?}Vrn|7*9bwmjaJn?Inl0`cg_;zBA{N2;uh8|BLo&zW;Lr;W8Y$$} zn`YX8*`CL!agbus47Fe0QaE-wfa?To$=pZLM)=1qY&1XVU>I>+#wD6Epa$kVA0Xb1 zLlWJ!rWi6rMwcyT9lx6F=RE~E@Jrott1vlSRHOHH&N*|cpvoWK7N+9op8p=G?gD@1 z;oGC>btm_?3=Xr+#v8IWaKDXlsa~dTSy-_3&5LZ|xrxp3CCY;JoerMdY6s8b$OeN- z@9sONl z8*Ih0Ls+Z!8Bs0}D)SvozgnNLZ8@A3VcDWfk3L@Q7m{-pVeDB^aXUn-b2=h<66}7R z{l*T3{|p4V3?tX zzgi$f49)Sgerk*;r?%9syQRK9`QOaHUfnd(L6^7|)A*x$x?L)aUBN)zJdiszAv-7K~WaTVNz+3tJB3UQV^(^~!2BELMn zxTE?&;szboqlnoilq@q0tOd}5SlX|x4BROLTO5x{&F@xvNXR8FVHr#AQ>$~(iNdMv zQSLY-%*cIozMMtX`GBtdFgVaqetqF9uaG2uS3VzwW^T<1GR4o-r(}D04l#BHnWh6H zeJ6gQZP?+xn%B{=;iKx?_#Z;*#}WiAN9&o)x=jXj<)S#l=PbvJdL!E^acoHf~$V=*t35-Oe|!-NUWT ze=F<@jcB}nz_l@*b@<}9pD|KYa%4XQrPza|5RK-$J?}y217n_8e>9h~sIy6v}n89;7gOAV!Gn+U>ysF8T@TnFzw34xvb5 z4bc0?_Cg0+74<#Zcc(b z-#OgNr6kFAg!Jo6+JYaRPu||lQE{3YfAvJ^MZfk7&}hw}9qX^_jBr-W3+G}O$h;X4 z{drv^=Moifif9qgdKAc}VQ9q%4j&2zR;i03==KMtwA+-LbF!UtTt1_O7{{}5u%{bY zvuqSjsu3Ek?v-*h;7X5X{|VtTcm5G6)l%1Qa8?0}wS*@e9P-5R9#Zr-2E zevbd-mlc3;n*1VgdT@_NK~ihBWJuuBLWs2?w+*avJ4Y+OJ>iuyK2^19>!_Z=lT$SB zM7g`iv+?t~$=8V^BMX8iaH-&{1ar*L8ZQ+gvW2}btCOGWVjsx3cT_2KlCRXBt$+V; zbywc$urw8$`(kRLI0kv<;ef~@n9`*6n;QYFD6HzV4%Xs|y=~`V?zM+*ZBG7v=n1{i zs*+*a7`MfSphtwtBvef99vGKNjkxY(_guKpM&qVdYDglcd2m|a7=i039`;G;As;=QD-+Qjddt;*M9vyZ(Uz@^&i&?t_g1|@XU~x9*6G?oMO_9Q$Gz?Lt;TvSbjVpXN`g+A#cj`f zI^F4FnQaD?$Kbf|kqPrrX6cz~uCGgbK3oyM4J!I~{f4kl zNHXJ-l~R9v+QrQslp{4Rom})Q#_xLYbxP2eC5mdhZ`tJ?M2kl9 zKoDJ0f6(Ka&$pqLa*posUq&75GMA`%5ynR9Yt!MtP?sq7n-=P%^SxVw`j9h~tscZ) zK_issV|&ccBMQ3B3u#i_WK1SSA)2uDK{AvDq4g946Ti5@rX_O`hy`8Fto<_<+H??5 z%fM3Kf$xScLgN*I5lztk+GX3l+XEVzF}0D$T8IPA%06`+$Nbtm4{-QNu=d$nV6sEC zv_n`%PN|b@v!*3Xzgb1R;w&)h&eqPC&rkYbKN|uQ-$v?8g>+v1`SN<(%Yw%LUtS8M z>q+gqEMzovQPnASlhIC&=gCR`kD_xAXS)CY_>4KsS=(|f$LxS`Bat$4n$y?;bBLjs zvkEto$#FTK5-Dd!jxkgY$s9U5mBW-{2dAR1B-H);{QlW>?Yg#W$LsTc9iGp}^B3@8 z4yaGO{cB!%mj2ovnzTK*@puyGldEI4Rx&Dz1s9qyc7h!!MrS|pn1Sy$q$^@}9O__~ z$V_z`VATg2RbjT46W66m8CxBq$h*Cv_k}RN@@hk`c7mBf9)+u~b3A@TTO3n}*f&MV zrh;->M|P4HHGI)ak|%tK$PJrwUa~5XhqSF~ha0-l%(|;~ACk}EJpY$rN_34;dQkac7@@tBms%0CV3t` zo+uK8sMPCPxao|*KlSD%@HjY&%Cok8=LY?q(!#AG`!YxhB=Tp3$N0Se+?TbNv@a%_vE$=gRL9i_GTrD}-XSEuE*KD(l7ru{RDs1W{Bv-JC0y*zr= z%*}{_XV)L++8TPQC2S-_T^sx-SMvTsvmo3#L-_nXAtz$Bv7s!<+VklhK=bV7a;YHt z*Tyb&L?fqH-nbf~$y1oB_JS`-+vfP5dA8-MYNEB;)UkPdBI;Nw$AFsR97)r6h zZ}M+9_abzbj%y7bjcyOE8Fxqpy$Z1_+x>l0sGz0#tANf|;AcYt`deIJ7_X@ z(l5$L5fCOWD95LBlecN5WgweX@$|_)wO|O>Vt7N+xqv=$s>pewJRAKD(A__RCM<^S zt@Ul!K!O$u7q@aDbV1@6p=Id(9ki3DfhSAnq0(QkUS8~conHi79Z<@lYZd{YB+wPd zo;O%#gx4O!W;E(e;q51Zr$RN~r`(}TOT0jj{OJ=Cn#-jGT}ol`YCF^7mTtq%6bpi9 zWWe`s8ygBKK%O{Do48mEodozO%Nw>;fU#@s=(6+GWI{ zPYwT^2Afo#Q?ot3brQP!%qERcXa-8ci+pHlRiQeV$%KQ}IA0iW4SOC;CkV5qlZgGld`U@U0PXVSi zheZb?9bMI{OaB|`sKb>Td(vXVt@t-`l#H8(8f=+eBZ+gzQsf1K+SsO}<~lP+tyEmv z%#rD*oXgT59`6DhhVpGT^6S50pIZI{U66H#pRH1VB!E^P2X{L(;RN2 zeg%Ttk7y#BN>H*z+oKPC@)hQZKfGGlA}*rRlY!1f%nl5NIs<>#(9#4!U)8hJ5~Kp# zVruSj{BPwQ(7Op9J{>; zdl|e|q{aet0H;?0g2U4+L5GWI>BJ86cN_EqH52X-M&W~{H5O0u^zt5?Vhi|+nteh0 zROfngVg8Xi{}l!E<*r617_@8_z@RMJ^_R9HrqHYHO~mUW4=KG~U9k$Xk7!@<8!yF@d8@8H}_x$cnucUO9y1->|`{o4t({pq;No z;M&-1CQeo*RYPEKUx+cc>q~Hd8%R{za>pa~zJ+7cu=8A)W7GSdD1I-lZ4Lt0Ah81g znkdeOxu}eCUoq+Hl0-~9O-wA3jZr#b2#6YQORfV38+C-}ohBCW1sm zk1{`K;fY}4(WNU0Ts^~S3E&O+Lt+u<3LemI9sGEP;Jr4Ll)8vZxBzdCYL7}QU_56`MP`vtizh( zbhtT8?V>l3R9C~vJ+`-TTP%obd7L#PB~~}`@GLir2cn2!xH>v{Pa>@I!3JKQZpUG0 z3w|%wFl>?`-m<|^j}8a&C6LupXEu_ugSBCdUAF60vPv}dwi_eH6P;@Nc$KJl!q>}u zMiel=@xFY8_-4dpuyVJs)6gb(&>NmE#wLm`SV2}Tlf*xL;k5K0=$|Bvz_OKli{jYo zQyi1vk`^h#D&&Lp@n|N{g zlyHKHmdOwdzTxHwzD>N5W8>oZQ5i_~OXxYHvt?5Pf8g^?6MYI3c~@#IoV!uW68rdU z(7KjmYUcbtp;v4ig|v&@Z&l9;66WOqlWGAW3x(SfjcPudPY6wV*)`<+8jK%3c$FBZ zk9eOtYtNqM$hhJ?158;69u^_H&PdDh8qIm?mMJ|ibvbHpfZN9^TIE0J_LAF02Wb?XY)bW~Hoaz~x36akMm|B-NsS4gRC_*|Co2@G_jg|4qVps3Tp%8VAra$cc4ni_q>B4erQ)c%w?{&^4#sRd z(@`B0U;j;kWj0c;{a(WsUs<%X_IDUuK}{LY!RcCGSH3y0#Q#89XK!TlbAHY6p_Ym~ z>UGUSVkP)thg*;yy^FPCZn(diTf-cj65g&XR!2i{<82UFuO3gP((<3EhTvOwy?;^5 zyGNJoI_7gy9Y38EWm6)Iv~el-rH_ndaT7nyzdi@LcEz~@)YLJ8#|(*-Q^`|p-?Em2 zlZ&A3p5F&g{EEPsmyc>yqcnKJw#yda)z<&4^IoCE>+KC7?o?f*V}A_RAM8{Uf_F#c z%fEPf)cchtBh=aW#f;ZsKABw)-Y-kvd+J28USEmm@< zx8rp-B{YT2tjBMg;bzh8cY%us;1qoZktos-1oI=NY|L}gC zfnfwYR-R#S-=hCWKC-@|qq}L>zwc$TuR6~Q?r8wz-A5ve*G_dM8zVoUHWri<;OgrM z`G>B=Rj6sLi=c>`e-b(zFVYVj{leNJ@+ba;TM|=CQvxB#1xxK86yk|PU(;fL^C;IT z&~>G-I|va^i#a@@|C1M`6joc;j*s4&zo{YSD7G_XIpe^bS)HAec0}B|`9u&rA4o%W zvH5pdIfN-keaFPi;SO^|-fL_ss6Zt)Txj6boZp`Ev6=n6+nSF*YdYg|mOP&KFF~?| z%d7VJO>I+bT!c$ZUxfv87O@m$O+`r*wXupJ?EI(se>KQUvcayIgVK&g#OB>@EuDp4 z9rnkT^iW^r()hn!s3PI$j?_AMGwU#B@ye)3PJ#SnU>?*-)}=c*Ha1*I{lL4tHIs6lah7qzknkKt}D1l|@a zwyi&4VW_FS4>asdzLot4LcOer@KT@UE4aq#+VpwfPR%=~&dy1)G&w(>(R*@Vc2pR~ z)@``c-TlwG7zO;c5w$+nma+0S&9Nc?*0dGEVX z3aVVrASk1zc=zqBQ43{a!Scb?Kof=|YjdP3(WJ+iz2Wv$Yu&a4IC;RC`E9I9w+kpGYt=V&A0 zed$`9Suvdy-n)7l=sVXHLiJwNErg z3n2>sXc_}uYUlG_y~gP4!1D%5M7riC(>;vB+6jq1KV>4H1z5i_DL5ISR~(QEPzUVC z8C~hnMXmNpMmnj8rp!13~?FPvfdtGwg4dm_Is8_OT58C=)hJ9`NL zAP{zGa?t*o`}Dwb4#_0w*WUl~3({V*Op)>-Neh&^dAG zGjQf=RE*gPjyP&3mC&aCJRM1;-D7LTa5}pM-!c;MWujb1v)QuRL15&i1E1`sot^nV zGZjoL;pl5@b$uO96NCtxE4inJI6F^hLJ9Xd*mczr@06AI531eSy52O?M#_8|F#Q~+ zvuTEoWUFU==HotNUJ!B%Dzb6%aFW8HHr)xMFk;fV(EqClRlw4OGj1lM2ti{pR7u2} z-L*;OsVTwdvzZq=c|WEw%YOBbBqeLu?h;o5Q5~l4z0y%j-ng92e>M4L0AvAg;*~O4 z>~{{NZOLtX$CIY%il!x)fvYC_lF@bL0WXT?j6*>k=OSw`)(G8dQQB0LS39t;UdA|D z4fLz$n3T&qajTeDqO%Ql0R>}#>*kS3$sc`nfAU9$bBj)mUVOFjlU)0^aCZz7v|F3J zUsdonJZf9F{79=tk=R{9eR>e%=|eUnDKocvRk(<5LkryW{^?HhEqdN7dk-jPuT|q|OTvVS(>9j+KMl`_$|; z%vyYGj3=($tsv^}i_8z|W>mbaM=!CMnAf}kYktXGiD9>aZ;=OIG2x|T~kUNGsP{2^u%@aMF2SDWNE z*!|USQ?Z!hEh9gm17Unh5@pc9m~{_Gq_up6N(nX#RBUB*u zfRq{^m}ilP=z=zaWkTfYoh0Gx(SL~+0FGA!{q*Ns=FeFiH_OI@s?@FsCv`8?VbR5 z&dU5B*x{vx8U?y*XhM94V2qcsNv-(wKEimM6bxMqC|P!j2ok(OHPOF`z)*1D%Z_9vz}%|%RcP9MSJZ-@ZR?^3A*NQ#XD6?S$z(E zM8r#1hE$$%Hm=?%=){N=RafCUEc>CKNv#?IEK8t=L;@+B+>}cM8B(z zMUr=)!B0jA`b>*{+DM*h694htz7U4_<3zhP4LCfG)9?IoBkI(YP@AsvDK|JZ?K6Yx zF>W~S%Am*J3)-AWmp6Km9dDqF$k9Z~Oi?^d%esQArzaWd*UUTDu|3c@B>5nbAdOX@ z%IjWZ%&qi(33QwUq$q?HM)~ZE&6`3lXCcwjo@Vu7oMM)b~N1A1|9~i8c9rpG@I&6!grUf+y?x#10TfX6B7aRRj-yA;g zWm0XgVH%c{=GcY&QsBQCihiJRL1LFpesOe2ZDb4Rf>TnP5b8C{SuK0)JiCGq(X#k< zeHn=`((o|Cj?1-X81BEH`D8hvBkEDmBozLl<+rD;S~Xy$z?~X9K%rasvJYEYkRr<0 z*Kz_wXT+0mijsGSI9$_$;KxKH>P6WvqcA*7952`KoiWkFZ@h6S_O^W0Yd1&tDW_BH z=!tw8FKTKhjY#g;=_hq>Jv*1ph$1Lv6Dbm<77KKBl<9UJWx3$9iekY)iKE~9e7P{J zE6gomX@Q?wDZk*&foR?`8j($rk3gwl4z5@_KP4};wiM?b7oM_df4)qZ zT50h>dB-BwDyzl4Uy&hRzH63gY`$CLEU5tnqm(n&a?tIPt8=wf8lQb17%HwTGUHqk zv}Hr8&!fn8(zriXb(zEOvXR6l=J@&B$!cd zO?{`j+=xknc3Kj_!vBg4%=n~g8;CRTIbqBwTJ?V{tx zRFz@Os~j(zT$H~H3}z&2-lq&4_dI7SL% z+kFhUIPqV;P#EMT%yFZ2+VXh5BgARkEVTdek351Gb?LqmT~{@8jQzDm1EE9&{o2@j z@cZT!E>G{k<{$CHutx*`9!CL^{co0k-KYfOTNa3L;9J<%-kdvZM031MlG@Q8l$SF7Uw#(f*i*XiU}U75m@yXLoY%ocIs4xEtTMkV^ysw4Xw*3C3qX(oaqhTKU?xogDa%Im+_ zTrq<*zN>WkGib5?%*JWXr;M5c?^KZ6bxCzy9I|?@G$65+%h3Sj-)(&y9?826pshg?liNDVwjVMUn%Dfj#7FqYOs^S|T z(@uu?;PY=!m2AcW)<@@0Q$lHK|44F=K~RfoqdCM~g-I!_^+@PS7);V~uLm^)STi#g z>pHJ-%`N7INk~;vxuA-x*UA#ze|*R>k*PaZ<;61AAi2n3vBT6dr;> zd=&5ur}@2KZY06cfT1VCEVfg;{#cx(px%3M6=UrB%rscmI|7nVPIQ73(EQCN!e`hN zwAKETsO4hUbAfi8G3s#gyXOWsN?#jL3+hCrH37Fl9W;5?Ca$9RXPsPcI^sokjVM03 zQ8fCOWDuQk5FKKEel=nso6{ybdlahek2asFQqP^gKe)58)GLD(#ET&-y;uk+t!L-* zaVMG{PnSd5R{$cQ(VY(G?Kr8GiglIA-i2}Zu@LA+vzd?_pQk`?--~V?K3&8XS$Y|l zTr|hZjt(%LTJ({P;oVPGyWQ2Ivj)7fazZ*Lw_QBgSte}$`fut`$#OvNM}3Kj_=lFd zO3@-k4HcEaw&%2bJ`30$Od~MB^@V>vV&FZA^!tS2A4x%Ez75WpyP3XbFG~;M>UIk2 zCtla-hZfb@B?5^xU+tU)9R#hE#|VY!y4Djasl4|k)pc4fp5?jm*6gd-dH6VF0W-S816T8Zn=d z^%9y}bxJ5PZ-HvAb2}{53|kwh!>Uy8KUKwTxBJ{u1zV#Uwi}dCI6Zu3OD>D0lkN1h zs*!esnW17j6|9`GJ)s_MIUlf;kPm+w`l2tud#)({#d}`E_f=6|HNpo^Q--HJeV_wV zKtv?n|4YTRlFfiL!Tv7r69qr{sRT>ZPO#j_4nn48Ll&CU13-e?_fR6)Q^bft6+5k$ z%7YDtyIj$pH5hK_ayF^D%-C3I7_FWbJv!Pi;{(W%0h!F2&@l$FV=q5Q+`I`oMmP#*AIJ^05?^#I`O*s}c$f9^c9AvsU zHr|N{hshoISWCe-#YuN5Wr12yvB=;6vkL+>v${~7rWvV+cl9$m`$w1%=7Iq6nsF-Fx$6o=&I*)MQxWL;?G4o4z!U9@T)4v znSej6CDD+vJl7F1ka7&rl2j{)Oe-eZcKGsWm2JyV*^_AAbtwz`tGU&X08pgcZC%A9 zyTd%jLvchPG}TP!*Qi2ltZ`-Yq#H!RAL*Raw?5M5qRbWPF#Y_LAf$quGOb*&)i)3= zl;&8~3XJ|Z8EC)AJ+@%fpP4GX)+3Xm_^O82e9|XYeQpc7OHpIUML=M}X0_ett}?XA zQ%SuKKh&Q2v*SFZ;21~k?}I_P`~*KqExte(aPMr-S*``B1E5_)QDG8>RD2@-JBNXvW-^_k)QeQbNCNmAGyWY{|?XW%OV`UFVn=o?4 z%x97%3SVw*{e2|Q-P~tW+A(e}tnSmbD@}Aim=4TnGk5!%?K;TgR+ZC0K6!*l~ydZ_$pS02=O#4du2+pFJ*_wwduWge8R-?nA>7lb`xMJ@9%Cx zYi{!H8-2Y9m1A&bK3T?1MUq|jD%^M%*3{7dB2XeMpIR5}tgPkDK zNT5cnN^z^PLU?Bke8F$`tgkL&)!B8)>>QuT@YUSZ00gYjJ2M$^4mMr0y85h!AZurR z-H~`2y~*os*-393UGf`oNs)*apX9;$d$B%Y;WA&QJ}tI`t($e64nw5OjLtM4I$J@h z)B>Y;j}oC2HGv>4R&Ck1ngU_M zs?c8t+Sew7B%QzUqMTB-HTKILc^86f!4q{wC)@qPu%`3sX9h+TvNUEI^|_~;(A;hf zER+-eLO?9OZZV9*Lb^8O zcHzbgV9G9YPlTtzoX;2?s?~nI9u|z{0(eB~jvus(jE{UM=JpO8Wyzso9r$W!*rLpx zmbG2a5bG0=OOLwFYD#jbYF-0KuCMF}xfZkK@5?-pH|)msw8RmXu! z2^SvZB}S!=&X+bM=lC+N3N=AL2YO-EokLsUdCz$%8f435> zLt595cLsOdnive!m}K<@cn}M==7uPC28hDm7!zQFi6Uvm3yTacc@opE8U5Wvu^z`> zSsP%B97Gsg#8uHmUN3MmA(cP9s`v{qdp%>p2pI>)Pv@GxI%G3AbnRn;kl>&S@8A}u%< zgmdV8ow5AnN1n2e$PB;Wbnfd<)(uH}LWbIBv`Z*0NaP!Q61Z`4(y3!P^Y_pgEfa@CD$Ce#|~ zyWJ=(0{c+!=FZE=7>hm6^GRDR;pM;97Hb9b#liqG{A1BfZ~rd${<4dD@vI@^epOa% zn(yF*-}D&?Nlz2tONkNLH@V9rTCY%V$*xFw7g*6qK?2HQgGhrOE&B(CKgAb8FZQq38Q& zJiTpO1a`P_K@962PXp;&oafT`mJ!J@Ph8u80JsXE?}`7Tl*n71J=yG?W2@#oSfHGf z1YrU}2Vkh)JTs5gRvjXlnrTr!pRw1EQxtyz%{Jq2&T@+n#JuwTRIY2DXyDl_Og9u-)z49ixo2UQVT z=I$b{W&TV+QnC%jFqga;iH|=$moBS#095HHef^=EJa5ENKCM~ayW0Za_gb5@k^9#b5}5vIxJ^DOC;PrXPNWrYQ* z<2LzSG!@tZow1JaoZr%u;bB((;x1`MPqncb3NE*eEF4xC*=Y<95F01G)> z>Z661t{c-`i1%^D$#DM}Qdd@c(O^|dou({eQmZ%~U1Hlu!>o4^28)tNk#o?J=( zeTj=sVX&chQy@SZy~7t*yUMHA-Z=^6s&F7RrN(-O5kv1PDw)5%1FZSww(CEn^dbYY zg7+J`xESr;ayt}1`Vaj^eI%?JFiP5n68?mlx>?weJ{Hxk1M6&y8-IWb|0${qFzMEy zr=kpX>rTME;c0)^>tBByOCW*suwLt3hbYRSb@J9tjL)}5+u!F=SLtT`K{rZSho0yYz@HLW5 z-u$)Z?H6y%WBG4K!Sz(Bez;=a%RxD*?(5?w=Dfpwz2p}qe9_}3_j|U{vhxVfgo?x? zcg&JQE|=c&d;_JfX)!o-Lfve|TMJhx#0QOvZNnz?KXj-2!oc}_wPCrYH=QnmFyZ`> zr#hIwSA$6ZqI`v0dE5J6Lw`sY^0pzG4|@LttuIx`foiO{&`l|c8;CKeOK`ek^ zyY}PoY);Mj()l1Orlvo{@>T!RX*2ZGr(v#?*W@)u1IVR5I%@Iqq&XL`Ob$?qia(=Y zQG8i8tL1s1Ww3r}UlfEC$$S}^Q#EZgd?@NW~;}_)Wr*!8^!+dSe z`U16qnx(6dP~+>zCw}fc_v30u3wZRHg=#|vX7Acm#0$R#{?Yq)%+cwGCyE=i@oohGzNe$}kFq zkClNz8OT>v5`)m6ux&{!78>?$58j-t0;-_ma`}}{JKK-)<=wbBH}xcH%sz z^gu|U%C^|tThK#CxmEW<%I4w~OCN?ohyRanMr}4QiLq|o@5>f}C6H?lDDhCPei@OJ zKY|Iup==Fc7boJ}?keq$E|({Nh^XE24$N0!Et`>Vm7V`0T$u#&t{sRQ1G=vd zEi`)1wsNCKyM8`eB5I;Yj2OuS{|YFd!u{QDYxe4K2d8w#3ixN}@!WGpbnoa4Wiw^j z^tx|aKF}q~*1`fnm_iPFMmqtClJ&09H)a~bFvVlXI_vhlFHnRy-;J?;WU75Tp62BVzv7-+6ivv`GSs%S9QB z&K-#G4y5>ia@^?~(}8(b&S0HtGC*1@(m;#Mr`E>aR#}4!teVD53#&In)2lmmzs26H z5figcrx~1#^~buRz=>mjIRAkf6Y_%GTG2>;-V`83Kt)il-y%E$w!jhAT=sYXch-Bi z=H^1l1KUFQ_ki%W3K|y(`rrvaN$0ZBnQy>*Ue85;&_w6fD!c+Z0j_89Iv)4+C3;4o zem7c}j^_0t!0stOAGga_vtKd&2!Yq~4fuBlsIf@zggQp*{5qcz=(;rR(QW#C=3TKj zOtXa?Zs0TIHmeXpAfD^`b%LUU{j1j63$v8#sw`f#pvDoC1?$dI?>`8w|0HW>ju1XB z&ydA;yggMnm>=JKRbk~>8tlZ`%sGj@l1z?QpgZPRYpt7O^;hvON%FWuA&CjpgA!GP zO&{LqHLRpxr~2n~Tyxl7HS}yRFLl=AEZ3FXQ86Jzd-9v`u1o{qWv8q=fwvT;BUQZ# zNf~+*VYVz_*P*d%M6CtaCTR(9k!NMnKvO_rm*xV=fQwD{*(jtr z#JO378m`VHp5=)pa)!D6oUKmP)<7af7Jm*T4k;LeHqX?6ss#<>7kCGM4wQ?$?GaHc z@Pyc!1#Hnt+!E*j8#PLf9~Tdy7f!fqMN?ggucl&{`zbb12fB5?k7|#$XW;k?VnWkz zK80E@ikGFkq>x^JLMp4>AHaK^PzA#;o6)7$;C`<B0|o&5??{2>I@omK=NQA#0Wsny`&9b& zJ)B|<1c=b=a6F~jD10syQ*tvkFf=iKjKavXA$c~dCqIWR&9dm7<;pj?y}e-a2OP~k*GWdsDdWpb@5=XCgbG(iEvYg zUKHi^$V35KP`Um@{y_bE+zI1aXw4pLeP;wVc1`B`c}dApjjY@}yULb+ym*+&!@j4y zwdEuABg^J9K^|45K(djwm+<2s@Xs{Nn2;LowZ;-v<*`Uo=5D`9fN#K^6;-Ahk} z-#}BCjlqrG@q=A2F-R8M_(nWCNI-qy;G!Jh;`$HN!I0R!7%r7o%bLabj%!XXrM^HT zJJzNphExm@f|3G)KYkh#vO;2SE9k%|==$89PTfP|g$DFLmbqO&UcIUDCF2cS%4#=P z2A^7;+nINrF8mPrlG_C-^^Lz8^L;^3zG5Z2AtW~tVq%|CgTQ)-wcU7x{V|Xro?|bO zDbyYUHwstLyX$HmY;2jzoSDL}T6&(Xul9;QM!<75P5t^clt;_;|HtxT;l#niNHk{T zAZRcQT%cojH3#MM0`| z_U*CICpIzwmAHHv;L(O7^w2~vcv6;R}(T0of&?NMD8wT^Mq!lw9{2T z&+^$8J!Z6NL+k}R7<_<;H~AK~l*E_}p9mbP{KV)3;*yQ!LkimsBi2}E*`eNJ_wb~x zu`{zX%jMT$#b=fn(1I7uo24zvFa;fb7s{toKs1aKeAypBi&~jZ!ktV+7QMU!A}-gh zF><>L_&G3e6-3xIR*-i8N%QR5ce?sNDIbzVP@yH6D5uUY=z?@IU(?0%W9kpj=x7$l zoS3N?7x$N_C_L4`$^5eY+{Vh$uZrGtu~9^)GE(==PheOWNU#-ApPKyIU;htf?ERC7 z;j{t;k5YrxXQmM^{-rzev8>Wu4a60=Z^jD6Q|bdI!9Sc#{Bc0|&b@m7B%S3%=_QKC zeCiIHECBt^crxV;NcI)qNtl|~={wg;DyNf%W)hhOKVZ6&_3*71fAmRJa=0r zsiR?<)dN&=DgRuhOnZEMNXqAMwShsb8;bQpK}V?qk$*RH%VBpBGCzxJY3G*-S9 z{WSf880S+Vc%YGmQNOX)7rlz(nA+xLoqi(b3hI=URkgn@h{i|w%qH{lVES8sUX5px zubYJ*FPHHWf=W}GhQpG`W|BdVJ<;N)#WIlQUzGevt!@9xFf>*Gn;erE?UZ<%o#K#0 z9Px+`qL-LxFI)k_LSP={i=Q7TFdFOw74gm8J2Hzz%n)ebsz$6{C~+#+&%h_QrP0># zfh?nW_p9IeBYa(U2U0jx8P({myY}Nb?diu>z`it3tqVgn10a7SF(A2i@ZIkvvoj~9 zYz>!83;30VAbDPyN6#8V%{pey&>kiu_g>%kwKZP)}JnFRG1RJqj)>M4= za8^It9=%8GRWu)-5{nor@dj z{H74a&qwvPXllro4auw#V8Q@kI!~0N#Y^RS`{#Gy3kx-7xeCx=@Z?&5l5-$2Taz> zT*dY+WyX=k7MHQ%pNBdHF`+P28CkKclaO1}VAfkSJ}1LOtNheY+HpJ^ez+Z4Gwpxe zN_fEXCnuWsW1r81C*qH!R35YI)qWi4UiT(Zk^Dxkit`eO0jHY#Zvt9$j0C>-vz|Fu zmIL9(UjVMi7$~R?Z3~~wHvCTKFG#e0f`>YN{C@?L`8GE&Jd8J_Hma3(%K3NcLt*SL z{J%Gp_|4kKx7e%$ZJZ!^2fj+p3u`O!`j)C(=y%x!aX3N4$eT4I{Lao!p_RB7qs|%k;82p zKRWRp>(?kkFYz9tawrMWllgJbN&XegnsQLl=ZE~zuz=93sju4BQFy#hK%hGd>)<}d zy}YG>RY6|zt;%dxrukho$Htqfe0BXoCZZdif0>kHHos&7x?s!h%X8&~tnQY8@TzRnW|i`~Q39!4gLmL8?3QgS3W^vGEm#()JuQ^rJ9>T7 zoX_vmzB3W;MLnxfNeo4F{9Z&s-z3(poAcTZrWDCREbND21rEXeDFoKv|3Jxt#)2AZ z0}1_8W5k%H4pZ}84ojl0t7`}7rrN5b4XT1gFTD>pR`9mlsf*M7G=JzDFTcr>s9m8n z+a~`9ihy@k{&l2T%W+&SVRvEMmuC{}B$JgV$LDvbJ!cv*T`&DJ+GRpw9RhCc0cT>v zo)WC9`xjedRn()ayi)zl_E7d%{#K7@r<;FJAK?xqZ=z={L%j=kV|1u+?&lL(f67n2 z4L5(cOW;OPH^*+0X_=( z=`@)B+{DD;)|i*m)#l0MvCros^(DrHhHgb4dizK6eloifR#;(0;doz< ze2zR<_W_7ee=)e?E?3;l*(c_rKmMJS^8My3OIv;~$ytJAfL0A|UM3A$pBIz4Zq8*t z5a14AvM{!YX2p)mY=P~)fdcDmK=u?qQ>W%X(EoFsA(z~}v9G2?{*1`=x`+feQXf9- z-!K17=sZ*lJay-}7=QeYVri%0y*9m3?|Q}~@xjuPjthlF<>sHMzBB45_ntp(UTKcq z7-;h5^UYtd(PU+2!kZ0t^rmEK|1T-D8Ec+o{U9|;$e*V?=~d%A%FBKD^xltHWXI># zi%@6+Ov19!>g)*wc{OjEpyu-^!FapzJp3SBdBS`xsrn8=K=XXPLsx6reAH*PACYH< z`00Vi(;ehC+KRC=P2N@d zq4OM+=d^?slR3b~n-4nCe=iqb%RVwx2Yp|FAr|G^fW&OJ$t=}zl?era8eL-E!JQ}Q zs#_;xA@|G_)vx#%+4oKU(fmhv)GQioB{#x`usVM7sTe+J0~lOE{zOi6KKP+OP8uKu z&bD9ECJD#EIX7j63SSJgYZb1d7ca?VspGh--#Dp8a1`;YGJ`*h>;Gaxw z+l+Osq=FRwkD~LAXY*^rc#Iga3AM#4VidJ%ZxJgtv1f^`Ev>3e?M>0Dy|;>4J9dW} zHA2!&8~e^@u-IWiF&w z51{J2I!j1mrl0;=fSSN5Op=|_i56vzZ>QD>J)t5lZH_Kk={$w9TzmJHLao85Bxw_A zb0xU;+VEcc-%ZQ^^UZ{@mW2nH3SFe`kMDrk718d(b(|z!j z1E=_#qU90dV)W|MM999DSJ%-$kR=7<-C4?HMz$<(NQT;<^>#iUI%4DT*2H6?B)Z=4 zP1jr71UTWuOl@n`5)1%d=HEqLJw3IObF5b_zV(iDy<^LJg{v+tpwpPlxeY%#ifse0 z5Jya|#BIb->x9bSDjJpUcT80xB;cBUwwZ*d)ttQT#5wguPj&$`Q%gIbhjG*<&T+)D z(8tvoja3RG>o`0$40^u1>7~4T+fS}w2{qxtzowOo8urZrgssy-_g z(`1|9L=B#%y~-NUh}NfhsMM+kxPgCjCS?{{yhiD>tq3swkt43z4QddVk*Yr1l79>x ziYp|)NVzk19bl=bs0&fBY%)%qnYIe5&~Z2zL||8jQISTk)KWz2ou8Rj#Yv6Mb;Sm5 zyboS{dJ)=+;HOX4CEbt1Z*cT%BCr<5xZ`i7QN0~&tXkbX_2dEjLNkRDZb3^WP*vRq zp*KG9iLgYgFYy8{ z9p2DI2&S3l%!B74fNzOHu>!LrXl5-i|RjmHzF{inN%H zy-cHwG_O<#Qv-9J^6w{v+2if^DC_Y-%FO0IxL$z7L&e9K@p*hY!k;$NQvc>9yb{4LegdlEnLoCQqqo}!z)n`o zOiUG5ik5U5Q0V}w@NAFAJkfq!Z*>z3#2FRn6$1raXD))nya@m~0e_CXHnN~FReRPj zkobjG$OeSWM9UI(Cg)>mo5>p0E2-L2u0pM(eUYnXAxXVu3j5efh}HfkS6iR!TH9Ge zeEKVkl12)yW|#IEAcuIh5XTZ0iO57TI*NX++D?oaSr-@IBF8)W>&DjTvSsv#YA|Mv zDuKV%lUH6kZN>jqqg}mnWy2>*zdoP`jn|lU(UlNr1J1sP2BwX+z4aI&(>zf!r&$O} zOjk+5ViP0Yw3bMy#1y^$txv8pyK3vyfPK@Q$$-Q1Tfa_aC z&{W-Bm^b9bomR6DF2?77xe~i&fuiT3*BX^1UPio~JGmtMPT6-S)&Mlcj~xIB4=5la zSf4jUeb@8<;OwjFy4dY@(Y}~rYbMkPKivykn^^i@ z6<5w?vMBxh|LjeZ6Byxmzgxe(;UW-^e7*+La}2;&g_1d#LroX9V=W{zM}kJoeafvC zS@)8bAv1|93SB#5sIoXw!4c&)B{@|5sE`B0nZTUPmzt(T`g zHd0k$kN!|}av2IC#kik=g*wnd1CYXOT3yx*X2ovS#}nvdNviu(!5S$e19W96Nv2h4 zBPrtd30|zmz9)#epI=Z2_B{DBJd`SxoWPjx+5f0-O>sLwO~PoyUuTTZOFNiE^_<+OYuR*MwVE`TAQx`Z zIISJ29`Xm;NuTFejefC)PjTB-toL8_tgpL@+2l$n+_)#H2LA(ju?7+@Ic^bUL>4ec z5T7+7_!<#Qsem!GS-)Xn{)wT;!L3m$c&kqM_5Gs~^&sx$(32KeR(l%b$L&Wgec7l7e9pUM zZ)6avOj$g?>Q_sJx}O9X)U`$%Ep0q-rJmqTDxe-SNpTYmRKl<}kSo5p*q{iAn_TX_ z&4+FKvBfpvpy^dBfjbdNwqe-?&yyaQm(gWETFVf)W#gStylYc~#@s=fd}HDVl6x9O zc7Vhh%^XMOj{bYY5INMR>Ddh_f#L9rT#<qv_@>bKT;cOhdpHB?)iSPHTM?9*|5f`nL$c813{ zEwAxdFHd-{K&qw2Td{W%HKj63-^zJ{mXknZWUd_v7Emd`pIMrGpt07+pPpH&vD#iq zB2%AWUnpLipW2{r>Xq(?gS;`uM9EvGkAA^86C!FV{2AM{%8?%ifbb&cRLmC*Hc=Vk zKRdBzm2Yx3XYmkoXY&l94#U4;$s%T3*bSK)juwLwoSIDn+xK?98UwB zF@4DCKt-tW#Nt6BTabvS!6=lcII1iU%ED$Ij*wV`)V#LaeVGD;xoil&@80yVZ>>?U zDq&kkm{{ffWN;=8m6@~snfRnf@jb&|Nt)hQa5{mYf zqP%5)yH)HSo%ROeN}OA=^}S3Hhw?(|=^tCB4^aM@-`UO1^U`ZntsB-&X_Ic9oXq&DdC)tm|8R>h_abfglHH1% zuS0M@<4fJIOt7vm2mFV_;f6bx2vbRo)YpiGXp%#Pb=Uakqo-kw{e)rDi*J0$5DidN z1G$1v%K$3js@ZrbC*<^3M*F1J;L{cxUB9uQ<6TKxeL0i=l36+b8@q69>k=KfHd|v; z)9CGHx(EiXx3x{bssY#oY$i_da-4o5E1R9aa{ZuUBVKlVXG|V@MRnlIyqDTFkb*Sn*N#FU9oQb?18n+ z2Obd=VlMb}knIh`v^{_8mW)vY#yseIO`N1Mj^<1SCX+>$)a(uVbk zX3Ofm?oMjg&Mt77L#(G-=LBJ_@PkYQP73Vx!R))FyAVMz%UM@xRCyF3KnWY@HmN5E zMSnL4IR|#2W*LzVC)R>c^Xv8zQ4t<@@Pt511x5k^;rWRAvtd9W#{ysRyes`5vxrx( zyeaswCN(Ox7CBz6exsUkY>EwkC}g#)Znk%mOhncNmyo z%}Vn<=Hyz6nn_ET(LA*qrI106P zQ;S;yRrq+j+l$S?4t0-ys!TRg7~CZh#kocr_W~`M%kM!C)o%j{+Nsz>(4vcnhA{0= z;f)Gvf;d(urQ9BF5PT6}@{(-Q6JW&3$XV$h2fdsDq(cnVr!6;Nf$B{RA+J=v3gNNsaf-is`JC_7n^6KFGGrc zOg&xhL@{vlCqPRY*YFuX(z_X{%}^ZI1?&l~ulq8$DO-F!?Ujl8@8zm5%@|3yR+;mj zxkc10>C%wapsV+?oIIBA(UT78r0GY)5@PM8E<&C|oL{4@WbINyzPAH_6te6?Wzn7W zT*9wr_sT6w?pB0b{&qGYYU?-H<}9Oz&CU5NfK14Z=lPx;x@LUTkk--xyh!uh+5QSM z5q|+i>Cj4>Gh!UdDAh=!$|JR>QZKWj*QAEF=)0s}GBAP!4PAsT(oo-)9VyzO1eTEzX z$yBNJ$>3tf3_3GM1NdkL=MIdxP6Ab1(nCn1FCzn<$)gl^rcQF}!7^w$)$E=g!HiYJg6psDQKEK$Rj2GCiCJsP73zM6j^zVDk9 z1L&*RPiKk9Cn^LDO3lYH{)|zRTOD*zEJx?&DBXa~UydMB20sa@oq;SP_NPNfOtC2o zbcnkLGxujnnT-hiTf0d5V&;xdKkEY@GM18e=AKskxnR3;!7&WjidHCun9TmwzCPX{ z`!1HrV#a0ifMBniE^bH;`AHOO{^|$KT1si*P8L#_i0bq?g+42&BYz{K znC}}DL$fwY!8%n}G2b^S-%Hk<33(Y(Ik*a(xrVA1QP$#jTJ_$QMGSYRgC@80NHpl| z?&h+9(7F3_Qdfb>3XZtCE9UVE9Wg9l;^U*^!Of~cY?&_cZ@$?MSa74V`~_7COZ?B% z#?jZ|wf^jT-xW^pH}ghUVpv34U^-{&GzLt9KCY+zxHDi! zop@X$$(v=WdZ!DhCV>J4#LfXIn0%u0OH>m5K%47NQt8m-QMdx`CDXIrF}cDxYsD zXp;L_H!FGXh)|zyYV9f)UEoOpqDuHrH}>q5Jev3?jK9XlNRusxO;|(PcPYH#23nx= zUoS_5*Sij)GT)OKF9we#m&JDdm0Qv&*Ij%EZX5>jwZgzMbD|l&X2~_A!;c);i^v__ z^t7AF-~`~v{g9j6kK#u;8(3yP{Sx@6T3yn0MX!T)%^U)U(|94{PueE(br$_W>iLJz zSxb9YIY(KNoT|$QD%6VsB?~rOZ8=h~K+~>UXA*rEwegv~4+Hfc>ycZ6G0{d`%bPEU zb>b~6Teq%OSUL{aAlHwF2k7}RLUjn{M>;4q_NQ3cD`if(BVuclH1kY#4PI#~J?M)F z;67=6!XK0bKgQf)cxzlwM=gHsMn6ui& zl`M;@D&D~pz<3`^_Kdqe)RiSEBEJ&KB$g<(nDGAx;#wA&Y`ZYxHi~V1&XZVRSUnaD zOrf}|b$^|EO|g-G7v&A$T@OhQcT4^6=aB22h}w#GNcLlQcPMDiB;R?-aZdjQ$;0|7e* z6n5fMyjmXbZ9b!r-Q}~$3eA*pGmab2*YD|}yN^`A?T6yi-%l)_Ub=nV%&U>i=-kO_ z7fvj&1Ox##xTYmQsg{$*sM#Fp-fm ziLD*7e4Vh^y$O`X@VcWszORdfBpJ+knR!dWJ|CH61hIgj(QnOZxQMd

@rwCn2pzBvq*cMZ**ndLPOq(DaJJ9kZFLCY`VHA=v7J*aUdIpbo~@pJ|{@ zwCjm=?wgP-Tc%7Xs|<`@mbZ~f3d=kfdUgF>h^#8I;=*j2dXw9G?i&FIGoeB7Vsd6% z=9RBps?s>@yP!p9dg(m%e*uO?ya(~lNGF#7E9=7S(QJ0igS5*IXo9ef_Pa6zW?!C| z*cF-{BFEJ_)yxDU@An;OUmBN0B(1Fi>nmsM-ufTs(J%Bf_r9rXjE2FOeM7^Z*3uoW zdp^5oc#3b@9g1B;KY_+%n64jNvTD^he1`eG3{%4xEdvJ?N>P;2gjwM7%f`92VK#5u zqmPg~pb!W6cLS03?$hBiS~h2bMXo~SuZ$HBK4i(lnTVfM8Jz^}B$m8|6iAdDu_eE{ zEA6#4EBHRbkMKE751Rq^^2%uK$8WuWBi2eD!D1FiEY8SN>}0Oh90ne55W0ObpeN4s z(R-?yq_j{Tank_NNZ6;$0*(EUs0`=w3$>WHxT~gN1eguXWx3k^)*vtbT(r1( z{3OrJ;iCJgd*O9!ndBT*3p9`PiG)=lDS!}i!j!`P{D6(L%yuDig|MI7mgKta-Ji*suc!;xW-{t8^2vKFK%tTOK0iq zU%!i7h_fr3*Im`(Cc1BNJw+$|UawA$r-YhPEDRX4qv3B=E!S?r{w7azIj94X$0Fa> z#)esS=m*R7`4_q%)OJ@0|t#-o}}qGdLU~hBZpHMCz~A ztgvR|+wb%mbca;o%cHrg%6W1U$gGu9r$7HdqqU2kiP<5p_3x*Q4e_VaKeZJFyDeU7 zW}B2e6Wp3I?d0Uzc3ekf_WT^>Rxc+ciU2FysNCpLNwyauGBp5j!+dbl$Gn))yaoem z>vEX3mpYW{lT={_#da=O1Lt7{d2-Nyx9Jj4vZe@8l%JHh&PN51#Kj_rE^S`jVBYx8 zl6=l_7x-@RpTSQc4krnGf78TIbcz-Z6(yh;2b7$iOr@b!QetM>s?I{~^SfGBzkrxt zB8={~F2^}li}W&<^wP-qwi4pna4$!R2f~fgg%wT^ExPCmQlyF5@uIlbJ9kWs(nxmV z3O?=9Yxb~b&hkhNcoT0u)X_0>BHP|rV5>vFb zsv(101t@j0J6?z&~_^IFn1)P|&_W@_W2z211@C#+ta`}u!h*PEF^ZnR@)$BSt zb9|+0VjwR+7UBtn)nM*73jk8V7T=GCu(|U}{>-K_4V+0?HAgFDgn6QDgKFdal_Y;b zT_zOFMc1fBCbJdngbjJq5~ciY`dAeCcK#p-@63d%LGIIdXMx#9C?BAv57OcE6E8X9 zNTw~ds|d{x#%rkBX;JF`K>GJ)7kI4WG9df%t`x8(W22-;8G6aK%k`wJPHiHmohhk* zTiW?i+AJFVK!T-uYbJ2OS2HJ{4jONVYtbGCkZB8F6&FiY;-9d%Kt+Z(OAi%aoV0%Q ztHhZd97N3lydj_FBNiF5r864S^$ie|LpVW1lXg@?J;WIri&E=YF)5^ZakQ*j-djOb zc|pNn^WdQ6cpyj1A|nLwM3KdpQk;8`{j%?Z4bfTZeP&rHvZ9`4Ytjh! zD6Jx_+8;4H^iitkyg)!g>Q9g|T%u&0 zN%zOwFDi!dIL=3yzwP*>E&Bwc7sc9>oeDGqACH)dp z3b&*F2MSYbG5FRSvK7s0)?#u3Zd#U_;O2VT&p-&`b+OeGkBub2WXv8N^tMaWpq#;UeXPbz|#B;tv{<ON2d0*Zg2x&&A3 z_c$HJ%$QRmM{&aTmpvZY-~_}~sH9`F-j;7n(67jrz?IfeVRTmF9W4`O&QffnzI2Y& zfKS@&dPMCGH%f?QZ!^6uD&87K3uLqqIsM*CX(;APp+ZZvi`FW7wI)(#f%Tr7zdoQ9 z`m^bY{jJ6dq1SN4YM2QX1DxziR`ZYU^@ScRPGlA`i`ruBnfGEzsG$w_s$^8CE?h`C==VbM+O*;a<|_I8u^ zjr=*z=6j#l`1RukY53?w-jrt8Quo%K4C-f=&uzcU!SU4=M9CkVZfH=mp>iK~NxK73 z%)LLBcWHTbKP7B;fg9XoVxCrZf20B8`ghSQZIU+Jc*m` z+`>OSpO9iPX?~X~>j`KI5K=sEJjw=6aKtPyzpb-!^>GskLxEWGf1rZq^yENaSfwdP zcS~4|AjIe$QTqBrobfp!eVkX4uW!S7t~yx>K9dW3J4R1W5o}>p?)Sv%tL z`kTw0#-}uz;0bj}8PMi+XJnM#842`J4>EcA_CKTih@v8*YlUk3dCP{+kEE6bR|~NZ z6$#7z4}X~Ck-HM!G44(H%(9s>qPxvfwIQA$o^7N_e8-}t#lyKlo>VShX7p})2iTpz z2DcF6t(;t)YrKTynL1Z>`X1mOFEcxGT<=P>#^!9meb+L39~(}Ghp3r)J#fCrr~dm1 zR!(b{XnF8t$XqSLG)DN}-0x_=EKgf!5t)&MKy@~EJcV7YbhB^^}dZP_}Jpc_xxN*2G58U5_Q`?rY8QS(T>bL zK<(7;GD`;y4}Enrpz!2@y75sD^Xh^_WR+62gefC~Rsg1QqRlI}G9c3g3=x$DS{jaK zNxMhS&vH1M8I4szRco2$+EP&-W~r)kFBYxQi`6;AmV`M!BdLr+iJOJrkSGRK3S$z0 zjlL2gXtm#P1W0%*I_Dk`L;}7Pr4zn#@P{3B>`tUq&uq#d-|>d>jUcz~orDW52`%^- zX)P5-IrWmw&EloZehSi8a=@a7wp#tf3Gi#RRMd$EH_+(&K&yS}rV~JT%%AJy9!Kt> z7z8fW(y3kK@U<7r!6$OhIJ11&?cw%RLgaHdYtMy*i~k?X_=jdiA{fa-tHPQr60$iD znumBY#4DTiSR}@?g>z^Z*O=`4gTSW#hjSFF;kD@1duaEY% zCNo#$FEq8v?A;(|s%q}-BZ4*IcAqKQ_^36qU$%m#+$=$hXG3ud9in6U6kaipi6aJx zW{T?9%Wcx^&50bttXUDF55&qBzICd)VRH9)iEz<4hCi+`tQSKu;_rG@VeFzYO&$i% z2|^O_0|yQEKVfDWMUp+X!5?E*P|D*Qn|-JmTK zZHx3mK6P?z!D^5UX zK27}#P%{uKV}e`P0ScC(CT+DL5il5+H+-jrj_Nb^xibWLVHLaiC1e4&fmGGfg7GGS z)OLl^+xu8eywI$KpbDLrQ&g?Ck4t$a?+`>Zv0A!hY-m-?+FUu#9m>;6PW!-lc))5+ zsk+7?Plh#M=`f!ijT`Yu520*yMIF;w8Jv26cJJ?`wx_Vyuq3Ow-j8 z9joW&s$jv8bYM#sjzPn|?52o4pIlP!hqW8Q&!>g$oSc`et`N>Xg(h#$f^xO=!tSSl ziTrWmPc=t`ll^N`My)iY^o2{!VQ82&8j^hs4YxKc_RaqGcF{brtzOqzCxJH<{>7O4 zj3rW8<-oee=X zWok9vp&esk_kt;@74s6HP{+F_b2-wDA87QGFo#Y94>?|>3YvAqJs4EH2vE8r*o-JZ z^?4Bcp%2POLEy6GLyI!AkFJ!n8$+t*|6m%Fx(;sDQ#e} zv*u7$N|36Wx@>WocwC@a65&a^(EZk$FDfc8d%LqnNe8*5CvQjfd#LX<5RWmtMkSqB zXS*gWNKd#@hn$9_UF1Sd(&j$Ih^RIbVx3gUM7|CXY#tkAMuJHn;Y5sAhQG zdg6@FLlN=c{O2&JJuZzaP|_(OGq?N~tuEn}$13<4kWTAbumd`*U-`+@GtJRH-oR6u zZx@j=uCfh5T>xYb3Bf)I;xi&)#8@<;kkQGgVUD&`q6K&{ih7Rml3Mw~ld1K`(m_0h zsuAGp_y;=fxRlFlP0rpDYuFh_RJo7my`z6D`-U7I%$AYPozv)~TU=2y~n|s2g1n(;(XD4J)YlI~qIjSuBN8o5YvpT-M5cP3_(acPICA?N;a+uE3 z+%oDhIEhIiQ%mO7e2PyfahcihY=sW}gyR*wt&J~LdvhS}=L(JSZPn6Hlqg4ymxSGD zb+LvY*B}44z=aWDr^#O1c3mW!Nh!>p?WhcyIu?*5EC4vkuAc2XZu80Q1B%ma7;<|v zMcscOo2qM(yL=LoRBRFPL6E66-zBS!I zP`^b-`v>2afrn7n<+fJdBXErZz06*Qp5e||cv4jW5P~FAFFN1hXjb@V@!n^F$0MH~ zvS;i=$Agr=U!RXIRjgUMWqpC0zv_rpv6p(UroBDkGKIO=ig4lCQy{P8FVo;jZDVA_ z#lgykrI4rwkLT1ydzRc2ZKPH!A*OZO(1NdpB)pHOTo+K&m6=>k6-ojE@l=yl=l%0T z&I7vq1f_~LN79qPJ5EklQyjR+~&*V4Ik@DeGWiz+gBJAo*O zAZp(Xz=MUP>Rdn4QHU6P4pZz7Z^p%fO>RltH&(R-h4I7R@;plCCK0=&*DcR|nvW+y zqw^)5n{bhg4jhI|s^lMtzjfN!$nL~^9(zhZ>_!(e1eJ4#Qr)cdW4eTODEOE}VgJ#d znO^2Z)4W|Q@mhvDX1hJ={D!^#U{(7!a9h=(9wAo%VvP(>RUKd&l)NK-fG>ER@c;Ej z8prZ9wtViM<^E^*MW~%WyAvn3|NOn3+f#i4fskZHf>8BNOn1EW9m(ho&pu^ld&#z4 z%Y8`i9R7k<{HYVWTkwvLCWK;QES6fC*(eeH!Um<{dx8nNh+7NXT#vbkb-`FBt9jMv zlGga`4-eeI2^$E&;Xx-oKSwc5vB}f}Wiu`hsdB>vnyA%NNw9mu(sSZiy zH=ayuJLD0iA2u-rQ?P)TXb<4m^a#psjohD;~Eth(xPJc`nG zrla%fNGw;Jk+UzlznN1g=fj#=tvDD=ThAbe*_YudycE+JaJzg-73dD`l1f2~2N+ct zd53~;hKB39YBTrcg`^f;zVnWGU{2CWg@jBz7q(BYH^1Ne!N_3O$+g-R@wLsj`~@cq z*OZOQhnczGRIAS(mDNc9LZ5Embl#dt+>F%f{7{I3nc*5ydTvZQejNpvzGwflsE^}Jqv zw44FBQ^~(ake1qp(M)6>=QCYrquEP~=mYA?46*m_Ruhuy^JM1*<@+c9K=vEtnX+t< zd0CaM??;e}-EbQ|R2=W4W5SU2BjZgGF@g&WI_*$9t0w_bAe}ol1YYLKR^spqTa`YAOpi$2#&CR-@0(Uq zdd(f{Gx8+}#YTAsO3*{+%env4$DeV6p1hel_oNr@6$<5otOA7cwiMX97l1{qvdkiL z*I<}`UvyXP#qo6F!R$?O0M9~#xwMkzy$a3}L!0RK{}#{3kM1#~R@Eth{65OAFalbo zsIge4%7WC^*Azd{nN|6uekUH{N7WhZiFX$q7DR3SSXRAaH9O`d7^UFOwEOw%IP86$ zMzv5=jF;`pn5j{C^W~ns>&0OyY1ipU_=Yu6Y~Cj`{3rP(=b=jj1EIl?u=nXhcgFPA zKFCiUXEdq$2VLCpSCsq)ntSN}1$9|vX*{)u&p?ZV0NK&U>?v@2a$D_NpT6qU-SuUe zs*$6)@J3Gn069sW&nsWGgHIXgqO6r!^)mgNPXp=*a{@nlB83gN%9SqRv&f#}O)N;Y zLH<{;rEU5(@a4H+IrZ?yhrGe^EsOSfzlK4rE=M>iCtORM-Qt5g%Et!fXCa*MOn~(< zTfvRg=1r$IQ$Kw+czfEJqS@!=az)tN_bL-piZaSP_2_S<*+~npW{q0mG!9EOTn|a3 z=r(d{8XS5+zsKRaN(9wcKzx+4RL^|bZ>kI8wv$J8ds;kI!(+noPG8#P^NDxyAA_?5 zU++nxSS8bQh%WnotPH))nPM&NGm`igg%)lPl4eIXuI+8RAQke%T+0`hD|^K6us&IR z|0rzy>8|SEitSfA#5&?%pYSObeWIw|wS0K`U)`g}9?+q()U}7PD(kOg7K^!?pDanT zC*1$}g_Wjmh31EV&#l2Zz_Mpg^w<&C(>kr>P|x@Wl4@u5vMS)Oll!}J=BP7lxH^`~ zs&h9r$910a9br$X8T2yQEN7~0@lY*b`fthUcNedIb#$k|oRG#```W($tgzW%Dk7fS z(|2YO=Gm5G>wugM*F^o2T;$7#UQ({4gtd1kfBVk@DzIwXc{IzN=79O_7YW|tCHOv= zw$Cg%dS^w)E-?ePcJr1rR4R%?Hv6l&*dKAMJOjKSTw+%`Hg0_XE8CvqwMk}V z$EDU)cvgzUhHYppkA%Yv(+Zor3(r3g4geFh3=c)~r$3{dV$q!Qku9BW5%AkS8Xg)> zuu$P{Ca^SZYf$5zuLupiD}sCV4>Z~P=Kj^4^GWtlwTC2Sm;V0mHc=|Mr@kf*Hl@Lw z6_&v5NlL4_h_0sIW#|CmLQtf9#OIDnMc{h|U4}C5_HWxy2~qyZ_0~E001eN&#kuNR zC&2r+SAX9l>3!$4{0`{mwET}+_`TO&Wu`?o`e0TSJSQVPmCCl= zEPYb|=CxT%KH?uJcEx2V8rFYnP8mP=aW%imXpNxr)>csvyLM9jD{ppB=E?C{W{NGl z=os7LrqkLQObqu{? zcaFzm(=#ANCsp^#MP4AH3FWfH`Ti~*mD6wCyzPxk+r_`+@{lT~Ia5vxWf$%)@6QSr zd7o(o$!%gP^t{ET_8%(}3Sm<&WgnY;^@!(7FMZNU#u7^3ggU-whk8Abt(}Gft>~~F~?((YVeF(V+TpGtv+w0ua0)H9(*iCr|q`Jyc z>`n);euP<#7|L#{yGo$^kV_t2o;u0B9UM=y>;a*4yf1MJ( zVKvkF)1P3_(MjEdBJ$54m7~R3HY%|MPebL%GU_<3#qf+2LGGq$ricKh;e_4DLAGGP zpXr$sm!;kU%Wma$`V!G}HLvoJ!2IDCZ#~Q1H`d*^$Irr>w-YVGqFSXyF-B-%`GT8c zgL?*?AE6>a^`ISXl;^kCH)cb)xbm3;dF(rt;jgtaO=zImj~h+LFD{J}zNf^WNm8%A zdiTA&gQGCtA&Lp2EE-R7`_A`D$kzhYu`l;8_jYro0ADUS>2QK_20l!dI*|6t+uo(BwmpXQCJt z^d_Qt_OE$%G#wehoc2&;yY(51_0ez0V~_1BP4v-FSMg#s5WVV+yrAcV8~zv1*mUwn zdlJ>U^OZ(@M@ZQ2@P{&n09g^bvLU61`cBt1iJNpu3SwVQ}DZBl~*mDiu{}+0w9&CPMcmG?+ikV1I&q8#BdZPlIhXNd4nD^@~HomV$B zT0rH=0r=Gsb5+oc&H@PI2I-~4E&x}_Ici5Q-1HF#Sd`R2H+vOzL_B>GE|b*kl!nO7 zcNV?F_G4lt$?4H7<#eUF0>YK!**ZTrSp+B5?EeO=yF=1b3!z!*?lWfd@>~ItmO8A* z7u7Us=^`~u-erhhyNMeTa5-@!d9?xner@lCtau5FRLWfGHG_!8_hqhI7qw~wd9y+a`+v@f zx70WEn7n@R;DL7DKtBJJJbb#Kh-l%zyzTMFnZndqrJw$=8tHyQmX}j_zGC45lbGN& zB0k{>bmX~LrenUfs$0h^Ol*~DRz&MUt{Ht?YGq*@`Td0E_XsEukrL@z!}q4fpwCX6 zTVw89#IAU{UGBwKE32ha?-1WKJx0Fc=b=lO5k6GwnYwGed zq=PbL8VwSsItx}vnwA;y;QJfcbg~IBe*JQbf`!qVl~9g*`&T>}SuhusDpC9Y?+vXw z$t)`gKZZ!gtzrzfEg7y{U^$82BI*&rCP9|h4U(n7jpZrYLuREWQ`%8-2zAO%Y z-y-@8e64ko?1AI}EG9DeAg5iHv8EGqPa{!Po4-I^7Sy?Okn*nB)Js8_4J#xy;;s-O zZ+U6`K7eGoQqFKfrMyLNM1yX8}FnmKF22y}R9K2uk>H zgW~gcHY*&MEtT!~cn3Z0WKeqGv(d>}hIl_v#V{RuB2_^ZHeLCpgZI`*Ba>2{9+4Lz z7<`T=aw$>HP>cmeeT1u>;0Oik@~!2qcHIv~9U8MRYf!wdiP0}GwR%3NzM};S89)(& zL)Ob@<{}?Dv5OUl=d?5GJ0O{MK1Hd5t!kQXWd6^1HMP@dK7IPNA~ftFs~}r-eaY(( zal)9V8{>%@*a`!J(xTzJ%=9(j=s>nFUJLw4zC1O0bmA+426Di163uTeh=2k1{2rp{ zn3is>iF)|p4tlh#CXl@5*1YM&b)fRDqE3*sg0O^${9HkBqk#Lg5JQ>m3k!z^2sKHY z!UD`1FP!w7=kVKV=8A~nXoJu<4SU?%u7@m@(G-Zr#v%*FAJ14mKk96>bZz}kl*xAb zEVj!~ZWVrL^);D`DR{&@1j`XA^Ca}%w+>98n4 z!kv#`=?~L_XXGX5Xoqz?#8sVMxQjWrMCoe7q=`(ggAtr}M(nPbAyhTzS5E5{buO}&?$$3{dHRN{t~zaq%`FaA zNIV6#=PKm4ke;N0ZO+)OE?8T62H9eu)Sm&Qy4yq1(xP~%%ej$XXi9OC(c?OEmtBO5 z7KrWxeL2_m=06a4jD|r!f<4Pq+7Hp0`Losgy^BLs(bmb4ZMvu?+WgtG0ODU9@86X2 zK{CmYO^PN1E%IE<69s*@f81kqvzzb_R@rlG|G3d4bO(8`t0f$J9a>$?wPc*qLMBz{ zQJ_7R&oqyuhBU>F=<8H1UpbSstSuIatSW zwLoPf?#bxX#9#h$Pdq`#P+)lE#R&;HTZy#7qClVzEsp%Bfq$f)7V+$gwudg!P#2s` zaL+5<+9v&nVjv%S#wqa28sjN1d}{7%`4*<&0@$D=4Iij0GwzL}7KUl)J;88plVlnR zJXuaF;o86X-$!36ovpk{Q>pJ}cJ2g1{JIX-XqcUCyESp?vRD4c5QOO0TgQV6Q}>xsU@~VQ$v+OB$G^EpK2oMpNr)be*dxz9!<+u$Fq? zbu3aoS`fl5+<17={T$GpqkbHP8>;Jl#6st50CBDffa*5p#nSOZyt}kZ~S;^X+={d zfJ5vH>BmZ@Pz^hnw-ZE{-NDcfR{&>CIW|Qb)2r4lL0ynV#G%Uf)=wm%6<`{$qpSXj9Tdh&js3Gm5EW{8=4GQg5Iq@j2syY2 z9)Iel7}UAk42p3qpIwKR91S>HFPAP41?8}$gfVn7{;}l&>o1Ureoy+-zQ=DsKoF^- z_=>`yDZuj)bE<-aAu?>@P~lg4=_-AVA4i*+C}tK#l{TdO%v&Qx(pYRc5F4&Ti`X&I z>1w*c=SuWg?|IhNPC1P?+3O>C*HSfG!QdUT%KIZ=x)gO(hSBz9vQ1}3#y8Ds^LkpW z7Bi921s67xPKUu%v{yG1CmrGst@@DohJ`1x})5SuFb&)z*?6?A^>Mhl0OE`8A% z0{NC-Y?ToQ$a;aZt9L}pUl+d42XWCPtxpkK<#TiCFiKRX%dG`W2LT-`_t57Azn>4& z9$HkT^}qZ~N?;HBd1}pqsWp(Fb*33V8$W^`gI#B0;k?22r^lBE{g-k_*~j2Aq%|Db zFL54AIz-ws7SlvOTc%_0@Lo_JD|FSrVRe+V2`MTqu8nB5i2l~UAE?Nm^HQ%YpsvkV z`>zh5!NE1h=PDZDcP8kpt*v(nz6WusP4O~yy*AHP<|_y=38D2+e#XlLn;DnVDvV5U zeGHq=(XGDq^R62fjTWtuj-u=5r}St$-!&wn|D5s+n_3!*h$gI0@-+rBY8b64E=huSM~`{bAJfr5;HJ@`7qo ze&-s)gDrAX+~VEO9McKdU2}a^1FkPJGMJ~t#3M6h8(b`Qy$riN1~#Vzdvo}(&!$-j zAo8Ko0yhP>pX}Jp`b1;FU*5J7a3nLKlAY&lWRb;qo6_9oAktE>@7=I zW^071!Zc(q9M{Y&dCbV5p3n6MVMVuS7J1v0swmi_gZ2z=QFOF78rrsB6&9oTTE_wv+CG z?lG^YjZn4f!9~mrgTrPHC|QYTmgZ#7`Z#nL(-yVAAZLAd1D#Z6nCOI~Z(eb^)B6;^ zcRq<7S5sLgLWoJ3G;7j}??tT2crNT4UYfyLJM;t`>o5&An_Kl^WaaRff5 zZr7+P3fD9?Y>1#tC7H9$0l&_OMyL9MqcOJ64UtIJLJ+&z4>4y)ciX#I^ZT}2> zrTN(_e!yz9rI)JeQwvA1RGeg9;k|kcU*4xLsz0h~EXMntqO0tmKNw!hkIbPkIPQ|f ztxK+{PnKb#&_9g!3@0Dk9{W&>wnR%prRpoogFpwO1Iydfu2JE&EPlTj{P>FP9WlO` z*uee$G|a}Nd*P{NvG)borb{Vtv$x068`QLQ^4>qe1tBNgcJ6b7idqeMU%oF;@6eo} zn%LW{Eb5;=GpNV!I;HGHCgK4|a+UEqA`zbI!%@H2yy(g)XFckU=2kfW(7@d=kBWb*Jt{{)LpkKkYD3^B*cG6zu&~L@U>zzE z_DLg8QRtyLQx2NZ(+EkI(4O(R)Gi4=4Q;WJyHMSD%NE82e=(DBC(%T6n?|Gj`#Zys zXMN?4j?N6z>%IpVb~Vz-d+f}|)wF|~tI#{N=`rLTlLe~J9@|))I%aY@n=05=R*p?X z7XJsr-=^Wo=$Wqq3%n9=2<#nDduVyvZI0ejdGcr8%3{_0wwq&`K%`8`gr*5-FHyvL7J!I+m z;<{{a;6bDZMD-1Q`9P<*PNu`LjJ9BEe2Ee^CH6KSyDF>Zx>`rN>E_R#bR#mD>s<4t z)sL))tOMN5O&=P=!p(kF3kr-*C8^E;f~%O+Tjx@v-+DF2+@Eb0l&rEc99j&wF4b|o zUHK<>9fd6ETy&LkhOSX7K4LM9v5g5-oCLJ@cds0M2HlG8eS@PIGYr8={3yIue=E(| z2TjBix4VX@jhs}j6p`5AY@cf2)Ni=32$b)VBd&74o3~F$4t4TlM70BRF?i~V7F*aW z==R4xqaj-F<|BTf4f8zCBnv%g&U+N(%+2IrQtvRwd^&1lKpGSgDh@4wxyiZNa(fi| zm-m`IFj0Xg9-UWc)MR(N$#sFdzi_k zWG9pMLymV2@qE#91P1&ueWe+!vE*6uOQVSZI%rPH21qlNo>!I%!pNx3-vRP~SJgml)88J6L(RC+g?tO)7AOEHY!c3e&HHo8* zL&(aGbndK=TNldZdfE;SS#z(1%{|;{YI$U9`HkbTD_$~64UGI+e@)-BsZo7Q05zGW zMY^A#d(P6AnaP}`h_k_Sax6I+-^Q5n^{2h5Lg#Aiyv!}Q;yMlyA%~CIS7%WLGIv2N?2Q}g znHdkvX=xtUZ_Aj!v1SvO`1|Mo0qqjVIzGt2xIQaZ3USg;so2A`%<+v%AFh8iH)WFW z%{6jT-)ZQ#>#n|h(@OXYd!-2i=R!5C2cWa>1!_S&*OfS)9KEMAUehVDI_Qb@GM*{> zqgXJ?EQlJ6ydu3f8V}K_xnSx5g0X6xz*hwr09u8uyHLGm^MZ{(<5UXyTY73DcWes5 zZM$F>`*pkURAe}cUa(QGi?}>@EN^qE_{}3K1&Hlx?DaR+Wc6DiskY|4N-wui`;{4U zo~W4L^0i+fZWzM~=ek{0GX{t2-1@o9E|Y;A+3s$5iJ{4Zi+#*~vt&F22PpR(I`-zh ze?}$)bc`B&-*@@XURaFs%_|=Hjqc=GHy-Db(K71qxQl~wzEj2d{Tg{1oUo@0MOZvF zgH3m2iR+{8Qa)KP$@3yMmvqq#f7M+ zU(_B@#)3)@O_+f-f5S)W{oRIcQ`Bip0YP8cFYdyPUD!sQHtq%=-pK#%IY|T_&DF`` zOi#!dMg$m@>Ty7=V@`Fu^sVpFh7ehK^Oe`_GEoA7^IR7da@xLvF;7@vMZ{LzOJY7g z?RuM{_~0$8fFzCrnH!&xLNK!?5%!Lgd~L*4tk7(T;3`m>We;kxWVa( zF~0KTp`}mQ_t4(a?`>(8tah+pl5q*NPZQMeBiRD}0;4_rDK$Mf6DDGlx2b@zK%Q`- zO_lRoE5pCa=8X zs^nV!C0qdz6-%C#cdXA+SET;d841KW*kRyjLJ$u+jWRY9vVYQ-?(q$b!X?n;YVD;Y z7%FHQ`|K(~Sy$KpAv7=T#gogT@?XdOJSr}6K2F!)TB~hsl^M0%b;~)bAq*787E>t(>fC48xpk+~h-E&h zo_oB+4osLqTy5_liJRMizHCbe`hFeNf;Wt>1zER`Q%7==Ukosx%~F+xQyEM)fzJtb z2SS1dd3zmpChD*1G_=kMZ7+GvREm}}7$@k@0yl@iM*?;VOhPtS*JDbl?X|H7=*MP+ zmW|~NY1>}mp7{atoU;(FcPK*LH7ZyxaqiH@Qm~QY76!U7LZ2lFqhZ}Yrl{e5tmeAy z%_p!}bW0!%V}ean`63?y#LmK`*6|{f0qlP-bODm$KaemtN`A5%#&J_%w+~2cBv;Mk zcGN!>3?S`J6o$)iN;yB*VR^6*u?xu9(B^)VmnD^pZ%s@xrP%|~s3Bk4+~;Sk6Az+W zpUJ&2A7m`dU>zQ+^hB~51ocEQ7G~1U6srnPdZ5-PYZx%rPfV9gunn^3w-!Lo-~x*G z>D58s<%=a~V^b=H!$|ct^0AnM4DgShP9UgCI<8BgS_(F3zt{ZDz<_?0z_>r>;k$JJ zC4F$0qLjUO7(45$>Srwq1C>^SDTEkXc6x-IIS^+!&MVDNrUouxBH0;+g6!w|a7W z(%7MhXCr$jHs`X+U8-bMoabHaM4F_Fvh#)Ffl%5;r$Ff2L4feSN?@^InXqlI7a?!j zGB*6(wHG<}*X;V?&5t^=xYHbx%V3N$Jl`@of;L{^?(_b5h|*N^aar^taIW$!Ohpyo?puVSXb3^fac4ft+N(A% zht1z@yiuolZtLsunN*{!cM3(hI9xFGTX>7KsLdt*-2_f^m~E*g?bA&)1a}Vf!uu+F z-K~7k+HP8MYP0pJ7>OZ~N4_sIp=uZO)I+dYFkS=e09{>kU1gNVSI}PD?q(AoDE6fx ziC(rINP~=_VK-Ncu^{U(11xJIn?J$?rIE|fNYKFxMvE|KUP|{Svdee1-dE?)k^_Is zGA06(=SM)gOC+wOC25RBMeNC67ik`jB=W!b#pvy7F?y`b&Z8Zmhg?}J9y2^%@pYtH z?rvn!P??zW1sDlkU6GC`$7fy$JZLKMxMiL6l}y}kMlf~v9YVw;Q;y~evqC6&`Ju_M zH#IMp^9b1LmYj{d5EU%(#dA;9Es~u28FO{@ANNitr3BCeollzTG*FT;(8D!r%i!4` zszAa8BG^jf3kxm=%*zW7{*Loeek#C-q2mbnGg=9Of*hNWb<UnKI>o2#4g5r}tYt z9Y5-byDBMZS9~cMKGh%tAE@v|QmeHOyq}SCg#4K#aR*tL&2YQE$%#{Cebn!49TR&X z%`r0p9sU}9UqiK2D1gGzuwIdUxQEvH=!p+C%rMG! zaz?||9mY}Gt#I=j{Br(<^I*|;e3w&u{M%$pD=Uhnhm5o*E}I!#uSc3}o=$(}p)3>j)?XaD<>}@OJPBoV!MHZg$v4!8$e~&x=@R3)d6FbB8i293A#mUJ& zf-(9zoIg7I624CCjm+3%md@NQ6?|7LkWiXdBbxRMsk5mo-NYNcgAgCQxUCFdgLrR_ zLd~k8e%h`kuQ;wj>YROH{bJH}B1XCOxUi%`p)uKt=YB~NXKX4jdV3OCsywBf1MxN* zVyzJVT3WJ@WEUwYD^~({ghn#{7_v2XxgQ+X4tC<0hKV?1Iy0kHgZMbU+(CN%@_irM z&|&->;EH#BZipYypDK5F7!0yczUh6*|JO__LRo`N*2)3H%#>Eny%Bs(FI{xZ-rrIv zIS7`D_T}T>d0foiSs*Z07_WzA;7t^6Ufx*mnR{A#PSxbnZ_%mQSFO6@E#taoWGii@ zN5fI#T*p1TEMPY$(&QwL>nSTe7ApmqlY-w(Pv0ycOaqJvih5`lIV|3WA!OJBF ze@p-9mczo(4~}FxC2Gq*qaqTypN-NQkg0r9R;V52qgpp599kRQp^&1qW9xIj^73ln zqOa;QiwOGkAJl{i4@A@dsrFvTa`$>qm!OqGx}FP-z$^J~=+S|qzu`bN zf2KVvgeG;$n+BV&=TE`U{*vnhVO!yPvQuerNb-J;;w-;Z55mSyW{yLNCzFCbspcNY z6mU&iF^&&7#mYbEd9s%AAE>vX@0I4S(JA`Lg{Bh1jrkz!1l#==AzFP5|0tT3#YKw`7sdKM zbtl*H2IXH9g7-DAkLq1oDD-JAWfKpe8?Bt)1m^UcCQ<4UQ7!-`nx)9*5JQ|GFlt3q zYH7wBcuxWymQ#VpvQ4Ty}PO zwD;ne3V%I^z3)F@3O*Pv9G$EoVV3a9;xpB&ppi?!@?fBK?8(#2Z7&7oTDFkr;rM0E3`mhrN1fWsOabyJdin zJf?l3s7LI+w+cw5#v%SE4%4 zc@S=743deW9B&P5(iTMqbYD^OWU*;YhRZNL7Bo5t>nEm}IOuxKmK6@+ux?_ej37DF)Iu(GS#k(?{wajI=Qad=+3K8fL<-vgYI zQd#VEZA+d?Z{I5#2$0}a*;T$K#ZO(}Dm1aibfb8hj=F5{@_k5%aXa7lSAwZ2>7|!i zhAFEK?5|P!<7!s;@V7_GVK0Q?GE&jp_|+5}Bq-`*bnR-!fRv`TU+7&F(hKQcf7g?- z>RC^@RBkKoSia1$TE#tizxPg3K}6HFWhY`t36nAzkE26|7h{M}-rT-4w9q15&K&j{ za&WfZonp*z_ZdMXI5qG6yB03%I*j7EblcP@kkk>b`uF(Kry%UJP}qMn>*HIubu`5Y zE}hTeJxm?_qA$CWWvlwNd3>Kfc>wHR(1dbcE3v%nRA7~?)li{$Lma-3om<_1Ad@7~ zTQmZkfzolkxKd_Xkqw5L7ZPh^7Qx>Tj59=K6$XBYTfoEObNA7AJNjX#>nq{@C5Ez3 zM#EI8ch*!65<}V7AWlu1$*puI6a+u=R%K8km;3j(?i&oB+Lq|)*|4r_ccm$B-!Uq{1sJQ2dKno(keQFmb^gDe@J1(*x3l8^Qk3yhtDbbJ@>v5ow+ zl&5{|yfWawzAj<&`ajP!S>yE|29j*wk?W_xi~Q8IYD0{d98M`LhD`L6*;-$hb4qNF zd`MhvkqqhMR#vY$_szT1v*|e8{vttidCSM5{mu}|AK7X@k8dsf4M%*A8OZwVUXu&?^2sU_2}t-W|Hoce zBkq(~9*L(^no&aOS=F&~v;4Hu(I$T`>!kYcBR;gyJYO7Sj_eZRI$BnPgEtp)W*;98 zPqLLfry8l4lFW%^aW&ZOi>w!M8Q4hhie)N}k0Oc;O^WBX*cg@YNXd>fB!0c`;FxVr`+pSznF!qgu zKFWRgzFd4xe9QKS%J;dqk83Oq57f}8K6HFAO}gsWtKiXA%m?)yE6V3OLeaGeYhjD& zUS8B6lhU!}iz)0A!T*77UJ-v(@sMS*T0MVU_KEX@OR)LNg|f3C|A!_c6XV5J!lYHF zm2#EZsB_{ozy|u!?LH(uo}%^OU+tw94Lw9)vMOh_)gbx=Gr15CSdt6}bKY#4s5UYd zF06XEH(Xh_*U}FJ|A9IF>50}g(y4J?^CJQG*5^4|A1V474m{n83HybZ=O7L36US?A z0wP4loVq3U#Vg}v+{no6q<|x7mt!$Kz zRX15pZ)#r6lNV&JmLjv#wzm(5_rlrKMUs8t1L4fa=XL_O*%vY&+;4xt`(ebP?4mj) zpLusWbI(4GK~&c-b1Gg@kkTmlnzQ^Apn(LVdGXGt##FGJUWTk`C#dRT38QKf^8$d@ zXafRa@|kH%Z7+gp`E%?=n)J=0Ts=*e#n?M;biHmNFgS&m#awnZ=L>wYII^!HEq8&xiNDHHOZ;& zn4GR4QmR@YWDu0_uio16&D&pemciu#jHIqgcr(?5y5_ zQSMxIT8#xGjs8$R*&_XeWQ}&fpLl?)T)MsS)bS5eHhT8>pZOo~>&&E;4oP4b&))kd z32W0$&Whx{?-IIB@LdUTaL;;?oOca}yKQ13rNj66f{V>^GGi$iKZ?!)eYX8;?e5Iv z#>1q{ftyNETR-GnIFNIvLnGEqPn68MRGE-T4zaFSi^?hT&RO>hMiP%mJ;Ny#9w&F& zCBH#9F+24UY2+?gnA1Q98)mv>Pw{UKEy7&54fHrb=-m(TK?jL!v;^n=zNGUz#mMlf z+ko1*@1nZuW35&jjvs}$(TPJati8Ch1Z}XQ40=<|=nB{>92U3ak(rJ&sr2w$>&8}J z*zVRND<4s-ZH2zMkmip6H0J0$QkugL7Rvm!#pQ`GXUkbu}cmekdsfKF=y!GbJJgMniag z0O5f`b56&!Fnnhs2dI+g*^GNQfWUAUGCTF%>mEx63;%&aF8rnR)PI5^e3u5)ieB0* zKVxRq_W1Tt&XHD!pQW^yM8hXkg4%l{>oglJ>9+x+Q+0{<1&({h)HRn9+NRTlp5Xct zuFAR#!AfE;;Ppu@Qe-w8EB^Ft0+F+3y^Kv|0#J=oH5QWm-x&LR`wTLj1EN9{Tjoa` zETd3^slx~zp8ItX7k(sn9AsY^d}z7 zjv+fyxKIZCP(P3b^ZnvhuJ|XKkt$SNS_l`d^Rm_M<}QhB@rST(tvS{)zq7+$CsFOJ z+%BOH9~TO9CgMoM<A&vM7%~~ixUv*G4jPZ7jiW!~3 z)!?H78u6{^Pfj#oZ<+zLzt@Qn2R6J1c7!!CJlgs9|7Tfxl4zaaA9tbFghu6;j0Cum z){_fmZ$c8iZpoc&am~%vqCl}9qWlMto`Efsg<|EbG|HgwQ=6CXb819Nh5p&z?~{Qd zKTV66h?j#egim}p7RWCsoW`}F%;6jbl=S?E7FR&GY`(gg+_WE|U19;mEZGU4;y-l& zDkc$r;M2z;LKR$&j~TL?uKD&l?f*B}LQ=cZkL3Hz7Uzi6PQ|>XMUt~^)a82~ZTC$Z zo>$M~5qKP4xOvH&D&|4-dh!{$R*%}6xZi2iqd^`WZIfys2;}BqG){HLeVJRgru0}n zn-FjaBENnX=LhK0w37PUw13HrKB@n%T1=#G*?n8bL1}dJ`~1UTMV`5XS}$z2atc|K z32+lv?Fc&9JCzLr_&|1DJ>3%$k)DPVo3o(;MQXmsOkDUQQ zUns{g$TY=lp*UmDa8T5lYU~S{a?ovad!X4o%OS~Kydt+E?|1O>pNOwF#ceDf)G(OE zul2XH>Z`xU`~CUKts&pocNtgyRL-yy!FZBI`a*6*o~`5Rf$ZbnO&}~KHZ5Pj{5DFJ zVFG?ejFuChCXXzRC;rGkbyG$;Sh>omGPBSvCAWA~l8Ezx%GxDXuVa(9%YC$Q8;Hf- zNKUmU+R-(5Tqv5XjfUW=&;L1ek$kyU%cuCcSaNOu>?QD(h@B})!Hm8Yvfu||4sLO~ z+o(Fdsg2u{-d$~iTb$o4*6(*flKz$$>=_Xm&f_j@IkY(%oQi($tq__MbnPrRaE@MN zG`qDFDFl&%XH!p{e#Ie!_SEj5Hw1m{!8-19-AJncPWvCoAM)y@s!J%*&M;__{}5m+ zoiDVxER;+Cv zQ@u_~O_|=3vDy_<7F1&HU5g5Hr`Sx!S_&VRYkoJ)O4Ed*E{jHM2laFiR!k+}m$zA* zHI*x-Xm-ag>#XjXzd_1NvXDVj=&BL2qyzJ_+w!p%*>9hgWHp2UUNYs2Yr9K1XI=}= z+;Ydv9)+UFjV_L9wVX@*Lue<JrQf3@@IlKZ^9C3Wz!bbYl4ofYt*YgYe^1JPuCYx$R|^fkeocg#LC*V+am-3L(Z zpw}iVR!;iNBe|Mz_kf}@gXgg|?3FK6qavxi-dXHLrhCq4Ax%y=Cl=o>#nXIOdJV+( zx<8wN1iK%UIG50P|6QhsIwQmaNL&!Vnd>bE?2+jOa$4R*RJ)xyUGUcGqXTp9+>Tvk zZ`0DBKH58{_SIbRR8C53&2w!vP%G=F+-7N8MBrb#T2sxv{BxDX?*7KkERWZ#aOTP( z*(TWUY+ctw0lainx^cR$(>#M6q>}2`p`z8?RW(&vXwL@2&6_XNwh`-m*U!n8@Rl6j(fVGM=>q-<0` zPnuY>Y-Lv+>hBIzmjb7h zwa(VR$Lc*OtPSk9W@%Xs9L1)kXS5dRg~3R=cELU<1bBv+KU8z1DNvOjq^kT%pn9b| z*i&L4wCvImNX)z~{S=&f_Nl?efSdk+qW1B$@95)>hbP*WK#a|vb$!Kq?p}z^p=V#R z+7v&tn+_V%7W$fLEswL(CFX$5e|C@_q8+!Ja@W1l%?tMRTL#WfZ6OcH7m`$O6_BtC z`b<`O)L-xL_Cq>c|9;1+Sz5*%G&soQY^|D}jWKBEO2%w{aEQboL}kgv6Kn);Tdbj+ z^w`t^U6up+Z!8N#O~Tcx{5&SG!rz)eBBBhk$AnL0B77#Rfv{3UKSNaAiioXCkkP<{ z`D?lDXT^tZG*RFII;N)XM&<~s=7kS0S+&-sYjDL^6gu#cmIpzRt2&KJP7FJpVrnr* zS^n$Zl%MLXu#=z;LaQ*C8A11*NJz0GZ(TDk>oMT{H`G9@MlZA32RGjDsYy4bQx|ul zJ&@~9mv|wldd;*&FkrH+pYh{?3^_nefFp!Oq2a~>?y zaoiS9?Y>0?WmPw2(%?$qW3jW~n|I`}WP8EI9_xxF3S|U^{_J4X*IdKV+&e0*`c&e|G^mL_0|Ij-AyciqX*HA2+c z=HZd*;ATAjg`eTyZ?7hbeU~q554}oC93h)VuEuIzRK~B$jTG*GMJ1jo)?1{8W6W@# zlYdGj2-UD`K3pvNla+n@% z5x*{i(MFc91Q{nv(^Y|;POv;Q8R)9jI+@2KI6i!FLOGMLwH#(m*1py9-OZCo=TVpA ze)rF}V3xyA=giA&7VXs1sZ`tzBGlOpHMU|S?(&An;-BvPA?fsId05Vobs|c?DRAQA zjLn`*mUFKqLBgwwqFtnolpdQ>zsK_!@IznLP!W2b%+Im;ak9Jig|q31ffpJLOir!6 z7rhi}|9V?9xMWOL-r7(Pr9F-8y-X!F!&slIK`REiFq69#N3~}`Qpq|-E%7=+MZv#Z z4FGs`VEJ=I61*6(1T;?58k*e+r<^IJ_2SfWju*kkkJ+-WmlUEd8=tai%|D9$m9 zT4Tfjb%z4;>2%$spopFsgV4dtjS4!joCp?9wm&!seHz{#B9!cpMw`H5$${DdfN!nP znyfS7!}rf9}%yj)6+p%*E=f%HmFnt~el z`A-VXnLp>9BcI0IS0RO6WxyIZKZ@`%71dt60%M9Kse{LLp~1NL4jx#U;Ry{}zyark zRG{I&#|rQmSu@~NOYNj1RxZ$xY}_*1y%vXQU~Kc$FY|H^iLbq`TOR;&RYL-Up=-u2 zeHF={ZcZ(C=Y?(cQ<+d%%rEXyESEym#mE^_Xcv7KT1#hd!+pH>S(KTMRI!&#vNZ`i zZ`Baj0>V(8|8|ny=}|ANS*AqjLl$WtBaJ`V3uqxHThtyMz_=66A0W|w1r)VyJ4q-w zDQWG)6Y^Y|x<4sREQ>by-7q@_-t(ZZXNndRJFoHIhMl@qReqikhk@F^dx+}GwvIjd zL>d4~Wvsmb+k+_G9}wGX#Od`8%AFNG7$q>rS5=ZaraA@i&q<)B+Wwa15C)NKSW246 z$&&jby*V=~>ef9nW8~zOo4cve3sBb-WuPAI-sQKDo`I>)QxtXuqaIp-Wv>;4%3;>< zq02Uc{|Q0s(mA-1&Gjh0L1H7yyKS-j&(|6%ky@1cw3D_}OAlGKj5fS)X6b?8Pvb`s zp!>5|Zbt2Q3usm=rNmL#b=$?BH04=&yaB#5=w|MvVqz3YIL;*Je7ck2mPnA;VuA!? z+>m*+qoZ-Fz!6Q~arc)S)50CiIBZ<-ffBzXP$#}heoA=O^2E%=vrVMsWG{}*gu}|| zSJfxenD3p=B%S}eBI)kFD?F)Sgw) zwcj!tqN8LdnyNaKih>qE3o#<=Cl(VG@;htZf+^(gXT{R!!tl8TRl4=UTe3o7B+bda&o43;P}`saIiB<7rH30{?+}*7`79^N!oPG9=E1 z27GF*oUg`OhrfG@z0`B-feQ3)-%DQS3*pPEIF%dUHH5qU4$i%ebW7S|9W6d-KmuaN z_%~giJO+t>ea=qx5K%$n@w3xgn=!y}nE7@Op&%h2zphu!Z>u~)sW)bO#$EJ`n$RfF4vFs>MVKP=mIl5eB@We+?J#lJXm61mJhX|=EPN0?% zZwV6ybB}qvIUsv=Bi_MG+I015(S4)|1RSDYCCRG(8aB0XTy9uEAM#rH1pV2GCbZ8< z=nlTHTbfIl{>N=6c~+^z4qi?fqi^9QPQxR!KXw0z;@C`75saWgm6K4aPupzi+}LSS zq#&krDrNd{y45LTBR(;}O<4xuNZv?|tdv#_Bg!;9uhL#**1UD& z!-I2Eu{J6#+v9pGn0_THc>U;_l1#(mAondQxSD=iS>&mNTl!&7GXC0|cIMd_$?oP9 zQSDFGJKsCdSZj`K4bEu;d9tnb^IxrKBy<~m;gt7oXBMx*NoOcJ9j@_9m!CuIDbPZ; z*~cNOo9v+Cl&}BwkPp9rvtGP>tnPnF92qu#l>SlZ`B3_DJ&AKtz>xX)so@2|c%mX; zMKI~x3olI*S*IYrT{ZrFMRNU7qtBQK_yf#D*ny(2ov16R;)$aqBPaR*BE~dy8x~8NwIqYj{ zthe;ns~XJrAY9p`|C`<1l5$DkL{i!0D}QZ4k{5X0@4gSh56l~PT2i_EIaCFDX4Zk3 z(Dx{Hq@2!j>dP7hJzrC2uBe-)G+Tqw#SbM0J~2b?pQx(fR@OviqpurjG!S5_4kn2w zwvF*6!#>-a9|iFUIT{k}W2$&q(}bSOu0a4hn)a$9=nHa8J-=#N)FKSw#3*rf3rGu% z8DZ~BVMaT5v6w`(+_~q$SxJFxi8{|p>9=>eR&6fY0tO|iJR?hG!T(b!pj2Wyru;{8 z`8PE0hBG-!^y!s|!iYo5i)a?A8OekDqN9?%u*|R7vqUx_KrZR_x2Z zQj@!@YZ?;OJsgGPzWaYt2!gdW-rx(d-g5qf8onD15MyJHVCG!kvN-AIiEOO8uSMd9 zyM`d;Tk$1Y(`c-pvEWV{#Z^^^gMyD<} zW3%-vi2}n%0~i0V_1vymdkpesaZtWCzw$ixIuOv%{{CARkGnv4TDylZ_Todk>jEbG zUI5Q-TG$h($PZ4V+RUDzO(m)s`Gm-Mf0rbVByXJTX_r*wx(BwGu_*O%8|YpzBf|Fd zNre3J3`K_I-H0{Nji$vql3RM+Hf|Pprzs|GS~geAe|bVuZxm(0p>E38Jx{F@*_?^h zU7ra~K{rWrimAGkeU~P@D$>lS{6Bh~1Z@_s+QRyh(H3S!mtVLwjKm*h##=C<^rK1# zKK!2&jZpmUq6_`)YB+)Pf-F*}VeiMp;7aRZp4IPMqz2dbDSyV1)M8@pi^JjFa; zjrg7efV*TbQalj>d+`l27Kaoz4~+;X6iXYHREi}+rRg;rO!?SLUC47Ju)LNeF%$lx zANHl+#7o)46Z7)yaZ_@`U{rtlh;4uc0nRAE1hgmCQfe7y{1mK|YFh-J`1Pk) zl`ep+QwI>>@I9PKtxHW&$!qtcJiV41Bj;*kcf&?L4D1jS-8j-YT46_a6zJr>UDx&G zr{FK;Ft%7Ee(6MP5SzcdN>`?WdnJbn&+X=^Y%!x*vptmrNX{1NAu3e})1VM?($ilB z3ZTE8_x=OPGibo1{`H^@U-2zckQx;vGub2zW<)5q$!UOxXi)9}p+xaF+0L>@)4({g zUXQtl>1V?~V0_B0O+T(r#)EQ2BT7kfwUM%4Q^Jh}Zlrw=O%tFGy!19QT|k4|!*+X# zL+{Z`nQ~ycGqRS;>(&-hYBuhQz*l*SQt9xjzTfgPRk$KdL3p5A0Wv3OA@bVe+NOiATp@r1k^1eIaL1V3Jzj3~OA@5GXN? zDL1-HsrvImk?Uc3%&?IGtMP?E5dU9&YTu4ofn9LhoXM_MYj>RW>~UoO_<{);SUzuZMd}frBD(eo2Rtc!MT&e0s)jY`SM5wN*@U!cu zds2|hxE;vD|NXrM3TE)=!Nu}+@t-aV4*;%-xXi;FOCdC?)k^-XQ8Dqx*%wKmN;GfF zJoZPGe@dl%xfEiveR8e#yP~m&MM}g@&~KQAni3Qsj2Xrp-9l{srKAXXfn%{Y7F?3q zKP=7SiDv@tyRU#cR@eKH;?@D{NyW4r$xVXH?C!S;7_*^%XxAwP1YwErf|+CE1|ddl z4fPsp-BWwWY^=m^Xc*-0Qe&UN0`LZzPZQWoG-&_oY_lU}7%-%9{-$|KmRia_DF)Wr z-Q50w!?U$mAKi~+6j(Nx+R0w5smK(wbZAv!XjMRdQ5S=wS$M{81d(oy=7B*haYuEY zQ!1Y!2fer|`5G#X{jqrgC+SO;`_Je(aPr%mpP)bnarzg~CM&)DpSsoAOg2Rc!eRMyjW zdNdJEwK;+N-3N>f^3nEWrj!)60smAt{=f0bQ9f=6JhrdQK3BKQ$n~3}FxX^_HH%9X3RK4((|ETSlu-z@-&JJa zHmNUrMEY~+-Bcv(>!Tqt5FP=(^mc`%E=jZYu|Ak=;}RuY?{a3Q5}|0pKm#LTMaQvq zJ^@U{CnU_vevVqvg*5&K9ZLKXNVP`$#?)$i0XO~W%bjHg=%eS@?YiYvT6JJ%34p2j zjYoE(&Ti&`JvLqcm-R_yz~& zh}0aE6@*{TcOk+7CII6xcXDxHWfc2sSghDV*&HX=ljdXnx2Rt7X!Aq^zW!jpblFuX z7-ANL?2d0fmzZ1u+KIXdLF`Oxpca-*%iu7Qt>82E0oq!EALwXn^)0#GO7ni->aMG# zCJTeQ0~JxP8xr=z=}N^GLMKp>`#FFfdz0HfqL(LLv+UX&-Z3ozEZ zuLb~RM$8^ML?P^Ow?oQx*@BsHYL~Ie+E1ym;P@fKejSWE@d0sOQOa4}wG?wtrh)*v z?}B~ydw3D%?g0@8Ne!fNk9p2sVUO!>n`Ez=#!d$-p^d#sX7Ul*qQIg!XwkhJI2h0B zHL6m!?o!vX5Lw8JYCV|`yClt)JV5j+W2z2hws8Z*`Uv;_=`Qxk<-kx5$q;RmTHE{y znPRq9MLbxL za&eb@=$=vwLIMNwkN*Xq_1x@Exqe=J`3Ml<_VIkrd5=bXCG|`-YW{ zg$Kmh@F72hN~iYBqW(eLfem~l41b_HGJTbJ=%Z&^)XCVkj`RSP88jvXf%5^wJ)ME# z62!zfdzJ@YpDG}O7;ox)9U$N*<*xMc$I@x?PGtjtn;9TJ120G;8?HoOB!!^Wxc}8| zuZJ_(JL=8q9WHrki!Q}70&>{uV^Xt~9%YQfHhC=-*rrpa6m^|uFROr@#3_OK zp{zeQ(W-+QfX$W@3=lHrT!`(U7u_|t-^lXc1eCz9CLze9y?80Ywl6P}cyn9I{eIfz zf`fkd`kOxo=l=DlS`Ui_ee*WIE(M6^lucFv`FRpnLuSQ{|AEY4<1QEPP5ToQ#J!SZ z=8gdEn}%OQ<pA??nn6>6si4y%@@s62@Xx+Go~81nLKCtT!ocxnTVb!oT3d^)P{&9OS98QGPf|IR$X!HkTFC6!5DxkUDmVm8 zc3)5JS)0uedSguz${sIo^)xT)7(`fkLOo-p0=l|Wj{qlJF7j2MX^e+fj z1B4|OP>I5&S6%cs!{4szjGR#P3;xBBdUe(4e**kGlFl#EN+?)N=#5)0Zk|@~5McLG zr(U0~K8PtpB^vH}iJFbK68sL915VeH#vEyq=E4@qO-fU1E?&;9^_54eHoUeUm}X5x z7`PdAsaPG%&9rh+XCw1Ou7n}(eCbP?Gg!$MtG^H_Trb-vh@6n1b>437(l}PBJ@imBwtK{ox2kP z3!lXOQh5L_=Xz&AT>#mMV2t5($1tTG^fT$S)J$_9^<%8U^kGi$RaBj5S&$y0{K}$U z(C%G3)1b>LLh3v+=a0=`sYW{CQ>xj{+-#tww7G~kb^3m{CDlW)9C>d0hEeDH!=1(b zp8rvF9{yDSe-ytq*XCa7+S&I~kx?Wr*)G@S+Ly|`T&qIJ9=WndB3yfA=3XQtTN>iZ z%~fXKl7!02==b^k10Eiq`x)=oc|FfL4I$Tt6PD-t_y+28oWJ92G#7V$n$qE^j0ZcL z+5Y~h;q*EL_0I^PiMp(B>!@H?755nPMDC2>ymGTPDRiJ*iGzWH=c)Y8HLCADyF&eO<qROBbw= zmVD;U>Fv?|;hj{Dg_#5FaK22IQ58>ZwPwpZPH4lC*c%>={JS@qg1hD``!wDR8nN|8 z-yNNeRPn?|J1N@@wW0n}|BN>z#!i##cjWuvH9lTbQ(+^VpD3*4!Ti2%h&DFOUF@;1 zug*zp1@*gqgQji^q?yO@=GOj_iyf(UZ`s9Z%eFu1>P0#F8Hx5!Y%_6451sY!;i#@U z8c55>+!Ky=d+_8kRC{yE_7p$x8r1X`*}3v5Vy0_uQh4*u3Wcgb$C|C=i*2%)0>QL zqQka(ARu(+vUQva*E>BytEdf&=7szf zc?__w8LH7By1R{oN_zWOz0;si-}d}cZ{nS#gCQq?TR{S=s_{0v;Jmc4vc5_EKCrhd zZXa;U>s>=U3szrWjxDgp1AWf*i-X;OBk=DK?|ki_f#C)Nl^cy3Ltee1hcTnHifls6 zpipW`S4+yTFR^X<#&uAe*dM;QrI?A)>9#Eytkb3V7{Y-Rl5(ISbNmO z_BbWJuJbeL;Piq3%`V^L>G>bNPIu@e9ZLmr(?!OIh$XAIt?iX~=);%i8gd{zv_N1I z&1IIE^Li9Zk06Hb$x9agXz1iw*29*YN@oIh*z?ls$(4eb+||u^+VmqWbyNA6-^Z$Y z?aOvlIa64JrrJE2By8%*A}PGza(LXXL1X+bxDzU@oDVOjC*2=Q3hubfCtiCyd1|4V z3bK8mzMkGzt&S;;uMA#IR8`pc>dYv0)ubs()u%P~6G$-gAsekF8t?R_hr)dM?o=W&!DqN4=jf<|kfu{@CQX@$<_+k%N!ar54kz+_vWx?fQ;{ubn)D~i1$aR!&5uf7vB<*6g z&@1MW50a5my6ixI@{W&<*$scp?U6J_!)U2L1dIF*lZrK)j`VxM+drKS!b8Tb{d$m# zPkSoSiPcfYhgZUVAUUwRlE>1i;)`!w6Fff&DNExYTRT(Ay{)Zs2y?6(CPHKm)!0NJ zZy%)djfW5OyrLgDn+AgLyZ7IUk@#-{b3MQES+=VCyq0-J_0;m@kJ7e@oaBPB_?xM z{f%GZAij}C3$Ub zK7LyW^$HSPmYgo$>i&BXkw`_)a!>|JetDrf1EO^XYVk!Ya{~eI<*<4(p>zuC6j)-; z(z{z^>qJ%QfyZvu5d`8sP!yQsNA~AQG$}0aE$lw3YDtXSZPmjl5!pJnu;ydO^oVUT;(7A$|EJ>#F zb5(W%y7VCn4(nZG{N~^7XAB{qj7RgUweODj;GV(D_;@p5emzdP#y#;2>!+XL#EfMy zk33~p`yZ%`A_TwW#^2>NTtpP_-{9gJopku7!YuZjXW+P1NUvFtwHjyJwrTM|X*PS1 z5v7QFsdLhPBVJ+-x}u#KU3!)kUs_%(O%7c^FC)Q(V59n4SXm+oSy& z#ZGfs2G-)ALWNCrSBY>dG{TDMA4tT@>ka$)UU^ZM=u;+c^&JFx?wo$Uk_=IQx5&XNQ$qvoQ>bw{B!r2LKVRsfFq z-_uloy!^%r>p<8`T+KXkIM=F!#W=83Diw1B!s`Lc?xKUC(pj+fE!6sEBD}8X8r<}g zRou~bqo1;##I4?|iYLLS^Y>EbMW$=L%;uohIaVnJt9?iD*TRK9+{XAL<-d&==xK1s zFzIWG1L~pUxgyLkNo1yv#@8X_y~98L2k1|1iH28HE;E)OY?tR`hMD0ePpJ?9`83PS zzZhF|U1?cU5^U>5|B?hX>9>b7-LLF|0E_i5ptkn~|1;$!k7O4}BXJ#*Kg>y|gBPK~wq)TzL$vj@mN(mR^zM~y@*-D(&6 z>WSwT0Wz)+n;Bn7_4!#5^RDgcT5`HWef4uq8J4G}_D*XLL%iaQ7L?fY>$o6OwwV_S zW7Y=kWJg9WC)jTG8Rj&=lej{;aBaX(5jQBz*T4>`wanMP4;lSXz`;jk-NJ~EF=D<9 zC!OSaJRVWN71|d2vuNt3Ow$~wv)yDnDmt6?4@6N_dg%zkFdCZ5bGjJf=9XJh@IE#j zs;z2u)uu9pnK6js*;g4*k~C>O4elz(Ire3_{~cKLCQJN>%9cH!_$%-cMJ&6H)}7k^ zle;-shfA#5?;q6OZ_HLo(6`2DVhFY~=Nd?@=*kct>beJSluZNQ9hnQuzYp4x_CDFZ z3_8Xaenk_#kU>iSKs{!6SW6HV?5@q#1x=$h3DN&RO5j#2VgiPZ!iOWScJB?#IvJA3|u{&o91x z^1QUn5=vY*kikRaSo=A?#Z0UoFaBt|>F~E|$75bXsMCi+>JqP>u%lYbRG@x7)%qx`z3WI1nmdka`Ae_Futc^~HV7zJxuYHxsWCf1v+8>0y zIzMk&#Y0LU`$lR8ba6_~)hVL6*=c(N`M4V^_K*)`)`|q^9h(%9&FSRc7}^S@w{EP( zip!4lIVrYYef=bF;-a1MOgdt$Ng-^50ufrxs}wvQP3T_l97;-&u`@2LMI|A>U$phq z=*?q5t^eNqz4-u)Qv1HhFI^4#8C-MK%i(gIEM7Pa^z&M#XsSO8l$j}CPf1fId3)WR zsQVFH?3gygKCMzwu)5=r{|}_F?Ct9Sel;HX!;~K5ujtGeOI(|E%EtVWUOawkRz7|= z=<-hR6b#6e8g5spZht$V9RMTQ9@vVQjhCb@R=^0|ixhb0?4O0X<_$}A-3(Se%*gX4 zLj@)nW6aI6F~(o+`)}=F)_!Pq5nvY7=WuB4W;pAC4bL?o`)%(4lS{ipLuZGB*cFMy zpE1iXRF$5~-gafgn=-z@Yf1P^)u!F8_1^x;>#;dlY^PGkG$4MW19at)^#-ynC5Zs; zIj2udWR(mB?H%>|F-a2jbI$)z>~3*Q^YVD9ua;;NPiCvl5P~yLWm%yb-7=GzU0m}n zITYK}lA6`xF}UnL*ybskG-N?=+#r_q+~1cF6#Eu+hR#yWTSu}T@zp>2Gm#a)ApfAg zg%9VJVU)uUUl@>VGNA!V*vjRmI*VO(PZo`ulV57%io)|cZ_f0)wObHBGT1laP?Wk2 zqH;%ep-@Ywg;Sn|g|sLVlx@ayK++hu0}_mwpz!Q-tx8tIq2(fTGQxBlacwXRmhC>o zEu$$&MEh4pWYdq2R!!}8S@2cj19O4>oG?AtclHVcDj1NWrS5MJB}kT|anOW*Z#s(> z@z0kyjrD+f2^3Z{M@_SpC?5}b7w6@la z#)`FpF+q)X<@Hc$xtEiYYSlWOba4B-$sy6s7vr+}Ib<63q~S)kmvU*G)P_}BaKHD~ z?@7M4s`|wm=K0ZxKbu4jryE;D$>P#QtRcS{*tiQ764qi zJHc&FxO_Nc4E*#9vD<^thUyx>XrtVwpnV5mh5yqA!ozN}m5*l82ph!srQvXFv45|M zc`uSk{toh^VVi!_7hx_zc|RiW3{a*gdW|QcfmBc+vGetGe)-m~5r@ACTR=B!z9NyH zI+!BZ|DH&mq`+5BX^pOJj*ieUIJSwkM!{8>r?C3vn_!2bl_o)=+uK?p4Vv1Bvf#l= zV}pwM-4RzF`1{LzwA)0NU3Tp|$I-_)LYtzsevl2J-=!IRW4Px-U;!9Kk-w&PDt^H3 zF83iMdhY0+IAljduAV7kX&KeLoB2^Lf02I5DK4as>L6E#?(gl57uKedyXu&?dQHZX z!i$|B=!7l&16lR3fp;W*^winqMYfH&S9iS4{cpW<;0?a}Jy!TH5~W48wo-a7qW(6G z_-7I7A?0Pp@LSuK5$BWJD(O%LbQQ)SDj)Y`+x7;d zYs>}b`V{PpbXRgPYCWY~n^~0fMVJq+E>&|Nm{N*=HH< z3AWw{K-D2Jz`#nC+pSpdHUIaBh%!kVGPbWam%cUDoiOY^K@g-hS`-V8` zafVuPz>7HfAr|F&0_qz#f}-TA#oO1_m^WQJ#9;RHx`19eq?r}zJ+a&eRZelQjHaQx z#(Mz6lA!MuktW!C8Wx1ZW8Sd83B{c#a7B|l4g1YcA}<$ zY){8V|FHJU@4mBmuu|~wWten8F_6tB$QUZ^MduW-dq_Q!D~`VGM42I4kF%Ei#Wp4u z+cC1zeF$oldwWgnGJBgA`dJ-j1H7w?0_9E%1bqdD%`}AH9GzaRg-tG9#kY=Na8?F0 z2P;jf?0^MJYh`pUg1i8HGzv$Mwx3WcJ}=suB93<)L!?)LB`ORmc2VX^;~#7_jyBh) z_{x6V^0_WqZHiZ9x#2E>hHP9xc&bZg-d+gxo4wqfrz3CpqOq zv|DLhz@j%k!fwmG%Nn1mSUb`mrQj6E6&upLm|^sIekX|6D$(}m2*Lju5Y&Qu;1$55 z*%F+i=YrH9IKBeD<@a1sgvb3;OpS$#g1(+yUd!Y;XG1@9$=<*lZvn-&7K#%1oNC9K z*8WJ=oj0#p>Pb5QtecfA(}c%)aOIvsz>a^(w!-1z2_8`f0%sWYfy188#qzf!ik1o0 z7v&Z*4JPqRir0;`q38OqN->wGWtCWdM0lB-Ys{`Mr%9e+)3H1d=q~P3t5FDsvwq@X zo|an7^WZy3i7Lvwbfs>49D*=f1BukIB0txiE4irZJL&#dGTu!oDFt|R`eiUL$pXgi zk6nCmt^j+tlG7x3X^R%VGJFC53-Ub}<1C#`W*086`zl>Klc*}yty@%fRhA!8VYw>? zJkys|So<5H4iD?$E?%xVGW~_>^$X!%ewdu8Y%{UW?ZY*5Pvdec%fw$>(BBTj{_O`NNgA_9q7-SPo$*M4@@+nciB zubp-yu;h;q>KRLiqSD|_BvuxRFbUB?bZ9c$uk}hQw9$l{sNW>jT+i#=B}QG(CPJk{ ze6{vzt2p=9EWp9h!k*nHAb+rdQk7Cp6JN4h<^pTneflJiC|*Uh10Kt^LG+jO(hM9L zDPd$pgSeWQ1s@>GR}c+`kKSif%tgQNPtJCk;#hT*Kl>- zJOChA^u!|TNcBf*62NGnF|E&Jm*lwrfLM#?3tQiF$k&?V5u0jP_WNuzuJT-2H6KtJxE`7?O zhhP@fKk;fZ2-nQzqSD0s?i}T@>?=Dy{F#XCzJDO{7&|tu|HcJ-1{A_Fe~?tiG>j%Q zh;7TVNNf$+V_{8__w;~o9(Ig@S2wM^tWgBzqd+J;!5ka zNga62Iae87dD_fL5Y1})==SOTH&L61$aVL}2!ns`mugVo!w&z8tU`P+I`^VqY^P&- z^^OThETuOX@qFz?#NEq+HwIU;*R6kAB1U_g&+ZWh#MQ=Y(`^tWMg4ogZFf`173tj4 z^B!e9xiyl0d7-SsvEUN}4cL3rY)E6dAyE0RwnW8|hW@7jdssCWMNwbR_JJ}Fg9CU8 zf3f4*8`tkB@!npI^F@ec=rkx6u1dz0UnlI9euOV zTsSM;xqc^Erep%ZpMc8BWS?_aVy=B%gmMd7_C`!ClNqP}+sr#w_UMWwelSVz{> zdEVovW+_C6E337-UWx*gtJ5xmnvkikG>S49?@%?ILn4ZQ3Ng6Z?q6S=X)#62-uF}` zEQ8xzFEN@np>P;3jSu?mpQz}mFz6`Fzxw-cd@O^mC95Z6uMa$0y8CC?Q5(iSf08%z z_TN@zX!6&fVQMBrn(Xz0{Ady}AaWVwZ#B%Li{iCFw@1{GNb2;#!iI_k)eQ9(tD%9F z4vP7RRM(E=fgSAVA4p}8Uy>AB53ghaOduXP*Q_0yywm#_O(q_81HaqTBdcsexw(>T0^ec zQ%%XzHHUs((H!Oa02rBzLx(q}R!CLn&4i9k_UXGH8TkW~75O7W4#~0Ee{9d8!E4WD z@!ETfcWE{({1KId*GN`oEAyV zrU&GEjK-cQ&ApM99J#Zir*j7VGsj(=7Z*Z;*YKem{n2B5@j~wqmxLssVRCsjW;B}z zH?ny9Eghb6^ zoK{{$5Nv=u(y(sgE()-5-{?N-S@t9a%y%evsjEZ(S_)}5a=s@EbJv-Qg(xT7^}apY z0ck;pH6z>e#J_bjKB=E-+d4G?G9=Aq@)T;%fqtO;l3Ywv#Tpb_zp))&k(`sH3vgQ= zedrBpbIl13u(%?)$cPbqw15;YR6XJ7RlI1ArDBQ~goEEyo z$ZPqhc4Ls!nkW^(9Wk|29pNb8oT4=QO)D}xn_^e1l!4cf%)*)7S3d!snhGD!5p#js zA@WrfidnovC`+e~-|Fv|c%0!+VNG}z^*c8lXc+XWn(@GRYBI-B1+9M9n5NhFE|b2O zhtgaA(iF4cQ$0KNfDT<#e6-~6m}8^-=mE2$dfj47%xs#BaJOeTn6ZY)8yNCY4ycOw zy(*W~75JfS`||YlrnbA^K^&kdKGv1W{=YOFA-o$)RcjP`31M3wiSygw0@cAkp%nX* zMf6|F8kzuNw&34(_|F^9OM8(c8jYfHaZnlCF9t`l!S?DexO5|&3beO6k3XgHTujN? zN>?x*vR40=ba0nwz8bhu-;@mY1TauC6BY zQ_E4(Wj4oBatldWjV|Oz_0l-)4t)K9P2Kk8hQk2rm za8Z%O$3ri6mS-2i5y6)6RpQsK$V#CCF2leKmfE|Z)6Yuq_Z}{??2_lHkgIszIbB@L z?0A*hBiX!cGshOx&P{3|$7m=rQa?`eD9=Q3*xd5`2g2vkU=GE1FIPX)M(>ojVD7a1=29SQT}>t( z+Z{SW&MjYJxgiN_kr?f5y~K&JNy!anTa36*o2KJJ$L_~6OQd*rf9_vfs=`PGFu}4q z*t}7r%+JlK+H))F)d1L-Faa8_n+P>guN|`8-V9HK|(0q*n+<{5o= zC9{lS0ahSN0RYykk~Si2ea@AN)gMXATgs=Ij0b*9GB$9KnTpqn@*pR51&C;lJvboR z*>o%ft}fU@`K!0CuswqF11&ry|Bq0*k)K5azk3?gq^GnHD*5Ns`bhT&ok{k;-7grn zYNuUVd_>FNt~#DGmRm-$kCT^dS85jSMYYo9MrLFijDUg06WN4lWxjvFVW>=&t>)D8 z<&X?Ou_=)1Y;V6L~o00XL_##PHB?Afd&^BNHw5|wEtW^=R<^D)4u$y9{FET;6J zjndb?M9twiGAfA6DXu zK=%zNlKZZ9EDK&M>6_na=cbq8jJeu_D><*j)RYgrZoE-x&;K-Ovd~Flt*PylJCejY z$^K0n7f-muWk&YX)6G9p4{{M`=Xg~oCj4isGd(Iu23}M|InGSoK6#qviG0=fn6)-y z>O+sjVI!FChk%7_5a(%YEA*+EAgh>4P7%EG70uyjKCQ5k^u_@+Vsdncrt4|SsZkw`6eas!`k`xav zo99|T5tzLlVd&5!13k8n*A6A?w$9XTnGp~-sm@-;*w4%@YWAfKVuB+(< z=?UY2&j?^$`Z}_0+8hUT92mSz~+0*dzm_JfEYlskj7?H(fa>-8{vP zU*q%p3`pOv23Px00dlVfIkMh1WJ)>Yt%NypXw;}RCfEjdz5^Uu>o#F8&EDT{tGcWn zHk$SGX8*M=oQv{mI>MDQn%{SSTXrB}225Cpy$r-=^&tYj5S3>~&bNF@M>Ntrt9^^2 zwj0e%MuZkGh+6w4@N`x8c|+*kOzFxLOSR&_N0W@?$$GKvY4SUmVdo^wB{-MS)iqNT zzJ)&CsSc~Bt(p@a)zb;BHa(@gqxqlfw-)_zt}>f6Z&S(%a*;)DUQp~%&;pX?4@{=) zsE%JzxN$q)U4<{GyqQOCz|QbV78lPCW9RqZ$L&LF&qYvA3a)76wt44Z zT8VNVDcPR)z;_PA*Km*ZT&uEP*^j}*%VvaRH0~Qb&tlOQRaizq%YuyEHqyjCT#%mI zUCGn0Wxxd~LyZygLf}bP z)#V<*+_T7Zv4^U@$mD$^V_?~!TQv)>CxXT%y)wb`_Cw-d)NP=SgU$Q+r=l;{+rah8 zM^Xca=!^|@n4i(d&R0wgdLuSnZ91u2M=nba57WA}?Ur5Kr2RSO`;M?x^`k32Hocmk z3;Dnm`}3rwo11yoj$rVs4EwFsG@*By8Sv?%m*%z~2B{z5Y$Bhe`oL~m_VV@}B<8=0j09Zyi(MNt5Ow`vpZ;`{?V43^ z(<&x=an~E=GyhY9Tky7?@73TMS!agr06b zf-P5*XW61@_2=2LnzWaz)Q9h9shHb{f5m%NV_?a>+V?M4&>hR^Em8IjQ(H4Eatj00 zqLa(hU9nbjBAH`Q_bL@2A1sbwLYrZ1!gj0}jX_MSu!hKTogVCf+VnwSTy8IB)2+wL z!1eD#`|5}yK>2Z*#Rr=CU$jLy+xU?Y``B@f4zY;oLV<=3#so%JCv^Vy=WZFLI_dHe zdp-N_a9-55teHttwDQ595ta}J)Dbp|mWtAfo31Du6EdHN&9ZNGzJt2#1{w3u{q@9P z-e=^^mqm-XL#3f6*7WF(jr7(Aw8`65ufMIpr{w%A}7KxvcaZ!&^PO-n1owU)7V zkIiAWo&HW8uMIUe;-sjHeKbPOo?Alb_UP1Hjj4QRda&8y6oZX|#yBKcvI_0erZ!&^ z{e-(sqce-Kwpo#EGGDw>?ygBoqDR;Yc~x5W5Gag|I))No=K!R)!tn^$Ud*o4J_?*m zgL=yi9IvNAv_EMqiRSXi+Bg1CU>~P|s-lGsH~%afB7Qg6*8enuC*qlqKp|EWqL;0Y zxwGqY&&ovfz*KJ984$_|obb7;+W+lKp06Q@93*-LhoSnIVXI}0UAYTBaq?L$CK2V> z2h1)Wq|zRODL|jp=~s5F8O&r{UAKip|J!M#C`&7X{eij&4}Hl7mM`+4k!dprOSYRE zT7){W@V*;kv}TX32m2AhiOmrjkmN@LD+PzGbclv%whdyF=*Y-(s+-K*(5_%F!&@su zP0nd6D>XE=GtE1HBu*X3a>2#bxovF56^3L*fY%bvYMG{LKP*On9KGRf&ulw}P+oef zj9mWXY3f?#K(0S(ofg5}Q|I+4Rm+e|i(llgAI-Zw3G~(c9?5UX!4sKWW%Xk{xlP9v z?F5t5-7-vtdgYm?KGarUoc~SuvPR$P2RxE)qQ|C8x95T>h6?bof5aopyT(#z$L?-yHpr>YBjQ9+1qyB|S`(>v1Vm!^)q zFo9HMTeo+v4h4TZw0~;(pcz{~`Lat~`zU8}Tka3HM-&m0O`EP=9&~CZdRAh2-)H;O z{mKc|4K+!`WC2QU)HbV0qw&g8oKrpw*xSo32|^`(ns} zImvpl9fY2V&NukAA4<$<%`i=_g~8&$*jy|We<_*FrO z;dm0m_H5rFCdJoAIYVZ-z_? z@>SFZ^7I3cID-CNXe#rwI`Rmaw|V;Ru+2tDDG>}M=PmUNY&vc zSGY>lXA0!H`z9lVLmv1X;m7O_7*Ba70X{vgau*~j9{-rJpD zJKcW{_>h0<-~;u&Gz^8_-k&XXB@hkDBp9HxY`I&6g9%*>t4 ze&N+r!wvr#$@GKaZ_9&0fS6|&@2&e+-$pKlFA*K!J85*)9q`eU~N2p&segY}(7}U8( zYLH1b`*H7%v&vL`#%c~cB6@$`$5>H7uu?J$% zx>@>O+qQmqfoVgB_rr|7$Mn?2%)i|ixS27qU%~f0koN?w1fnxPu0AqS8ypCDtEluK zB%EOIe@AfRd48@NlGe#f>?cTpXLr^#YmY=T*|Crr=Ttk9f(RaBFTIex@0tA+WuZ?>EYDqU$~@!{ zX^42U+L^3TWcvkaF!we2{a~YLVxaYmfD@N*(sQ_R@K4;|UmCP?PanO|qy1FzGzhl* z84a5Qa5S&_v(MXFUSk_r3dmcr?IQJO#8hmAv=drIZp1xJacOVNFiO~&V153{C)1&! zq{oLdt3x++bbbvwo65}8nJj`mHP--ttyY1zUl0a@r-P4_)O!d8NhJ ze7i2hOpO8}?HT$HGmyj};=G%ov$rSQo@$-5)Q=Ik-`bw@Qq$km%X~QT&PJSlWysLq zCDaAgxf*CEE0D1Q?Xcr%?5-rNrngCjHR!hYdptn>8Vl)76n0;&NA6f}WoTd3SoMtYD?h z=XVOxV#(Ai0?yYJ?*|w4#_b8u<3`uexzx?p;~*)s$Wi9(nQ9)^0S8Xf;KPfF7n~`i zjU-4z4wb*{Z?L_5M1a3EWhtlqBZpMi|kzf50?9(VZpjdv;!#@X6{<~_Ec>E1C zqOq)~!^50Dr&I--yZ;NBN+gvnuR${RT9Yfb-DUpS142K2=bHZPY&I$eXM@HM!Hfn5ZlBNq&8D7OARV5 z+17Al3*Zk2BeDSSq=50YMhnvI7gxdK!DBtXPpRu^B6fa7I}6#L`#WhnsUz z4x9X-0KvU_IJb9(UKaF_5CFq^eNfTy^khL_X`2lsY!ER z5J;&rbgbX`7UD4XW}!QT9@sAf#_3tu?bg0ef;{~D@*=EcVsm*bmU6xE#J~5ExMg^! zRm?}-@2l_m3jW0NjuUxHf;(O-KkxPdz?~+|Z($QIuHNm1-D;pXOIo`_vbS0DP>`P3 zHb(K8EUyei$M5&(jQQ-Iy+>6{S(Fgb-M!;GTc1V(G<)0>OO^D$5}4k$Y<-If7z=7+ zr3$;RKEE&A?wUB)ceFCxtn@O8^}qmX(vvCHcTeCWM4ueWMjDu}eD_$gd9_A~V3k|) zQWseR?YJ@cC>+e2^G-rJ?F+>w$~Wi0ki|ls?<)4lD>k6b zKU3H&`^v)fzr?_;IJ2JtRgSlhRj~S63;7+sqZ62-U7$U0e)Quu4QY-BG2LGH2{3rg z&@}50#YG2>eM;t5Xx{A+p&F-hFbX+1kat~Im}x9xhQUPP!58T)X{=Tx5I`B%KK0XC zW4?F&q>B%|BsQWE*bi28`5^O0jlMl%&sVS*A!v5AY$m??NZN2Abo=mN35mZVn((Uc z^q@jxPMREHQ~1nvIz2BEo1{NnMvN8P2O{tD9ai)>>nlTbQ=+7p5hIrvC|fJ{ca$oq z?O-5(aEdw?m82n*6BC>K!_R$pzEM*u3oe~FSqm} zyfD_Pmz(|C)fhh+VTjhREVU9vw+)Y>y`X9OO%kKl?r1jNrxg_L7`Tz`keEm$EOMV) zAQOtJ_S8>>&uZA!HEFJIB^S=GVH-bpHFdqV#fNPzvYeast^|vh7;1Sj2z^-#6?=C$ zBh!$h%>tAqt3eip%O4M^iA+jrDvz+~ z?dNi8kxFL^oK3sV-W0{%$8TPeYpv?I}&T zlgDuUB@f6`P&FV@Me8L8E70DsAtwV4M2hdRsg~U}QpEj7A`v_qI%UJz&d6|5+Ko~Zwc)e3nDx&OxoulVvBJXY+ zT%i8vl~SMh+46w+{_mciZh;q=hW&M!Tsc^Td=$I!FhZKP-ejkPIBPQLiGA0=Pd``t zE*cw+!E6gC+_H>`ouly0$%f0bmg|XaEJU@+Kuogu6f~{~Emhu@47~p?Vr9_WPw$>s z{lc<0-c-l;>a|s(a!}d*{ef|z^iRSJ%leUXd%^oV7L^&^v)%d!N}5zj?k;c| z{?L6_z5dbPi_=e))6dN-yKN(ojTESh`$6?An^&B&Pz{UAcrFFLm0bg;^lT+zn3o(K z#~6DG7ooxU92JMSX858iF9rTHyn2|LKy+c-8ffP28}qksjpQjTA4!J4R~NxHh14kE zt0Gsj7L{yPsOxbA(x)~TH`^H~WvoxJlhJgiSs`ekvC*=ydSInlJCN8_ItKL>jL!{# z)HGpvc*Xbj4w~U2!h*{y1(?_(uTDVQ#@V zvd9kq2x=!+w;4pWB3$d^2+x;Y?&65~RVyRyvl~RWS3THAAuXTc2n!oTSErT6&KgDk z+>;>qB) zMzhWTYY(kgKv{ZQn*cY3HQL-^k&T>*z*4$K|8QyT>dve9EX38@d(s`7si$4!e07KD zM2T98qU-p?-UCp2&&r!oX|s4mGpbmd4bWgzFUGTbjfQKO^)iwq^NIu4H%ob2255Hr z9(;rF2LGz6$j(;i*3CqFjK)|KlFr15nTiMLXeA^ON6`u@_5h?(*MikKb*jtxEyysM zlD!#MQg6zcwAT``H)J70xIJonn`}88__uXhxypdLD`t7Uip5m<6;LAAuOu|jfR;F8 z)zc^0)B<--(ke|5F`Tc;(#oF1m(u2O{w6=DOwEgyB8G52RKyNj-FkX^P1Qrvf~Zgq zrfj2SeWs6G9x+PqpYwQZ=fL$_J z&R+3fLfq<5$$6^ZS{oxFdd@_}$$w2GNr?gMdo_seruN~rQ@kBiZPjh3V+QB5OFGC5 zYC!3Jy#FLqP>Q8}{g*7#VJ)oOM)8lA05&+Q{WG2FDa@y3S6VAKY-+8vW?+bE1H64e zm_AO3;-bp_-_vW6-ewf-h+uT&R%bNz@{FYYbx^#X_TGB`{nqK68RYm5D8ybjB~^I4 zGSxG=AIi5!h!uN`x@s5-P+*U$yX31Cv|@25!PVr+06qFS(dGRno;7K{aiCbHd{BsVF2{cI7jv=tt;+P2r5T$F6O+ND_T`)j~Naqa@Tu zo9AFgO13Y7dylDR2ngksZx%vu-K-5LoRM_luM;(`4URAP0M&WtuU0BsW#`xgz-)nH zd)qI~z3x3EdYj`3XE0lTw{7STZvnreax*{Sm)K5qCsbYA7Um9jt@ptHIrOY?wdBu1 zP`%9@9+<`U_8qfVH!q}z)}OlKn90bg8JJ;Dy3vs%%vj*Pn8H2(&><7@_k1ycp385x zuNgQw3%lhv%TRL?6};?XryT_#n&b>^05!4`h*GI`ec-d+p8-ZSEt#qxgzhxM^nc14 zf=B}fh`Snlhn_xD+D8Wu?d=Wy3}*Z}To$7o=5HV@i-9LqpZmFEIrJpFqM!q57)m+@ z6u0SjjZCfcJx3?P?bYpcJHhFGV2Pa!oM-wSK~w4d$r=@K6nJz1oV#Q+J4mdqPz~E$ zJ-Hfe@bFf(?z=BZi1?&~2em*;rFRdJpdSqj^oU}C`rhW3#%BU33xUGGsRdGO`y0eK zo?KB!2Pa~$n@Bg_tzms-@WQz6kau$=KJEGtfD&F&oi$p!D_nQ}pm>wFYlV`UuCWp= zwCPGr5pmbW7w_-y58)Z>l2h6aJ#YD8;2C;%)CQ}4Gh#s+pF2i)_z;o&ee})v_hvg7 z#g8mbC&2aZsGH=+^kZ@T==(e76;|Bi8=FbQr`G=FF#gTsi;@@qeCH5Tb)c~*>X2Bj zM~eLey?pGH_oG13Qfb!DLkIFqLT^;ZaG{eth5syaO7_GtjWO0| z4NzB-r%K5+kR;y+k{Jh(W^XbMnbgEB9jc9uUzD1S^fd9{7Z*9+)?itq9z8_c6$*B* z|DK>byOIQLPgG?K5yZH;nBXZ-pP4`9e^sy!c}#@NJ|X3dyww>YWQb}m21`3*>dHdU zzg|}dIb6cdD7fz)0+~u8R69`{sI$2QDA=r6+A-o!4NXyK9uZRWXaDl_{Fpu}(%Xc* zfMP*KKXhjOa0#=*m}}O8Za|p%OtJuNa{29@L8Oi39GOMdAHh{SYDkgkva66ByZ26W zsUz&PfYppo-sm;JgM{)Sp(6ea(54HT=__?#ddM1|vpdCGTehwcfat13wQ-Y@ zET0_xjKTuHS@!W{{5V*w-vI?y63%k$-xx1Ix(O4frYj*W=BeinR&|98nWxj=taVC= zl%;)1id87)Hvj%#^A$;2LQ;O^oU;=>k<*FZkb?t0?m5_}MHQ+_1Y!A@wCwfce(sAZ z@E!bz2L^xT3@}j^F$~EcsJm9G6QSvWd@6N6s-{!E_Gy&jWOiO3n=+En=+J?8xk2-9 zhhgcbz_0}gP8`)v`{KD&Lq~6(5^^bW#Cx^)FxCs7Wl-Z#AU{23&S`#}S$%fRia&|N z6j_^kD0g(>eNuByk5Iygs+T6}jVufIKdDM}-?^m+e?m;08;~{{_#XIf1%m*EDs>`fXYq`{9 z9P-q0Q`BL)r`SCD&Ow-4S4rlZh-MbB;22X}AbTaah$WRk*{~Q;w*^m z@5(sbRKzV4qYy_+=z>TnIct2d*}=@E*21R1_k|l8IVIW`mh&8*0%e%tbn6an+{{~8 zfb6W^r{^=HB^j)=_`1DLg8VFfIY7r(1JVL0IN9i&mz%UPsa*z;reIg|KhT+Lg|qUh zW+I>~%xWIL3i{K7TFIKz!(Zc%jc@Cd2tR_AUK(PYmB8aN($NXEQ~kd~`3B9>m5)2p zaqt$yz|@o@As{9tWYV`AaearW;sD)miiXn{;4lDZ-qahzE8T$|P zZ|3*tC&c4`wm_Jt{r786>>adPw+9+OX#Kg|Bvqr!KcQe-ez`iLR5}X%{E`K{?x`uA z!G5}}T6>8Dj^{B=x*Tr_b+5OiLECXuLY&kyo6rH;4ArI(+GhuVmQ5yXHHs{@S#EDX zQ5GT4aBxBSxxUM|hIMx{f(<-$pd?SePOR@CPO|)a6fTiDr){k7@ZtbjSdt2RqQvvv zf;&XE(9WK;Gyd%QFpH*eY|<5A5iLh`P?V2C&u{f1{GMYA4)#Y7aq@uh5l0$)X-db7 za)8BY&KJ^=1C+X6xQc$mT%TdC7pJ<>>Q@UTvqL_At;mOH;zKm=a#HSNJ?(&?ODq+N z{a!Qd*Yo#81g+cXO57$c?NtKY+6?q_<_d}Dy1!}GW?X;9(7F&2wS5T);5FVINri9M z!pX*6>uGMCb2T)Zjs&WxeIP&T-Fu>;~Bi1Ff+BX85lD6bHwVj zj<+w#-nz(}tY9w?{jIcPuh~?xPNZc2EOY94(|dPL3!TrxpOz;XO&+Wzm?{e~1&S(h zxVNkVE~fbIEcoWkz}i`iSe--9KM+^GRG7M~A#N)vz2Y7LeJ$hQEQ?{5?Xq_GOv~Zr z3Zo)il9kv4wPwb%@#WHB^w#g4mnPOcigW%raCDt*4i_g@k9GGlj$z_rITN9+YQ9YM zVl}_``_0y^Y~|PrAwyqS{&x`RsP&JR%Y0T&x|L^C&?Q;!JG)u?po6`^fvi&6-ZRCva^K?U}L{jcf=lj_EVWGUXS zD#83J+znb$zhv7H2@EzofFF!&!Zs!1Lyu2=!w0i7S#_UFFXM!|*XqFBzS;-jSZn;= z>$A>Ie-=-kI*(ea)=NK-9ujg$DY`DR!&){2b&`WJjnxk{?C1_1hsa8ypMxEvxU$dT zN9`X-?m{P|ys!?n^@HUR6V{_WOvoHB)wMkC#_o;zvL9{UcPegh8SO&9Ypg%Ot6ryf zkw8UE)cxV7h82}p%SeH+y_y4&103Uzn%J_@Zpe(yum4eW-tkobe-ytq7g_g82-)tX z@HLa2b*<~#dl#2$Rmi?_jf<>El)brDR(7~%eY4lCa8U_`%#82v^ZVa=JU;jH_IjV! zInP74R;==5OhD@C0C-_`)Vsp9ZPo>dEF-sKWP zpIz{9-l&eo3o5j=n~M2aPh)w|FsO>3le7TFgjW|iehiQ`$E$Y-_osJytN<0y=Q18v zi7_{~4v1j(YTb3a8G@{_aY-6?s0)HT+(Pw>m}?$5R=qL^v1@|-UZ4`RU)QCco%9VO z56@PBzj&|5Nw-MW+?{_XDxR2((MAO|lOX!pS(^u=@g%zybavH1{HU0_b1A1W1g@hR zzb;%4Z{_iiu+-XQe(KwE6>5{61SrjZCX1{bDgkbBJ3c0}YKu)}_nJ7~RaJfM`@R5~ z&Ktg)>EpmqX5{1Cv;vNkoANjB(YcF?dqM;wTI6ZtTo9*4VF%le{lD>q&@s%G8Hrv} zzg54al(Ij@G&%x<&frx_P4#XB011@=aWgry#3Z|^15>uYJ$p^%P5pq%m+jAF_43kk z_Cg!|xSlc()sal*3H;r58Hm`6ecfsP=r`7CKw`$%+)#`ksvuTxP_H=}S3vEj6C@%- zpIuzpH}z)}V8A>S&|-k_Cro_LY5n?RSJ02*87my6u(Gk_Yq#;z3H%{=@d@?g|CjNI zeU$p7JdWna6~9NccVs{IU@|6WoCSHMx47gdV{TrLPalUWKT@}W$;?IBFq?NiTlB$ou zIDPGZo$e}Fq$f4Hc*w8z4(1|dI-^I%diS6!UH}!aI?a+&)p^`CXHzZ-97ZkkX#pM6sUX}wo2 z-=@tgAp@_U*W$?nm>WF!oPAy%tQ!tZlY~V)%!a_1Z;ktW0K#})Q-xOk6P#Uoz-fCC z;QCIA1ePkESkCfDuUXl99`XFX;uH~4pOyy(>gt})%l7AtA9`*e{Udl>8KqP zCrCqje8n{#ckegPGk$3b`I|}mPF$6FuN9Kvk5ZqNTF?kZ_D(vfaoNz<5 z(V);>85I2Y_2a8+C8!UkPSoJw(=k9z8boMq9iG5V&>B_b4-`c^9W&ghjwWqbjnH+u zD*k5g^N6UMz~{c9GT!pY?TPS_>$|hSb3oL|S(q`6gL*FRB7J7o`%z6T$8nbFFXf6T zs(?2n>zt0qNq=^FgDL|%)5RM8ysHWLRl~1nly@C2vt7PFMlwigo8;C$)OjI8%Qni2 zI4B}r`rUf!(gv(vnPHasv#AiMJbizY%5+_ke};JC*O~a~2kb9UcexWNXxERa{3pa! zl&3hGP4B$YtM&i!O1}ii$sbxxHccp^5tK`uAL(gBCm6QkxBJ#`^JM8L~PhAhetSgSUP_&>LG=Qetz1H}{V zBHE}&G4P-v%j&)9{K5qKEDmb;R^6XCZ=na~2u=dS6)@t@UcSDkPa$21z}%L;IjXG@ zGi3wp6V>0w7-Zo2f1+9FGQ`jGQUO}EL?+pZvuvujPHAkvmQTfxaG9VDFy&syuLMs+oft38}XZtY40ZsmW{_m&F)tsYxkEef6 zWSIKZ<@{+4lTPPYI8M)AE!@~t6UvYbe(^<9I#+m3<}$OYSV!Zsc^ z&md#U7q}z;NO%v735czkl0czX|8nKfN>EJOjEzC*-8*h-{0v=?EfwQ>|9FacLqLkN ziw<+5-g<5e_rAsa#Mce9!?42~_8%x`#lvHeJ>kCflA{HOrsLL?^~D#w)HFTO0R5yK zQ2Z4yNI1qwc~?z4%t<7djid_%+rbCfT{mLd>g8okkgMDuqa4sEamU4G&X(-xM6U+0 zr}Jt`nYIj;Gh9&gm)%aDK|hue{Lwg9>xs3m4;B0mwHs)@XiTR3&o=fnLZzNd4h=Jmm&&NIAncDZ&=2XrdGKF>H73 zGC-up(n~zbhRxWJs=6lD*mN{H+abFF{GLag-!u0a;)(h#JiR%1V>-Tc#1~27Fx4J7 zIkWPkfBeOd>Bj=Jv)of+r#!+=SLuN& zgGdxt^|Xe|Ut${ADW9S4QeCxC*GRpUhNufI_073s-$;5n{Gz)>Li0x_kiZf?I)X8X zlP%-_K+8l(&#FJZMcBV-``|2u2x)ckdr{+fpKY2QMvY2@bZ?L+vT-6$ym9li}8sxRmW<>OGp z&36H!@dfh7!wa}aS}jnj!Ix=&7fB-fq<9E?G<6GjY@05C6f+upXRm78tncE>)req~ zUgBuzWepe!l8$|bHnac52xL-1^G>h+6)qC0crH&_hA%k(ebMD%A0~c}B7t+`9%X86 zGT1!BlCEsr_-_3E@RGoH3%EIIu4p-z#97iJ8Aa_D`8WJ`{FDyQLq_V&y}Z!Exr6s; zDb_@Cg-*>5e33lXXPRmuI#@;7(x0t>o279<4|H2x$r0%vVc?mp{FP8=rrS}_?S+bs zh&}sToyw1o1B5bcEG#l5PJuv=)JrfYnH|1WrA0^7woBU`yWb>E!SSp^u(Hqe*j7{` zyS%$89Z_HuvY3YtUQd@rvawVsqbRep2-o`k&&4hpHpeeCNcy(E?o@GU#Q5*^XSY@K z@myMHKAACt?b*vkO!gf%9d^Ka!J#n3{p?Um_8uZ398)D;dQp1fK}Z6d`t4{!_-;ts z0c6c^21pS4Nztx@!gB!gn5to=%g)z@F~X*MjzO=zl&rB!nPPs`QJC=eb=?QW`|O;b zN_%SP1Zphsov+h#HB%*0Z<})k(^&js;p;k$tSe-7wJLs8{s~PrI_~a=)Auj^9zSDP zngsr}k+Ew;t6!d}p|6&gX_Y;aC`{RK4HpPw81mm@kGhLFdD9pemz&e4@%e6871c0} zO*M7e(Mvw*;hftqhBy(O*Dg#1y*GMS3=1Bv(Lam^DW34Gk?94pZ4O^?S(*1UC&CQ) zgQ?_MVbmz7Cxh=sOIM2S;&C?qRM9w-OR% z%e@Yh9O(w2n&k$?fR@VQ2!YCzGqr{ISAPIg20`L_uZrDK7@wsw_o0 z_0(da`Zt!Rh1CLi@>Ax)^^a_{aRlB3hv;(J`)sVWME+v=>l5W?2#7coc`QInO`sz+@J6B^QSRq!Ek(TlX)g zbuY9v<#jNiBucd2Pm1|wI!IQp0PDj;Es*9=xD%ghpr?3<@TaMKmI7QGCNM>c} z<=mWGP#J4Z7q#7g-X?mq%}sn#Prc8}|hL|d!2 z9h(p(Uu0vS(g;(u2jZ9e7V@OEGKlSRP&F!`MdwzCG@2G2&Nm2&O~$=ie2X!AOS^7b zDqtv#c)zVID-&ooS|l0W&T0cp7&=*NTHLKbi>JmIW&f|zqo+dhR$zv$g)2tpHk$k2 zT1w5)NPnP=dxA$(`|@e>HCfqMbPuzd$&!kjkpA165AR>)um11~aejFw6}!C2nvm)7 zcwO)n2*gTHraQaW=e5=*_VB;iKRtRTuX47zDH9?rL$|PI3S;l8cUPzcNFa)euUzc0 z!SZAA@Ib2(2V~VX2#nIy2w}~x;sUle$5|c9^Q72h53~~PgG^``HH-TfzoElj3^n6n zQBH}I0jlFGrh?l(XDXKL;!m@a`4eAqretAau z;SLW5ix3o3(&El1|8~wXh$Vuk@a^pQCo2$@89;@ry*)Ar#athO2BHF*%EeGRDytq4 zZzIcy@HdSD4aK`SP_53v7KsWT^yV1K)d(xM$iv;Y>02!APYUDmeAARUH5eG%J- z#k}^XuC2(9TfP5i80@W3$=$`fc#tbcAnePPNx*j=H_de(C~@Hsl=|ukM)u&9oJHhx zU(%UdX0!Gu_gPma0~Eou%^;C^pZaJ;FtY>fR$PhH{nGf4y^*+oS|FY$c@SD2#%dZt zZxP4QXJn}xotQ%vhQ(n#Rq#hdT-}4O&%oA{`bsxubX$Hq*l^AnhY%AT1u=c*sj@a@ zrBUt4Ji{JRRt|v-0ze>Yg%3I4L6bD8*bF`Y$yDV09s^We)U2KX4`tugJ0mFGrn5(@{Dv&m_$;Yk)cpGnH)9o0@dc6>Z;##e!6pL&I z3ek6v*yZ}UDj{(869*~JX!eR+GoN(i@1C$#SPxc(zl&1pGnc<{V_a+rXV+`FWM2ZU z9FU8{Vv6yW?smUuDR0DY=v5l`JZFVe%Vx})k1*2cAvJh7@bMp9@=k7c2coLEsT@1k z^}%WdSA1L&m<4%B_&cf*&VGyPwX1pRW!POxiN2|rvg<~N_kxFLWG!*n)K@*v2lvKM zvEKsdSS1|a16&dI3Xv+hkyBUnz1_D`y8Y(;29K`Gl$$#^!1uPZG4(nriz>b+LuTzpSEf@B`YVfeUF#Zd~?9c|Ab}KG2%Iwu)uj z%6A;D{`+Xe{RI+O%I+VXDwU8EW%g0%2R#n$ccaan+O;6qqBpK>wj46chRubUFyFPt z>}$fwT2+W?V5r)7#$I)+8iaSVpmF7Ye%ahM_geE5N9UWx{Wvf)#Ocj7NG+RlZ{Iy+ zYpwGZp5$%jxYZ_UsjAU>3gC0uLdNiOo2S;EkTdd7JJ)81Pz9|^gE||)zbTKBKOuq| zHt0#;0zE&ry1pY^gSENUs0lgm65)n(p;?VYYt6emCaaN0{W(K%zd}^_Umf?y=icBh ziDCCyOtE}$c*0fQLW70DWIPRRS){O#-^NX?*6nTH8ZLEK6=fkpjYK!gkF^c`W;HY+ zbk$?@O)oOmb+e|cQVmG1Jq%aAZLj?VaqZaM4VS2!=YXC8&j1z^0WtZl?N;(pEpjC@ zVOhPv5UTGXe0WD{V9d8FL~Nap%5N#-nlb8Io=p8=g)t+T?Q^(4zOFpb`eq{>Z@n`E zY0;tGupWf8Ac0v9PiS!Mo1mO-w$EgEu%>C|RMETGT#g0ZbIcZ3tUo#neD4Lb-9S6-)0xTu<;0+ULf65(yVN`m2)sl2 zd$LBurf@d>&;k&F5OdM1je*V5^xnRFvi)gq$pi0hi}He_@CCxE%G_WHLiD_U0t*Kp zbb2Y#w10g2YeGQy5mBa2nzcNpUcTz&Ydx!yYqG| z*DrXH1)y4RR<2c3MgQT-B-CL9v$)@u{IX%hS>8FgNFSB<{E zzRND5y(+ygb=yaIYftyWN7IffwIs*bQ_|vFN_T=bB1Hj@*7tZ`pB7h_VY3m!5zk>&`}#$hpgp1;ScgS(1#C|r9&75D;ES|B{A3q-8K~{1Q10FS z97cXN62TB)dUIbp0^SQZj-xC745T|+PQ)N>LMu_vAYH&t%m*5fNa5Ut*|#jFP?^sy zMh?^5O+&AG{F1K__Zoicj{p!8#TCZYPPvvLMO-r#Bn#iD9pti(cDuG?HNH)15KOyq z_mC=@iK)81ogDhC%fGMBA7DF7f!}W8C^>W!XupN?HT@kY>Fr198czFT}g1q9YnOF?n&!E#@soLAZ zVNr&+HB_?t-<&;{>~pS+R9hnE>xj9JSjzL23+$P?W zEB>d9@MDlSy#3DC9hz{V%Z6i{lI1jmf{<1B!^I=%X6x@0yLVU1Xk3d)_j_N?t+Ti5 z=G2<6^i}qPJuy<1CByI}vZrGQ6tE(AsPFfW-p-k&&r^`r=J30o=*IE~I*8V(BH16P zy?BzDLN6H!k-N;kEInLvA1J+NX5@Tg0!54Ki?*J_2is`Y%oWnulU{V2%t9F(&wzW4 zCtmqZ=X2YK9+|e!-h47m_NyHrV8QcwVJdKk!GAEOUv<}fE`~eI?+f|e>wChW4ebgL zEuBe^9FKPQKWG%r*?nvuo3PC`uEnAMqsA+me4@^O&TC6q`l#6c%e2jUh6t0kM90eF zg%}0Xu0n!#mrXAui3qFt#d~pS+9Dgvvz{@$Z20(a7I*Jm5Q?Y46Hw8-{xE~ieeRH&ov3HsMu*6QXJg5|5? zIj`Z(g*P|qvrBS#LTwc{EMFIXizHpiZ)QB8966X+4(upQK@UDmtQAp_%g|Sr3b6C` z%@ZyDhgRJ>hqjU%CExH&cf|)VZi}#fMfrq29eikCG_s@b#bRfEjFaUxo{dkNu+}fX zsz@IoHIbXrqu2kr9)U@PMaSP3j%%J^sUVErsx468Gzz52pnovsVQ#Y)C-g+>1MTr` zwRz)e*Mp4{Gl>2zbJN7(W{xZC8$5WizZ3i9TH$Fw!P*h@+rjo5tZb%7*w6d@ADxY- z@?7>m*b2KMV3}S~Gb-xKqxx@?1&yV?LiE^PrSE*8KgFKH2P24;LV5P;FB%@c;S2D1 zvBS&yQ(~$2-?PVtMzP${xBub)U3x?(sKxy0jJMgUW%}$Xn|@DrM#t>4y~*J95%Qpq z$ur$o{i)n-BMo)p&d~`8{K-7lrkjbYCMLT-W22zx%qT~j=>Am>1H9v%oL8R+5T|^k zm=jD7DD66z98U_|guFGMGV-*M)K}}@n5()8lw#$0-0#T3Uo)0~rr_p~tT0HcxcaKS z7{;QKF9)>R90X<3Kw8XREdko2JEC#9M&|JKsk{Zp!bL*@O&N`ZToSjAXMuv7zQosr zolER+DUXhXRHpSRFU0rX?Fs*5b@1=lB}-igYnThHd#|<-Bc>HTm zCy9^bZC&Ku$iCpsRKl(Dsku2ry?39@{r&^7oUst2AMU!gi87BA-{8d}xN%G?*FVy4 z0=AXZ>JfDE=J|+jc5IQ#GqC}2mHo?xqb9OmoQ2fk7BAh)Nf^PARC$I-22ijOHca`h zsgFB@5c;tiJD`RE{mpY{u2Xd~98l9a^YuEYSuLcz5DnUY)G^U>|JR%!YCkzW_AK6@ zxMg}S$!lD|Q#x%i8bvD$RePb85IFU6YxD*x)Y`$TJ_|b>ga(3<*`(teQU3~hEA9F& zGxzhgBxGHe*Hsa}Of$czIJbFKrj?_B6_j|HiimKSG9<77H%u!4UXWBYFuQZ8{3az! zu=U;f{YH>QWW&k#zkMvcw7#YIY@vhc=C`E+tNKXZJgQ@Kvw4A_fi!)-Gt4lETYM!6 z5r*r(_u@i(`YbvtjmLHvm#lluuvT|Ym|9K9^;4V4@{ok3REofj+f=OLT3Kcny9ag>=($5*uDjP-na0!)o_WiZ zcGM16;Xzi~h2AZ13d2L4hVt{VGJ2DBd@KAo)O=@wh0TezIZ|19v`*iqpWN*QX#CkD zX8}of;^V{VEwX8*ww>fu?^*I(@vyKfv6=nIAuFwrgj_jUWc5Uk z_v1#g-T};&}MVyKO>m!!~eOB*7N6FVx_F&}7N^+)HO!9ehkz(eEU?buPE9q?>OOsg=QdIr z-Y?e=muk$*4eZXJtG~r&4mVeu+w#fuam@F9KevV4g+~crfNplqW&;+%=>blS9R}fp zW8o*KQNxTn3Q}DK9-Rn0~q<15wpe(CbT!e$B z`z2!pT}oXHa(v}MlW4E1;;*5vMIz%i{EWtSo_^)lvD>_lZ3Z~~fbJtoHmCF(Unxba#-ovZ3p?+<1lIx0FDl9R}m0)WlHAyxl@L=i{I z(l!ukPD;HsyI)U(c)%A2_orh<1*RV`{*>@=lJqfaRUbEf`>D;Hoixx3=QJCx!_Rsg z(U$}NnqCtB12Jcayw-vDlsclWAC@s(WYZ)ZbVYUJW?;6eWeUT!^r<;9_oRrxM$~e9 zA|e#;?ciNP3~gy=`-jtI2S08wx}UxbLfkog>q}e{8B=F_0>U5uh35p>&=DQ#df1xzJ44t z0>kWz8=5yANxRXFACx_BTgTo!(wBR;(dJ!N3!)CRm^=w-_~SxuT;hu9kz7k}Ch5;# zBwQCUG!Th?VQ?J1xO#)$oE2%8lSET}jm(;HO>8EAJ^E-SI{D&tuQCH#TGM#*_m`Kf zgZ^x%weUZW+6PxMttI!l|5ec=mW_EoJbEi^faJhq#W3#_oznz@Y@NVnYh^~Q8K0FQ zq3IDunwRnZIQ1o0vSdH=*R8RK+)_QOtgk3!Cc5s#WXhd_f%e;t`*qXT#!IK?Zf1J9 z>uO(a$fw%-$3@?!+LC-1$Mn1)UyO>G*W&)1n*>Re!CR%vv)EqYj=C(1mf}a3g=bw{ zI}?d_T9UIEB(o`tPG`Z-vrml*eJ*oEEk+r&>5FYPUQOhu8{T>-4hbK+{+vy)KZbSx zC+BZA8z|Fm*Mw~5*Yz`54fdgQp78l3R#P<2f$t7~zvJY!@BW}(Yqk9w(Y}(S4;7sCnD%HBRhH;oot=#2!X!cxunry&aC=&^mbNT z%T$)7GfKcK^i^WMlAMI9?_2K{Pi_VfN;wBWPla9z6^Xg;EJ|hD^$;6%tN8Mo78}|W z^2`8-eFNX^mf}sji)~zzg?QO~Y-}O3m-;GjQnRBdN~9RhfmPZVEsfFr%qF?IxZh4o z!X@kUlymA&`-n|ql+|NCclZz#sIYWspgu+jQe4Cb^TCQ};~2llk+u~>qFj7qH%}RZuyU26G%myi>W6>fvO3i1DY$?ngOh?LjIJ#G*XEb zoF&@-Sgcr8R-*MSsayCuv-ae4HZUO5yI3s7Z#%%OFZ&wl20xQWq4`&%^{^htc4ktA zxNoL$a0N9f1wXh3;i`?xzRU|J*S^Au8;4tSA|7ZX?@7zF<)Mu4$#^iL=Y9qn*Yne1 z@)_Bu6*;tWdsK(Q}2Jm*S z8P^Hmtr;l^44eCW*(VpYl9*81?$ofO{;>+gDQ+9UopuAbh{pYaWbap>)7 zCR89JAfPO#I*B$5`==$B+JZ@p?RE?0>Wk!9PPy%&0u`(5-zPvXp$PHXtmEJK?L)VG ztBy`LM%8PiYh^5j&moW+14NVRr_WI-nNp9{;b6?N!qT;M>ZNs^W+PDvT2a#VO+f6(0o4JXKcpMs z$&`WGF1t1A8t)~V5Bt2i93f|dIF!j{32N*X>H<@IsgA!qBx!Q{RV zUMAf7un38Lu)EP<>@y(7;EBPe%Cw7vPRYfOhb+AvP^~%HdjrWni7PA2GOfk%RNFk&Y>A;TT~rYTMG17H)7(s6XXu$OTiGEQz#80}VZyjPCAOh0Zs7<%lP~AHN+&4CyrDc zD(<(~u%%OcpGj|4Jy0*&wQ3zy)L&l=q>L<6+ly4CWog=TS}Oe(&3%*?*2)82y3&@Noks1i2M@&~h5s|8Ipe9{njg7JLOl^N`YKdC z!TmR~K?uG+T?1V8uMn={(3FDwh`pK?v-J1^K!m3GmmVbpMiLf&4G@E3O}%Vz5JavI(>KXRJ~Y}bUld;rwm`tCtF+Pkk!r%9uL zTqv3DVkJW`SYf2`y586Oy;mdNr8Zk=IidIdKO%2Yn!8yp;O{r%C9^SZL7Ll6`2ae7 zjDORut=Wt6onumi&JUIdxepL|Z5hfJ)x)_re&Ox7BR5c8OmhFu^zcp0TY)uD6e4LH z3lEL~vkxoxIPPoi{b^dVVpZ)E68ZGyaUa=6!ZefaXJS{mafqBKUghS#8)YVC34nq; z<U+VmMOo7VJjFcRhJ;#DL2A*AmW^^77Fhwny)rS1#Qm zs#4ldME`-DGdBQe9!ZQd3iJG#Zp4l}tzT5KWvKaB_PI_=`vw7KP((#aBMlB@z%}!E zVqd?~dR};g@$decDO6D^F8xl`p?GjjhcX|hOWmRrnx4mE9pRDOKGPE>&h+JqbLG3~ z=5X%5;O=3orMsfq!$6HP?&v}O(*)yjX}sFAig?d>$iN)0x{>56Kt5^JYDHw9W@bAT}q^+VQHUs%ROIchrH z=c?&6|4JyMLiUU66y0r9$^D<=G-`UsO?Kw?3?eDrLbJyZ$Q8Pf7b913+-=Oo8vYA7gvzIf zg)1vqX?{X`g-*x>K}q+RVzD7A{B=?pWp9Tb0!bONvU%Ld>H1H5bEf_%n?5<8S|HRTG; zzFvVX0aYR&v-?ioN@?L?RbrR^2`?|8GOcBg!wPE%Tc(UcEN_MQ3V*t^>D%(nxz%-h z3eUt=3s?hEwLiT$ocnzlrI%}}J5Lb($Zspa*cj*r7M!2Tv-_fR%Y9BOhS2^;aj73+ zP62*z?o|zmGY_eyNN>*bIgGGQn9J5zEeqzg|HZQ^(#WX&#iqq@$j0=JpXSrsUlz#q ztVp-b8K*soL%%mKqJs}X{6`4`G9nN>w`Oj9=4U$ExbE1Zh?xjp<57 z^#wAig7or1r`PL(@~1UvN9isiAVK^4_PJ-vOZV~2)ZGkXD`|s!8%p_1;V*Ae{{2E7 z{o^Cs&*byYg$`ApRFW;@9be%#i^Hn97mjVWvN+saD2*|G*t0>|pfoo}ll97z zq&@!A9Ci#2j{0*-Z;jS)V-Yj3A$5$zIr`sH{|E1V$=4A%=2cSu z|7auF$BCL(e&M4lJ3+KYF?P#OUR1S)HAiOLa2*Q&bJ|1`Y9Sxa<=U>BHJf5p-sTqd zRC+*@!qW%jCtxrZQVHhxWeVK(*c_S{11i+b6#Kf@-}`iIzw&t z$uSLIu1pXMIHzyZGyDPU-q)L6NMO$L$35LM;hJ1NzTy|B=e$UZ`0we} z=$S}B3!*7Es4I}StIdpl)X;~&}U$2`(%{mhMzJhcq6Z&h4mWj2jIQs~D!&G%zlaGJk0 z@pYUZX2Db{j~V;c@!n>2eA0UFe=&S^vDB~Y(P@xJ8JyZ-)BbiKo9P{s=(C;jrMH3O zpvm%6#9Ro+uT=Hjh!xhF79Q=z(rr9_Y-)1`j*^YILtd+3bzv{j@{+eV@B^E;DJmv93n+qjc|cj~eJiK!xS*1+N2s!0M4eBeOrW=V+!Pgp zS9A#-vUtaTH-fjR1=OL*!{5X6Rc2X1{(YV=7MA9&dN?C9DGQGDM{wubDS$)Uc_>jU&P0yE+sPB`$ zV3I_c{}eJwqhY}x)PW4qavp7?c5rKQcnsKuCB9ZKpZPl z!E;4cndl3LA4AdaS@G&~@4ePqS*q;@1(NO?%DB)=$M{?|RuLtV>kFn)-()05*1(+k zX@Ps2p3UM0E$2$M<%dp`!$lGR9_wdhN?n`dota;5?`Zk8tX|O#{=AF7WY&3a=rt;3 z#K7g{0yc*&V%UC|e)Gyx4&>C0VptVeA*i z$l~mrejKN^<)d5TQ_uRuc`bl8^0GtVo+n@r(w(R*Z$F>9ff=D=*uzKPiKotHd;>FV z{sbO_aa+gEE?n9*TqsCdjg)=S3LQvdzoRWE8~r|LBNthLDa*(noUq$x?x+8BCiYyi ze!q zRF(@vSvNajWZSU<>+DBG!7rnzqG%zpKb!q6=?URa^iH9|7CirOOQ{w9mhGRCN>7VM zmn3oDl1I9m$nT#&b$49;Mqxg4E`E-R**$a{&lWnoLCvQ7$J{MNfe(mzR=`T-ivDdv zU|*>X8Lq9(Bu6(B!CQLYdSg&6wQR@HpDtd*s=c2EDvIZ5OGEjoXjCr#l5TYLhYQd($Pl9*xtSeM^laM*a?^xn6$JT)9;iy_DT`MENx|9mZ z@E@oEvzKiw(#xy7DpcR8dyv*J$bv6*$mRQbdNP;)UsQ&W(Nz8>u+H&K6SqA$*kgE`G zUbPP?`Kge&t6B;wEffya<=+S{e(!b55Ye8|-^0cMTCVDUa^)BCl>ZlU;EzsquoexMqEy;T+ys$8+}= zl-|BTGr(A^ElryyC`{$lDj)cAG0a&Yp5Cd@q`Gv?iJiph@8;MMruSf)G+w5ESDIxN zK6=*4bfu5XAiJ#U435_p*oR>GoOwYx$qW8p`2>5_Hvp=0)4jRdkIy6vlLM?F4-V7b zk9;*=$e}6Y4b(79_A76PYYq0@*;L9bMlaoy<;n3b{aSZnAY3rMzFNWPQ6u_yPt^M9 z>t{n5I{e$N^j(%VG$p#lLq(I~ZcoiSN1Pk`J|+vs<9WRKw7Rp%KjK^d1KD=1Nm4j_ zLtDG!CLkeHrOb2PUfyk1_JZa#9k@3oOndRC8CGi4@@n);qzX`(#24Z{b}CuobWxBM z`dl#7GY7BzNxo)e=-yN-dhMlKWY@ZvS!bxny=A0TcQRDoO^;6`vRSiU$EO*0n4MwD z9iw|5edjqG-Dv8|sy_GHVCIFNV#6|7eciz}7L5Bi%Txh>90Y?+gJo74{?;rO>#TcF zd}PcK7PQE^vUky`epU9E4QCU3+hl$7VJeskT^UFVVrzlyv_7omAgM z8h>-&rdzgW#*3;W#UDN${H9AvjMCp8;+_c!e~y0Hq`v8KLn0Y_)4G>5yRg-8uxjrZ zuJ~)9_HC91nr=Wne~q8r#iQ(m`rQ#PJY9kRdlOOHwwQ!qu+%_!(;^x~R})e!fSYZF>``CfP5Jsc>4 zeWWlS1!JPN!9FGQd1Vq&TsB`994tG|m(@$3*6 zItw{%W+I5cv(3-KW!hw*HJ}#!&FcBTKIFE1D8e+HC7up(YlL-iKlyq6ST;hE!l-2S zL)?%ZgxSfrF-M5_w5oD2JAH}$&64-NLqKcG6I(8`H)MKx;Ew(Bw)4&-&ie_nf|G?P z*H z>Nb$`04g~gOo^XF1`Wt9eh@ON2A zqRM9T+rQC1GtqAW&u%8WDLo3WWmw`MoS}pg@@C9CHB(x+x|PIa`8Xen%b)DQ^KDQ* zjmYK^M3^)1KZ#v=2ECW-AXt}rRT`}z@DGhx_dMh08y*jJ&50J*JZ5$S`85!wFmHs8!0}GE|RBfb&u4>c%L~x3^|3sb$^|fcFDB>!-I2-@3SSxDnSW z5x*^U2Q#m3q|beyx+*=$%BgQBV8%7Q#_+3G=9ADh9h`H}jo1R`2`6myYO|l1VDs_3 z)jM`O?sIq$)#aF%)39gS5w?r^Gf$*JJw zxY#c)%zK56Z19g2abkdvq82=-0o-=I6}kCn1;sGh-vs|>~gS^t9?S6 zuT6%Jk!J`XjAqLEb@AFNBxF%C(~}7n|g; z|7@RKVUcAW2iP-36B^pY9TY@MsRZ7c7ySyP5S}iHp$VAb6GJO!N{m{-V)tuLBcZzGbteW7Ey}31+{WR5FRxH3 zs>CR&U-zY#%4sm~^My@`#2IISq0GusB#+d~5xsH0uZG!$2qF=^p(Rpg*lz zRCqRW1n_pZ+D9ih{3KFD%pz~*O7GPl4X`5#w+On6HZ3(gTST}GRBRAp|KI$dz8QcB zF@#-!IwXI_V9j!VaCtm4wN!AUpuX=m~^2}NT(#20;GFEdksBVIc%W5kT z6H);z6s%#BPl$}RK>9bH#)AVHmvDn`o8@d&+_EQ*ypTsu8lM)0z_FZO2XJz(jZ-(3&$) zuxQD~PU&U9UrQOk0F(+`>nO`k6Zl!WMZ_35JkRy!B$u762;%^BziYCJB~_T)ykV8@ zcZgkeEqJ%FKl?R6)fiCca9+bh*G;quGWt@`Ut!?@yl85cKcVtDEBCixJ91pX8O*0$ zUcVUn|Khn~+T3=!$55eq@!Pt;qFy6=Al54s$eGlUnEp{hki9D|39xtElXRfxal`%4 zB+}UQFb59+K5&CApwKTT+>HQcvTPGrvz$P<#V%@?I#`hoPXr$GDV1@qxDMUix5P_B zaHyW73a|kjKRJUo=XS*?En-b_EhP3U2kyE){J-C~y+SU&U#`Iy(pEVWAmIR8r1tCC zH*U~T;~@`ar(|D!K!K|oD*As~qm8}Z#c4(#3VhPFOmyFgi zlmxl0>DWoe%|eL^vv>_LXe*T+5WH@1u>5dO8n(HGvz(*ycicy|lBsrfbS3fs3IW*1 zkfr5P2r1FLFT#eyXJLqAVsD@xs~ONE1FksS@b3G>X$%70ioa5-&875Sbg}GCl2g}_ zLC8`w@?0w`ct!~HfP6;MxSIOfj8@HXa=z0#*~T|$fy5##kyvb&8G$)$ri~R>kS-eg zqQO_Px+N7z6%l0Y9%uMPHa5Z6D7-uNRZ{~s?(eTVJQJuKXr*5DsHipXWlya67pC|# zJh+1XZ6bFzcg0+& zQpo?0qqA^pvT@t+NMUrRi}{a7BM&f^6Y*X5Ae_nN-_q zC;(6!P9K_%HXaA|h1ly!lk*iYOygCd z*u#Ym8Kyr;veA{M1w?7CLsep&DpMpGv%jUqu|{l=T%W(?FsW8BiSkGrOg8JBmIap@ zMiXYWCc(qdSq`?7mvODqpDy?@Lv^3tmX|o$Km%<-qE$;q;-WDasO_#wX&@kkdGoU< zj%c&^&25N?l0F}E12YNh8Srkv;ppVDTKUN+61pLO36N^ej#wN~G0M974x$h0gNq8+ zVjlsDRt#+OS=IJtU+h&#Gr^Or`WI2xU-`c!$UIGOf}{q8Otq1gguVc>D%L#1?T9(? zi2D7gzCaYFi<=4foG=#fk#tGUySMXjA&fU#Wk48Waq7Cs`?Ft)Y4ZUxa~ha&%3czbJ6b^&f$M%C=TB2H%9eV5d3tM{o(uyWIcFRYFn^v^+URz&;P7KQHo19it)@lDn^h@dVva z8A}(;H`$w41Rnc$Z$FEjd47czXTi!XU~B54)6sK4o<$qT#<6dfTd<6|xjCE#*j9^t z)p=X3Iy;82=GFK`o)|eMN{YG`RQnuIN~9OQ<6W|C4#b*%TmBrKaa|rc8S>g4pF*6Yg zSK1R?r%X%M9SpvDz)W^Bvlw0HBde>HRztHFIhJGAmTTogw`wh;hsx%}=&FBo5a5+* z$sLD3*RZ8dtTdS#`k!%`^L1S`S@_e}yjcpN_p{GqFPm;^eLRAPo}T?iJ?MFEJ2T@V zs`Azv4jZtLg7)AHpsOdxp6 ztv88Ui)}NriTW66Tdi(WqgL7NK7E z)FaWouv2PY@!);o(YB!Z(l!QH*l^#17|rk4S~j&ys3zF`*bP`^MCfv#@!l)MMS8A1 z5a=8(II{0o&e)1HlOCj;s&ac_W|S9Labv6Q;_ML`$Dfw_b>p)~XIf6>;WrLyah%s? zS$2TmIWMN^9kM=5T0V&H#$1fD|YvckwKT5wu=ZQmkJ#!&6vz>2F?MCDH zxmniZ#NzZn=kdI*-C_RQ`RM#DaRD$M5o-e@>Q-gi3@kArrvlahHX(a^j4(R;E|(yw zUfuV?^XHLtz&^wVmB0iIl&^4^>ZP@5xc2<`U(Kcj+eh*v z(Ni$;C!)ZykavQ}@DIoW;YQ;{MA;M@A2qusLalcE>ET8nvs_DqK%y2;$2lFWG%6bS zny*yd4)b{~lWHTA|7hMF6Oxr0^;h=1Ss=4=lH?66`Tj?&I04093!n4_Jd(9g;X52k$JoH=;xDw14)ATE^^G z+}JM))$; zj*t(;iY&j96EO1pg--muwdX{#ei<$_@bRq?N(_`+KeVR(I353_OD4@lawYFguWf{w zm^p5EErndAi2;1%V8Y!E7I|T_Dtai*9Ph3t%YjZGufgcku`?5BB&(T=tlVS<8j3uc znKu1Uvh}P|_L3<;-G<{MV+`gipD3X$2>9+U@HQ7=vHpbkCsvp&`hdGQhe6+m@X`^K z#r_0HN#bUd+BVu11PaeP>x|G#PDLyp;lWBy6zK|x*&~aU>y&S{Q9fiZD!K0OW+8Qc zPScWKRBuumWWzkv+;c%IZ(%!#n;79z-l?7dyqzAKBL0vWkXgR&ooALwNHM7qvwM|R zSwz^!K)0}UlZ%$qdPg=U^TOljjP8^7Vbniv3c|>Pf4^pr5_9v{y*edMIzdZbiSZJP z89n?Rk~Gk?2`Am0ykfkP0;Wj=So^0EVw;v*Q~eS2n&v6Tk+$X}<*csTdtGVdv*>{rsd&Q00mDu`zKnnt{?&$wYbV8E<_CWCA4dX%d5)tg# z%t47pBPw^6{dG>X?q6X%^etNvBIxu*uncs!B~e?+LN#S;Ag1=Wgs&sAF~%Z|)fCo> zC>AvGIDo-%0gG1VuOVZScUwqfu<8A;0+3-g`e3J$=PZoKH5C_e}-!49;k1 zMo*OLC9E)<)A=U9HfFKLuDMoROdAq+@C6&P;p$gyq?@lfSUG2 z6}OvwZTY+ss(-R~rF-FlAq$L#)%gF|EL7)^j?~>}4+nDpE>#}E-n81hDpl)w={!Og zPY=gSNBMlsoQ&Z(h+tlHVK^JYb0T|&1(1onh`CFt8x3sXWKCjVQctSfqEK^Y{Em$> z;x`@es-Ot*@O!Dc;~Dg{oJ8A(u-G4K7X=7?z5yzqUC z&72vUY>;P7n2bTup~~5F{UgYm`L}Ofv`2(()>Q5!Lq12q-2y6+V2-PK zp{U{zZap`Pw0f|byw&ZRB;dJpuR{e#Yk=+!!RZ}LwplFp*mJQ8xnAc z$EC;S5OH8r-f39$eSAQPL<#>s*mR3mv*1YQsp8(D?y#zBF9B;ah*B+P6aU$$VC>ph zA{KN&e*SPlsJn*G26wH`6j}*MR1`X?-cj5zh@CCt-+MPYO5o;doN<#j!esLhr6-z^ zhP^vTcl3fp^9((X2RAF%I@Bfw&6k!M99fv;II=e+L1cSh@3E}6q^&hA=v#+N=5BaWx z1vbgqn8kr}&p1<`Ybu9SeYLf24z+8c5oUBtrM0{+_4l9Q5V0!}=o+oDP%n8~C0gCt?3_NA zhVc-#uACve97|Dl|IG9w6#7kDxk{K-O*m!xGp3()&5F$rj|-3u_kp8pw$Es;S*p^! zg?S{4cz3MMp>!5JFYbo{Td5>?=BIC~AADZUOCb(%rrb-V_N})Q5F&=IBz%cl`2)3` z7M=!yy}l*CcPB1&AljZk-*7a>mS#lq2Nvaht=F@__?KNTO`PD=m7I8jH$0Ash*@;3 za>5(Am1ZEko=ebvq52Iip^MSVJfD18Yw=C!xhTipoh|!s7XiSZ@{!0rD%=h#n`RgZ zXuFcXlKm;I9g@~oo825L$8P#qyj$se?2X-X3RjCFC3)tc%V%lTTp!4Si7s?G8<}zR z7tcoy3ou4cLFVVCH}%$n;%wQyA4Pgpw^YA5h(*^<@=xVA@n5u8^bMxzV~zPVs!w*v z2*wy2>=cSx{dY2|hy4Jr{&-WWhU;{;%dGffvRp2f z{qimdid-q${i}S)h*1xsB(4sLlv@Ru-g{|o`pobLe=C!q9f|2DQ_V*D@zN98?aurR z`W=O54S!t_o~gE<$XqpwQU+0hf;})iuSNhTX{jtnvBaF}$3^;1-?)V6Qmwm{r$V>n z=q;5>?GB=$?Ez<@0F^nBlt@pF^IzEuA}lj* zAGV3CpS`gv^U@m%IPauW?}G zj*MoraaqqLZk8iCCe)mGt$i>wS1nr3@I zT-Y1yuVeME&~kYr=fJ3cZS2XyxDs z#>+BOF0Ej?ng!tBCpEw9&Y=>d7t7w!rlb>lLdyWpSI9!qW039$`ZH*rrN`XUG!~L6RzUi1`l7=`0*rv)kK`e z`XY(iMxq_lbfm&&IBKBC)X_;jFYSzJZ3sBP?txXBYct{H=lMBhFJ7euL-{OZG4(q6 zqdc+1-0yeG;>6P=Faw{U^yReq1_wulH+6>-Pln)v`zybs$;JDnHHx#!l_Tv|yRLzY zi$hRj{zLiL6LyXerp(@Dt-`jOUdg80HX;cox)$ZO0+&SiO|)U*v><{3%>BdI-s`N> z$;E&-k@)QFuQANY0F*7AW~t7ys4{s5P*JwWqlEJA(`M^BEHu9Vt4S$0_kCCs4_qqg zlNDE#E$q5r=8<1~LNAISz9k!KbJ*5%^oz5uoli|g25&_KlNuPJd6s$%a?@{%!|bU^ zyUQMg%_z5uZx;I_)XY`+uM9r{>8r6s=Ui%y%tw#b6d`{X^1KU4jQiS8TxZ$EE&d@o zPqgbxXUJfbjC{XC87BH9zmE8w@30c75!v2{5j)LoyL_zvR($^~QAMCOS2tGA|T_4o&8%+f(;(VG^joOpoegJxZvcecFT&K^xw%$*nd-rju9=KP}dJT6kOqt zFI*o4ll#nuSI@r;NRnz%ntp2|Y)^P^+6PWf{GwIw5HHuJ0T`<=$~CQ0HV7@{7gtM_v}!?3RjzlebXrI-R`;2D*_kh z08f`1;M*DT7}2gHS%4^~9~hGKnM5@1eWe`UqU{F8h&O*@ZG^TUh7P|G!-p{~XDMRl>-*Zn|7@=k74fGyqOcQP-L; zGe4pv|6BOmEiQNWzW6+IY`ZNo%ptjiuz2IAZkwSDaM8?K|K)YeYgQCH1F+B1e1M4&TuRW++SFPYyxfXUs@L#{Y$hpD3qKaCduMF(Y@pgW^2q?+9hKZsm^t37!djSp z?+8z&06<$gP2vY~{RuES!aHk<&&EWH#UJ`gIq3g#!iR7vZjC;4E9}pd;jG!jAhi|m z4vX0u$ted|jPX3_9~Tea`?BE!{A4PEdS>D}rc3`ORD>iQ*0P$bB+MfoTB(bgp=Vud z9n4ys_CdtN;`BcZBN))BU2 zk15Y7C24^F551BJDz%6up%abihU?kE6-avoptdD$+y`AAhNG{me6^E3tr%~ zc0+5zj)t~#<^{7je7tz&*E|P}l4M2G7mlvJQO^_!mGp*qX{ks!&g;<<7;N; zD+nC)Ma&5v#VH=F^DQUFJT+g_6e0F&stdKe2vnD=;Hw=n4cHO(Xg7pT(a_aA;cfpV z<%#8W-90>5zodNW4?X7>27%8!PXMI|X?zz=!jH=%HEJv&C;Q!=cGU$kFwDG5$Bkr! zVbPLGYLvwLl@?!8?++GE5{*~hq9$?p7Lt(cIPlO++eyXgDDxK<@@au@6sC308m1CN z;Vkb!NY*1|MXIiyTn~RNyq}$_Mt}DD-?%(Ys^kJ^fjm=RzQ`0r(a#JvoqV>4kt~W@1=iQAsM%oN>8OP@i;?9 zshaFjmC>zg36DlufDQgG8IRO*hG2m)vEb9jnOSmB!Na|VO8TEMsc@<=|1+o9pj+JoXZ;GQ ztiqq+&V=Ahfz^ZCN+4E@1GP4kp_-3yXA_Z1dH-DKOpcqG*Zb*})lhYVqO5D`zgn5@ z+_E0`n+>eB;&@JSY->4YqK~=vNC7{z7UQ?p#`Y)qWAaj0(vcOnEX;y3ub1x3BC)oW z$}g*U94Q9klSh69JX9WFxNc0nW5RsiY)Ga7oY~(DLT9>;N?4sMRrl_@`lK;GlntW5 zi;l=-tK^zJBXCz86Ny=*?K!Bc(#jR`Z596fA85bSmWNl?hzd;3)1LbFJH*rS`Yjr$ z%x2=s)dWK=-aJ-6ZN$fMko~e;@wWbAB*DC7if8oX+Z`&hf8PeXms3jltLXeSWx&3I z&WUq-N&qHKvp(JB@y;x9?s1lJ29SK9A0^fEDaB#iRv)Pm)34L?*@8+jA~HK}rFHa7 zdq?b+yDL=1Svk3DyWVj9|3DHa|A8Ens=%p6l)5wB?E)zWbVDxs8XjIk^NgapWZ2kH zLfxbBPcak7=@td#9#mt0u6XD@$B&76YDip_e0Gt%;Xk_Zv03g{m6rrRaLxm{9`ahp z?U*bZe-YS+qzrV%K_=}Q(_O*u%a7eR7<8hrG2h7{Awm77&nwbAbe2%4NoBM{2GOnT zXn>6b6K`d0BK?aX_ra1}sY?z(7N(p%&-UoS1iRl6$=())^OI5(*Vg0qRC8ENpL^u4 z$*Fn37$Mdyn!+vPGp>7d6g=oYuEYI2e&C(#G4?M_^s7i}H98d6qPSA{0FM;V4lZ6T&;Yi z%O`|X68Q(Hcc6F$V3HXH;lz5-kbl3{${*d|>j0oMi{QwFTw=PwTul?QQPvojvb|?6 zFK6O+to8Ox&eO)ET2R(4ElcC4SNeB0Q^oq9v?1tPw6j0tU2{s_E==055~z3+VwPFfn4!72U>T0y zGKdiof$p|Rjk80ab7_b+lPi7nTyJ?<_K(Y8o7DPh)Y(UWGB2XN$4v98*eV28&Q>+l(I|@lz+PP=Lu4P2g+I8bW zFKRlQ3Ivs-)^AxDYfz=q!~FN-b)%dLX}ZJW-3TW>DfIUbjrUI%%I)1+$_=oN3s>HD zRNETSR6NSkBSQO<5R6X;`36*~>&pZLQUQZcbQ2!>o1I+E-st(iQe&DmEDAgM%XyFb z{n(Yj&pTrbXMmB;=8f;hO!Rvg=>gs*OlEkN>(~pk;VRM10Q;c0Rn#fLNcB~lsC>in zCRxOwRKtibN0ocYAIOFbIC}Avz<(p)wS6?pWFfRFa0ju$x4+p_FrJ}iIr#}Px)roV zZ7%BDM+{iTM|mYMCdIi$^JiDqf^rE4PhDz7poP1DvG)v*qYhzz3g(weGg^vTxdFPU za0CBDEw||IFUVwOnVy$6!h*8m)3qxzYxjh3Tzl3zsnHsVs;i(#+@2N(%GtTbFhLI>K@+bkP2lmP2e$_24r-Qf__OGK z@fSD1?c-Dhj=bS9$zSj2z#z=cs>_QqmQe(*4rv!sBL^`LyR$*qPTl<+0pyidrYAaW zfamJJr3eLFZg!uU!}FG@wdA3 z6f2KxKp$s&I;E~Yqr3atF$t1X+3KWH5Zj9s3|K=MZ1UV5X5KabeP_KF{x!A(E3z%6 zE5rNr+@-SN+IySKDaJ=~0VP?&n|OoqRlaP9;n3!*J4qN3YogJ5Ta1-E+*w=>F_ZFW z@Ws30bY)h*Fs&3e9H*Q;;PTihi8zK4r%iPu%`=Ps0|}!CUDF%|r2<-_eu(p!HEIq3 z4|tnFAmaPfIw%mCQ*9Rdl9$RJh|&;cYnSTHb)}r7~hn>$H$UzJMmB-laMOPvx&CTCt>kyGxx$-B;X9YT3f1v15P0nU2j|t3ohl!m4!lBq7Ira3 z4n&(v$y~_)mA_CBVaDXa5Wkia_V68iBi(=kcDo|Ui3eX+n%^n3}! zEv!GCFTq0@q}5~`d9C#Y{4)CWvBqtBjLylnv+wMAmW;UlH?cu3W!?8{Cz~g9N*d1(e?FPu>;8dUqM3~d%5!y z-s7v$^$sdX-Psf@QSv3V%{}zDL7&HWfjObT>yS(Vs}jdiW>Ap|r3$kx!W^r8`H`#8 zTpnyhp}KtMtZ#nMo!4S~Smu>(kkXOmR*443EvaE`mWD91dzOVe<9OWcH!-(9$(I}d zfgWd(67xADaR{;Triw-?z;-JuUADqqU6dx$X;*Qb^=GI9Ngr-QBvi%O`pQd+CjeY@r;1g*&}L;$kbWJhT~1A zB9d+W0r_WJp4R6vyVpR+Kv=8!VaHpx2feEX0>E?78VGFFFOlL6lFYU$#hA{D>U39C zA7AH#%bvdokiYu6+C^g4eyzJ-&&3$>>cMmA*X6#{x&vv#Yq}SP0XyyP)rb$d77;K9m3j}Iak0L07gey6goh^g zNha_io$wmY{+^0-Gr#+@Nw8eD&P@CfFK&B|p`LHkkn{mJGu|LB?(s#6dzNuuwMZiE zsYce)T#8dz1#%dSI^lhR=;2lWraLq?A zxUFiOfl_G;#+K?5q>Fj6^-8|<_`d#otAAgCL=;5g^QzoMK2qlaL+ZUKzB+Qrb-#sp z?S{nneLZ`t4d^l(zE5 z4i63*)8e%rKP4{=k`7=aMMFIZuta6B$0p{LY|Cw!!%w&KmLUbpA77+rWI^x}ds(+l?+wVD!US=}m z({>ZBa0+<`oN-ov&I))we;J0A)Cxxs8I9wVWAQQR?ya5ox-NqyHe$aE7t$nIMQNQty44#z*Re zkrh)67kvIG`f+_{XUOUZ#Q;BfV?J6#n1+IQhu+j1&a!IYYN%G(!?bHlGc<-vbMRib z2J-tmak{i%Y0u_By@nD5;mNO}l>K9hv-kdo4fJI_2d!&^Cd3+>c#RQ=i|EVs-1fov zcvz}P@XZZdnN=#teU*HR;N~sbqj?lxm>Dh)Z;#iv`E<8gYAvBL5It|7kgQ{Mknh%f zcJ|eL3!+zXCr)G(M}1&t|88!}FGsM+QDM!Fc?-P+@1Ry(3$w#WzF%<3 zyM0JU4%s$|%bmHg|31MVNBR!;h51>758DZ4R9=Nzi|Suvn*sKYG>d)yzy+z1KGO}U zs()9SQ2tK2xr!XYW=iqI0P|FvNP*bnqr)*Wp?J-czOu1W*YkhU{xy~#kiDNxqT)rx zpDbvTzxk1~&x8S5NSkFOK7Z!zG?R4BkSweaH z;@TnYB;kT0>{1PC1QnN^?Ak>aHvBA3R*qvQkUN~3yb3#V!Cv+^ zuy9!Rl881}7M?8nJQ`lK>QYEj*61%W{c?8?5JRQKRVx2eJ{0^i1A|ni=7ww%RA$~Y z$5r)^GDa_g?}Wk4zrI>H-70MVg!YU*cQk7Mq{f?amIyb0gjWH1D&|wF`=v{*9wZ3P ze))6mV6m*xN2cU8yXp9%XvfLunF7KSyW)rSaRo81Gs-2JUMpU=jlM$-ZPj5a8)8U! zS23RViZkidIcC5XX+uX1hUW4JIC-T4eGQu|Ai=fNTS#}RGZncTBa9-GRZO!Lq1Mx2 zCusG;#EUjd@%+{iuF=@1GTwPI)Z{IH?0hD2<(N;}M>@gKOu{Hr6N9tZF3m>1ZkQPO3h`e4JL*xBc7xfYWOj9&AW5at z({ko_T?yDH{cy(DFA@{vuz**%Dh=nd{-{Z`gHXkawxfOyZxPiKU}Lw}2K6B@G~Mbs zEUTAYb{?Gc0DgPTzcsVE}SB<#EmX*uZAzq2=SSDZDPr-_D27h#iV&DoI4x% zygJ&8$(nPt%V1LZ;jQ0MX47=xgqa%3iw-@jh#^&ffk&=_+07A`PAxGaCJcXohL0}= zc16pn9!%piGRe4nirUZ^)@SEL_TFveTM&D4ShT{pyr8~9CEhX$stEJosoOqC5?tO~ zXSeagC?c3z-6J`s%ilC<*QH8!toJgZXhSU58JEvYJrFZ1%;FfL^&ePves8iz^wD~P zF?kHzuLSU(u*-;jiv@Fd>n;ZD4ULj3Cp~Z0T8SpO2|)%xUTXgNx8YJ+HMzOF&dj-H ztQg`H-APs?!@tfbKldVcYplgo?=FpFoKt)7-ohZ`N@UggI&gV81HGbN@k+1W?Qikg z#T0bC>TPG9g;ZT=P7hFhoQO;v>w&)0_!=J$R2GrzL`bgLT)^3!8^hM2(E~SEpk<{K_C3U%`rQALGS$ zX1H;4|7*hOR+%!IiCg|Crmne~t;BtQ*|}@>k>WPI%~jS zxy6@RS+u3PWeo{b4~pqAjC`hYd-qsW1gTME+D9d~65c5NNT3m6hvW$^Kd;WSY2u8| zO>S9@P%v-zlO$B3`lP!Axf!G&_ABxqj2;L<1gMdqJ)XQ|Q2dW;9LbN7Gc^ZR zKyD>s%f)-7_*S=wBWdygot_}oEi@&Df^{k-GznGEv+NgO3&{L1nSJA9gaZL;_PXA6 zKl}dfO<&OMG(%)&Q3zMBFljvsQwsbto0R;GkLZRqfTJquRup*IUV_9tsH%O|$D#D9 zAdYmA<_Fg)kTI;b_7&U2y?ag8z-?q2rg_%4R~u)(#`_NGv0eKU(Fso$^(m9#A%2_wBc-T_0 zj=27{>U*V-|3LjaFRis#dkW}w^&VC(l3N?y8PitX_7c6l(1pRq+M9KmANt85+mxTDlA{QzRVBl$sbN3)omwZS6g!tu=$<1VOr(k=f=Lj_=Y)(fQ+tbMP7u^jA7AOu4S}}eP#6^=> z*0=2An;jFQp(ibYYE1&^dTjh#FJhs87q8PY0Wd`PL z$_9ZUw_!K(k!`Z--Qe60#jxj8c?7(VPR`3HeI|fGmpJ&H z2-p4y$&8~-uwSqkSH8GdH5oW!wBf?w%4!ihfZ(93g8FBQqhxBoG&>|{z zX|QXd$pC<+`qy_-!gCiyG&xr(~HCeSLRjocG zzT;0j3*b;o3v?B4chSaLziu%Xjq&?{b)5mlj@&o0yaW=+7SclkNcL{sK0~- zVxmq}cbCXdpO@Kib_#*E2&9yWXgqpP=gc zN5l==dR`ciSZ1->s$pu6ywZjIWy?U;R^}`bWxKvdH;BW}Hw5r)+qsDi5XelY>vvVE z?jP&xrw=|S6M2Gi4T7hQne=5}dnFLo@Y_n4K4md*sk-8fQr&->F@h73nsLe*rkY@L z<^DYy>9DR;*-0l;6*zxzX!48nHwbEW4D`W_O1WMYTVUr`{%Kz1ZB;ZnNjuj0$+yFc zzFU&MH}qUT+z)hwp9ha*m=D4*n!+Rx&>1!dK!=&^tS{Mx+Y)vj)%oma7@0R?p0Cf- zCGndF3C14N!j+Lg;e2m~mfonW(YD|8Fj!|#EgVjB{QEr`c-GD8)bPLLOc6fs(kb#d z`Ln=oCmUke5X%YugUBnDjr#@;Hsu&9Rsh`^Y^jmbs18bZngv32!Om(VB|NX*3khshF_`ye> z!b@sxAI;R)(fXbvKL={c+F?0ttbcltYGtYu1F1Cx9-xkpPXk11)^Y3CsioA`jEtro zoy5nIB*uf8+RBs5tn^@duQB3+=I`C6S*nN1_hKy8cNLt`U*ndlpM$JLZreG9k;%UZ zhd#hQ+?oNHXD5u6UrEwrtsre%N*;=4@Zn|=cVN2E}Ct_x=~->*pQ+om-0+bN!t10tN?!P8PDC#mF_-!f9$LUre8IMrOdUV`Nx4)qlk)#zj{c}-&oQxi_}692H%*pmND zT8h%-ihbj;yFo(6_L#Fp`E^K zz7~OBYa6>xl<4;Ut{`%Xy1fn({TDlxf#aDknf_Y$vC z`PBN4Zo_ZXqhzq*TI2YyUh##Miy7)BOrY)!le-f=N3bH zW#OIB*x-K+*E5l#+nT&s}EMTb_#;z2eCE%I2(Dg1E*xEB^T-+KSs6&fJe); zE-ukD05L@&45+AWBCPd%vG4tdf5VbGgTI|7^8@V_%IUF#+g1_mZkA zRUU0IC8h)2`7m7GxAPY;cC_C>uk=nsa!f;28KUNE0eb;lg~P_OMs^}wrb_y#V!DrJ zDkJL)FcEgA4M_ZGo=P!J7`9Z|N&nHiF#B63lYU8V;6?<^x!g@HdF#I!>r8IjF7-aO z-(I(4BvkiAmW+SVSj=RW{xU6yjXD_&7rpnY3|ham^wLM{9Y3AM6b-zh?~ey2-o{7b z%@f0-HwY(4$5V&(U&B3zMHXkrAGvi_Cza(z=v?&+O0xa~wPG;BOxAJjZ>LI#&58H} zxes+IWZRBfyQ^35!l;{Qos;zgdGB(gRAXmnR>ZFAygZMNdD3N=(SnGN-k-I?>;<_$ z0+YrBQI3Dw2U_gk;mE9I3QGBq(Mzc(yt{}$hezcwaj~{(S=NOaIruouvbcasBwHhW zuBXCdw-bDgjyy;vCciJQftezyh$-CTNuzmJ{}7Ss2~o=OPQu|feVIUp{y=ZDt!!x5 z;ib09To9jxQnY1|uhl+?V{UZUo&+#3yb}}{0Ui)hxlQVPdIAcVG!FFfbF`cldz@N= zgkULCD3j9d7oHoyFW$%;O()3xia|k3wn)g6t0+ci2^8x^nu0b{^UcSr6J2oB>%p{8 z8g9mN%`(?Ub}vVmDDa7yMVuw7%_v}z;e370CXugATax{#4Y{SKI=;S#mJ?&qIhzhs z*FvsrJGLtNBtYFm%^H1SE2dns4Hq(aiXK_Fou5TeI1_B3TB=mz|VNX6q$;ta3EIwn%usPr;9}hxaWH<6H{yJ~Nw%p?+|)-qBk(U+(vKY|iYq z6i-WzM&1{lM^(2b%&Ihh9e7*BBbEA?=B7faO1Ed$0Lz60GfD7TiAZhxA0Tw6M8JKN zy~(}L!qlqw2awamxXz9tF5(JE=VMfZ-4E(Mj#bv<*PIVL(&Wh9-N#7of`?0f_U+6hZr zs$>0pFCi3b@}hpGa@2Z?==AhWuWcQfY%seQYVf&4Zx8vi;S@|m>49x|#CoGDLUF47jp{ieurSQB}4b~sd4B2<0{->AA5e#^=f zL>=s#Uu^_M+~lx{dk`ps5xvBi+lqTu-lX`r!V9O&%0IXJR-?Wjm6VS(una?lA(d5} zI;5U)R#8JSgfSHk;f}+AvCVimk;Qe?|arl=GP$qHi+3Un8dfISojSN~1P{ z9bJ{`4fbIvRex$x-d_=S>ubXauWa}=Z|YvsXL4>!=23w>SEwWL7<#+@3rOY(QSnsr zl0+5}Q{`Np$>22uw1=*ha%RH&IIZEkC9q0P(>GD|v-}No>x8s_6q2Y&YuhMkwyiMiW;-Yv8W*)yQ{wx2wI-DC~NHnHM@D;7< z%5X*o1P6H%ytdm8W=Gdje~QUjUg(mZD#w*o5?D}=0dZ5$l0!7xJIeul38-82pOf6@%^3OU%QJMXqkSF z2(c&-xlxkAYdhBaU0)n-Lv5;vw;LH6Pltpw=!Fi+A;4BNKVlxv4-ei!6!<;A+U2wQ zK>|6gpB`+7sZtiS-vvBIIm$3o$B#L6Kf%J$$xZp^?}8nSSe%y3UQE3=vmHaw2npHu zkj*-vHxO(bA3y)ue+puOm`M~_USq~ zN>jcl{KTmr9qe?xyyga?9;8y^f`jUk7v}ASx4kaw`JZKxK7c zH7cvpMsF&TG3_G+zWdeq56Y51jK2e1p~e*N(1V?$28m@UGuq&PQ6>NIPc6)iWn#tB zb$DKT_FGc0rC*VKH^-r%50o?vh#c_Ykt4@Yv&7X#S(B%Ag+n}VxWr4&MPEMd;P-L_ zFY#{AURZ^I(h(DCic0QZw*PpUrCTWn%~BSQ>g42+QZZ0A>ki2$NW<5XR4#!K7x^$* zPt@&o(wPI%Ny_@-T6)qML+roLCf_n?t!8Cn&}3tA*@H35>FaUF4R$veRV#l_JcIc` zm_FzCE=$kYX^i@9CEoB4O{fev;hdxYhACTqN=?G$bO8e#9%#SXImK>J&JllIS)Vz4 zNJRL+pbK>5=57HCJNKFg_YCEvaVvVyjt8a5K%c$gat}l{$(jT6NoAnI1_*U`d&p&^ zjs#f~@5_Hmk92*~^$}pA^#Fb3o2&jg)GlQChC|!ZLbD+NH+# zLB)7e5@1263N{+33c*Cx1GSkYsDIJE<`@I? z+#_ifTrxL{aNn9$#Yx#e4;`fEzybiFv&+NEly$&&d zg&om+p-}WvNz*s~r@#J8iV;*+o5AoT*SCmP!KAee1(ba~IS=`z{Vov-vJr?o23I~g zLFYEI>`}nY^JxuR8B$M11e8_x$yvlG;i12t9;U>z>J09BiP^CIJ#1-)JrH7w0`se^N}#+lS!HFIgQI0hGfjv^;k zO+WZ-_cuXv8!OuCpWjjOdziS_y&P!O*s**ZlF;Bp?GMHJD-yxbg=kOoMHtyhG@r<1 zN5UPAF(zFSh$^`mZ6-zyyhgCu|NIKFxjs`x|>|C%6vjFK!_cX!QEMa zRwLoAUBOVP@BAj8F6cwM3;yDzvSwUM#ViGUXrE~vwdH~U{bgm_|20%=?9X)bgO9c>ssLYZ@+rDbo%I@LrE6puX_J?1#Mf{$WMah7#APs?IhdWwrn(o1dBVAuU zt+n1dMyw`?5XkZRK;F`NJy{W-a{`dZ=v~M4u+C1|W&b{-B1El%egX8WmLA5pL#J}; zvCjeInKc5&BFy}5z)Zo>q^t)J7Z|uUFPwIOv7=l?>vc?IRAyv@^2%o?w^tQGqyshn zRtx1;_=jXqjyt7)broRC+_E}2TTq3TZxUhUh_7mHe(gj!7T_rbu@+{nkFn9eE?KdU zpVBlTI9+2AWG_*tVyIb2u$u+iT&9cZoG#x8=#d`NLR-)&L418%2fXI05# zg8MMYx=NT(P53C8lHyx9|GSqi=HY9RFT;s~|6VmvC2W=JhYS8GdO$uuk*A3_EgCHc zMSnK3P-=c8DJC5WQ{CVi(c8at?{EAYboz+WzSR>VDpx|((M5|1IpONG`XfBz*E?@cB-6_=U3b#Rspmr9H>~>f#W+`*9%1 zpx#O9iQ)%msT;3FddL8Q1(;{%7csRNj~*Nt;_oF{WzZ+v`llkfa3w*z-Z$4qtN3w;GyP?4QxXoKtBpc=y$ zdv^-UbPxnlhWO4u6VUg!@a7SknO{KrM5aPK>P}32qsRzue~B|dQ`4FH{NIYR4dqhN z(I)uRIbMb78Mk`dQ%xxrMT1a4Sbs;JvPmXl1SNuYt8D&Ae_&aJ>d)K0wxEPu)-#&CB5@E_#OSj;5-XNgSZz8~=qO)tKVcOQ5&3?4rRS8> zqG(IxPTjlc$~;lb14hsPqpUVEx(z8;ByLE0eDe?WX%nq0&EB)_VUo%nv$VuG%*Ge> zN;L(SPPMKvGZ+hb(?Rwf$n$ZXJP!c9;(N2Qmydw)9qw9+^?@ApGvyVH}7MRH~6_XRz8{B z^uFkKquR~PEOya&S!rP3#b)#oDSv(GQ>Xk?;Mx7sYdOVoK}>m}tUvx5N*U9E=3crD z2;CHdRycK}%z(N_WQ|Qq;kEIL-p(|%G2g?~*V*=!7O;&XhDvqXV!_3Q?jMTmn5%}= z>Cd0Bi(#P8hkuP>Zx==AnLLsZivL`_O3PmDTQggcccy09+-(XKPda;g3)?ySL)_@0 zdX>$1=&p>;FZ2b|prewu_y{`jiFm&!RwtRo9Ex40Tdm^hm%-thFEzC$*Ydh+Q!Tm~ zs^|w%LOnn#Kh#;2hkHpU;6UzX*@J(NH-ePXIM}_`@b#zF6M$KTD?F!bP+<4HRvkn( zY*1nTJS%78Z!^t z{b%EcGsTRoi|l$#Ry3xZW9oT;Rl;#6D#(`35prI3SIkRzSR?EFX8BIQ@6eea>tHO^^hV{+eGZPjzS*pvW!AM{Gg{O*bB1`S(qZrJHGX_v>w+Bd=VJ z6{-92EhRIB&T+1SJDqsuUEbvK=rNEH9=kHrd$X_)%MebrPrrGC$&3-E9z1Xv(LDY| zFQvo@zv=?NnfbPGKV(F}%eSaE8yy!)(Yh88WaBK)f zW42I4dlif@@CqMp7i1Ki52FB@rw6)=(#J`Lj^->HRsyF7HQ36{SJ7j0 z0H7-9IMb0a`shI#jZwdn%?Sd~zr;B+iWbUdl+@Eq@?W*W+cLHSESW0TVT_%c6^~{5 zxSUc`NO-rjLSwh=(4TV`rKYhjC>EQy+EGo@6d*jA>Sx;R&w9WNUOKK1y$QW>_D4j{ zFDUd;a|dE}HPjH~Y+JPMZ=z1S(tRDs=L$IMm_Zsk8nZ42OMa-?NCKPJ_5+eT_kIHw zFz}R46xr5m5{}qNMb(u}?eBJePbwhsTLDJznfoo}>}D5}xVqT5c!-FZM=X_bS+}eh z!%%qrsvHAXHo zI=l)0{wB0jP8%2IF~MZSr1G2(zgToDyE3xv+t$JcGVSV;$$1Sy7j*QcPo(&eS}0;M z6R`%SHJ02{Mlc`dERx|_b;amBg6~@9j)B87+Mg$Cyu4izI6dBRp@gE99=cdXFW>Gn zVcwW$I7Pt*kB0aU>jy-oJSl!>vkIS{9--%*sqLRuyDP$wgm%A2o z#~t~0_ou_!b4G9pAIthnw6;(UE3t+(@y!X(Skjf_l=R;Zet>a60<3>A*I)VVC~zmB z@&(1miueJ4QR!?AmC5zn(Glp$HFO)81$Ngm_$-wFcIUkHSQP5Ey*57Q7@bGpfN;bW zJ`_sls1TFelf0jHyGZ{0wRWZ7`K>ELHb(uru#L1H)@m#N8HiQnzxWg}R#bMUr+f2a zc37j#qtO2Ni8`=U-I{*efv%)vd8P>sWII_A5z_FEhJ8lVWDdnDJvimOt97aeRjQS( zeJLNVr)vHE=l^f;(bP$Z7fc%}BR6G4)A3pJ&#RiZ@Zp;5CpEsqi8m<^+q4dZD!b_= zQ}cYKL53q3mcjj?gKOTybor~jY~PI_e{M8R_553TC{zg7OD|m1|EZL;3uYAH14EEq?_}#+7icn!gS&jEP#^ zv$nB}9S|GO(-S<>9)9SEM1 zR9IGowy&gnsukoIKRKEV6oTubYi~HdWcYwZsGNs9%L~#~PgXFRy(ZjXm(hcX)nkPW zG$syoGBcHP$)}!j(#d0I{>6IA=GIvDY@RDYYhu#+1>*5OWQv; zuQCpZ(KfkGhF#j3Ib3uy;ryu0uOLuo_3(+9wz7}NMJSMmT;9cENp2}EoLn`Q!?wus zjhwH;XiO2&o&g5JYlt2=(F0pYm4Sh1g3eh}d$#Ul68?ij396*|L$@Fh&w1l0 z4Q-d2B8(gT(T9d(27yNDP5MSw%8*2!CFTW4HXf7X zOlS!UaeN7h&b+245129UP|V;=QuyF@E4 zb+;KlS{fteA<{the`B>?oxAv@=Ldv|i{-3SW16jUN&@|Y0#zB|V7@eS3wLQ26C`EHxa;TMcFhkZq+aUKq_T6ewH8VQEO)&(&K>n3Rb5^WerN5fM>8OXKQDYTV0tS zg;5eZ(2KO5^Pdy1NYHvisHN(zm`#o5s?+L?*J{lHh*Lx)Zmp?{(cE9BP6}P3)G9r5 zF;XH%go|?}oJeNQwQHQ1A1ga|6y>ftP-Yc9{-L7gfK1-pe)B4|Rn;|tk3Sp)8~uTD z9zr`Lk7;aGTN^65bH!p+Ak2^Fv}l@s$gWD6NA|*}ukfrKKV4oka+ZMJkVLOM2$z1u zy9kz>jjEbfRH}vl`OJbM+}5^kLOrlcIu9m`R#iHToa$p%vR<}ZCIjn#54fH=yFW8M zNvWxA`3wN#f%xbg!Xy?p@{F3J{QydT-9{N%vslzwoG0AK`DEQf`-;R;nOghOgpG!y z64HPlf>hD4jW`#1gB9ZxXB<)8qg_Gl_N1N&vEyEFY+l$L1OM6Zk6*}SQYk68T&dKl zAvcTm9c`!pniKtpLjpCfjKgCbdeByN=<Slx0(lXi~Z zs2RQq@F@j-ZmTShn;0J2(sia4Zd*0Q#5d=F4z842J<6$PKfKly?o+s}A2!_*W`>3o{dHB>-$~(+>&m=$?#^DQ?DYE!e|28ZPLhi=^je7Z z{)uORl%FIHXetU+SOLrjGvaatU#Bl&sXq+e@<+4*MI#^cM`A?6yr{1n#0~5B<#O@E z-NHDl2u61~f{&{u7LaWigFt6aEFMLG?Y!f>g><&xh zQ0;1g`JE>=0ku>p=~*e??%J<4j?4IX`ytw0GyEK46t_KhYrufm>IXBYsSgxuwR#7E z(FQMn4wMRM?BUj#RN}62OH2x>rdO!rWQuHQfp*=YvDOzO^8NP`NnVl7r}$AV+yq@)8>(o~beA68EdxO54VF@B zsPv+?f4s1I{36Ms0Am>ecu__96jj)l5m{e=|S#`JZf+nQ!6R4an)RlIuW8 z4gTP>L8FkPyjpEF?s-X}OEnn!7OVuMY+XL16S^?V;z%kdJV=K=Y@W^u5lV2zwbAzu zwU%xabj47yEu>DyaCR115_N1Iy9`>kt%JFM(QTf@voJlqI*5xb1roO0X3TL)uq!~< z#w6B~p(04Jc<^aVm@>PA5F0U&g)%fNz_ zlTzC;Z-3OJqC5}Ar7jiX<{PEP{lnD{E9Up9fLuClKj>mbEL?_!{vK+=4O+ei3B9)H zKSY3k|5K0}fw(RQ;#)=9K~3RxO!Ccu;^K~5LI zMuOBgKo%%Hy+ac!nQ??b#zq6}cJ~qPbQnH7$by~oqoR|owt)qMIEq8HZrPhHbfZo$ zIC9|_JzDuU#Omr0nP4(M0&I%6M3w7fVTkUE+Hl4ayG%G_57TkkA4GG@Es4&Rn_(Ik zG%v{q@q@impDPGKRmgxU1e6>>cmq|zd9OW8Vv9B}v&j>VJlF|SPuK~$fTVE%UWhL| zVV0v&K7cr07Q?*0rJi{Og)pWEwu%s{>C-RXkgT#Se}kJp9y$9gNe?sT9u_AE(#_af z4`#zzmiuI*nd^#q`hFo26M??LEBmb?kK}}9O5FL5ypP-56a(MJi8D8{T-zmA2b4dt zQ=cwZL-C=(MWam;l0LugW&UR3jhr!)Xtjkh)et{wrYv;S1YUetCY(;Qr>oNbZxQ-A zz1%9>K+!r^VX1xugvS=CaWgxbd4r~ZSZ3Kn5ZrD?e9w$fw{~f#AD~CUE}e8#%T~Go zH#3C6ttA&5qlTk`Oosbb?UvT)W8zuGRG1O$LD_9i!escyeE3l8Z;j7gxssU64nG?u zcZ}7#mpZ!$Aj!1WAL>Epjl(U)7QOeyw494)^{Y7<5NCoR=XKn<$Tzx6(1QINIvUU5 z(n;sw_^})8>0*~t<}UkuO*T>iv!HTLgyduGChwi`4o866H!(`R||;%Y3~fhkM&9!9T{&3>7i@|6xn8&d zG&H~!Tqw;pqQLMz+dDy{RquSGHxHoki<2E2uNX|gSBINc4+3##SB<;$i?itNlDKvF zg;CA!N7W($pq)a^Wn)X-wG!Mf?5(x`mp7Yqr>mwWz8XuHQ|X!rM}OD6(;iTQpA=d1 z3tCgsCBCJjxDGfg1rEDBd4iJ*D-YV0zZCxX$j@E)$@N{hQvgK>k1gd41TU>EuanYg zK4l3$E3eKE`Z;Oi5^3K0LjpuU>O<{97^rOb#kC*Hm0gnp^Qj31&D^Zd;!v!GrELy^ z<7pS>m@SXxlq!h%-H|#2NB(=*pieKlo0YV)3z*L(Lq)4A^EN?+2TB!+(}55XyqqA!OvH8C|<8Ohm%qLqwjI)>uD-Szy1ngg6Nhrta`iTkOz;JNl3p# zKE!mKhPeFR(H*g>Z1|IiC|UQX^x!brn4Woa(<*V%*%lwV-L=!fFW!DP>@q0bK<1sx z2rl|NGsXY^;h<-E3L%V6uKFLdWz0)WK-uBkT1<7E0_ZzIi`})wP?g-_m;~<|9o*KP zw!(}Cy~+en8bIm02+Nq2pTOXLm|EJSyb*bog<5^MUvOSG)_Tz-|N8|s#xn!( zX7iNInZLJR-ep>kv}cN~{sKPCn|x*OC(%YBwkZl%6XBDV-zN@lt2!US)2Mm3w%|({ zI_`hB@I=Wg-IU9JFNWLo<4r)+To4HtUDEUl$Ax^$pYuL(@ovOGRnW?qI35}A-*9m+ z5S(B`A8{>PTkhdXUUMPE7v|pTTGS$!Zu7pVe18#PxS95Jla9a2P;;@*+a$`J&RlHc zkK)7-60^x<=S=sy7F4}`p(apO$Vf(#N0MD$;ruHh@5CZGX|G5L_VGKCersi=DG{MN zrVT(Mhes><|sZnzH?b(s2brGyB!obQ2PRH zXeWdZdu7RKdfs+JKG838DOr`LW!_F+E~`gEUuoCi|8XX{>$8`m7ndxAKv+Caxx{NuYn* zMGhrCD{c67X41_W%VzUy-I(o1$R(d&i;LuV|3Z;{VIZU;r4&tiKi4bVOP^A*T+q-O z*)~>1f^=Ac=zBs^0VJu8%``-L8|Oqn7>jIR-M0BdEk?AxnZ*1@quGHB@^Auiq+-a> z28lwu?$E*QAOJOhTcVE65@fytd%ZlJ-fbdciN{F=(YRF&vd_s<{flnfFo5^O?~*xW zZDSp3W734q4=tESFo5G7(JDJZ{MJwh6Z3UC+R~wbgw`V02xOE*7R|;g?=ig|4h1#B zSKnFclBlO7G<}1v>15>+L^|q^srYWtuXU%B8DJqBAfEMm)qg&|4@AslvnD0&^#JW= z4he3HR|XI64P&F5`bJ+^jC*|`!3!JAO|m5(Cg;0Xv(asS@z8v}Ba3T%#QAy8lCz}t zeG{%Hl?V$WeMsQCl;B}Ehbm#RuXj%l!sOZ@rut+#`^vJpYnh|ue23vq+U8s%=4USy zD0D8wx8I(yTkEV$Xw#oFx5;6g1ttYUc_qpZ*?`d>oq`mq_V&_!lA#LKKEC!p8lNx& zd7P=QtU&YY=^bPDV+*wggO%iaQs~T|kakS~6+(~6Gx;=Ee8&ozz|BYF_ZfisMHJY= z^{tosAI9!?)H;NG7013|_MwlpBJ3`GcQQjNYb5TPfFgkA;WcD{Z)3l@bqt9aTtDZVC=YkNJ<@BFx6V=O%&8MGfm4jkxTdB$gJQ|Rhpu>CsdS8WFJj2%oc%pu z_Ezb6zq^~u_Bwq?qmVJ?j9>pTtxa#rq@|j}f$I>=9SFo<$=2zDz>g%v*0&*UgFqhk zEbq8O%IG`0Ir>pSPS=!L`R|)*@_ugSCO5@H93Lf|nDUA2Bhjcp^ZM&4#!kkiFRHKF z0*@QN?UmOE`ImQHCJK8LOrOvD1rYWf4mr|{x|Z>?=xL@(npZlj^&=VFS;m*;k7jG07xF`%jk-4QIRgEvCW7eG7}x%RzeRn{~nk(>ccm7NCgV zxk{E>G^~mufWL{l-C|F$dDc!iw9aN>f>nYvuiGq}N?{q!2dI4N6 zFsX3>=2hyjikfH3o!9tECLDrZ(g68c_r<9O(lge3(=OenqZ6_G%_ebewtL0oDkJCv zWPEJa+k_*TdcxTglF~)~5>A#1EBuR?ke|cjrNZl1pBmLJ4@IB9A5{?3`}3Y)f2q{I z875v|8y_G!mX|nNNE6oRdVWFY$Bl6LN?qSX>ymsvLE(gdieCN%mQ8-AYkc45v>H57 zz^{fhy_U%A5liq-J@dO82!4*#HR( zI47N`bs{)*+WCrj&B43wr1;Seg2T3$%xqrIkDA$CEVLny{L=33!KF@xT}!NaOwYew zsE&nkQud|xk^Wmdc{p2L)jw0CO{bEi*7&($hqQ(lPaK|!UZV8}&IyQsur1^7`|L@T zqLlOCAw3=h0`Gq%R8t1=q-XO&{NbQqF*BRGxtRr8X<`0v)QEYkNk+sCy+4MThSY+Q z;TOJ+ToT^{aj~+!fA%N4%jU}y&IU}3HnrFpMVnrRzK@SIIg~uw3AOQQOIfPUm6IjD z;&@oJm9SGCWlonOm+6A++Psx5mdam^l{Ilsi=21n4Tb79`INv<_BN-ZuMttrliWC+h;}i)sIgf3Fy7N3O+%) zrV$OR?4)iZk)6R}0i>Vl2ZQ6~#s%&G+|t%%%#!k+jm0s zEKqAUNW|g7g=Ghnn)P4alw#_Cm!kAIP{fwfj(!;5oltY7Kvty7@_o+#*5XYy_ay zp!;l*9J)^{Z`ou?ntMMJ3wt#P{T7pZBd%jctxzxYp%HmvZ~hWEaWlfuNqdOvFir4m zk)FvV$mC#*`DSW2%h;o^%C97m+sf;fck_8}3HQ2FAfmicE1$)n#go@$f10GU2bL*a zc-{mA7en+0ZHP**K3*ffa$W=ej>x4?w#@4{3}+{1f;_|Yobufgyc-jR2=W7qk~5@` zWZVxw3f-ZNve$mr*;}X%Dnn(qR&!spg@!oCu!inw+xToZ_oqV5s$tjK8dumvE6J<+ zBa{$zRm%>l)D^K>`FqG&{KX)T$sUGaK5=(8P6jF!8|IT zc(l>ToVETP7@01X;{tc$;6${v^($N>Hd`6W`!u0bC?l~*Xg|wxYuIhO2&LACnO04; zeIbX#BM0Z`WPEIfPl6K+pGOah{3&Ryr8s<8t z#fnQQU3=IBo6%Z36`(+V(JGHHOn&v)(;nJRc42Sy382tjgzW%*_EkFPbvKgLvt_z= zw(+>0VQ#xlN*GqOC5SlD$r*?cc-ZY$!uwunA&Ts074E5H;+^{)bRb$C-80SV=CFP3fvgVy5)Lcto!^x zi_1(d3G+io`Ul z{RX~g)_3(VVy5&e*(aY(^|%X1Jn?$kpPfR!;RKy7m4z7xy=0D+)6@1ajSI7zr)!ZW zH75vbtf9VFkt*L5`1(XiHx6ZbBzpIAQ_33UPhiA6n@Zk|8=5&yE@+)p~m2 z{HjKe$V%V$Fl^7Mz$hn7t!bk@m{dV@D!+jcuv?g?Gx-1+t~AQMj$Y`E4J9Dzp&V^6 z*|Uzyk#P{|(s6S!SjF%d)K(|PX3U2a7Kr{uHVz}BF4lbvH#4;bEVuyH;H&T$gX(zD zfl0oAFu|MnnA+BM-1K!DM|Tu1Ympj6KuN6pBIBnYp5l6N#4uEoED_>TJ&JC^Y;_Ei zr;Pb3ExO400rRU67dE?uBQi%4VBroCLIu#99HS@ThoWbEowXJb!((Ny%EFvNy;d1p zuLvW;&$(jjkmJu5)}F`mDJ)d;MQGE@^)!t#Cmx`y^a7hA}5pjHag!gI^y-Dwc#F%}_tp?5VlpE<-Nj{<^J zHEz<@XT$V^VRQeka^R4JZKrt_50kvC?Cn*_3f1up;pgaFL80{B0S3rsmigG+_A2dd zx(0c-p{W08v|`!ka|OF^Tvfu`>!u8x5rMsLXBdZmQ|Db^-u09^xD#&NB}b^b1ncr7 zR5naVVii`S!ps~B*3C){>g&!Q2Un8vog)2xD!ON0m&v^{HPw=7I7S5=9>;%eVI;5z z1yeVyz1N(0t>Q#>!uxKEr$%@J1(u&L(JHGg3LZ{5^iA_=zMc~l>N zEa&LjJocGavYAp3oIF3ATc0jey_Xc9Zh1e(tj#Lvo#)YTqh;vf@zvkK%Yg4HkEjik zy|R1nH>8bG-*5_4z?k(Q-Mq#-bk@`W$hgH|#u5>3Zpr!&CpQAl$4GwZ z@VG(M5G=yq@}*^6H#yDzm$Wg&nkMdF9_f6_s-K_4`;swISrqe&t1DDR%(OT^_@t43 zqzQ({P=aXhSvQQvE@l1CMVnsNhEPc--vX?!4qE;f-%|cwStLe56vX<x$}DwYkj_|+V6KUFX-SfrwvxB8rRU?ha`|yk5mi6+vpW0mIMaDPF72urI`$AVFek?j>c)(U$ z43qF(dPU%#I3mN%?gIw&ag00@2JreU>_gz(2H00w5UkmPC z@;n-Rp~JhYb9C2wZ9rNn!@AG;!pUob+(sD*Zk<)_9jp49-4-jAE!J(CUEa=kjY?}L z8ho)JR?=?auE(v@%W$UYy*p8Y$Rb>Iu$%)rH-|{*bj&zP#;|O`< zg2tzFeN61}ROKQ13zBV`J`$p4J2UpXF^mNwhoQL{`en%P;oub#^G+HS^zbxGCgOf; zEeq^ZU(~Mz4;rAD+WbdDo01<{%f7Sh<{XpxK=MJ{ z(U2}%sc)f^&Dor(bZL0lyQM}f~Q~WLu`Sa4jcHL20rsP$GZCR zrc3wu<^FC`=G{DTto_a-=MrF8wecd{v!&AOgZ@>fBIn39GHAm7EY12LeA4EULiPRD zk4B%DmK2eGZ_vkDA~|bkPlRMg>zh}ZZL_Jynubcp6%|^RE@H(>eZO2k5+rG_01 z^=LgyV6xGGn@ztt(50wG-nn4}yurUrGSQk%$|WUD%)nN{(OPz9Op*;ns~%kaTG_@J zyDV*?9Ei+s%t}0AsLgfYp4IrSZBP#|_W2~Miw0o@8xLrGL7 zMknBiF=S8IE&(-1r!<-$*waqWL)?F^LV}aPL`ls)bZfK1rXQ|VrjhK_1_`~bR7nOA zN^#ICK&Q}tPlvd>J^**z&q`Q^_$CyYU7!8h?m7TR6Qc(o;pU!@>SJKh$I93BCipV<~~ObUGb3%SD?o7CxbCaJcXR zz`?%abC3_+ne%7T$a9}x@bGSs>CJ>SVfxi_wbnZ1+lu^*+9f?ZXmGgG)3^g?EK<|5LnmHw6kb~_|gPO9n8@UEl^@@-Y4n@X`mwThst>M^prb?59iW9@6wV~EB z&)zxDEaR=0+9Fy{5q;b9AU56eN0N#{AL_f+4mKCyg;nvUt}Zrnxnay6EDM-JvR&

<~k$6!IF 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
|2} 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

kk`45aH#p049ygrIpy8eW%|+;O%SW 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%0DKTeYe*in6VL|F9xJJc=^}tY)|(LxZNbA;opR} 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

r|N-h4Wj0JPSdxDQ^vcl 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

Js5DeDGBy^Q2wVKhKggR{;xF6~jL7)5Q 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

L5g3YCf~i5fuG>b{yOYbunoNpIJ6 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

FEi9k%P(1pPb3aHL>@mUf93 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 )2Y!2{=1< z7m5S|r$D+-usIXdJhvO5Vf0}VRpAdF;C<>!Vwl-Aq;L?U?T16)7&8Z?{x9U=25@18 z*7sSqj0dmk^>ft`GRwT-dA7m%3>e4N#eJv$M7Oz{n?o^hu?f3>C-F&?{;|F{Zgku7 zWnGCOW+LS>%~*yBXr_0bqqu6s)7qstGjUNQKrU456M#ZNLTt-q+N#Xu8$_PkO=#!i zMsfO-k28{u!e;a%R?wZjJE3yUWI^V6AzLN%7x(>VT>F8GLT-i-E6smO%*3>^ZMh?M zBbZvVb=W9vd_+O&Q`kgn{@h&+(sX2})%SCOQq)lcjPP75;-$eiredB@@kuXV6IkRI z=6PqjRM zoe4rWQ2PY%)!ky<9p-5f;aQl(5Y=`!(b9hd>V?pc6&K22KMf@$vw&jlB^X$%%+{GD zYOfTs0xc%Y<6`>>vA=~~7_XjBJOjEQOB;QTN$UhhfdpWF@rdzZ6;CuHjrgOKaFkwZ zCF=+navCBR!aP535;g${Bhb3Gy{<2GDp+n6C7!I3zq^H;?5F5I&gP#;4rJB^;#hc2 zxtaA;64t>xWcR-#Ua2huUc1d%-=e%T%}YykFY!|QPsnfG6C`Z8o&Y^pC9p+k&ST3Z zcQPa@1%Z{ydj*oe!benN>Em;m{wQ8I2^Ez;9x|=W+)4smMu=e(O5JGthZDVtf%Y=7 z(%cXxJO4gnA5Zc<{OJ7V?YF3J{bdbf0X~s+YY|k?oKMO>L#f+c!cX6o(5Q5Ze!{+g z9B{a}tvuYj7{*RLH)p}lCXwcE$01CVcb8C8gA!jj6pgmOk`^x;-n5E=)tHHjBl3Tp z#%XNvi0W6nV-HbC7*N`uHM0fv$V(f3beE?mv6sjof6o z{6x#GvE^B?hk?x=`0wYx%F9z_n(IZOG5;Dt9C-ct(on;r{pCW;i_|iQAK+l##HzKPq2&*# zOP+{FPJvh;HQU#8oz0{jj4bWG?vGzWmjI{aGKabfo4JRGbG#59D)8QXTn6Z{9)G)+ z^PqKbJ6hp+GJ?WPaHv zM%KYgv5Q4H6RXS9Arxpli{w`u=mW{b<*vtZ0o19p{UXhfwNO;k>M;IYtUx`_hJ}jC zTpEbcSGJb;(clm-`wtc51tUiOfiZ0a;3H50bAJ9t+&dt_0|_INydh^~+nVixWvbtgON4XL zZ#%8AzgwnCdmk?civ!V=`D8H+f6ZC+^TL06fslw8D{mRnmx}IDY9F(C@72Ou#0yE( zKJ;{LSbJAuj^GC#_rM>ZLTlF6J(1knTi>C7xOpyx-QT@b&H05aB9FgX41W3 zLmo#3+FociPS4MLmxEtZjN`LsqG_G%$Cv)zWL=nDf^W;a|02m0TzNn|sjziao)P$C zEh%u0A$Uhk=ZkAi-E!{-z*Qt)X;R1trt3*zGF=xhyixapIrKk=xYD5nT;@^n{a1eo za!zIX7hvv#;$qc_H|g%%S^v{B0K9e}$bC^uA2m3OAOQW|pj$i#(+y^%leTz%G&IGi z9xg8(b8U)snv^m+_#a=+WA~{5orNl4*6L{^KX`Y}XQ<~x0?CQP(mZ_b`L6^>;YWOt zei$<;@`vobadv12-wFmyi1MgvGLPp4+K{Y7N=P-^Gpc9MvjDN=x9Lyo%X=HFDPQjaR*lJNSU9q&;@Z z$y?eo>~5aoc{v#+zqu{2NL?QVsqlDd>YQYE-VU!LKGBkbC+!D8q|^R8!jyo9J25F$ zqALjtC6#Fn{GFoGb^qh@jZ*CCTR(OXt*&|r2>w&yhbXT7ifZ3oa7iaD^(}%%yZZVO z>ygfUN-^!5IQYf=hHPbSkTp3!o%t*2*hxpFUnPmifyLE{`MyYqNYV9sAjI0U4Sk)UaF;WAH|@NUYd!+Q%?`2A?ikZ z$Iw6hx1%Z_)Qkh^KK)|eZj3Q=rrxb!j1$Zu7Em#%k!X;-2^8UUMRo3t zD60s|yo)$XQ;}*>6l%u&rOTd%NQKYO>7Fq$j^HEMi;&r5D;+r8xH0 z5AbX8a$|_i+!>{&CZ1;eRN0R&M}Nd$%V-P{DZ;`Z?bUb=}Nig@gFzFwSP~mF|d}rB++oJI5x$g}4jS!|9|_q0~XGelDWg z%9|;h^hOQYIipFd_}sIn-i!X(HT_hG>>a#O*+CaYK1QFq9xv8cE&#p~$1af6r?rN# zI1Ie(OK0)el!2SK`!?D8J%`LJvHeS&XbgrW@18j{c4d)5;9)<0qH+yl($XybD~<8= zpOP3pzS(=U9G4~_~oIkX7JmDPAaOnl;FC@($eB4t_W z0z2S5jYi<_s1HIMrGnkURCLxd-jgo;^MmPqArnA@noPVCA14xUU_gdM>PfnEZ`>NX zFPv6yF#XX5ch!UH1|CDreGYRfl{qiLV?B0;b=jIXEP^|C9;YD-o8cLKptQk^@`%Tr z@+GxO;Dii?^cJ3LeRdX}nj}PtaFXn3WB}k-!<9Cl`8^M?6U9Jv^*hNzWNBy8kVni} zi}cf1n?YN$Fxy4EP+B$N{VcEyYXM@OxElh$L2cFc{ZA*_Ul$^}@@dyb#B5@4-IaN^ zzKN!+1WC54Q0Wb43U@g+F+Fk55f-i_pL4rDT`tfrA$mjj`n+zHI9-Q>em-G6azg-GS z8A|V#?mygaG~+va`M&*dMr3raB<8FXB)?HwTom1(DHh4H`+HhpwyWejNa!{Isj}oG z$hx;6R5bdx7kg*pN=XN7%#Bd0R53Q(o)+n=$)_ZAA9A?x{l{NUNxWPp3J#KWeDPZ1 zOy_EGkMh$+OKXE2*hzS;B5P4HV81Eu)gK+5Pg?i+(q{K~BRxcKoE>~p)(=ak4ZCr9mZ485DkuK;-Dpq6Pe6Cy2E zS>M=7MhI)E%HOMeOu3K-A zC$%{gdw=^qoA{t*O=0i*okw%X&Y#*hpJmSXN?&ecVq>yb>O3Qe&f^UyA7URZVa5+; zAXDZM*D@BlD?UEf69SbL^;^M_v~>GzU-m`M2gP1cMoSYDd)~G|ry5~#T4V&h&PzP? zN2dzpH`F{=S#4<(?ZoE!y?CI-{B|<2WS~m>Se?m1xYN_w;|8}Rfe;r=LR-v#M;6x( z;~q}vKMqG`@Gpppn!n_65Bk9lv9z#hYef_n7}UYt-nv~q4fqqKb1&t&l(>A(Xac95 z2QRvo_;Z zNs8}(N8VhAhGTrwswk_t-#mK6lYj{U2kfFcRdP-oIDHL^qU=^hl9z7oVhz5lS}UrH z=GOOT4KdckrXt@>WP~%Z*hK)x^F+7!W2u1Jp3Xb#5LukZ6DESR0cboCOpMcAp{cO{ zB_lrTk_qpD?bHv1-J?(SSL<(2J@Z6cKu6O4Na5t1<>={Yl`@y1?@7>eb?CG3s6z|6jF%joHcW2IwC|Fy zI^f_mlS9MkcJ>ZoMj^ZEV$<1ZeAvvbb%zOL)_eEwonQVZ%e&#$nLt+E#F+f3bBHH;j2pHXBy zZJK!4H=@N;qxvm6qExZYj7VrM;Ydp0hdiP3WDw#dw&?k`K&pnMq2Sp3r*b@^Vi@&>Ow z@A&Ugx%}S?l&4>UsM5;k*%-%}C4`Uo;Kc{a#we?=tQzA)9v&K%(-=yh`qvvFu8jz*&zF7I`6Woa5fJZ#tW1Cs3T-heX!) zQ+l3O<=YTn^#@3260qo^?OF=-&U8NTQkJ8BuxU9=1~p``HhK^{QeTD$^gmy(;3W3W z(#m@XDTa(Xr0jm$B7}g&F`%u761m>$$V*8YB2h*Q?6y`F)yda*@iF7Av@I3Dm(G$s z-be!#V0knzEj7NpJRB<`GsTMuw|_8wOPE7fR?2~z(5-(imNoTSd3Oz3c)54X0Ow;f zP%$cCdsxiyxQcWK4ex4JeqXf8iuPMjg>_i0;JtdwP}nDE6!N&emab&{$* z)@%8@q76fL$z)jW0_1Prs()N`l1$6%>lgk%*t{tF=o z3a2Ju93hd5E4#Am$mU}5f=QqB8pJY9GAVh#pXpO?&)*AFUsHxvyXAergG9U|%|F!F zB5$)42O3;w$SCW;)NSupty=q=9jO|d#q>+I7IwyWiNE0kpbE~MS+@ZLRCXq55JhXM zsJTj}6LyVRfcu4saiDI&s}^AD$pF1#s#KB8U9D?;U+sY);;`$4-CO`ULs^rmDTx@* zpU%zE1(MA-FBx4SMJ(P%h!_}%`XA69A@!9=LG=Ux)CVbB@vRtb=&EgP_)0Y(X^Z{6 z@Q+OJHvw&?{GAP8pDx*=`%?FCONV0sVsb>B*T}GUO7uYMQuij`au#zxWcrB(iuUVp zh5byly}PgG>i*&%TUNf=>T(XB5Kgv_q@XLQ*~<6W;X%(%v&n@XBItAsQ*YR z0EgJ6O0`I7!YjeEhwD&h@S|oF1#V#dSYyh9}VZb76sX3i3f}-d^*m&3&<47wJc{IiUx&}C=3PP z#9H-R04rc06#uUT`4n1VH48v;^S<=NbEI0ZXTJ zo`v=r#Y*&Tq+<|poza2-|(%_5ChM2WX|9N(2*+y44~Iw%Mg&dUa$35a@b`5Z9F<6oloYwuane1B9&6*9EocHb484$7LH`f23!vYyV?-82X`5uk!cGx~@j5HJDu zI4VUChJ6E+lGxk8dSrer_RR#Zn!Ai?jW16$U0eqz6_6*HWfLz$E7W5|3IN@ZZ-z=| z0EfFSaVf0BxVT;ug7+y%8&z``?1T2}Z>E9{^P!_?BcKX|gcN04mFpTEehz{GAaV7C zM8vDJdTavugm)Td`gn1|*$4`X1MsrUj-Db3K}EVYes#0ExSp@leo0GrZXRQt#d6c3 zATjN*4v!+rJ~_y}=EdXAnj^U<`2LM&e1XEs-3{Y^wwBKhgVT*X`Sywt)`xvQaMmm-^z1@=~X z{ND>j!-c0hJB~h#bgX658xO^%dqo_22-j(2M&r6eUs)#>31((}ca4*Gah`|QTXRJ9 zFDJ-A69F*f>Ly@cLi4<(30E3Fz?scXK+j?e(FVxa9a5omzFuUK$xr}uVuwJ zx}Q&Z690Pv(emlOPl~R^Le$~hr6D9?jPe6XJk)a<0W097^R=Du2|NinnQX1edVVhDNL|GcEdRuv0BW))Op9O-$5^UJufo_TDMuv;(uU7n?L4dew#^^dL~ zPfWbUD8|X=-XWXR2jR+mL0+{77$SkZIhrx#sL+28t%W`64&~=bw1_)#{+3^pAq3Ca zncjZ002r5|5j?_zs|)MPAnNqvc3Ci?`y1$P)5rB?s$FMc($>41#0}2OgB`lZU#l!{ z`GJ4-ey{p_!E=qHw`E!rAf>HEk6@JL%9^I>md;m7WGV?*qv-^F%PnyeM!WlVl`l4-h#X24@l#(a77aIrLSQe_Z-J2X9tLIVtkkRWraAT7Qe+PA9Ji2h zj{o*t=ugBE)7bLDMHH{DC`;C5tFXOzt~8FVI2}ByajX{w4|y9(Gd-OQ|vHg z;gq@5lqvE=67v8aUGuGFyOSm$LFeeYyMC3^;vhQRw~^}?m|-|$+MNe;EC-2jh&j^2 zQ2ytjq=$$nvI`h1mvqvEhZqaI7GdAz_byvS-*Am$`VQPAaN}^=rZdLT=m$s?*7cJr z@M1T`vsdu$MGm5{rklsc#iGjEk6k9 z7mr+ra+;-74JNKxp#Hah?Wk+)BUPEtwDsyG>2`q&Fh4?;!1bNmJqxP`0ba>7Vg)(r zZEyfD+rrCjkb3^lUl?%LWGbETy*$x)G0bQ7>w{eYFZj(*CAve+r&5rFnOzc$l}3Vs zd*3cY1TfhNWrSp&r|>2%|utSn^$DWsX1UeU)0N0m~+deGD8ez<6%b8nAX2fgG4tQ!JnZ9 zH!E;{>0jS{6-o#wX!S1J^-sIESR0=L>_Gn5_enG|99db2Mi#osJNXQBVtO?V_@8Y-3E(G8)Y`alR|TjhIOwaWy|TL zU9_>8oSY}Oib@5h3#-3yQr>||P7t6OT_a>(Tep%&WpXbjAZ2>cV#_3DYHo*8l~un8 z(Z&iTO$;ovJ18-FXGamBmc9Vv%zw1ow_5RmG18` zy7(_Md{2K7O_8kNJ3{khAAa;Rm>5xa`16RYKISOmkJf{3nGx5Fp5@q$zJK(V*If9n z3dzIRA%=dc$ch(y>X2>?Qh5cEE;JO$&Ts)%*vKjgDoM-*J<@p+X}%syut0{aE|Cn2 z=Nk)U$$u{xFV{#pjwQ5X`R+8J6Ldvsep!+@cfH$0UaNA4L_HX!qeDqVXv3Y8{UKJp zlE=@kRA3?$cuAT&3ka|-HA6Swvq70O#YoPm80l1<0-3{5z^P`SdpJsfJ`@r{x{37b zk;6s$es)~qNfhwSsv6|_Cn7HLlbVyUn|z>F@ePA>7&6b4&MdRG_?}g3! z{+%)UHD8T06ZFm9DbdDKq>j9e^f2W;3_uMt6Fb7)#fXyiDXvZKLX;?9yV!`I%-;}5 z@aC&%0`7KPw_hskaAHeHaq<7l#et9W&QiNI5g`7ifo6=*ngqBhfozsAO#Lw>?!vh# zAPB`8JK+TDljl{U-8oNk0`{Cpj*4C1^yT(xmwMK#x#!Nu$aPUG65B;)pbFEQ=4_tC z?p#axU0#w*(UD}NqXTizvpBFtK`ug1Fkg)mC1^q6qWx+3KA6kD3 z;Jfy)GLHe6zK>S<@@|c7t?R(*LUW$A(D`!4*KzljQv3`XU>&$D+jp6p8qUj;POszv zV(?ugki?Cf7Pv52e!g0s!oJ{G+(dBc=4d`3rzK&`H`qR6sZGFJ-sR8(?T}#aWFpaW zScFzdk_-ATbEk3{lanVZyd=b06jk*1g2{Qs!gXm068eTk$>N`<9E{EuTnh|^?)>HK zDfH+3SLRQ{>8cRY-X1n~!?!(+gMYwG$D9Wz5?l=D+&pXGJ>kCbpMN)YU=LyOy{5-BIt=0qss7m@-orO;!cj={k`6j|V6@*3|0W=#PMkEqRPL)=vaX)$% zZy|Z5Dg-z64c_&6Vv|4fuiJe+0M>{cHW%(wKax~!F}dsCAsgKf zhTw`(EQMhyL}Xgft=kI@1%iPKn;)Jv^TKdx9IvCrOX>Jfs`B`o3WLzG_`a3sh+V$i z3d0(bpDd64l|n6$#7nKKBtW71o`lh4S+ddVBA5uJ&bxBgTgW01kTA|Sv<9Hoc>oCj zgj`ypr2WE@GVZw8i) zkvD=L0lc2;{EG+)-bhJCx??Db>=WXyD<~koyWCvW(44%pp2J{RWf_lO43`Bmsy(tl=&Rb{Sns-;bM-K=|94@ST39d9f$_X^5Ud$(PCl z#Ac$%jt|K191RWa5>wf>W8tehGZKa(OCMa{TF-JvAoG~?dh8>LxaVL)(xut!Eht`j zXvPCJ4aTPW=xb?S50p7wt6R~G1xM_ZoyJN-UVoPZtn7LnidEue@cpAJ#=(^adc;Fh zKqXa*EN~ugvM4tz-;AT7FY!>4hwJ>=Fzx-8b%_Q={dxhyP}4-0>S7>`64@CA`j(lo*Rqsxfdt!e1VosQxK^$cC;A@B+(wYEU525<)MMs11-v^K z7eIzGVKZ*i1u?q&wYj4+&j_xF1oBqlA?7;dQ?QFf-r`uDDVqre_ecOOZ;{y?0;}j-FlK*!wV5{q6nwYm6~l^p8h||eD7)= zjbEyN#%=N38HF&xCa6y$86xN$2x0~XoF{G6qioWjHcIWIEQU2L8? zC!J}nY!7o|A zgSqAEQu=%mC&*j^eRux*m1Y`nc@`k~Gu(eKTqyk-7cc7Wh!p0S6MD<>-y*qnN95z+ zu&l7m;eqD!s-qYI8iB9tn{#N!mq5)z4-my-QEd+?cSwpz;PX4ux);_Jn;p(`F1^IA zU&@HTA>x4z`}$reyc{%;-pl5F6kT`mNb~Hcyi?Ra{7^%K@?cB`2VlW@e`8U3nA%(k zklO+P|C7h0umT==I88?Dmgo%trZ$|{u;ykf4mgh;4f9V80@sIEMD((|k%<5kFo zZ69uwn$_IRiN)q$CB}*lo6Qv7667S)J(#ZXaJRCtt@gpVxdIP89h|ebBXGVtLzxBKvd+S>c3z12w?t1V_q6@|LhZ9A&s~C744%CW7B`B z-iSe`-yvFvire;~f6}LKe2No*qy;@(WUtrz0vEVQTjQZhvK+~AIYe#%1D%WA=RjU@ zslw79EFA@7h_J)sP)If3#VK)Ebol+7qR=>!BM8uF6G<94-@%G>`_k0 zX|6T~sD6)+HH!vckra5f&E4V%a6K7D7;wn=$VSUC7p%;xc(=I<1ZIGD0voB^N6Lv> z#D@mOs8{Bd6(l%Q=JF?&03G=A5iz?QSN~SEgJ>yPjhDL1!^}V~xe`Z%&V9VZ;tN{f z3ML$9C@nZn_)6}o#Y(lG{v&Bdc=>^Q?uOV3Nc|Y?`(!bI+8h8=@Bf&)yYD z_T!FIbojL;E}diG{(#g^A6$(1)^ptGM}HG|A@aC}+h;JAE+M!a_9gh7!pmMZTmjxW z+{oYnp$!YLQhEsTQDgoB8}83PC!afaxZF9POJi1GfiIh&^f(dt`#tsZi#j{er~h!+ zq(Gzs*AWa6IEYnNy1r_KWUDY2aS z=}+N6iQ{uE(qWrJvrUMZ_)ULjkA8U&D*vPnBsd9T<>nw|H)MwJ2#o)4Rf%6>*fZ(F zFS`vo8TO;i541Pzq+qt>4{2RQ)NTG6Zjk?ssfLM3TjT+yS6Ep^caki%A#&u@}SQrKpyQhVS|dXouX z)2?rYJJFmj!N2MK^v3YPp(;L!k!p(!)oEX>xWzxT?QUOTWsdC-QHzzV*kI-Q;On>U zkNy=MZg4GXZh0~K)KNrV8of=v_I`{iFnct^FecN4Vk1fl!?N9Vuo~GFQZ0Jdc`+Z_ z;O`+(`5nfrCw!k*_UL>RotAPOnr)gDy@U_D0}Kb=wUliZ>gUG2_yraNWVdVC0PbS6 zh?l^ZnV{qu;|63Dd&LB+^~?~5i3Ey?Rf&a@Z=!j)&K;BRaf74wUIdpFHzb33$*BaR^0?6J4AX&zVDyEQZ55>+lgHSj5({A$f|XnO z$YD4oWjF<(jls~~;RL&ZpEaW0pe0h5Jb?_3>oD2~j^;qoeDTtlA4s`V8Wtl6P~nmn zri09;nEKpM=$d^R%|4|X0yK*uC)-2>-F>&4vyc92k#63@*GRA>zc zXmegLV|9kaEmTp!iRM|IlNL>EN>3zwmx9R)$Ew9^yg;s^c<0&6c0Z)#vFy-EeCKk* z-~|}JpWolPma9Idh}*!796H!GcI*z{lw}Bw=G>@)22v#}fYxU=L!|zdStERy3$f|#$@&56R32#V5`x6;I0g4Y znL2De8z}!bf4b6Cat94B4aN1N)lM1AT4+Ry3Xkk~g zi2xoZ;zLjGn0;yksYHVIaeE|#6|hX0v6+<8U1!lOgdO%enG3+rUPSg6)}%7#VjA+? zz=d6F8G_Qw^9TljJi%jY6tnR4fIDOZ#0PVv^QV`2|49w5TC_pWKeAvVX0}!f3vfOk9egs=&f0r0GlI?Tt;lEQB{R@4ncac@{#V$6FH6Ff))_f*P29TuY z-Sf|AK|1Cp*>6U*AEV#c;kPnhLE{*K zo|i}_U(5pY5*J|WJIBh-D>M_^u+4)p*8lcI{$s!ideX)%ty+HkqP|zD5P3|05)G{U z0C(XRG+n?#0CO?@dQ6~00G!z0RGG}n1GH3QW)8r+9T2|G@6bu*w_gj$LRhVWHk%xa zA3DJz3sgRyOth0@S^C{9M5*A8t*WCNkSD5}h|mCQVY4r*AQokRbCxXORA6?iIVsP0WV$R4GH zJQ@|c6y02K*)ExQr{_{V@IaS}Rr^=9$Op&ZHssn5C!|`FGAHMW2Uh}A*TS{3DQf=$ zrK7XxBB}-Lh^4g75Knk01)F?(Ljjyz8}eS@m$T#ex`tVKX?~cjpL_)2 zHw&`)D!D!O=DFSHn-V2mbsL+uGj!L$lP>Iwi736i9Zvc z83`@I%lt1|No(@&1$fTmMCJFYs~UUk5r;X)e=qziILeso(8e=#x8kb!Fpj6uHhSK~ zjTk`hqsp?wSj1}ljd`1CL;bfuKH5+7c`$wgAvwP&y(o=cY@Uo3F@?dOV={z6`Jo5t zmX~cl%!Qwpys*N+seDK3MF#cZmAdL063O#|r|6Y(TRPV~pF$Ug(6gSTizBdk3&y4{w-+7??YFvH?Jf- zf6Q5-gQLM*3^sNEec?+)RPs?1z?kcME5P!N?qgz1gVZhB69aUhdNv-p)e-UaKUQMn zj%Gh6;pAc3%p6le+>|-cfvq#08k9X8M=ca2|M#7{Yke9;8;L@h`6xEGy#A0WMISqJpjo7;mmwfb| zdUsX`)*!fQPcw;?>+CS#Z^3;RJ-n&>e8A{Q_LMFacT9$oxanceQdjsNLf{jfA&-GZb(= zf+)++?VN+Af&y<21plTJX0baW*EG}KZb7fj9#LLrP6I7aVGif+hd24I7<8|+?;?GQ z#6sS+CJY?0fv<#h7`&_zu&Jx0TgoM1f&o8pou1=0D^(th8^#=VV@nD1^HGiJK7o{T zbX}0%Bg#;r%`hdgW%}T0b_L8P`S-fFi z{J>#Go&WUEl#rCvy{|k?LG}0m{yOTl22P zGZ$E>;*c$8H=;!36^?>K+vcSc$F}~<1>7tdF+nJUE%+>H66qnnRkO zF;TBQ^+Zd$-FF9l+f?Jm&X4J_)$z-d`iCtahD?q%vvsz!btYgD>^d=FXM=-RB+HrT zf>OYKfwkKCL6R&F%j8wd%CDH-8vjCk{<=GL_Ud`ho6nIQZ@4y9zU2j1TcHd&Pu?mk zFG@|X9|J)awi4(Ah z9+S}D3vyfb{b!Z@Q6Yk5!QE&=jc#c_Iru5&rpYm~sEGKC#WwWm<2eR!+?2 zcf2OXvPHe`Zi?mq=4qS$yQX>F<1kz7CT> zdOr3gBhzV%!V2vdp$aeeIK$9}WlX~CCANII5FCBz;10ASVpwH$;WYi~{P7c62Iout zETVN|#OL#0^B(<)kviv>AwHvV?ytvdQD&DIzPK#A#a_irTDYfYSX_Grb8@_>j(J9q zpya_9trDK)7LX~c*O%5zH^AIf*>RO~c9{;_Iwd%6(W}=a{wA)K+(q{TW?70gl=2>-V31=gXoX=jZsr_0 zp}paTx7gRW47-u2rOPnv23Q$Tz;Hu&fZKAHgc_JN-Q^%v}^)uPC)sazzI0!aUs8ZRk%S= z!Q)y?Uwi7`3rTHJtk42W+gXb=wiwUk%y%5LuUJC7SM$4eWp`2kCGQ+@oT5{9v`X}) z*PC~_lA2H_LVlQ+x`{%*l0wJPPxxAb(mg*yhDwGtyY3s1CtuAr(B0rzUY=vNdpf;k zhZv%Y_KSW8)^rjYng(Io8=Aqh@ku$-ckMsZ)zsBTouj8!M;N>5Zvt{X-MLGB8GO6V zI&dMmlev@@JBP_v(?9!~U3)NoyVJfJ)$@quX-L_Yg6{nB8J|TIbCGU(UyaylSI_Uj z=-06)lE5?{Wjk3P`Xv}^>ZiJ9293QgfbmU&l9XbBT{>xJ!01*ZhCp_SZGpw7F~ddo zn9#g=mJc8pEC%ro2yU_4U4)%ttQdb1#etJMPv0?^*!{Xm*k4zkYuavfr-+lqIt7*M zqB<19_NqImFObfsXm;%T7JXGjiN@Te_xfAwXMBBzVzs41zB>K29?Mh-Ha~I{|9zLKzZdo+B6&uaV3t}bOLv$jfmg+CsB71@mFBY^V~()mq$P}# zuUTIRcTu=%$Ti~(ixKNc1_7^NU*4qGFpY?YmY+%y(Z=UYNo?G{3K@)ZD^Jv7U-?Ov zew8+Dc4L;b&`Ru_uWhF4*KAu7IJ8#j`Pq$Gpp*S*o1vv~sM0C#?MJ?5qa#?E;P^94 zib4sBDSJF))p5mL^I1PH%QU;*L_uR+fc!}R5kYJ#swk1QhcHnnlG@(A#M#bpTBjo~ zIh-CPcgD{MK#I?`HtaI~+)*En7^b9lLwM(Xm1GbQNuqroFaCPD7CTxo(1DVmg(k=A zOmM>~6r&6~9LLM*12DAkbu^ZL{SZU33)T zFZ+YOwPUT_crt91o=pMTZ3g0ls(5VvsS&e?2e-Q5>hc4*m%r%!3*D+a=^owRV|?ct z@=SO3clQCy;6uK@ludj;JZ`o*3)>c93ykC|#>Lo7%boM3 z{xwr1V*(Uu630z%S7X)h2awmw`9b-wTp2`f+Y&bu&v( zLVAgW0`aR>o0Dz2xNet8e9I@t4Ox*otB3QTu`Sp78_RksF}s5EJ3vK zS^T7ebg^pJvu&1;W;x8;w8O=kFLv`>|1e&5W2POpOUtVMJ0asTH*6!UJsXZW(=Y6cHNJ5TS4+p;5K{5?!l6q5wGh3S zZEohm165gq+U0E?Ky{VU^u^&CtWds%ahri@P@obBoN}ijS927GSRA9o4W9w77a_r# zs6N|A%L|ApK9O=I80N z{xkeP3&j(4_;h5(D#-8a&%uFGgTDVZff;l|?#it#<VC3syKj;Knd+ zndiO*N5z+BJgPz>=~5;pPvnXw1#74pMYN#cbnqQO@o>v12w$vg0i*(&8=84}q9gPN z&lj}))&Y_uMMDJH^u`M3RNLQoAT8>u^ZX7^{CwR1;;j`ap~N~72a2d=rP);Z)aT6y zk1?DWrykRne>$AXQ2N1D&;r}^79k^_Ikf=Fnc3j4#@72M|9<}DJ<0P7b*C2Ocabyo zkAZ(>Gt*1CwW@`9HHxfk{kj@$!6H-rS={Vbzou(xUqaVB=Pcih`X<~4J|5rtd5$tK zOPPCSUA^DnAL5(s#@k;}pqFF#yZ1Xiatuo4%^u@mOJO$65%U>2(#>am79E2V+nJN` zf{zF7cR?ZPDaKZjiw9ZOFBYLcQqq60x7y5Aw{X4od_Z%wj(=R|6&PJpHbbOQ#FX6o z^<+V#QnCSu*-r(8*{p=!1;p62%`b6$6ynHbu-iFcz(uX+^ll@91_fufp6>)n5sI#TYGkbt_# zyGTmT6ugT7hPB`8TRQZmO&5_>I}IE~Mm4KTZW7X_6a&d^a<@vA-CXmq%=lNPYh7O$ z?NY6)Lq8U*FEMORg+!T0{((3-xBJ=~{|HW^g-h-dB!-FX1wMF0d*=#*kL?yOJ}9GX z10?O;CFZlDR=2e&xfq=8coVxeHN^f>E`h(gX^xlq+RgBC2$Sa_XGGN-o+1-PUJ$Q{ zfE(1Q3teCqrijnh9y<%wateN_tAUd2f|nkX_Jf`6*8!@GCgAPa9EH_brd@Rz z3{onC2}|e4Ov5^?jBGPE88_Y4$(G*fU=ecxR^Tux%*OK+czI3iOp@v%b)C|Jhln{@pyWXbzy z^q)wwOtE3}iFedPYa8gcduqZjPN4jL*J@h5$S|sw-h~3p=D>PMlja~lgZFK@4BeyX z`qrdet42oxNlc`|#Hvh&kquP2#4TdR57V}pZNUtB4>X9N55Nli(3H@XLZFEGOSyur(puq2V@q2SQID&jIta2lA^ z-zo*$r(;sJnBNN_w*nRVMe*!-@_d$AulNsNlvP!I=db6+zOr|``w9pdBs=#^SvxbB z)z>-KGG5PC=-l3+R`TNV;|_i5-h=4WC@Juhk(CgO&t;>Sy~x%0`dG{Rqkk_nNv0sH zo5_HN9GPK(JLL=GBwrVTzN#9uAQ11=r){a}M~9L-Tl=sQ-?HO3m8Zf~Kl2pUq)3gk zwi`>RxAE&a2EDK*C~cgSfBi|LYCiJ({ACPE2Bx;DBBssn+OVXjG3q}MNVN&}cecUL zbdAIwu~S{bxYq{Uao#r$6w)porT?Pm>xpU@{3l>O^Z=c}g}y|dpqH(iRkC$7*pjn4 zI_l~>kjk^wW!*boiN_CnA%YnQ0CLutSBP!u(O{ek0#nr zod7rK{9Fm>4MmK^RL;d1uW2J&-$UOYB^pCr8T(2kq*f$c$CAIIXcaF+9}u{IAU7CQ zQnX}DCH!K_BM*^ zhm?O1X|0c*W52YLwJvhlpXr zF=qq)nUrbsMnYEAthi*;uB+WDT`)=`caQ@>k8s;0XVP^ZEPL}f*OdT;`S^H$>%-jr zn`K92ZHzOUQ>|&%O&rK;vHERtcEMvG1xds{k@idYR^$cX@UL6y3-Ys$J0Qp=m00Mv z2C%SPo9V0D-2*Jbw><{?)RtHF7Z}7dEh5pLr+f7Qk<&euLH>+hi(Vxbzk+;UwshO7 zx${xL+SDx z;`^AXys+M39h5Con?2*+RsF7rgNnisvpo_rgXe0cz|(r;}A^Q*tuj@yA= z{g65qUjjK_lk!ad3GZsQp988L{$T6|JnieUv+hX_okz?^Q7D)vCh$*qj-moey1DV^ zB}tIC{oSUY@s<&;s|*iO+)+=t`0(HI9#9*CL;M+ONBcj41CZsxb zZvBUIB59cHX!{<~*G1*=LySZmJ$i(jU>GZ)CSfY<3*o)n#*>v_y1-!2G+>?illIvH zHpsA8>t7;)b4A^o*(C^ird7y$Py1Xk>jEm?i|Q>8gh#P5=d-21G;qNYLLs%v0XU1P zFU3UNQXha&v8`+*`DvUr_Nbh(-G=^U9Abs-?}dx48_mlO7*X#hVHLOM3+0#Hv#O+~ z{im)OOUo(!s9Td!d`ScOD8JuU`)#nd{X~xSzb}t^hhNC`F=g1^sUTW$?qE;4 zV$`lBWDcizvCTSZJ7g60iOBM&fyd(Gb*b3$J61M8)9Y;V;icB>Ji{v17ay9~I;Ht| zTwPpEG=4BRW1Jj86(0tX#C1e&Ziqvo{&zO&@!?swnhj zm>LZtJmb?Zo+YtDyfeRslPP8lCcSM9`$ZB>bY&NP53@$=jWp(+v&ba>An~s^ttksX za28-a^@uOXb5`GMxQ$c=@$G8vz)ZqFl`!g@G;2=*v5Azy8YXt76?>{(V(~V=Y*m7jt896n|&D5K1g` zJS)Ei9TZ%Sy%t+?!g{y{Y1L?7$o1l*T^|)!KsW3!{XyR;uROXTh`l?#ukHr%Rs0k*1h;@Ljn3uZ%y#@3 ze`0$?*%HF4`ye$sF)3E}K*}@0woHRPvzRY!ed(=DkoYVU9M}_HVSAkY=8$}*5;5|w zeQOb*Xs0;tGHOMXeVqS$;ni9l-rHV!V9&&*(09k%PdP;3Yuop(%NBYTw|&(6LfOy} zONJ4dhA@m4-H`-m;S%d}_mf&EVn?kn5#^m;>Aky0zZiE?a_&fX#l)2nz%dN#@^% z?|}-3k;cMw3oWQ<78gIo1(u^>t6MK69i9qn1Y1&(&&rxFVJm&WRbQg|l>5gay(6t< zz(c!klDW2dYyaXI5v;43d?>`t&Eez~Pb)ig)ngY~r<^&7@-P!cJ!-WGgA%wuC4Kfiy%vT8X}M;BWv| zWG_5z*U&8GT&FGco98(i;8hFI0^g!~H#_f&BdQ0Bz zPQikOP227};`TP#<#+XC!qv%3yE8}eO6XEa_nK#UIekwDKuXXGSqXHY5gGZSGZ2bZ zGjSerqb5wTbB_V8`qlp6klb9YFryp0HM4Kaq$2tUCPy!|&dsD#Z=asOkv0kn12V1l zZIk{!bWu%%t4#lT^9i}vp7wDI!-Y9fGp$}I17hjBUG`Zph>TP z3|-=eQyDEXR)R}Cg4SAR*+V<7w6yRH^aZomGfJQY<2S-OYU?Y0&9$)vv$vmlvA_6{ z`pdp_@)1e2p1G)h^06yuw5ZSnFzJnJonvp0L$3a$r0h;vwKtrJUv*0iFJe1P&lBa` zxjoSRo5WCOCY?w?=o3k9>zw3MZ{RdpTuGe)vACJfL zanGY|o&5aszyzD67eD&!xCVUiECjhIWYiO*E70(MIF@~F(vWa*VhS87^Sz}*w$(l6 zQa!e#?X;FW7#{HG20K2taw*~pHg$ae2r!U*mL7o-4jK{WTB=;8qhDEg=#k;~l$#=3 zCF(|+H#!)IUmE^Bf^AZC^=_a^nD$me%z4ss02EgR6m+@5vFA&6{x+xj1*{L8`0Aj+ zckbf-`8=HTBR(z$Wu)V~s+h2lVgH9vF2B50!iy1W+3q*kofyieaiI$xbfBBW@T>`yMp_hd%APLu&zjW)BM&?*@&*m1kb}Lg6-U&r0MqBIsq&d*C zQ(X|x)w<{M<;gVusFu}|o```wXZtP5$tk(~&pS zdFWo-wh1t6O+%>jAuiAgGX31UeX6m`!dA{jj7iQEt?-kJqBSVcOtk8hubXzz_8Ik; z)2Lew(j}E1((1LQ8IkJKXR@-A+q=V5TsPh5bj<#{yf8<=#qk%5w3$o)_tJjm%C)HP zFu4a2Q6+4dM@df}pn9e#qI%_i1v2McjRBYyg>>D!j&7n@pS$|tkaf99N8KlkUg8g(zcz$J8@2=#sY*F9QT zKy_Plch?on&a2k&;I%ZcWQZlE($&DTi|)0>$UKTk<#5O{K;QI zlkaj`%9`Xz{oEv%Sw464<8Q(x2H-!ga58A}Vc~`ARNH5vm!)^Vz z#M~7$2FnAoy$e_khkcSp4OQ|L+uW8%_-a>}P{-da)ZRj{XNob2#h zX%UoYrgVqXl~V7K)yxGU{2QYZ@RQoCvE~vC-e29f;E}KV5ku+Gp2_#NjK3xW(P1g+ zKSa#iB4#h#_Au%QPW9So5PrE}Al|QV-Y)FECCP`F zi<9uCvB35O!Xg#`FrDf2{OsbBU=bA{3!cRUh2{Zy+A=3);cj(}^w<8fmo3cY4dJ!M z9nK6vhG1rsHK&w?!MPd$Xy!5}q%^^TG_J23bdq>ag>h}#m5{S^qMNE{n`;bS5KP6* zb*J^eYQ7+YtoXnrpIyv~1=jmSM}jZKWO;!wS>w`^?Ao50u*SgFe;}e9Wj%=FgW#4g z^yvVDN~E$R!af!!d1_0~_A_lUY`p;jpS*M%LByOX5`6u3 zLO{9MTk%>RV14lOrQS$}%x!^5Uj+L*?9+HM%_|Hj22|2v&(HzbpS^M>eEV5}R2YSR zlS>;g5mysJ!;!Q_EV|M`r2{bwn{qKfzn($B(mY+n^N2LofsCqejEriX=W$1fxR$-cRSPR zy)0Qy$B|5tTgSj8U<+lH#=$8xe^tDalY0BUtVl&9vpc@BXZ|96du|ac_rr6j%8=m- zl}a%~Vk-VS_P4oUzN7Dxwk}baaH&BY5*?>>?mg;c%0onf_fDx#=f-jQd4=_+0`soE zh-&byaMpI|RoT-`p)^{?0Ne_>_CS|$DtgB`}8 z|7&@^@*MTx<9Ti2&LZo2oU#pnt=anuot& zqZju`*tZj1e{PEA7sc>+!rFtvU`ClLr|9hQWmD6|I zmS}TiwH*3PjIQ$nCp;5&G;0JDt;Elr@SBTXZV9JP$;Yl#x5OQFOMZ;e`K&GNETbf5 zuP2UkoC1pVeAgL!Kr|ygV@)a{h-|cd*-@QRcgWTHKxa#Joh~fzo0>F98xl#Qp~aP; zG+st}UWjm_g;-{Z$2v>w<=etoQ5kD>c$ta|*nZl~bE5LkMyP3Y%3T6%<#$MbE3t1A zryO0s)a=@$A@v4Djhd*cpFo9DW%@bJon$uL^!?ZUR(>6Q`m0es!J4J`ETeVqAl)fU zkDB=ECX1*zAH}WSu-5^h+j|9mn&UgPNt!ARQA%J5uZL0dX+=v`Q2XixpYSo(mkFcG zH%wNK+p%gx&aJGPMZd=hzY?x;?CwwsUv=pYA7=Nm@?Rv;eE8i)cxUAT;2|yP)&2*1 zk2*2BxifyHYA&DgQ0uiw;3?3P6x%QX{=BxI2*zNHqb{>^KP&uQCTz*^+hP!JR_YZ- z!5fkTU{76!q`Hy(CR%&sYql9)l=^Z%4pF}5+DJ6NtBmP@*OAQl!)|auZCjMg;)*Os zyQe>yIE$3L+#t1%)%onrxywCBKs=?pfvAWaSeFyKsmVQwN#)-U@P8U~S@qO3P^GED zrG4Jk+abltYIH5qv%Bw8{865oThwZit-jJ&7LV_89SJ{Z`$7Z<&>UpLIuhJX zjlpJ5@qkuFuKw6xbN{dD`)(%okvQ@%RsuT%+$QSIUtUc@==rhw%RKrZn9mqh)JiA5 zuSVpD=r<6ife9|w<-*<%a_RkMGD2E zF$?yzcQDMEPyt97Av^eokTe{$cSv-!$=cB~mPc8}PP$>g!r96fCXF*EJ-a?JI)fQ9 z5-jv6YB#dct@o5}T&Rm{?_m9ROfUM!78lXVE9q+W%L1>4+Pv+tdENje`QDYLX)B}{ zrmm&@>kJ}e}9JIwTT=i$v~IiLAvpuJ+ri<|4+WYLmkI7+(f3SrS};7Cn< zVCLbTafTbv0AD&j$ZwrixpcKp9I4kb&h703_-hXm7I^|H5B@1#KfG~xm6!naDmNNY zlUj0c{>ZOB&5xsCoOOKO199bzs4 z`9SiF;Yv+`Z)3&I*F|W`Z%O(Q3T`i$3UK^Rj{Z0 z{zesO*E=H8j_i>fIB! zTzMxL1VZlU*dhvv9OGslWsMOhPa-vJy3}-%`#!vv)Qd_fR)^;QAgS#<{=@CsEY^^_ zpQxsPK;vael^7nS;S{j?tvy{0JzK#iV_T zv)FTQ2n0Z8y5Qy1N3MTr%)b41>^E6M*nV1MIG43$+Dl?TVaMt^)vMKp|6t6BXD>FF zhnchk5BZnxy+545-qAtFZ!}R6KOG#*+ejQ_UXkeg&rCMX@G+&8`)}qX^Tpx?Q1`zx3F9weCE%9f?z2_ynKvf>KQQCrc|cUVYB;G;!~pX z-~Jp0rMjBPst0C6M*V;^X+Rs`qje|P3nI7G6`yP8rrzPw2vcNkU2zSx%L4k&Eje=! zo^bTF{;PAI%LZNTK)kP-w$a#9U|2%U*b)EAdUzUab0GCCXzUKS~3R)@i57fUJIGH z-i^Z%Y#NJI8pBG6i_nN0v*xWl(7i8zEv?Zk2Pd8fC;)_6HdCPm2ScD7gLEz_{d!41z zT_fx5)RRA41OAjy3JlcgKxSg}!(#JNL`5)>Xz}L52Q$ZnkLtNC_7)k{UuT5OsPO3j z-IN-c3A|tDeAy>s_Em^$$E!qlAan_&o7Ggj}`M2F5i+%-s-4exetVfq5IRA$?k zsS~-=uOA@Nnx%{p2U^|bQ2QZZAztg_Qporotf4~4ua?2f9+X%=m{FV{x%pGV;7eC< zl@7GSzH-YI$BOzY9Z18_t>|O$Ks`80xn|bLCV3kTKyn()0m z`W~SJ)V16Ac)YFK=(4tU{c>|IV>pLK_r3e|z@Vas^H!4B$XqlwaY#>RQaMbdb4@@5ZTbao&71 z5;Td-FYeyrL#**=zmpyk?AEkY6M%|0@SC>tPv?6yPG#P{;Bkuo zVvtD;&>dAI`eTP1HzQM8b6Y#O6<^?pK{>yI$JjidiiSi0Iea%{fF+(Nh!h+2x8ZYJ{`cH& zt9z;K_2>|%C=N(%qMwX5nRJgYWns55IU>7lf}d)`6@iOCqW5JgQ{|`jBKmm(rj0Kb z6J*rYpMVi27l1jca@Sc;0$av69tqELA~lJTw$>Uf57hoRVUEE)uoPrqo7U|Vo%X9s z!E5;6g$zfAL#j?+h@7&WLE<++n>DtS!}~pdDrETe1dD|%@Ud`yD0~4^wmnJnXvks9 zWOf!^cg+fRi&huB8=9l_T|F-olBFlL)M$!G@i{Ce0vPsCVn}+5HDis-WA^fGmBDVJ z@BvnjsDUo(nZL+t?!y;C$O@eb zv(Ec+e|If9!g}#}K9?9^Fz~J8kuoHBt zzi4@@){liy<)j0yT&t0Qz9Y?5B-rk~r`rnUHJMmMh zGTApn8_p~>tr!ca@Pww1k6^Hu`aU%@aRxwykk9sc>4Ika2$RN<;WjZ~Q?6rWx{~}8 zdX?0ArSs89x!PWg1QRVKfTS3VnWZ||pFtVu*?IyePuw1jPhD0sZ>2#(e8J!JoqeqR zf5&1}1;|rbhwe{vsA_vSHcGGS!sjNIuf2`+J9R-S)7y$;L>9sSMkUmUq|y6bOax-; zB^o^B6aReRiMihMLAl&w>jdYN;CWgRB)4R)O(0=lMrXKhS|!%94vCfd#&Q?%DM|?WfMd8chwjSM`b_qaW40 z7Em-E&7z<(d2;2?&F913e{OyCM}^_p>^ttSAdWQxG>1k)cbmA_wu~1Svq?l%ca6&^ z(AMIoKkp)PU=+mawV1A}+&wV2RClacrw;ColC zTHEFib#J+VL+gY^a}Ip~Gt*w#?K3j93pRp_mV zT*dp93TBfc7KH-srOE`!=%j{n&t;ZqW))GO8_kaW@7R)9Zgd+&@}VQETS&p6dG*$# z{{N1N`~B;d_k+t8_0=Lir}E49)tU_qqO^if0)P2at=C|O=*~oj-XHPXU&!#7s97ia za+CjM7xldRqm*OmM?MatN3%6!?d6CXhFHRHO0Q3di=ytNp}Y4ineOP8vAshn_&R`M zJ3<+VCAncw_Xb$i#>tVL71C~$d$RUn`p#4-&|UdtL7!a!BrYgoHLDB#s$Lv4mhVgA z`k2tmyvsFugejk_&ou}enOeK`NI4TlMYKsNC2g|qxTQh=-HHa-d=JAB#$w}DtM9VF z8$pc>$cs^7TzMs=XU99Z8S(S7rKEKUiw+*>45FtbZYC5zV0W$))&1cUZ4;zs+Y0jG30f=lJPp80?F>nFb!Sh75!t;ZN%U!R zbonf^`?y`5m+Fz`O=8sCPc;SWvr@_O|v8mTk z)_nP|DZD^S$#LX*vDa7otZrLa6G~Y3$q=NdayVg&57-sc?Ou>hjH$!jH0Zr*9jz+U zWb?}2!R$xn8`3T&pOdH4!(rF}{2VE-|dDRRBzPv&H# z^%vGB`;caTw4OQ{V8xqzM=Q9Tfl`yZQKW)EyZiS-n%rObld;Pj9+l^IwMb5;M3#rl zEj(AqUrAPIe?;@u#6_-c9)439Jn=?*{1i0G9gm^I?qqC%Ad2Eq6Mvt?i%=$E4@VeseKsIk*;;ndD zI)MYQrr0Kf zz@6!f!g>NzaY~vi$6es~nhqc-a=;vLr2ERD|7GqXhCxr=i{pv5)A4AEH=RG3l74%EuE2$-o&JMwLoAc%BAa8->$7scbmX6O)$IFqN zYK!9sZbb-15}-FVg^$Q&9U-pAZD#m=NnE?4pAO&)bsLz6-HkpGAHO{E2^Lh;DW7Oy zoNXtMA~j`i72||&Q@B;hOS>Mp_<$MEhLL?+uM|=oG0~tQnquSiq`q^sNS1+mCZ8r= z4yoJkxfhvVafQQ2r^jz9-^jqp_9)od5)x|odM-6g3}M2>2zlaa(+Lq~@2aa_jCmX^ zH@MPxEMQg|9ba9)Q*Sjb>}sES^-#kQnSY*HTfw;FM+$IV0WTXgaFlSC6sz5AK3eN| zjS_ks%{6y5Ga@^zicb=oD(()A?>qfiPr2Ps2WQjcE%YMb>LEf~{>4>mj2ktpu=YLP5Z}0B2 zTQHcA;4xlDso5@$=J}e8?D;_QN|Ld4J8@#pyPx9o!F#oP%vZ~dV{qb~41NNAuCG@h z&DEZC*)*r%AILi?Y1>rs6+g^Tk6VLM!VRg}zk4*SGN$1Cf)DgoL`rENk3lgL?0}HqYx5sI=YK;3 zF=bvp8d}H!cn#!O1FRegIILw%>Zt!6JA_5{$;i3r~f@5yXM^ z>E+u-{hZb})=WHWYvR9Sm@TY)!YM(aDE1Z-eAmXHIWnneM` z+=j>_fd93hXCtC^PRh{Z4x;_hs{gqC{rcuRS7pW>QKSgxD0dSRx5k6|7L2)er$PgNQH}K92tudd)^tMHHRAJV09zxSOYkQ|#HDRhlV^G+lL%)fDT-TR z>8h2OWyK!yYGvCB?0s}ljHPbr$eJVA-tx1y_yZQm)aR9+nC-*c!$SaO;|;2U17q%z)%F z#cc8RQx0;qUqslA4Vy;c49V+pm81v*toQ&!CaH;9L1c@~p~CJ>Tc{)<+1kDAKX zWZDcAG5S|Pp3TN$J|yfrUEU$VAaV<2NNE7@9IJcm1%6#zrLGj`U{p6+PNfdoSlR5A+f&bxhASIGT7ipxvj=|1#`WM652g zg^gU}!^zh`B5l6Sfz52#EdW>C__+@C;GBnU;7IiL(dUaTX}w2ofl41@Ca-mCroM#> z<2nl83cjc6z1Ysn+H(@Aa%^uZay4rK95tP{z27Y+jm<4vG|T+ShWf@3c;D%pkTt(O zE(v{3*pr&C&*hqCL{Hb;9VV-#PAJZSn8e5oKB=mVm!N*1l4_iiAN`66wtlYMYLLoM zlLyLUA^e8Zv3xX>?mNZ`=k5rRcU+VB)M%(ZwSd*J+x7VORqHRo9DbeV&Z;y9RY)9Hx#(G%a5Lxr(f=_V=AtLo zpQ6>(rug%l{;{}rG6!o6|OhWg`l=`GZ8hXO?wbo4cgfuCGpR|R>7C%SwU(TaY z74vj#r}3ILdNpISo3(qM%}X!X`B)!~|E213k0YF$QYxt5fbpVBDI^5Fc!M}&#N-#8f>ZAt%j|4=xfoe>6ii^1x1oMy27DGNn71+&$gu^}=!SFjnEyhEJ3}hZFkp0(Wa7Tx|{0iS%v!PtFg6F8(-nrxBwn_Cs@!L9o0gKtW~c&( zcQu&NcSf@oC>9eLiIOgG?fPDR=@oW@HTS@w@x4dPGgE2X2KWA^i57waB*JCs!G#QnnB$73YSIOkS2${^_o-qy__HTTvdAqnLFzsilu z#g62Gh|#@UN`RuA5pvr-6A`6Dg^7+N|->xTc1 zNpab=6M{R|*xl{M<|>{@go~jAfLkV&GwH}?L7Zn8fncl7Zxj5PP6wki(hD%PnNNrc zKf`iH`L<1c7DyJiTGVFb)MXW4653@SzU+Q7##{PULV}JKED^|rA559sDNlWy1 zwx6LSx4CBuBHuJk@2Ed6Tnnx4yklBuIHFN5E6x&(DRI)`4S-sU$Bi*inNX>|w;V3# z8H*`CDS|z=k8wUkRwg&E!*Y-#`Zq?{CSJxX_K+rPIp2Ju4pl3z23rizk^7O&ig>aW zg4c?veEbW+-6hi6(AH`5Q2|5h6SPy08pIfj`FMuDuJbWB6Q$pZlPW(?xTz**t7_NP zs*(On8xy8nlS;F0ssnp(nLeTpGHE4X!bam()*<2+^KSBu!AS%9ZNF zACvwqZrZEjSBVh6r+VTI{QZB&toQ$E`kIK@JRpbV2mJJDc`KAUHr$l2lkF3#x~3{X z4|lWR+IfQWr9R^Pt0sF(Jl*!8$f}-rM*064y;-T}a!@UFpyOy|iajH&7{wKUVkwkI z7sp?z+`H_-Wbx;;3UIu3_X{ite~}x<(`9}4DvoBU*)fgZzH(CYpb^HB2bcakHW@8^ z1doS#@53xcq#GAKzV~Id9w#hC>;3d9SqQ8vf<&5kNmi||3kBrdt{i)T~Q9xQ7jFg1^< zcI8|*T(yBSK3r9)K8CvIYH%q?x2fOcHjWR#c$w(=fhKTac#`P62QqzeHs32W9U0$X zJ{o7u7w33sj60Oz?6bW?BAL$Ck9yLl2Or9EnHI*82V?Kk^nlli7$=rnEO?vkIz$#|D?V5APp|yj6Ka2nNQ|!P>N`}XBUCTw$*!5S z-dhQE|N1C*v%9rQUX(4KPyisbqB|zp^{2+F&fmUkI*BSe=iT@9mt0!>A?ybo38)0A zd1^AfJ2R6+5n#r)JhJEZICIX3{ok>prs)qG$Mv8s7}fVmr$^`Jj~TDz&s_UJ8tSj{7Pv`f^{^BS2ke z?O)A}-~#&$ z9w}9f)cQ4N9+r$Ng-^BDd2O$FHLpxZ5nM)_(Ts^p6^9Z|(*awGht|FHdx8?Db-O&C z{N`qM{0vJf{Kpvd8F<&R%C{t1uza5S|t6LEXKd@5sjX!PH3+%428 z0U(~I@3#Il1Sbd8zuW(zKzw_jo>wLT5q`X1rB_iVhc+!&@1aK`?wCSvJ{?#lYFsL} z1n0W6*v^H>STeG8CnkygZ|_aR{hghgJTBl1q1#oCyVF@?)7%B-E9?d4W=Go)3~`gg zKWgcO8JadR9XCLNVL#W2A{9@5P*2dHPEN~Ir}8<_Es95x2sZOZ=X>bo*3?VAAIABa z!c-@_v=qFW`j(;ly8=gsZ^uvQcBngQXgdB^`APD8(U4daAZ|z#hp3YD3j? z=Ka$|PIBf2oufQHG0q>k6UfWth!b7dIz3A#C!vq(1(O!Nrmvnw$5zbdj=GeqV^ zdKgvayQQ48TUw?pSJ3Jjid(+s8MzhlG^_E^4A>rKw$+c1t!0GHbGLWmTS2SqM5S0; zisPd}@*l^(*bhZYhVEtk@H^#yc^0@4P4j#>3sdThopB?bBM4hLpDJsl2{S6Sd$Dx6 z!gV*4TVB1ahE(TOmoJM43(~sj;0adbyK>cZ+tOs|(@w}!_QD}8i(L@abfr}t`G^+H zo4K5SPb=mw4=;Y1X1xv%CsMk@AX34rIOt@pAFtUG2dZ8hSs~Omd7jd>fxSAu)xOYh zU|5yns3o4(H!x8T(^=*T&b`{4^~PXISzfMId!7_~+2Fii%l1Tz{|QFFQffwLmQ=xX z&%Dvei(aLE-FQ+3R>^Z$YaHxAxU|OQ-%EcFtcknYfKqB|1LplU_rB0@3y=D~2!7_n zM!2{ZH$OgA*G|diHM@O%eDZP(0j2wkFehf2>u=F~^ZA2XF&RAm{dOj046%r;4erp$ zeJ9DD;T;YwrH4+<9m2dvwJ{mKj&6Hl{|LXN6Do4weTs!rk^t`L?I;3pW_CxttCr`T z+%|Uzoj{B}+Tc#a<_>`-4Msas8qBSCL}%>7<3Fh7BcUbX#^>I&bS!J^dS<(*QSg*6 z<31ScuC)@*mSL*gE`9Fo)N@njvX08QJFr2Ap%|xAO&J#WEW%Nll9-h8b^IQQa=%^Rt zoEj48?d80&t!U4Y2M^-L1|Nhk#SRK3MBpGw>?@;HUP4d})5=*w!^{j5 z{A3m1K|hc)Um2ML4cyT={C#*WVEW-K%K2|z5u#?^rxrujxE`k{BpT0Oqy(6n1nI8T zDBmFyH6<>-T)D|gwBVuCy|3UZ9rKH;zjatw?IlCY%OGH=@koNfqw~PksgScOo@7i zgM2cm0%ZSH80By)TGn8C(*7~yEVH^OcmZq{`B?TgivFXUd;v6D#$FVHF=n+=k| zbJBl6dnU>K_p#nYGe)HnK#srA^&Lj0tCD~EJ34Iu#qyN#ingx%&&#$CpBIKik@+TK3&p59Lot2q%rxp7pQ6BZ?u9mSrQ?g#uD36xf zOy>3WfhfZk5eJ?4SD=-UfqZtr;3l?;fR-%$F|&2meek$CF_Px05OeP1ZH#l7%L+iA z{!k(g922BNoA>4Fse0eW11s8gf2jerQU$k2bs8%>4ky6fgy;lipKDd;APRM#A_A?k zzGT6+vp%LEow7Pc*0=)$>QeiN&o1OSku&kRhWKn>@|OQ^MqpO|jb^$bLe}CGw31Pv ze<@*$`@=YlC>j3G>1)7z@NEmW5K3PsTFUZ&1Hd+y;XU~emq#-vC*3}RFxhN4KK&EG z*shpL^wy9{?G;&pp|Qjvr{RR72SHD<=fv&j7xB^e$vZ7`e*sdF*l!|7`8It~OzMp5 z;mSYO8>E92bwPYznS_`sXWh?NNi=|)^mu`95xo(LO}XhRS=lyi6LmIexT&3qC01yM zMvRyY=cr?1TCZGINj>`K)W5Njg?$+1wyD;(pCOFLYSKo&vJm1HWscY4<=g!$FavdW zpTRR&OW89)Fp7MaVTxbBsK7G@{JG^fU#a(c=MY0J^Ewz`dNR?P_V^Rc)w*5=Ve7u-dkBG)L~zlqb`LbcJ~kLF@E5ke|^XI za`xob8L{E1{oI_w1%rA{3Zzu+kINB%o&L^Yj};i1KJ%;>1Vp^bSPAxOl>JJQS94U^ zeRyGX&XaEW zD)D(;3fPjD#e9d?i(~H-VEOpq1S97;+~>KuGS{XJo>0cBWpSB&Vh(^V#nu4#=%iN0 zGgoz5e?^Q0PW5b+G03u2{OEe5&O`XEIe!}8Ypk|9bTsnfg#^u-+iMqP>YShmkAb5l z!_NklY@>KGu4K7y7xtF)?0<1RDtrlLFdsl|NHyf(EOY;!6lPO}BS+{R{~aq4z9`3C zTl)g!;O_l!NetPdzT+R_6y$^!n~VHxP_6Ptk`X-6w;%+XpvrBnSO?nTysh%{%Aplb zCovY4Sb3;*=R*i}MGO5H;gv&=l6?TdU&_2Izsh%ohTKTlZoB&Or}uY`at$L2k#{=J z2WpZyF1(l7!rF>%_@(l)?cQ?lka(tLV~>n+7)ADWKFUL>jPX}~=Wo76Xc5ES)GRuz zZK}sSTZxa3F0W+zYJFd3oX+;FL0`@?)=M z#BG~BLa!N~MNnZb4LMf}%~I_VsE;=n>KgNW&oDRX7|f1(8_)_kFr4dhl?&Flbx~i8 zOyR*esKaO8>x*8NT^7kVd1_jt7Z{C-4Uy-hS1s!G81=q>L^0p=rVoxhh7|7N<;`|* zIp?1#sN=OmD|56S@)&`p^~!zfx1T|d2JuZZfV?%Z#5TAsHLi9Y+Zed zZJv#0UzI?I$@%n-&_PQpSK(N(`vJ?0cO|<8GL=XEDAMyABy1{TXbD?CzTYO{xZ64| zugGkw_^db@S&0F;e3P_lA`5mF_Qj7sp5^1W>3n}vI$fDbOeTWQ4=|~U@c5>ZKpsCz zf+iJ#eg=?*4=1i<1rMWyrQ>8>kgqPSY8edB5{PON#LZgZ!1yo+MxvN{T7I~ykVWK( zg+EzjR{r`+PKWF}h^)dPjq^sMM_dePmmlXLkmCkHN34*6Ef4qo~(56jt2PvUa2bsR=@+gWDigka9g`MdIZmI5IsR!ljwr?4Ux~-f@mU zf^(x{=fNiZFFdP#F&^4jNFk3V*4G&Hqm^H*1q#brv$PzC*6qBkh@Rbxacc5EwUW^z zw!@3;PZf7sCBwrXi$i4^b4ywDz|;oE%PM?Xfh0k@3#&Fw?R{KsH=eaVgCT3l-G!||mqt!ngV2xXY7-VgH~&|C2qT47T8-UDEjL zf|86~Q)jbg(bG4hDrWqA;w$LhmtBH0)tWcj&i%`zV|MflyH9RJ7*>_6%mn|9`t&4v zi8ciG{K2f77#tJJaz{Jd$@(j+mtVJjkJgl$0@>@ zXwL9kd88hOHKdOQEgiT)vFZOlsf9&b-ec=UbjLw+Lz}0~5PEv28St2NxBD#)Z`BO= z4SKt#H0!bgc-oOW&YHvmC&7*?FfLA}%=(WDedek@TG5B!szWt}@{H1kLGx8EtEWqn zsv_lnj4Z1I-ZxC76TwQh1`C(dSzk@OMMs?(QGezhIs(zF3owtTTRO5^E(+HEdZs=j zp#4%hpj#!V>+EBt7mJb?TlxT7LSD5Y7RY(>;jUZ(GWbBL69&N}uQ7Se!h;ecAW0wJ zmE=b@`5zC73^{Q*|HC~2poq(-LvRIcl2pwY0(RZM%!lbSWUn9$bOcoR_|2pibEm8t z0(^a5#z^^!mimpm9rRUEL^KAes;N%MZKM^*~@-n6k`4PqE{w1J4lZuTtTZF#j{7E%Z1z+gTsj8axSvc%1%^Ej(**E1!M-@RD#%VoBHeCo5sN@}tdX`%TX{e&K zemJP&Hv{#~CDc1c{EhykshBFSIJK9jX&pBd{lA))4%GTVj$^jiN(o~MeOSV%pKKd- z`VRXVIpVj3bsk(E=WUtr@7JduL&1x1VuUgG_9BB-iB7!@|Km#kgrp#Kv zHd++79(`2<^z|DQm{V>(mao!Fmr@7YXMLiTfS2%7%L&CJXjx5s=0u1h#*;pY>N(A} zcR9(kF!!5tho0i?(x@Zu+{xpY&^ac0**p;emA!A$`bTig4SOy@G=*^RUGKc{9kfbQRv9$+z~s|ykC~t#YqLk;T!GK zfoZHIfP~=6SSQ+x7(U6bHkbY0@mIFzd~Z zM$`-5MyS{R>C@Xx9`|yBbI?)b_3UNa6bA=Ymnv>m<>;AgQ2*x?>H@PzG=NQFfoGTe zxVI$?`|P*4!S1urub@MVANV}rk=U1_@)hUON6cVw#8=K+`CH=qezU@t{+(eb zI`2u}!{%s6hLa|>gAo5W0$S}7w+aHl6FtA!m2R1kdTTU%X0}G)hv=^;4=sR#^+FI= zp{Kzg62D#ZvIBd;demOiY-TO!U&)p5sH)BKa~itS$B1JbA&-T0}hNWQoOJcbzI%(Q&^R3n%?deXxVUy8=Rui@BP)P(vf zlqa24T91c$+LPOUq`gDTs7K1}g}uA5!lfrlaClb505SFSrUfl6o9~4DckDsN4wr-z zniP2%mp~P%1p3rOkL<6u)t8hPhCXTMvLl4>2z4yGklxFnv<=jR$i@PH7;U01g49c< zOU;JgVN2JupZ0!#ouM}4TSbCVTZ;<14JcTl_{?ZkOoQEY>ZSaL z&Ri4Ryh?IMItWdylR&XuZ)EIqn3QnH&h^HNVxC#O}fNK%(Uiv1ft zKBII+SN;D{bncH#e}5eBQ`FF9j7chn+~yWCBC_1dHPtY8xh5N7bKl3>a_d6n*4!(U z`*qlmMHlzGTsF54xz8o{OW*hRFW3)zzt8)e^LjoX4~v>h@2n2Z6KRZ5Ooq?*U^}jv zNUVx+WpF6WWNdhraV7NG4raN>ExmB6g2S-Ii#aN$@3~FSwvRJI#cbbtz2)RkvU%}n zhApR_Ce`;ACgN$*PN{EQ7548K#vB7M3o1-g+3{x@F*H#trB%~Kmt zPUBI#OO_yAd%sj7uav@^xU%il@~KLewSKOHM{vB3N%Ln2hkmN?$VtZMyCzxf6)Y%4 zipPw|p+Nhyu+H%*?@8xxc++Wg;NW%!fEu){o!CRt^MD%ksHs`0iY(~5odhakD$5mM zE~hBZgTh87mV#kGo=p0}0#@Ptuq;#5fimiUra=8M`?%Z)TJGudJkeL*QyWM3o~Ebj zu986d*ifnaZcA}3zv=|)eN3ac5#<6*XyG9es5zWUZW1D2tPLWjAnBo5FXXBkukp7X ze@+xqy_BlTOM_sBhi3S^!*oq#xVs%xgY4V|d@A>zuUCpyMf^Q>nOB*6O!tyoSDUkf zpGE^n_Pq*w1sj$#Z#|O_zvNmma%7*rcx#_L&0<~>3E&-X8SC5FLJEeOCFCpEeHbgf zdzYuhGk#@aaZ|57lf{|t zmrb~RZ>dxOw-XL35V0A$098w2fjhd&i>O-iC<3}mo~G(w3a6LSAiBRSpICV-%#|;8 ztg=tsV}PFjXII3Dj)Y)!P}wRehAva9TqBq{B>JQ^Wn;ZrY8VG5y#TTT{Eb#;v!Wxw zwZYCH{So>^jCU>Tq@}ZlW@$o`nV!mN20Kiid5uFRjIr&}K0&f-P}ge$f{=MuB7LVM z6D%~X&}ox*`gYLl^C|=CvbIbJ)`luFC}=jgLV!=y26Cb{6N}g!;+4#^y8&?uN5UB> zydD2~{h$tyJcQ%57XpetKw|I@iUiLA+f4H@YVN9`oj2BtDsj*>xeXj!d!g0^#%=yv2>+>VJ*Cz4yhr!_hq#6|2G(?9TT__2=J2NU7!1^ zx7WP*BoPJP&7kN)bA@vQ5NCUwrfJth@ol}*1;)2ca*n3Kki()gHkYZ{3Hd%>vOKJ* zFi}N^W|?U<8E>lI+0H#e1^wa&2GrYO)yNTVxk+!ItA$V+%Ga+VuH_s~G;jaK63J(x z1b#MZrTox`ke5!sUW0jd^}BNkp&-

%s~DCNuYluR7li-3tkq+#|a!x36v(g*M; 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
n-Fi&9 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 ZSU-ug7N z!IPH-;-O^|6xMUxOCZ$A~t{WeH72gt4znQNH>g%PStLU-+qsyi*bTefR9IPqfn zh+%hNps8Dxxo3CNZn;n`v45vT>OJr-{cTAs>{bS8qjT=6GJekPqr&Nt%RKV!-dhzE zamgb#+gI7*)8(IulP1QIwveN;H2vH|z`t8vHXwIz$aDFl3I71!HD5RNY5rNo&6k&w z;ZKGb;PZP<+N19eXaoIvtl03m_M=1nomNZ?Vo#rzHIn^06~|M70CkK}YGisfJYJna zi-!EE^70~qUVxPhej}>3?aLTzZq{}`K3tl^jKWE+yRt!V!wA38tb8#u!kH1n8w96e zXG-q_ycFqvM>jG>hj0moGe+Tfei&%2s{MT?MDgRw&S+yur7phrCFNhOrJ1mzA;m!F zGBEe!nmVq&Cr+2@OA~&LvDAmhGuJe^6Yg;*bljf>k1hAn`h-%I-vuLZpxk4= z3NtJBy`9}EW2tP6d7zmBZL}+eJ)W4$Zt8xYn9PD9yw;MfaQn2gZPsb*A~@BJsA>wS z`?cG*hgF6)Vd)~#`ddKA;Vak?OB3{HG?9`$GBr=w>>4ZuLW4n}3eV4^V9G@-S0{Ej z>F8c9W~WhsGI?tlORGdiyO`-t#=G%5x{_#|7!jC8$9b6pT8-%8)iQn{F_r_A_m-)nDyu8MkD(F}6We+1a|fc(Q<4WNU$PIRd`Pta#_?HjbjfRK%Z&=5ky^AubZ?zjn->a)f%2UkX$*_Br z-uqhJlM+u&M2r6b7MfnT7a@+si5Y}wJWImODgEPccXcmI%#gA%UQCVKBuv3dw~9!3 zA5DuYC>@cqfEft;w~d#E-Q6gJQfp2y2ei!W(a3(Auai*W8XRmSS!4&Wk-Gx7tBO|l zbYqN_z^z(JZI*`XVXq8T;+MbN*T_7AIr14ttroYut>L9NG??OKQxF0tR<+We2S2Ph zTTO?ZLoY3z8Ai!e4dOi#c+=}Hu=9F|fpFz0WSf`qAVzCeX8rQUyWTbSwLBdzXUW1w z0x6{cGwk1O(7U(&*|m3kxhi{Gmc!__-}Y*rZA=%o!hXpO{>@L(LAwt>7FV$C0qo;X z?-cLrr^@7(IMIV&N{bKdYX=_hiuny79?GSx-$l)&om80C7FS>mpprRi&DgBlY#vyq z@dk|k+W!D+MZ7Gn`Uuo+J0}Jv`bWf%{knlv(H=`%^M<$ehJcJK5a`ymXu(?h7>*n1 zrjj)=$s1cNO~j0QJ>+iVuNRPYc$AWg5^x6;V}@UP5B^r9#)S?_+jFd7wHJ!^E5YJc z)cF~PSBhtTaZH-^t_D6{{Sp1>V{}z_aeHVo!eg%HgBReL?5cP(nFUbrS+`Yk~<=i zw}0N(z=|LNAQeCX_LidRH?^uRz&#r^TAKYjOox&+NY#N7t?DXx=txlA-R%hEysYuk zHO3`xAnz@=d_CUky^W-fDIQFDOCebaFBE`ZP3`cl;BTwt`h1i+uacw5u#kMjY&y0= zU)Bv9{{W7vq%rg!(e+M@%8JpRA!yz9z1?p^86N1-wlKcwEB!}b3R%$lrEl$5R7}aJ zJXW{uF1KSX{XA>`02a6LmA%=2<6Up#Og@6G{Y|a(nm>9r{{Us$-kDaO zAXoN=sTA=ypJR zA+o-n)jw-o&Y%WEvhGPrD%;wez6J4J-_@tuuQnvy@q1INdExbDd1n?x75&r2_r=9plXtQ?B{u%kBPNd5?M#3 zP=WTI#nqVbUfq`&tEKgBCX1S!z$%1)KJD{$r{zK8T`KAEmBsRr7LY^%-ri z*%}JioZEZO#zXn)bwQ0BdujJTZT%Xeg{Lyk;1Ci zyL)cDp341g1XYg;GHPD#WT1F#rzu?cx3t5U^1O~@caoK6BHr%k*fkt{hRVpCm4*}o ztW;dpcifINUFUYz=TE_l`^<)F{{YKP1J^KD9x_1rm|L3&uV*)gSQp!6vp}U+(L+(U zvsL0xNdEwDlDh4tyFQ&)Uae4Sox1gCr)r+ic8{~zbimf5W4N*D>(&Sha3~50?}i2jQF2 zQQ}9_FUc&yoVuAwEP(zJx|OOa+PClPoBX|*E+m7p9EUUGH?YYk#)IF9_k22jot+89 z>QJa>g^kL}b_wyN{Ae4+#~%!u*`*T#vLUKUhS?)NDC8fkjkw+&Ha=>GWEEM{Vn{ut z{3*O?!QNeM+C6&Pv-)*P>*?}-ZEW&v?bhA8?AF7s%8yr+{{Tj|`Dis>&nDi@ZSq%C z^y-?fy;`rAwAWU(7r<>!+{{R+**pg)9%AlxpnTZN^ z+wm?ISG%iW>I*3JWI(Kb+(k83`56zUk|+CHRBT)(^@*e(*w8XyLgUZM$lLlQN^AVy zK2|Xvn6Dq2NG}?xm6zU%LH&(?)u-rh*4^3p_5NOXr6|8xE*R*J;K;$0%TxIqKO@(zy_&A7by`P8G}B6wsw(p;VBmx*-Q6G`(KE`}vwwyG-&UzWZm z@%S}2P7*XxVY!M|N?gtl-6MAuQ;q(vj%-$9VX-OABKf5t(d@s40q?hayQ9#5m~iCC z$F|s}0Z5)DpjVP3ZuN1FG#V(&Npvgv2vz~Oz~!8StS5*zuC+i*84ikpxeop_FGuoln*4mDh0HfdCKZ8`3ziU8bbiCLT&c#Dh=u|t}izfje zl@2tD8gyvDm7Qv=r+@CzTX*ehy-rb;IW;6Lk%8t&;;);;_cLoEHMf|NZ?B%o35m| zQ_D0F2{A-(9YO-iv1Ar{KK}p{rvAEibj;CXyf8{jDK>>^FArdASsYsWqUXR5wn~5V z0_*&~R1#OrvZ?;os)R7~gIyM zHWWACce`$*kLUhkc_Ud2PmGUXVO3cqMnQIzW^|!EfNwV~Eho-ZN*i@6uSbeJkxLcT zls$O2paR=HtsjLH9?T`j>ok|^At75uQ_fFzy{vV7WGixoSglFhO`g!zWoMB4M`zg^ zHAi5hvuV}Ft>)bX{{T-8j9~<73WhDT(T%)12_+ea2z{sO#J}+A+7m84=wfOcFGIa- zh`)z-cXv+=j<*Qy6{6Q?bq0gPr*_~8Hujs8j`ppRP=cM2idX4#y{np+A3JR)^PReB zRx-c>YTKh{>uM)wE!3GJ3su|X=9$D2ylkd4W{aPbrwW;Z!Gy}B}B$88DM+zFe?;8#Lf0}^W;kS z@j{%&iW!-=Y8H}DFK=&gS4)c$=1V)!ffTMnsr*NF_-dc6?CbotW>B<|Rgqj&cCPaI zwOBfXeGdCpQu`~Jc z_;L|tAM<0i_3^P_lzL*3ko}nf8jc6T$WM(Mxgj2ij2-MMc$(3o_T*f9q6Vlx)uxhQ zW5rpdnh1?94J89fExR{=4Lz-7OP0c!Q%IIjvpTQASkg7$Z5ZUpd|YbMIOwmCsohB? z;f|fvwVgE_kR>6>PDo-&erWig9ouX3M+5gbG*UpWy_97K`WsO6+yYiPqy{0|%On-Z zRr82>KNHyD()7F#PCH2+KQvOxDc*`U{712OnRioLb+=n|ZSFz?eP*iYV&c%w+etfB z7x$8XVLSR{>DP4vRDy*!!6KU)G0Si6-|cA0D145*k^HO}BovT0Y_B?=&(e3iN%d$o_N~G?x|^hTJ7m=W@~%8lc`J!M?oAB6JA_v*uUO8Z^@}3S78x_ z8PF4JFn@;5oGi)QZtkBRC*-7IOE3VrEwlx@brfhvIvjx23h^x)XYUh$d;0m9%|NzA z^zNPS?P@?g>VMy;r5gx%oBCHwBBwQ2I#;sgHxJX&QYCAWy?~eq_Gf^WlMgoUz#4o+(;?y{uMtRaHF6K8qlbFD4M{3Y>TmBs! zK9d6DK+k(B`Pli{n|Z#rn=7Kf%SuTm88*bn&tq{z`x8(=Xx%a63vjxdIWYH@ z7Tfbv?nR`BC0-fL0Jwq}`x7l=lkHuprxAw1;ZW7E$`8eo6|EIJuibeyZLlK^lnNQY zK)JR4Qx<1Y*hmqt>+e(Q>Z2MkJ-NT(U46_S^IQHMQ;`S!*8c#9M3`~F9jBbs{hbs8 z9!Bi8CwUL*AsV~=Hd4Nj>JQj$?Q-8Al_!E}1ZVZdt@T?#j7^8IiI$($rh;56l0_)P zoV#w>=++EVi{-_V#bz`mYs=+7t|wb>@Y|)!YQ$NP1&8y-RINPlIu@#Bs^ePjder!jR%k{Nx; z$LzY@s+=-Mvnrh)W-Q7G^IG4s+OkIFx1vQU`+GH1VBbLpRohYL)eRke3^x6(UmBR} z+P$OcUoAY9@>5$5w(TChZ^nk6l^Xk$74Xy_)jGH00qT*pRGM|Cv>Wz@z8+0!`^drl zn{`IW#wX|?{go}EAcZGWvxSvU){>vIr<6yIQc$--u0;y&h7WItb+pBLWT_2y1eIi< z_qhK6S5|zxSHsLue#_X}B1qW zf)8|$K7vR|=(05t&eMp*{nWmHl9TYI{07{8%~<1M6h5$Zns6mYOk9Hy#+XnPwO%$8 zFT_@RxSHkA!|Dk5S!c2-_6Gjuf4Z0LU8)+?dVIe|nnxi~MOm1D0QQ*nYnO?Y46n3W zt}1?jX?Cc>hu5ynn)GO^3Xeya{%vx?BCG5LR0~*oXWrk11iMLzc z(qnb?j4Z8eIgo-Nk-X5#uf2zn;aNTuoyXBru#Vp)NuczdnuiYHhG|wik7C?-j+YKu zM9CrBAyjQ7ngQ!1>u>4S-4%5zeBp%%{N7(ytLD{BDckw99SCJ@s>5g_ z)ZTq<*{b?={{Y8ZHFPo*r(mF={Q41Qp@sVccN^$`G557kF5mn5yt{mxe3kN2r&T)t z05JqopGi?))5Wia&WfIB=aEP49UF3U7wDXy+8Uzg<&UM2ziBiAbr(LVAdSCf-E7W^ zzPw@o03NDk!S zuWpHvMcQqeCO>Ci6AoC9qDcaN+Uo3no@58Gu0%$^X1bza!iV^o75;=xZmtp!@f-df zd`v8PkES`wex$3Qi_)2yjRLIbNhh!>({6}8ErA;dIS2?ogR?}-(;A<{$VMmaTc9#9 zb7I+A^3})wTWA(J3VjC}O8$MC3e&n1E|c=_3?A@sr}$@=v%dT%N09*5=h^w5}K@2 zO5@BvT3Y_jw~YS){?8};I^LPqz9?iL+0_ePcJz3318S^=QQUwQ{Wv#RpuKSn&7*^QEG*+?7x`u_l= z${*l2`woXao)i2?v*+N+Ug6vFt&&If*ZwUwRz#?f#y6Oddv*auxtW;mqAv3`gb;N3 z-zAhfEC!BHVOg$u4V!~rIdyn z`3~Goj**+&>}&lirAq2?+R5^013L|jk&fc{+v=vFg(YZ1^JiyT7A(>fjV*7y?^nI7 zkLCA>ll%CO61+W|$*0Chd$Ov{`cw{{Z3WC=wG8J4kc{9wlepzPwibZG5f{Fi6zUJFryx zv9H8!ZjsD838u>Th+P%}fkoe=Q@Gd$AtUT-9v6B9nkeNX@X3snE&l+0-5h?4I9{RB z+R$Mjtd!p0Q@JP2MRyktPKHlJwkTT~Jcgeoi{(zzGeI5|7UZ*?xh66%ExY=g`9nHT z^Fb2J4Di;N?89a(q}^7R zzD`C&?U2H|smqE)#f!3BuKRO0BVGOdOp9z?C#OhTDp>$&XPE~wUVMxT{JcV(&;7%E zIQ|yD)p77(#|SyNxSX|CnRvg>GH@J-{^A(h;BGs$+QsWQMtFKQQi$Z`Tn!$09R)42Z5?VkCpx+>u^AbtjqBW1M&8+p(62 z+|uXX;MP0f%4I2sj;(ceY-_mvt$IhF&!kA>XIye(_)#MYF9!6Iqwsq=krs82A`@%H zk&S5ti_*Ng4&(UONIIu87c3|fBSiKq_pFdBD<^@p0%t*ALp`VTJ-VN$^o*&YpDdG* zak3PtW8ML8(qqTfa+=MTNU^y;P0Ok;P*(o)84v6->Q&0f!jl-I2|1YVH)*~1ave!F zH&DmOpDIKN5Q-`DvZ~v+jHL=>N)zeE<{nn z=@v9*(9GlEUdlc!g4=nPtZS@Q$c|XkIr{OrO_d~S~v zqtgaj{{TYDi?8#26Fmp;#8QvceHi+-4opc+<31aJKDq{`vX4p2Rl#Qg9(8d*6mXhV zm%(6x(R(Atg;f{SFS*;^ZY^bEPC26zwaNe}CYPiw7~N@C@fkO5 z)ICkGav_3DM#{*W9ze0iLaB}W#hsWM2t&T=^M~FjlEWFM42&;rFz9jzo-@PNq1bUDF~~tt7H> zBr^C{jxH_TONBIF{fE?KZixEna{U7>>_$=!KGCJpx0omr+Q<+6SoUD{)Yv`bOrJ6xEDk-+6mK zq-k>^pbi$Lfgvhwk=<8mSa+GUa1s{kQ)Hl%A&FhF{u@yIJ750*PYQe2YYVA#i9Tx; zq+uKkX(F3S$sNu3N%)-I_hPlGQ+62rY`xX?=ekGkrl2@c-1!!W;y?i`-OZj8 z-qbxT#<{(7G#0(f2(i(A_InVm(Zh10cd{nk-Ak?c;hG7IT=HiNfo}8E5Q$#u^7lA& zP8{)%Zw_Kt^TQyg>ggfRr18i|St3#;6zylnUNm0&$DsW=@uNodl@x7%9koTv}1N=No}_b~qe&Hn(y zt+2yS?@#)Thqioh>!eQ{{X39`Cs_8y_NbR1NzRl z@@8S`wSQ!4u7*?mM`r&3;i^L#NA9Q})vdlwnkzahk7xt^daO6Ve}?3Kt6aMHIaU7l zFn?M*b-xUADD%f957?7KrU51#rZ$r4Qlg9ITTLCd>H2PL@$*nC16yuZ8?9?_>WLz^ z(8K-utB|A8NE)G)S-lHZKdG;Qk37D+Egz;rHTN+@Ju*pg`!S7te2~7VqXYG%uCACg z=hG_|{Ry!@S3yt!qs#>d^lP)X$^ClUvsBWS7bsv^YfG2GcXqmBqSPdi39T2pwe#EL zuCGID4?63Ylxn}c^N;U8;?~a3Ei{pYt3PCqQ4;?EdgJzW%*tVvFP*EfdZR=%ME$Pz zt;UUGuHDcEt!bhM*6UyE(J_^geD;vvv!Ekl7t9XP{W_y6ntdZxXvy?Y>Wy+ATI|ww zHFe}n7at~vuvh%HLw|JVl_CAx`#LJ!qeU17Rs=Gzs37*M1KKnT65SPuTa8O%lfoOk z*i73l{{Ykbn(8tp#aQv9dUiB{S?>C=GA@obWNS1n+KwtT*|?1JbjZbKh0V_j{`VeE zCx$=7h4+znlUt+_=02mU{{Tj)J9QsU$Rm*)LR5{m31nh-y%KUj;PG!;t0j#bdemq> zJ2T;dwPa%G54FWC9?Xk!c-KZuV{E7gG9p1`uX}f7k+*VH-O38pViMaq}yQOd)M-gmxs_jT#6vGXuOzE&)S)g0O#S$T5Be{q?1 zqj;BFdR*X-;zdu>eyE)^f$ii*KdS9rpVOuJQMH;07IK5d%S&b5_7$|b-8yB+#(u{` zP!FA3z~jK%+LIS47FZ=)WR1mDl=z01ru7GQ!j)O@@(3<$QSotSw|kq7#FG9b99zq! zkqC5P3bLAl4`EU}bkR(q<6%Zqv=OUt++;!KhIS#B)ec8*y0dWj^b@H`EO~SatCme@ zI~FOv?bqw-lpyP~$xrLm2Esg)?DTm(dZ%W#=z&jB(T-3V7*MGd1bP@~MuyZ-0)ghI zn@kulBGs^tE4%j(4`r>bqi>v&N&P2Yt$MtqQ)Y|dv*MGqh>aAVPbIF8Rab{0eGaBJ z{V95B6C)Bx$uzx6ykp*F+P`O8dw)*0A0bu%sqF`|R-mGe!LL55JsPi)gXz%#?H+GF ztK_Nk>W5Vyqgzh4`8N40tbAy(?9GYUrk=le4+{9aKIOZRYN}Wy>0l#gGX{(Z5M4_4V10kO!c&NA<5wZ{Rs2_j1O=`o@x2aB`Ap z$Yfwp6=B%Q*J#Nm6t3(`F==C|B=0kCcAZq15C<*rkrz5TO3B8u&>azRIZ|tF4No>WxvNi?9Q_Hq*Vg zyxr|oG^nqf5;aopqMmd9{ccTj zdI0{=*3xVA>vfcUEw}UyRLE)SAMMx6G?knvep!9%PkzqZbyZ!z_w?$6RMiP5>D#KP zP<=pZl{b1DsKYC~r3OoIk|3 zQsHHbuyDeOK-khsno*yFXM(Ql+Po(6@nYUF~H5eB=ah7 z@}l5YUSqDN>Q1P+5=ODSzJ6K@tlPqYu5I6~tc?6X-!C+mtwjkG7d5`u7O@+x6}uyu z9yIor$F@cj<4G1z-HBZDaouFGoJ{}%(uA}N5Dlzj|>uW}!D$f^dK~cK0FWzH6c1_+F z(sizj9FybT=8&y&F=cPQiC}Hmnt3>;kssuw=1U(Qo2B$_URGFQ(@ZP!usd-hP4~I8 zFME0Ak@(s*)Qr+LMpT%J^UnNIJ4w5=F# zUQ!r(FH^Y3gz0uhM64{5Tzp}_3{#EvR_}aA3&%EjqZB}Ua zEL8Y>+nVNWO@k9se6)2QsKEG*{f#B6rQ04YthMaf*-`H6V#IyY>Hh%3Qo%TARlsE< zFP1JFJI@-kQ&MHekC!2J3eH?jP_?$(UHn=LB20wsqr~I%?9^?IJVzdcJYm)u8N0Na zWPQ)!?)%#R0AJ}i%8Qj4MQq7Jxj@_2M~xk}UOw^nr0(u(8ZMx??FLzR*N|PAWL4&T zOVwAD$gR9MTU4brb8H^I&*{~(d zO_cLSHs3kPiR^o)s^x5+C+-W4aQAL4nW-VVG^T`h8Ud-#VC1j$Hj=_-bxK;QT7<2&?xiw1N)o8JgPiBimgs9qB?yWsHHl)d&jBuvv+r-W4 zEv0!vv~5drM&92vz8`&eb(VwAx9OwjCiYO{7X-`1i)UrrjvLQhvM4j3-R!!fn zr|KBl6632CSLLnX_-~4hb-pWgE=FEvPAcSDAWAPa$Q`ib#<#+)#NTd9bOvLy;o!&2 z`AE&ndX2JWOuq_zhVI6vmlw6X+KMSmOp-z-3l)A6pScYEkImCcg6G%~eJo9}uiHBL zexr~vdTuSFCVtkEX$^i}9@dj0cJK#vk5gda;^dB;p9(y7DGkbU$_Kqmz{rj{7LA&0hldbp26gXxW@J7WNKS!*s=)lah|BH_gfS++THWo2T^`T%}(8EF@(9_m|!G ztdTYIfrCdGA~grI&CP#p`<@lmJcScvszaglI`1d+=|&nNpmODoDYqTKbp-8FqilcO_&hojPN8yMK4O%pS4O4A&)-MD{?3;t z2~(E{brMNiOP$szi?!@s+qiDjSrV|8O{fZ`q}O|sMB-QcKJrQLY4T^2myb3vaUt15 zAIAEvW#3y8B55CC@jV>YaDmi;jb@&QFOCK^3lgChZS~xgj~D|qfjqU$^gkI zC{{7cQoXM}-ft*hYd3d`Q_GzcPYNNtBamozT(_;Q;@#G7TAO-kBZ@HyJN7j!SnJ-N zX0q)l>X77g_B#ocE{?z7!^~f`uC3HDStQ2D%r-i;P=r-hkx1gbv^rl+Jl>}@tJ%8{ zeb~wL%O@0R-9_d;k^paHRaSG_#0{?A^J>10E+!=#K2^B^+Oel+%uVe6?LQUu78Wdo zO_J{NN_M#bR#}hn9k&&`o!t zuI94dTxoN9mOOCdv8qI>qUo-X$z{C9lZ6quG@UJad}&t`GknT03Z8Bi-z?j!r0MzD zSvYypR>-D>5J^rUk1bv~Sa?=T{hehFh@Uo)K@jFlEU9Ad(Lk&B@^G`-%iT>Akg06u z)|C>%vT*X}L-tjhzq;DwXJYf@p^#(&dA77BNLz)Gw@)kV=%y60;$qiqn-)n3?d3=K zWB87@_;j=Mw30Z<7s)wpTaP%hP5B?f>2JNSR;n~9<=NTf^?7z{wxeGbG;gIwsv%MI zRDRBktt615_k@kJ_OvB~CnCn|xQ)M7MXtAUpVd@D{>@b7KjuUq?AHEF=jbZGvbw9h z%ul9P{{Uq*u*wgon*RXtYvANgzJOlg`Wzi@PaFI3)BgaL+N7AvFRm#7{Yfp=TMhoK zh)?zF>#lJ0B)&?kt|-V)*qqQU-fnOqFR4J*Zo9) z@_+H`?_h7HHXpLupp(PhnhZYyXRI(|r~?%Ln7+N{uI zMk!6`Tl+U^)s;hbQH`hcHmedd`oIJqqMF~0*Va_(mkR4)uD0ye4!d@0jY?=lZDbvQ zoulYFs>E1!Y(M-oX^zz$g1X!1(NjXLu!FP_>l&sbt{!h<7)4mu%kYc>ESMiS ziDL@!#H)GEWZxRFzFb@b~wo4o@d z9+q+=LH3(T4{1bI{Q{a;UU;cM6B)i&B3KOA@}|Qah;5Z^??E~;^P>9ey{WK}G&!45S0N-fyE@XyevD z+p0d}diy_4g}t7iPQTP*%##-8VG2cQ2m!Tu>cHPGdC|Cdbd&U%&L(=O5=^QJPJ7=u zjCUot_qSwD>*}3<9O8knjZq zhiKJDVf>nEni{XC$W3Sfu7dLgPolb@kx$ZfQ0jj;*AV?9R^GKfy<9fyZr z{{Sx{Kc?0P{{W7=Ncu*uCV*|*qe&F0?Axu5r}K?RBb$*OS*S%w2B%TyLg><70y>dW zr-@tCIK7=zumjUwR^{8-x3^UrN0y#Vy4j=T+2ya3`ZX6#g@i^x#hmS;sH-xsef%q< zfbt2DpprM(2~)FuJFXk;YMQRL>(@V%B^3RA zQzfOxKg3D{_15J5ZF3=*NIg^|`ZY^beKk54Is$!Lf3I9XeNnD4_C|$dKbnJ7k&AsK zoq9Z-nkE86(3KT5Elu0Lwz_2aO0U%O9y$51wq|Aj0IYc*iD6CXtl;29&<5YmJ9WY- z^qp{u{W_pZpQm4TK9Xsz@CVR!vt5f^EFOv0BRnjJ^AJwD9D&J1k^PlOjN+-r3*bF^zY) z0{xv!14BGfG8HW|wGkCw`FPnlB8j-0M1LmcK@pHIGZp0LMJPpBuyXPxBuH}+7SJgaKjsl+JiSNPV9E-T&af&Z z#~>k)8Z+d}#G5xEL|y*&qQlH-b40b4w-sho``D~j<(qCHhCs?3F58t>KCKl*gIeM=%#NhXUH5f3d`RNs=1^6Mg<)QOV$ zJ)SKV`FwDPXhS>RJ@-`QmiKgHJw7td3Yi44y@2scWQdnoH?6yiSe+*y4=J9}3^A`M zi3q$+Y_vtRT+Z8?T!OzPi3LVHQRG_7cN~(uV}4ma!Y1ae#m!mJ_N4A41M51gFWS>j zm5_!aNC0ygHXB;ayH@Y3u3R54Q|!9eQR2(fMA+&|MK$djvX4&Vk9FGJW#=Y5Sn_h< z<}h`Xnuk|d*(u9;D4fUkEp0pG5`rv5A=SziHp;-0k&0T$T6a&--g`FKX}Wp^vHhOLKoQFjYzaz0l#2^>{rSSA98 zv8n`-mDRB4MLaLS

jqNZc*2?(R0e9EjgT4Nz?w+D@l$<3IFjMv+4mR06wv+F0TQ zvke;G# zbst@MIc4rh9-jymVvP<@fhS%GJX!}H6~r{!^0<)t`Ekd(-p%cZNtt+q#Y-jH}6 zoH2g}J5$A|;*14}Yei8-+1a`@nHZp;Nr7QrAml{IeU%?~;MY&-8DxkLHzDmbCzQ6t zF7t1-+WuZlIF(^Za$;EfLYIiY%&+m&mv1+U$sb?o7y(uscDp;MLZCXb{ni#fMK`A} zYvoezTr0|b=`@&=W}Lp6Ek0rA7UTd9{7^POE+&sBf!bB(K%aEm+qpl=_|(V8$7bhP z2i>`@Gzi_scz2|JJ9HCu6aW-fn+KyqCk!h}%VVQ3Rh2lcy|-3G;)TAadsyz1$vbk< zUy};}uA_Y!4ZNpc2C@h8lSPw>)g7jm9LUWvavGfMsPA8nnH|3^_;W4l)-}3JILRv* zH7CwVEa%zYJF2`o7WR{{>L-?$LelS(up60VaC|MLiw*~D838RRZd%9&%N6*N7VkPQ zGGD{p-qCroV#LOU2`dC6aTInd&3EkS{{Wj>d7mOlOtMEI1zG^yox48q6Mb7y=Hequ zK0ZuRM2W=g4&tY@_i*Yyll=Oh6qEx-F4? z*G?@gaFQ`3R*_?F)JoDj8~BghZtl6u_mR3fA8az&sk(VkvE)c*Hi|07#_5oHD=!H4 zv=)Ni%6hvs0y*0QJSXTzD!;3&Se#tEiK@P$%D=2Pb(zw#7@4t(W2+stjoD5+pIA?a z^)-tWs_2-J8RR4pQa3TSo+Oj+Q&o#$^!d)Dk~r2FBM&pG3JUSNTkUtXFILLh(Gwvj z&phJq{{WZ9vNiDCs`d>FzqH(YM2uHyw4K{KqtKP1Q4HG14$%R~Y{Q18cuB#+9y<_iMwZffeA- zg>GmkQmnPzsijg_TlcX$uBPc3t4U)Z%Z(wm(2c1)E$ZWoCKIoajiT!54(OSSM*jdr zj<-WBi{6$sTlF_tc%B?Qt&{Qqo0h;@?C|_4>)&QhXN`0^r_5vINjRdgCWa*4g_1?N zej@xwUMu+Y*+&}LK-(gymN)fEtGDa%E}Bl7LQfwOti%OAiC~)bF}JYZ?v%Iz$QJ?F z4|?BKe0Zlj5t$o_@YPzZ0 zUpejaSI^|Hmu9J5x~{f=MyWC^gW3T90A8yK7+cd5vVO_cBFmPa#0ul}h1%kRT6$HG z{;6$zOk2Hi$Penhn)vX~AEcPc{*=30W>r4bSN4F`?C~F=#kU<;KnJCUsQD58 zW(WGUQ7wLiWBr|0uS4hMy+3DE=c@a_uk8(dDPwP;hN?D?R*ZBzz>S~m)*nxNA&c@U zPHOf&2Q5}LrBNxq>*Li;YpslF*l200N~+`9P;2^iamPS?C<^|?HSi?Ji_v7yLG@U& z>Vqy;AH-PS_LjPpvt*6r1L1rils?s;d8)oX8~p}FKht>CB0Yfxx*dF$u$ZP8{R z1r;Rh1M~T`2TjJ2tzhtFNWwH$ABz}j%OW=k-S~;1lTpB4)$=tr)7Y+rfN=`bRNJsq zRMcG_J?Qb>ax%}D72AuA@4Nh0Ug|ES#DZ3W7=T$_R;=vYQKOys{WNyZd$MhXy=j0VK$pk_*Vg>RQ0amBGUFjRTy2I$$v#v{ZDOk@uWDy`A z8$L^inT@#X;Z1B5QLq8#)Oi?DAf5)e1p#kg#ERwd4ja4L_$1bWsLE8(``&}P-cN>U z=PTy>I!v4lb1qIo5j+V+4ybPDqjzUZy#D}rx~SV-RBI+qfkZhd>pmT61mV=9lujI6 zt+ynx+LCa{y2qALWTGTlf!jt4ZGG<+iZ~3UP=mA(eLCm#rBze1Omb+C=y=ZeDrNf* zs%F6~9)nI|{kXrhx?GHIPEd@3W0QFgvoa0qbVE>vtwlC%?%UaD?yigU*W}l>CKp70 zrxah|{hb8NQ;R=fB<{EOQ*ix9wY6y?Ks;Ly+8P2?Xvy_devz%mRvvL(RCap&mF(8v zCeG2S9^FuB<9psn*7;TxX$)!SntoXL5ifbPSCjhN#h> z%ybkRSoT-_`mRPiZr+<{e$ran{{SbIkq4^&V*QD({jF3sK2rJaQxhMvdTO)b%>#Mb zAhMzS(eHk)gV0#p6wrWa?*Phu?N)Nxf6KhdDz5nnO# zZSrl|t%F;9n*jPXu|cl8HtL}5*3G&}qb(e-i%b5eid zQQcM7tIE+dMC2E_X0MyTN9yWGqLwo>BrC;T@m;mI!oDp5*>7NA z;u{bFQeC!0p?vjy2Am(6AQqG{<_Gh#$zM;@(_`h)vS2i30+*@#xvA#6zwPRtp3f(* zR0p@TYW9dD_~SM=+D#5dRngQ`WF^!U+Ez&D{hrRbnClB-+gF+GYk=Zu9lvK%zeQ`X ztGPp6z3Y3+7lB`0zFobVq17}9^J$teZf`j?peF8Ib^EyPYph=OtLM?exn6atU^e|f zXW8M>{KLe7h*5sc7|vzMvHSZ8UP1*o6Vsn1WApG+eS`U zBJXMpMfk3#y7M$@-W`1I4t%q9NLH#PRS`%OtluvbD{4URENRP~+3eBFfIMT&T{7o!4lf;>Os?$jkWcHn4RvX?0y4_3G`jW0*M6U5f@+cu;i1L?}6I~o! z=U1Lvc(1p+uBLNhhYzUYn3c{i!-p;@PcjdJ+!NTX!||b>E8~7!Y6y(Yl|*-|y-Nk4 zNOx`A-sVgD&i18Qqlh}lnA7so)RHNdumCeb%)Y-XZIZ($d38Qqc~QdHpA0LZeq#l= z-c+kcYS_1UwSytpc?b{EyQliK@#2n3?5m=&r`8(I>-)H)9ApS#!~zxu8~mJAAtaaD%y?|VxgRv8fFD?T)n#)WbbX?&4`bEg*SOKUuT5p@PU{UtIc$uD5X zja7w$=WW-Dn>8LkOzHhX2sW7&nnqiP-R@s1?DljPZlRge<+jI$R4$`syNuB;>HS?S zohPbdbq9ql5x6UA@QsUi>*zmG>7rOr)P!?mQ_{!{6G|}OFA`98tP2^1M}Z@&Ovm_= zKh@Qe$rOuHX*Ma3Y3*yE^Z1)etqwCz>=jXFWvM>Yg2Z2cUn?`#IV~;8kR79X+n0?l z`me5bEZH#z2Iq?sIVeAf>bKeK=u6YG@G|3SZ#*v?ihXfb)?Z$XnbY$Two)l9O}@g7 zziU9plF`44H?2>FWANw~%{SE4RZho#nHvUMz}BZX#I#A+1~ zyGtdzyxslZ6KnlPE#sdiCWT^>KmG9)k8$L8YgwC2dT{3s-I8qvzK5c~2{{Z+oXI^6e0QC6^l6YTTL;X3O zp;+NkBrIK8lHQW@J|epK8(6>S%K1H0<ViD$M(?NVXtTA>WOB{vHSN^kF+yw=9ioF!bu1Yy&y9nm?YziA z;*EGN_q5r0F4JVlS)Nzg>{#67`^~96-|Ez^dkkQD>JFMLwD?ksDm=^Dwx04I#9zF- z#h@`SmmR3gq=rL7xT5Xl+r{kZanLlY8NJvJIZtl)4XL9sA|@i6HlNaVYhu)mwQaj~ zQ`k10Rus4%^K1wGx{R>|#;m`Xn*RVsh#j;v(wPSJ1xK%6=;iI770F}-d_=A5a<#$Y zd%1Hiq#Y680(j5F!N~>VTJV(b#~b$~iP}8~`n)ZQ%xJDYBussY6M24zO;#sYQ`pEs zq4ezjtsY>wqa(0h+f{=xx9HS!Lj1YDShhQQU0;~rsl=WQLoR$|yb=awNf{m~0JYRf z6C{>MjLXIGB7H}Nff7NF2(=?X6;yj5Xw8=D*-}w)@$0=Tjk^?n%Cm7u+p4?T$HTkk zKbmrxq{x*|!zK6Tmmz<32i@W)7bzFTuZOQ&n&2kNd9gK&(k|%Z7{{Xr233DW}yec-k zA4GAD=F~}%iauUCl#d~-RwS3^PK$K1{{VHlAHAxx;i&Wkkkk5fIzzh6kOw;{qgy~l z---)-b3MDB4ed=19H}=a0hU0!3b|XHIvwTT_H~VsaC`X$C_x;+@a~UpmudQ(vVZnF zqs}14LMpED)$?UvqJC6d&;Fj>4!_qU85r_0I5?7Ri6aKlmpoiE|N5O6(U@^JyZ4(pi`ypGTeF z>M!eQ@c}20?4X{~r+FCtD&9weKo(ffVDqWqk$<)AXvYlCAIyU&R04sQi*knGS6?lY zPGQ=ty91A-%_) z5&^siVIFA{{`-xoqmyg0gp=08Zan`0;sxbN?dg#o)txDD+e-fc-rYK`%V0$xXz62& zRu~%RZ!vMf68Nk;@_n6Fx@;^d7Bq``dA2b?cw>q_{Ll6xUM)w5kvl4}X9dA`VohY4 zPFn7z-R=d{>WI7suY7UFmG^Zr!Gp*`}IGUnHjHYJEM6;YHnDNsTAPnnWtGcAB2T{sr^g z+Eimw6asxD4Pn{zqT)EWevN%TRS|PdpwatB^e`#$Q11t7Pk9* z?5o43j2aWQPoakL5%ski^AqMIOPK-M2pi++8r!d5{{ZF8zwOs8vu22&H1Vqbv!%Ma4xo~#@j{G0F^uT^OldxtnQQi2X1DRN+#dw2 zKW$FFHWbP|D9GdVZZ@eSya&-NY@e;XzpbmFb&z`u8~VJT?$+re^XuZGy*x?}`!!xd z1L<0!{X)8=6XZkg$XI=uF4Ia2yv``nNY^m~yX>#Bx}p6#45o~vFg}6}S5kFM>po^x zRc>0^yQ0y%w|m6eMv2Th5jF70JB~ZvxZ8qM@20JlL~>ormOB01!-;GAxkmg=q?v`$ zNQEU*Dhk)mzgv4!bm&EJC5Yu=?X8PiPm6bg8F%9T6YCo;X;UK~EDAacN;zI-l-taV zuMDg8wNa#s0*x4O(nTREB~i3T%v##Fad`N2BkGYp3!Q+y8YAeoc=s3U*`X?>QHJYO zQ2VXebg{KA18p?Y%F7%`3p23+R1Vf=J%d(s#%x}kfAs`XX}|m(8~&aj<3GfH=8g|d zgv~v#C5S;_e|tN*t1~}~ef1U&I!&F_a*1&abTT{88BcaNp^v>Jn~9+#j+=(xyOLQX zVf3^}629(>X7t~i#})X!K0z%9wT&+-f3bePbtG&|++bKN@H}O~;(|_UEpA>N?bgtI ze283{5p0T2=(_6aXrWtT$&GRp4$H|YJ+#@yYd5soqOnEWMw}_{ zaXzzi>?m4xiZFYs0OnY|ie-K2E!NJ@B1|TdBB)T=N{~&%c=lVNHY>}JppIlsMq)hg z6K>ke#cvLlc#ToTLH__})32Gvl*5t|%cvO`R^YNHhVJt3X)&@9vFCGYhTe(K@TB&; zs@ArLH3%cLuczJZ*2krMK#dq8C5uyUm{8Zxqv-Nb8fZ@xua7uVx5ft1+7?7^HCFoC zuT_k4_I!8&Xvdr4uN*(Dnhu0Aw$N165$RGq+A+wXmAgUO57N5-0PK8%(fAUQQ|d{_ z59=m`86mN!J&7eY{{VL{-M*;9Z_%p6?7u;;_3DO=^ooC0zBDX7XhHtHP%sVXZHM}G z+4=Qa3TtTkH58IGv0<4|Wl0DIRfF+l$E|nQziP9jce3wjL(rpy;7l&LDB@7VYs)FQ zr!F{}L#UGjISw{MgC9+y4NIRYP#~9ag&8qOt(WduyV|OGbS?qv`c(zF=uzS=*}l8|6x@)ZH#Bwf4Q8 z3xEgDO`^VfdaIx%6h4vJr)+geWE8P3w4W8s+&<2Oyln|P3Q0?aJ>A^_Lqpnq90rnS*Uc_akZvc2SbmApP*PPT2= zW~fG~PtmQ@q4QCPE5hSrFS#O7*I(sxG9&dhvJd>hf9q+VFCb(C*le|{=PuVZ_0f_z zo_)JkI$ci|_ier%Ai$fIlRSYLW>SoTg_-S_ce`hX?MB&CNi1;^%B~id5oms5cG^1^ z$<4#DZ-~au-OcNRDtF(C-tLs-%OtpR0vViMV_~&ksw>NW7x3sho0Nb-9fTgjJeBef zKB_?Nud2GfNWhcEl~(&{{jGnM$P$6voNcG~(fL<{Tkn*etMm6KiL`wE$wm%RocYbHnpkPo+dlG!OeBuidB|I z0=u%;nBPTYTI(JeQC>MAnJpt=JG=h?S$8hhJCRvJn91{!gr?uosaG07A%(1v4>A7$ zZ@t5+gZg#p)pdo^QGi^GwO6}p&?CP3uNb*_JI$|_m1F9$J1jWN3FgNmn`7og``H-r z??}k4%vDbgk6Xv;5@kaKO(gJT)CpLA>czVrr*=5iZC1BXX7wl;GUHV!>g^oS5-u?r zp(7 z724~UhH0A54w87VV}?>n$da!y(bU-_W##5wW3KCWxV4uqbZ<5sIoT}vSjtS;at2n3 z;i9+CV6v^#+0Et6xY2IztoZ$F0$fwHPm35bH?7iH3{ba^ck1XW^<03PHgY1r>dR05 z_S%yd3#mk%KIV0N$U{j9V|0qL28J0^m~UQfws7xjC#~a4^QRX(k?CBthRwa3ark%8iUd&0}W5XKz z+KvcvzD9S8=HAm*PHDAK?fb^vy4KxKYf$v$7`;Ol<%%Nbmi2ONSEminyL0%LMS7=8 zo(7E4OJt3$BeXI(jrC>-&W{f!Q#nkCh{spibE2UC05H|xvPW!mZTlNdc0!pMuPj>E zyZ4nLclGlGnPw)YTldNLqavQl=tb1<&RkuaCY4&AhC=+g2BO1*871p%7)UZ;3W*^m z>GE=2S$Q${RSPrPv8JD*^vU9I@HBU!6fVPhMnvqr__Y>yRET1XXhazJ>cOq3Q8e;8 z?%yqnu_FE4KGQapb7EOS5?1cfUMpE>S5(K7Cmx$V9PS6%a^qBssAjLy=-;;{jl*ySJ|Hx%fCZ zxr7R`xG69AZkFHf=)sE%w3Q>2fti+_s@Lx=zTT@e5JaSQOu(Pep|p*c)8NR(cU5x} zHsB`SU}(xq9lvK#%hO+|$Ark@PnMPBwZR;w<+*lMVRwmj%a5$ep2lV}5&8L%#ja!- zT`}bIIw^>^zLC4e-)CIe@Z**v_^>s@>ukAyK9+8ygOv^=3YSP$RwLB4-1m-zTd+zz z^Q5Tt^z#R1x}*^0W62xkD@V+fF=5I`_*WoIr z^IdlCx^^yaDRSUdj|y1=@}ydCs(RFC2j;p`ssX!B)70#u7~wzWv+{9Y?#?>gw> z!H$@bptxklZIUxj`j41nbvxVbW3G(3DxFFscZf|85z5M^WU*aDo*6iofwZ{tJZ&P7 z!WqXdMQ=*0+QGfJ+fvKbf^wnWT!D0R1oUJyH0Hd0*)88*En{_idmMs*)8l zN!@;5-LB&6=Gzl7Co5qs5j0xu9l9m)GeVBm`F11vG+zxTlr3sfCNv|&IM-6-JQ*>p zj0;^Asd@9Q_NwzVGP-^w@yJCC!bCtvqD`)@J>}i*>0;_RsER*wmr6&OT4(rwT_d|! z#Sk)9rdc=SC&kTu@3U^Ic9FE7_nkf`MGEe_A0+LG51nEkk1GEF%UvC%ixSMtYRt!q zM?NhkB<%5zmz1-_*2qTcDwppj_X}#BITsz%3_ONC+OTl2NYvftqN6u6S(s8t#SSP{ zxrx}!*S6mAFMBtOP`*)A9X(qcD3e8uGf)#7u1JQsfyCym!2bEMA3@J~ZLGe^u5r$Am~w{c&hNYe?Q{)T4XJ zyq~Lb>z9oTvbUilWB$!U7g7>*$(p>GW{lWR?&Y`eWbeP>aqALgiOjMV#mY&@=E0Pz z(n7nR`fR97sEnTrA#7`|*UOu}Rzr3?qqR?hzrBm~(?=I10gwjp?zsKrexu%A=88E5 zLmL3|FL6GulPGQEo$qnCU+nQ~)1Xk&McR$){{Vrz+WCOHR;eO+?fgXdlkX$Y#d0~3 ztyGT55b(;s{qx(fu&crw4SsX}6BVZTGg-;Ii+WN@ElW0<}8T6qRsQQ-KsWWnd zuvJx#y^5e!*~g0Q9=DK$NiOCvVZ#reN_S2}ZT{s~Sw>f9d7)WN%uQHI%3E)h~LR}~S08fqH_iXR#JnVw|Ly}ojNY~8GUnAusZQyvyB#0!l=n+2oN+Bs5!k*>(2 zuL}9e{v-GP&Zdm_W^d4Uwf;%#0X1kIrZe<@>HVbAbsnGoSE@CsHY~&{Wkx%TKiz!H zTv*b*w|&d*ww7#BY#BkDm*I8$%6l(cz3nb6goxESi~*r-wj$JbYrNX{GEE(PFI}Hl z9bxqxT#+G_jB-MFqawb3E#CeA09RJF(das|U>mZhu$pkb&dEKs)tQB+#`8=CT|HAM z`_%p_?|9cjNZ2wks9KDpHXJwD!kDvM#@d4knP-V8 zfFO=g=0tGH0OI!Q!&U6o-zMK8%xPo0BJT^XP#LQq8ppl6Cktz4wrgjTX0~f?s(ian zz8W2#cGy3sTg<9GRXVFkPtXRaUH!V%$A2xIe1) zofVxYi_#h*N6~U$s)vNXsjP3)@Y_|!$&@dcNl91eso(v5d{|?hd{I58{#>8&YT3)< zx1wY!KG?Z6bVNG(RMdX1yEU|E1=@XDsN3nL+H130b?VZ_I5IJ$<^kt16=<8@OWAab zDY{75i@hL@)2^K>ZId4`#t-o3je%dbi>R?Cnn^M7>&lJILRYrWMyw}#m8YJcMz-jw z+J|8WXg`}o^!cX4yJ=WtDwY24eLl+RVw||?xg}8=W)ASkMW9PC3w#sF!p-+g-W_A~ z+>!oSA!+PAl1LwyzB}BGD?Ckhg-vuM0ADM+vGbF2aeW%)j&_>Dn@{M`X?k=h=fGJA`V4F>)Ac@r(&S@83r&kI{HlX% zON}oS%AM$6;#)9qtx9JO}o%Y+64Q# zc^AA8sghFeZafF+anOG#}C=ZEk1ehx1&q zx9ZuhZ&ESMiRYd@$4_c}R%@*OBsW{((aGt|Bbm2_yJM2RX%mNk_lvx`ho-|3#mJa5 zv&sW1q7R7Cg+CSQZBN$IK`wO6tTu*@GCfAySL)i@Rn3p);EYhu1xtWC^W(Pv0KD-t z>1Tn&khrR{nuFw~-Fm#g_w3gu8iaP+Rj`ZQOd(Qy#lE_91n zf$v9+AO5Ok{{WL8dG%b_rOcR(>F1G*g!q!esSmQTuABK1Q*FG=j2U}5@iD%5r2hcw z@tE(b{p3Fq-Ys=E%tVtYE;e2~jw;C;#`tnZmF!e_Ply?Q*tET-GLG{PG4`?dbBATDSL0D8&uX!4y{sUXmTYxHWm zsq);lQ|TKuORMRquD&9J?w|MT&c8_3#v6a{=h2o58uv$mDg(oaKsN? zJ2hY;@GEUaK=hUE8r!P*Ddf3(eHtL_I@zvV%Caf*I0S!As*!S7`Qm0z=u>a%>)>TL zK8X}R>keD$v503L%M@?3F3;A{S@CB{8)AZlh9`6mVqBVo5!e<)3MhL>8`k@}^J{4z zr&|uIU&MBuA>!9 zQd^FNg$B7p>v6c=DhE@df++OBq{tA}M3r&0Fk|{wD^f&!44Y&6BVp zXu{nivc!!nk=Vz5?vur)=y>^=tAmA#i#@p#4rG&EYDTv=%f}pQ&1_yIT`ll@!y<)N z$#$54KfY&Q)zrEDZU_?{W3owEKsJsPTW!7n0Cu{IAE=nn!V6+_?w1ouFt6Q9mhmqw z<^BcSgp-a(ZAm74j|WiM^7zVCnk5F|CTlIp8alFA;Io?ock84+mXpC9wj;vI?%BH1wxoW%3Z+Y8yUo{%TE$5u;Obsj8Z5?G=XA9$qg zxRT!%tmk>(#iUNPjxllNs9DkZh!_i%99piI_aBDsMbxnRfrB`k8L_E*FN#!qK~&R2 zos4plHn*D*RdPG7$-vipIs#9afsdKuKccC2g)(i~UF3ECn{{W+ZT*SsE$OlR7yfmzR8#d;$@yo8idqC96hNwRG>6iySIw9JNDxoK5<= zOooXg#!?S5LO6eqY2%0xpiDM{ z`xXMFWpV8<603fPsa)|9PT zzohzhYO)f=#_IL}JZ!(Sp#p(kS^(Xag*#>Xb@CW68Dwb6s zIeLz3bpe7~A2SQep_z~X zv*X;`!;)>5HD2RtC^{^x*)Tf1*wVfDu@2P}b3P<;KXwRYyTrPFoq^EUO6BKqfi!M~ zzY;}`PDzgc01l2nT3)5mfneO`hDeGq+OmAaLP)*q??>Tv)8q9{wT09q2jEGMy6&|9 z0MtkKG0G3_-pAsyJ{<@lkVPYKT?-Oq>mMqBPXqXzy3$QEbtTGFYeTLAQNSS9HlE+kW{v>p7 zwWAryig=HAF*f~aBc=ZHN2Y$E^8Gg|Hnf;005|a>XioC`G9}sr2O>_R4R?WsuBWk* zff2vOA6roLZlBWQk1BU!GUb`eBun?X4Fo%u#%+$yYNV37CZhiUS<5{`11X9?%Dkk! z3%OHcA-3YX(Y5j{oIF|zfCW)N0H7KJQ%Tg97CCWogbZe721b$0sOpj(>OzXH%ih=X zA6#Sd7)*!G!{bb=*pWt?ks|8{ z736o16&Yg;cu)&>ewI2gK^sjX@r9)q-e%pq+0>A*Xs1=?DmbAwZ`C`m^>vDawVRvu zLhbukTcEhP1>qlsF7kiIpH;MaM^KE%k|`%7w%V`a;?3Un*N)yTKT&{)I)(&dSZ1vO z<$OiQ$o=Fm!nbcD@M?m|5@Zc572k=w-qIM~h1W_`G^D3~I9y#I_R>V*{{Rz@O%ct+ zi!mrUb2*4e4-AmIj$ZeDF1a5~iJK9MS5rXUjtK3JLAfIPhg_$qkyn=B_Jc}o(!@<( zFcqoUT5INq0ick2yRv;w_p_moQkzR-xb0T&$L^jhd)zuP$O6usN;?QWk|(g=tHYri z5@l`}&|Jsrj_R#cZqH7t;*UGex&Z;SBm_jPRmsU(0r`hdGp z)Hz@UO{^%W6m4c_;a{z!Qh<|?kVT6%R`x1pIXRZ^e5_He%Mx!&{92o+WkrvZj}p+f zJ2JAD_))hiVZ9$QlItGpb%~SI72gEJ&>3S=)n{9lJ4fR4mv`-IJfV#E)5jaAxs|~R z%QBN^1FLZ^jMD9%U9IY_^}nZiy{%j6(6|<6*cE$8*T%Fl>xt6g9G|G&_1Db6cPmB@x={Ee9oE$(o*+kUSZiiPb^3L(c+b}w z++{yQ1ODA?2kF%SB>I8X0vh^G!Jv14PPVdx^y;)rzMnR>0NXsrw_9Uw%IwzgBV~4i zHL#6r*51uj`8Md0wE8RCq4K~Zci)%HV_wc(N~-F!NhGeuzYr)R*|j%q)q6aZ^Z7Aw z4Gd(o@((c)?1@|aM!QQapn?GeDYo@J$t~hR;nN5ZAahesPNd5U46=m`NUp`%v-?_J zn^L(DUqxjisH{L}>-T|26}qR8pk_kCmoCCRYp!f5S(~;;H@W`+5%%bUbzM+)Yj}-p z+o}PoS5?(@w^i&P)lFL!U)DAc)92M5ILJOE4f|TUAYwnlV!yMys>hWl(BL=xEuy3> ztL(W4>`AlrwON(%pVC7o>!$9mgC*I0q8xwU>ua_-2hz%awWrU{1ay>Qkw+P`<`{9! zG>O0R$af-*KJ$xIj|^it;gcQOHy>Cw_t(*yXMDb%KlKQp$r%3t>flZ_ANz=Z#E(d@ z<;C_;6H^P?ijvtxpMZUe@@TFu=_nQvbXIac z@);=|&d0|O-hUE1^(-IDaAarB2FAyTx~cIr-*fufkEG_ok%f_NiVNo9^BXCsUGESZYenIOHJO-zc0InCjc9Ex$1*7UqmSIwgf$YZ0~F_@$M;B#rMk zkz~mwo5k z5tg9tpzyD0@UPj^bxxoJbL1!ru4&4Pi6YzIZ@in@_jSyTgQuC4)P9kxhRSI=ggcm- za;#Yi*rG=JteE^R&AB&^k3t-oQaL;%?Ev}694qZ>7o_yoPd>K! zC^hTV@+e$^OJ-e?DI6>xy>GRl6G;?7Dq3V0b37xE{{VGg#oqq!LQLS2V;(7CRt7WT zmObx=-ZbFSaEa*7y0i{{S+|Kl|LjsQP4yz9R7<7P$A3x4e;=xsc;z zHtVSy;dYc|{nP&d=4oO)tjt)zRf;wFcUAKUxqkrru8Z$$=Q?z)ZAv<}#z!1cO&f4H z{{Y0g{{U2vb2q2Fc@VPsq*qm2f4z;~8B@Hiul2UOoY>2bW9|jNpZ2f)T~F0=x~_Nn zrdyVlc*-h~UC5RvNiBvo-Bi0v(es@$MA4bC@&edhRM{d;67DR~)pw)Zk$bD60|g#> z3TQJD#CBJ2l#}1 zrt$uo+xyP+&d4PYLf!qvD>ZI?DXvZy=>OqQ@2}nu+vilfrd$}w^ZHl zdp^#nFyIvIsttT7(LKcr`#O^$BT*~ub_03OcIMQ5MtRlQnHA!)lrPvKdhgrbyWZB( zt-9N)>YklYjaRgJc6s%;Xwjh{9bV`O)p=|BHTOyOb@yrdHTP?+v5ILipn<2JQbcga z#MI(DcTzR)$os3To}Zh_UzZV;SZYK?_qh_ve)3gYTXk()wdmD#LEEjQYR5M(p@m22 zZF3SXOV^4PF`EAXhHccD82Nb#G{j!aR!V`wJ|g+G@UmfjyDx^{>5aIx_jvLF;E|X1 z)acg*_L`nsBiGi{W!}*088OcUqCQv>M8S6cDYP>4Ecj~P4NUzvC2+D;Oc^nd9jK)8 zCWgDVGPmA+T}jg8s>38}JRtU5zYiwb_n&fB`&!JwArgFY8X{|JBduVO{{Y0gIc?GD zy+%Ki>XETViH%j5e&x@Jca*^lm?&tpIAId+>?qmmsCWBL4stm3A>PHLve(>W$l|k5Gh4_{?4@0V?s5 zD0y>6Ro1=>tkXo98EVWaR-L2BPA)#UxU^Qm8`2IvwV?w*BFi)sKrygNnt1voT^R zQpV%E-PTSfDzwsdhBH9GZy72%xbw;TsQ8uNbCd4s2s*q^6!`4$sFR4qhv7SY3%IY} zMO|g|yv*q2o@d#$=Jn0RT4(c>W{o(YeB@B$Qg6r^N5Qsz|EC)&bV!Y8BF;4S*1Kwu3^> zj(BZiHh7MV2RdYp5uJzy$Ro{YE8AbGrp6gS$PhS2m4ReEQvFVwzk~_$ck8)_69@!omN`JcONR`sA`DntAr-Hgx40L(p%}JDJ%Grhnr-yz z!7dyB00wor&$`QFFV$@Vv9xWnytyP%U(DKEY<03Utp!Q#HyV?)+%lqK&?Ws_L_t$I{m9PbQOWCP+=xLz96xi zZuYd{b7pB-LccVL4V}e2)n>QDy{fK2Ao$}4_H?RDZ4^q~l?8wm8ktmuiR@x~#^vt% zG$TPp8z?m-(Z95~;0vHWQ`H68~pIXVt=jz&bGU82Z-D6*%L=8`X*r}BK#f{wniV#V*yu}yGV|X`xtu9|ym`4(PIHHc>8u`r-aXWXU zlSIT4MFxj-f3#|X2=1+R3VwasXynT*;?Y7x(pS{0y>a$eLp!U!O7nm*;*7GqwLOhH z?-!W(7ji#)N!4@a%!{YwT?)c7SijAF1d=~@5^nzhd0A7tCcZq`5*kq5Gyed;TkzfQ zGdJxvsT^@e2b?Ibu=<8(FE&Y|4#C-q_L^H2ZQkwHZYNPhi?6x4l>k_dDw4Rr>Er(Z zX%&7d{p#ejoc=UzMbSEO=j0>OX_VGD2q`Mj#_Q$o?!=r5-xpVng0-ffB1+hTtxcwt z?ba4Ha-oQpkX)ei9R<;2U+wYJzh#>0@btLg#fPSJ=7Ls@C}e3$fk|X(v6T_`_C?+B z=?VbfDy&((w&9QJakizBCJHSH%{_{PiIdD;N8tBv(8rEc2t2^tN$)dTQqI~DWW^z= z1~p|MyLuw_yj(k)e7R6^4FLh!+9dRNYz@5j>tPfkqt~PfDUTr-6=dy3?i`(4C9c9m z-FPw~*}6NbyOwXJztpkt*9WL1Y~g4?48M5X9W1t)LFt4ivcQMu=`tBei9xk| z>b<0}r8&sBZgO>?HfgRS}B*oo=d)o{dm>HtW}_XcI-Rq|;YpuyleB zTe_O9?AL@^aZz~uI@k`)8|I7^*hRy)=+$u`mQmui#rtyGsHS(18KHa8ma;fBp>k#(otpIQ z*3G)4jy{gvQ5Bo|Kd(g|CAGF1ldFF~)qMIhPQg%Ysr32)98IFo8%%Upk2kKnk})nn2*v5`n7y&Vt*87)BPK#^lNfOlzJRme%gO&bsiQnUa+V^ zZt9A7bx6?@>8on>kW_YVjU1kz3|Q@xN0h>WE^p#lqPa1ot>KVVH`e2g$972DQo!;_ zE)vkA$ZI|%s&9fvfBi-`GSz4M*q6k*n>K-dV-T|sLsNWxv8Mh|#f@Ubi@lrV?LI~WJ?pv#O z#^YV#)O|ChVjiK@CXMD0^8{#-Cc`#F#6K-r{uC&v%`Bc3xz`)3;{vf|#ImZlYTP!X zdq~^9M*0rAdJ$RMs7K5E$o$XL(qra1OgwVRQnvHo_XxwW0{!QUfpon&8aU<)y8=)Z zQRt0+?N{2-VnqhhNv6+Unm&^YXGk_)4Vd8jbGGz~z3xi4y{USyRF|8Q;*TgFXB!qS z;&)O${{S4CXfnd2Zx=BlQMNiYwzQr1w~yN4*ET>;U{xKg$A&Z==aIH9mL8z(4^?*) zzD!^iNh$EL_rLVG`@avq>wcadr3KwW7ctGwc97rVPGQ>|tMMb<;B8Bn(z)1T5%J{4 zO2VVllNA~t*=ux?;^3&O75S-~la9b0+2V`-rbUr=tyEO-zPX)n4zHacwVHLLC=Sap zaYp1r_>Fwt-m`jl@<&UHKcr;MBCcLTa#lA#3VdgkugT5Cgs&<&B2{Jkz5YF6!_way z3nQkySrBr?*vTXyi6J3vZ$vrU()y=MlxAgzF^OSGpxs-gk~vu3u(I&G z#JotYrpf3Z{fN)nL4;NZJ{*ig@X8+)T)7ub()!Ln%IBcE&~A=I2Htiozlj(AWLz>X zi5eL27GS}wlF}oPuihjw@W|13?ec8fs`#RTJ$Rp&-2-qZ20;-BOM2_(U8?{{XwW8(BRQ7a+%z3r6iCEz29D31W^z!28SbA-el?dO!1Y zLmx6ZL=Bq`+-GK?h`RmeH!)c^m~!v%X`*i4(X4D#?ZUw&{psZ0U$GXpYPzPY`Bm~$ z$+xpxbwk)g`@*{3K*Q8&sv4tu8~y#7r<+}x+p7BX z1faZKjG)k(`&vk)mPd*z^3mL~r@38yK3`Ue9fFno`mViNqXDl)b+Fe}?fNy@t{rx3 zVAVELTS(T{8u_U5CW2czWubC}t#7rq9`?C#9fgarVp*Aw6p}k{JGYDSH?>hsZPhjF z^3h2Z^c_dnF%%5k5mqXomy5nF{6>fGEj)4Fo*e~1_&rx0ZvqJkMnWm`7>h0c01dwu zFT?L{>kq4pkC;hfcqHba9}P%%=5ncjEH^b<+0d9`M( zC-!yzpVrxfBXZ-KMIr7V`fS8r%!Tev!#e6r!!kO?I3r+PiP({%9qXOFpKDnE0L%=~ zM=VkppB@JIuL&ajep}qRZTOLJH!*j3v~m|ZE~$ju(Z3~bMe`)Euw0C1kB4!&e%^q> z%jZBTNHSE)ht(W}^W*kyk+lq6bEPCx(&3i_hX~ZI7GH;%irwGDUhbsn-4i7y5i>Jm zNMRh7Z zmj=u;ABgPHggLsY~H&cXh!>5iEPu0~BMUKB{{()-i{N_VHvvs5F$F5E;Gf1cmg+L$y z-gaK__qAiVhC9&;$4$2jw^(is%~lno9@i$UezDuE^?})LUFh3_NYrjfo^+8N8-0Dp z)N#PpNg~~MpaK1+)5j`=ktk@Upo8c8T8Pr&M&0zCoxZIx4Y$7jVd_msk`T4(>20?V zq(_zJbc)g#OyasM+?mU<05uwTg}9wCXfj!}Cd1VI+yP3fbCeQNy7aM#vRq<-02yrylm}uD{Rp?5LP+ zHh{zQ=%-CsvEvlA@>=Es40gWar}qeld>rGkflLwMZUPgUnfFU)JBIzs_^Zn$>}^ zeyRoCT^5E}1q}_%dw)eVI<`WbtCf;y$n8^2?aNv1rm;FdMy&Eb%gXZ&i;AghT=MX? zR?b{-r@tkMuawH_lGC@BBuOy^}`tkBd|P0HtFV#!?ZD;GSZQ{pM}%E$v+{B%pdg3_nn|rH*HK zvEd;IO^nP%-L1lj;qU55CZk9Kkibz{DMXQ1x_r*QEmu=Pk1UbJlqoVR5V8Pn2`KL^ z-QOctpj=H)ul<^`BCN;GSSpWsj;ocHjqE_f{{WcV-=jz5l?Fb_Z_-b%BL@9lG8{)T zj_{;_{Svv=&5tnj(Lw!_rF18ShQYiDr*!RB&{467p!6v7{cTgUDIcdxUeb;~t6fF% zS~yAw<})z>h{&*|{kANNx{Kn}-3z8fc@iKpn0>txaml0_U)f9Y`vwXfci zZx(@JYaY>F&sLu;Rw*Nef{3J$#wBj@7mn#;iZ$YOUx~oF7;BFR#|j51Mz;Falj4C?uW+iqKa)NemHo9f5N+iN2fdzK?{mJ zZ5d+K?=z*>zwta;9W`0RJ6WY+Y=!}|d3%z|-wN*z{;P_Oj(psS9zWP^eBAl1lN9Y7 zSuslDNhk%8%@c9+BH?TJA?)5{p7=qVx(JvYTY z-@J?L=^6*M@(gwn=_c>~>qS=}36qXFBM0bZWVYzv#i@kR*d#?_RMiWO+mQC}FA}$h zP(s`&8d5!LyC3T{+DV5D{{Rigv;|^+>qgali2&z77{7wNKY1_EI1}r)?CaO2*(nOYZn|CCG_PY(S{(6*LUW+NyjhJV~?dFJmr`%%w^-tN^a}n!)YpKPaty%uPqr zy{n80#Ozh=EXRdM{r7ZP!mOm+%sT<_FR;8iZnA_XJ}Xg~fvX|eH!VBM5crpSJG$oN zs>_OYiQzRu4+}SXI{lv|MyBZ5Q6tJ(rK6}KL_NN{qV#xm^H`TRPLPUJ)WXN`-1npX z+@DpobiLi7t3tlgzjsTED}2S~iy{r9)iB}z01TPlL#^1G~r4B;*ok&(A z(CB;q?-q>IEsH4$ke2VE95dP49xuf4#qQ{ClB5H0Ac7BL4^h`)A4t_ksy`x{*{g?} zRAW)-JAbcLn;sV@&QW&%07j~~;xp-u**|5q@TJO(dKPj=>s_tf?4=&^pW01q&&nT2 zjQ;>(ObMQGF~xAFZs0hY|XaEP@vsB18j*^F>|zxt8b*$+=7WoKO)5y)7?)t8S~A zCPqYKhBuaqJzoyif3K=xQ~9$OhL*lgQF z=sKW{>FG2Yc>*!Mg4TMd1HiQ0yS=Ii)}FRH*%JPft<_XMou^+B*w@!V`Ua??n%m~r ztm>M0F(Apyc#R|&@I0YUhDS}n{>|EKte&6LRv1@uxN=Zztg{c)2~6(J|lpvZfK+xLf&>(UHIi8nB$Yc4bFXBsPBD$lf%r&9xhmoe$>pmFAq$eO>46vG5Wol3)V3+F<5>lE0~{H zz+T_8r(9Mfuqa`b3OgqY5U=;YQ-{5;{{R=^x0utIAYf|Jq>ao%gYcwY8E@T4<9E{H zOFU5`j%2e+KxrJ0jgh==kh^g4cUMw%Pv$0(8D%Miv%@OHu?`9143=}I;&*-Z?&t_I zppl!f2^Od7lXj?TKAn6-R{Yy_kNmsS3r9XxUU>nigBef9pKszn+(GsezyZCkL6^=$Wz3?vdfIg{oC_yyT`7f*IuXQ@_teS{2W@tQS8Z- z*&19r+%d9p;Rmx~Pb#SV%j8Icy!jafram-6vrgV|689os#hy!IiFlh(`|Wacfr!dDt2A*5?y=HyKw@JDwF z@wVohs>RbL>Nl^$%F1PcDe+>Yyb(9C72e*z&1B>B=+AQ%4AOtk$hIZ=u{N=AW{{k^ z46K~2hiN4$n=x_2(%89;@flGQ;Vr%GL!CY!GE$~usBKb`xw34E?=`5(^Lsox;m%f^p>I`=X$Q|}_~$21+@IP|aluN&a>nB=6LMutrb(q`87#ZAv=m7> zKf0SCE%}D#cyH77uClnXELf)(9z1tvsdiU)H!5<~5;aS8zO_ED_iLjNrEeSgmZZO8~2c)R3hAwTZnilbH#gPwwG2)N$ z6YKEnVcV$Xo;cqC&n7%2mael#E;HTP%aN~%SJ=~J^yBjRTvYri51l59v2XqAZ!WR3 z<%(=_8plZh2_m-1U|Flnzr71Rw_B&_eJL6>$fC34C0WO4gBu+WG31rEd7a%w)%xuZ zRdP-i3~Wk7^tYcgF7&Mp*G)IwMfYiQ>lK)-2RE4O*vzi{+5N6%FS)hUI+Kt3!8FwN zTXG-K8l!6(8G4fBw>N>}x@)H>*nNaD+qF$&5peq3lHThqC7-q!2- zHBD1g)jYNQt-Cd|UAnKI&7wPXQ?0&zQ(e0?wCaOl)o5CtfOH|`NU^iDNhzhTDxjV5 z*SsVUy2!V2?_0yFS=r|#XxyNEEv@zddbaC+tzR+h{*6!#gR@lD_hzZtO>Ng`*KWIY zwC(g$UApbpXs?sat-7aR&}C~`O+g-=7A;mLr0Zo)sH^&Q{_SlfYq!a>v+{Q7Qh5T% z{1K=xBY$@cL8Nc9p)NFwA`@*v?+)Qs-dR6}%YLb<*Im9(r(L=cV4hn7a)S&?G5F2~-~FDkE5 zc%>ZHc%70Ucx1XB7mte8zjJ#_iJOp^)5%*)F=&|kITo#jyNN2JXl2TZWbR}@#T*Yc zxiFfy+GW=>7d3L?LBX6TK>q;n$Zh*l$EFj;F(O^s<2A_4J7kk1AK}aF^AmGZ!_!&} z%zTZsnxfXFm!zm5Wl<=+1zopLWnN#J;q^z;6N?Z=hVaKv6KXaKY z`&u~NKN>EdfKJ5Od(*u*gn#ATZmXA&Y3KwX{{W2W@=&?-s??vZ`lL#+4@(=H^bOV0 zw6Z*#%XgRsJ-j|`3GmSvGYHkds)i@L-MhNVi#&v-vY9;ZcI6Na=DYCX?r&%j6Hw%_ zjvDP7pAI5>w%xwn%}&zW_Rn-wJVkmC&SX&5%+hVYDxvX=&pB0KmFQ zF~cD(X(5R7d55n+N08#A_L_X@wqh~rafSFYptYj+KQ3y(zns+6g; zE7XBq)w{iK4c+a3ruB?mg^39?(465*5Peq#nUk5pC!`ioZ5==ZRWhPwa)i9 zZn9(PqaHjSe1<%AsZbkii5!(zNcor9V*9(gmU&Q_9j_5dkS=@(O54f?*7)ASq%|EB=+nYIg(-(#|j*dVwo*H?oj=UuF}hZvB?>zVIe5Wd^D!R z?6#uHQAd{LbLq5h>51b#o`5{sxAdP+uThU>^e3Dz!rB?T7g-FYs9``Z6efqZhi$uj zpEr;J{{TpdWI^6}B|ieYFsI27@s2>O&p{TiH=QOWKYG&hEr>PB$p%TP1Tx6@s(Cwd}kKl8*Ps+N^VH3 zdm~NAo9`}tS3?I0470j1pzKu&Z<0prjy3T%v2&+{$%!Ni!f5xDRBYy`-;dt5-A0m< zWF*Kb*}3L#R^8tu?~7;!foU8Ps-RmMDvmdO=k^ygf6D*-azLp=29q4QcM5+S1JnSuA8SwJSy( zCWm#jF*227&kMaBHzXbQhv^(~cXWCNR`dl~@STNkhw*UV(>5jBtN57Kw{u4;pg{Rp z?rLCAL&ker%edpG-S@8C(&b`eO)N4E*Hsih)3C1#uXVK?+3Pn21B-IAN=+Q)D8yZo7 z2A`PdjFnL8X>uB?4-gzn?zWaZh{8u9DvTPt!-ZeN%=|yIp%+ZFuWQQ2iyGF_&b&pt zwl8~0lh8*qsKf}9oIv@cJaEW(VQ>ArkGtTLakVE$h`Lw|ki{srSeCyV5?Igv-Tvv) z=;VdB8(Vyve4U?8t4(d!tI0vCYMR-g2Wd1Oy)t975`w!_sAa93$gca??^`ck_O@z+ zX0{D-r$ux|zB=!Ma z7_ry}6{%Dt3V#u|bgRE0W4vy)Pu;2^5UK@OlRyWZnU4q>VbXebW_Gt5kCBZ*a{ zZeRJFgBnS4TK@nGnZ>C@Vc^TfepXg2^b*47YOIS^R*qHQhE%#KlYzC5{JGJ|i>LLL zd7+R1P9Q_f>PU*)3Q()!cVm`oI9FL+8?59Y$ikRLu6XB-*PD+j!yfxe(e6sIrM%S8 z$1%^3Gog6XA{K$ zNf7o_SM#?PwwnDqFAFTHJm^CK`PW;uub^sZ@+FBTjTz#0a2h!jT#_RV6rYhqEt}%5(yM5&%N+5xwQCOuIi2LXh`_6%P?U4?2nBxVZ!{`ZnEC(wy(3Iw5@w? z+x>bgpMi@ykxlqe{{T(8Y_H`RTN+>q7*er(c`3HUzv5!EcV0H-{{Rn5lLjt9N3P32 zp#-Ff#oCUny6YWIU{^Wvmm0^V$rMPh8f^XJNb-JA>oIQhzN;cbn!afA4I;(P_h;S3 z$^QTXPad)|@#xu2NFZ8+S>+-a6Y9wKx3Id!>CqadGRGKiO{acOrboU;_q3UGpvcI} zn0mv{D=GUrixUABZl#|5oOs;PYfI#sVmG-M@rIIHeaRjiaTRf(sak^S@JVtm>lxa7lg(w=DM9hh1HF`SF%m{uSHr zsIjnBR~9(cVF|Tt19Hl2w%v5xj)M<6c;uQgZU96kPFiF=-Lb^m&u;dyx;`)5;zke? z+Q+s@TiTKCeP#6?oa+`uT(yarLjYbxjP5qZYBuhP%If)!eG#~ce#{EGY_?~YAgvl{ zq-h%8IKEbE6YT31F{N3UOR0H?Q)L4C~ByC@rkro1- zq9{~M{{UWTeieVaM)$NJf+gy>*$GscnIaL_WRd3ithesoBx|@hw49vi7HEypl}6kn zve|2O2L}fFcXZgjdJ&75v9qHqT@2Q#VsYi}zk8DV`so2q^Gghb`dOAqWc{xr9MOC% zLI~}+$j5>h;`~V)y1!dRaiEBG!nI&Yc(5a3xQyS8n=1YqZl|)GQ*|Mj?~=>$9%$9g z6kTFlXDT84q}|px^7l+rK79DgCQmGYVv1AElWT7L#zpo)7ZtnuNpXJQi&POyZQL=s z_gOeubOOZYGg`DL2w!mS7Baa*ePogYTFYP#9y)v2`lw&+J9H!sduQiJ%9vs zvKD+yh-6+UrRB0mlNYv^>y7g+h+p6li^=i73POhu+ok@ck z!rd$dK#$_u3mgw^e&SZ%`^`z4)#T~xK15Xcj$#QYMN(vSYq^WX9K3$kpq64?%JGpx z;1a1RAH_hjeQze+SIF7Sx7zWbQfLc1tZTRHU8Y=NT-;VOW1mYX_>lhqjUCDFTdA=f zi08=;ZYtVMWL6222&W6Qd;ay>9Ld%=a${)R$yETa#D$vguO7NrUc61y%a~?pjmpZW znm9joR&Nq%I^RmjSu(LoNV5h7q=kH>wBRI7qM9I-L{89!CGUrB{FJj%l7mPpFDXKm>uwP^J4 z>0yp(aq-?l64eUap&vKqZE?KwzTy_$NYT5^sNiRK`NqidahSwQ(%~LN3v?IAI3!fH z_*r!L(ail(RuexiLSuVF^4Kg%@a1UtS?x|1)RE`oJPj7>3aML#J{?!Fx3{k0(wx|i z9IZ=bMxs4?DLi|h^E7Aa(g#=A=`gmm*e|Bz`}?n^#=yhGSLcXu?HSkOo@VP@s4j#>shPO%N^o7>^ktr~}lDB4C) zZ49bykSBgtPV(KP$HZ98z{;(4pe+J225Xy(dqwi$l_C#ekQFOZZ3oB8yT5L(aoMu0 zc4}atCF@|O&8@PUMyU$65~_DgD79Ubcb8ITxCbCi8ZgF!#o_mF@oM-Kjh`Ca(M-e&&~1(TTf?C|o_02kwt#n}v^TH3+s&vY0*@ofQ|SYT z$Z~RV&PH<@CFBG_>@M@PjoxcCRk5(zGDsn#yw}3l+RECcPs*vJk;2Vt`&@^;O8b`S zWr@S10La6zgWj&PaXL&Yxd9^*np%Tp?UgYerdZO?i7yVZvAWF2*zv~i5k=i&TW$;Y zttRtv@aRv29E;2#%XkWmKX^9Z%%_KsSCpev8<%BhYA&Z2*4Euf4J-%e`&NGg)c^+^Z`n0>2XcIdZ07LaP-m=^H<1PC1f`WGVu&+xxhZz3%h3aWq-7TwV;131)$&kajSTIUhyTriv7mTy}#SRBM+k(PD%S3sbOu_LkP-!HaZ$ovo40Dj0D{8hCfk?3m+i9e7J(R% zf#w2lH`vsjLTJ+*G-|A>_gqx{?2o#km3K7^IPwV!7A#k28$4Z=(Q43a0D8ST2XCiu zZ|Br-W3X2W%vps%6!dqS!n%SpKR1~4P*e&xX_TnqSd!*jzY^VYF~9_N`PlnT+)T~h z*E0l19zDepNkblEFAz&O6T(}My1Ij`BnD|YZ;vzx+gv!hI~%;QP8ExHBfDQU)utI) zU=pei!i(90A7}TC@moQC8#RlJ+fcNQSIos%bRV^LsgSZN4jG~>Dm=?Fr+?bFdqm^N zvH{y^?D}=HO+Q4C;$lXvkC&NBt)`90$5XOwsJNC+412z=m#B2Y=b}o=I*Q1}-5BmK zROYwDYg_)ZKfC38R8-~b{THZ0vdm#=kh=E9tPzY-uJu)&THCl9{T!^k$#5b)mpFR= z0CyXMBmG@Ady(Rd}3g%`uB5&#{VNGDMy4kUs}pSI`jV#jZJ z__90^`%S2#l^uGitKh1w91a&}4Z(tVB)|MU{U!zyUzZ@QJE}Xj}jlGAoFXeQug66b4y*t)BiU`! zs>_tMJSt)ZjXWxw$525$i4>VcuPsHA3aNTaCDL+*yj;JD?(2LEymU}4jklFY?qg-& zx5Iw-y{>*6^CRpdv4I_{Bz#JJ?KIsua@~z&g-xp#DwuL(B0PWYW6f$6*brZ(8G#RY?S6c(5jvryi#!cx;Qbpi55GZm(ts@NA6R3 z$A?EAb+SYQU^N7HS$&;Q8WZQxjd)jJ(dCPzAlg2GR%7g_(SeOjbQSc1E>og>Bsb_f zsPpa8K^&fc8i(#l+Mj1%KhiRzLy*JfaVI7#iQ>qKpK?5u{7=Kl_xH6U z;Y}VwMI>@PjvH_t=CpZ+m?5_DMzqi{?cN>jBaYRUGCrHMN%i?Fs%dljdl)j~V(RKE zQbieEIAo4NyCQeAxgAZ@2Ps;~BYUj`cY|BFuiZ!1H(2RYMK(qjS}IQ&1P*7zcwPSh zcEytP(qy128lb7|R#R+|x3rJCet+dwDs&?sVSf_}S z6v?sBk-cxFTk#`p$I%&B#~^v+#UP(~vEJDe>ffs#VHBPjfsFpR)zGrY4~2pLt!)H( zJ$gE$v(wP6LH!z_QolnGbxq^>{{W|MsFE-rnCs!Xnt6yLM1@uZvW@=zZ$#AfZPg@J zA4nry^33mAin%Jj;&AGokI1i+W~t}Y-ADPOGAUuln8%HV)#Ywdxp`KKPR{o%F~7rA zORQ$sFQVmRPhk7Fh`0~#jT`lK7gNQU;&n(?!78Oy<0j*cl@`u)UF6>8Li_PHp>DU4 z3Uw?+aTy@Ih>t-dd?4)-$!_)j4L9=_OiXF#$_fr#VO+3LMP6vThr^+V)#2vGt$Hve zUN;?*Lo#p0C%D?q=@=7Dor{PeUS>lnD=RNDSj?!Y%n`=XY_*>4R(VNZ411&PakjkQ zoYPb_uCjs}ZdB8@&_(O{(?WbY<47rNkQ)!HVBK%5x(|_01{824Gy=Gzvky(f(Y9jO~Md)rk{#N@a|~m%H^dnBr2z}H4J5z&+nu+N$%+3 z;*&mD{5Y4G{{Ufled$>fLnHZ|l*70>VWU>!IA1Pd_nypA+X{Pn5aBN(G3JN_AF4L% zd^`KhbQ1*(i7x4g3jV8ZyndB!GhxnLHxc>lyYis8EMnIY% zXu)b34}xf0;za(-uB>J>KAmFW`SP>jT6#oxWH;hj*n;5m_l=wd7J*@$VV#XBN9B80@aGC|y)93VlonhyKLt^J9_n=6ul|NiAqI>`` zrjmwRn%B0Q+=jKpF8$YaxmQCQI|;ge8yd-x6Z647JgF(q+xyuS)7{WG)GH#^IYNmB z-WdmWO;;1CK`;Y?TvY@A03oAv(fGE>NY}iMhl=h+A$&c(wua=x&kC1??5J45- zYBv0ChlcIt*U9Gp0Mv9$;T+!OS}t$9zOALh$41D_lvN;3Dt_`tJFvn(dj9}c?Q`ap zGC!DEKtiIiV8-Uwl@Y%a+kcBUvlfR;!D4dfxr~jx``>$;Gk2ta!}hp$7el2^K0Z27 z6SPYmY0UTgvaX*89$0b85?wCudG2Q7W#Qu8;nbZ+q0FXo!DN~3 z5<6pN$CQxcWTz4s;!!HP@Xe0y{{Rvf`nIjSqcYbH@CHxzB_0s7Y3Us*+T&ob-7-V>%iQBzC zNq%G9zspq*YQQEG^kvej_DUZ5>v|(Cb|m_35n~ zQ%j1>T?B3x>G6w}Xk>=#oi63NYpI3W4lXNK>&>pO%}!)-=9z6iZgg?UdRJ!^+Lt0U z5hI=-U!B^UE`0@WH)g7SpCt#AZm#nm>(<@BMw&t@5m|`zg%@dhj#v`qPA@FNwu8eI zcW@#u?u@GM6EfP|r{&x$a`PbKy(ok)9S* zAQ=NK%C37YjkoV^4S$}A9wIiJdy6O1kN2zYZ+kisbaIjqp`J$uiCz@t?zb_!*Klh2 zXJ`WOCONf7rboW!k(J!xYqgc>>%W8wDW__gp0Q7nstjw^(w3iKct%I#T z&Z~zuHcVa_(8m7&^C8^*O?-Zy82M%pWrkCTr70L6sbe!3Q2RJA=MqfmZ& zQ$Q^6iuQsIppHNeEwr0_WZ05gd7*}l8+UHHhl z&dBI^O*c!3tmyH;7(}dsY>3)twGm;G?}dHQwbAHL1BX@s)Ed&F;2Y4^_jO8ZuAt6hTAqRZZCM z?Mpx6$=$z8i7Kr9MP!X(k*XGGhu#?(e(xeBTUq#D?=;L&mmQ^Cg9CyYF8=_ki+Afu z45_=lsrq(Ps|0eY@&H4p95MzyjALZGPNn1E~rS zRNPpd-@jH)UH#{4S4MuF9Iqp@h@rar#v9_}O;0^7etUQKwTq9A<$8b)Vv5k$D+RqB z_#;T%T_bUL6IhV-b&c?)mXbV0f`e(cDQ=@DG5+pe8?}jzWVu#}F>#2rUamQ~sVt7l zx5M#c=6kxvNTX;zRLLhWICL)_;|R)bJ+HaU;k$!KTQXsrj8<6XEmlJ7eKz*5azt&% zPAwefjy`0}&n&WvERIdDBv7YuzN&b2BzdnNAhQw(wl!A#HCDTG+50-@^beUaDG{@q zt-0A&7^CKKGOIN`jW0{a>e4J}vzHGg7@qlS6v)oq=Hk{*P{e^Ed2${#@4Boi1|t9UBC(|5AT*`|jHRpUklch0>474Rkstm++ITX@)(*x7EftM>`QLyzM{Z@ zTO9JL5mQ@9x=p>i$~17Rd|a~e6T}j>^5piDy8Y$Qz=p@h$Oz99#v}~e0?;?r)FY~h z*DBF?j8R8~Q_R-!Tf3-wEC&2z zw~Or{F<$b<&AZIin80JqdraVo5BQRCeOA%S#I$4(19{R=I|R1(*SRY1FSVxWeL^;a zCmOGhAYp$gk9I}fl~PNtSN&Z{(efi)idFI0lA?s~+w6Ga{5SSA8Adok+~xNB&s+4F z10R{yzv=ar#fGDKbGI-RIM>$|#B#?yjwbVdI*4@(d zx5SEmpt$bJ@(Wv^Ah@?TiEVPfXG0k!noL<>NN2~AjE`vh#5BG+Vv^^IRo?o#$i)t1 znR3n!E1v39M$)M9zv4f!ZkG;B7$j6sh3pFLK}*@wdgkKPQ{WbC9EKNQ>o4!d z>%h&tygJ9ZOYgZL5)Gkum>&}HYB=R<(nh3mjf9doBpxpd_q8`!c!9=Ob@&J4gipMm zlt(Kf-Y!kaC9AsHk0&c3`kJzbjhc##r+FIG5pV?VU;1KbCP4XysaD z;2;Tm0c=@#-eky59EALMcfR&D*UWX~`Oc{~#L3CIm6^}sC8u*554y*Pg;ji7csgWU zzG(%?C7F+OGq&}s-Azn$q>4-%gfnjjTC)XMq_e!zTf3}|sOxj%r^8P>N>48yA@531 zYAh)Y^NPIh=Xs<&%!fYot*)c|(a;%_s&wfh#m6z5OvWXaOrwaPm(k`@+YLt=|>+xyJ|Wlim)cx}+y zDXBWAT2_3B{{ZdekG)^i;?m>13m7YVg4Z&R#RlEVvv+(to;Z+3 ztd7h8+1PX^a6?Z=`UL_;KF+0Os|dh|TBP18VH6+g& zvUr{-T>5Bab7vK;Zyu^U9wcwkyP}7&fgh(zPa1AG^f1}|JX$Klb%hV-*UHFhVyG4H z)}N`b=-0_u7F=1S_?6;G0=PoH!*I5jEd|m>D8iJzJIVB~5@}rsWN}b?c4*B4Z?4_l zhMn(wXLG%-WMmX=<)>v1tf^86U`Lp#xpZQeb0K!J`H1nSuzy!cJ0q+z5)sOftVeB+ z-ttsax6Ud*IP>e9)Dfe_9A*ZvsPR%u)cc=jO__(4l^z_x#!g&glJwvu#oU<}yUw$9 zwUHdt!45Rhno1c$f;W;)&MRb9ZQboBQp%0QJw*|oHC^S(rJ~h6gDpH(+RCi@IFdy8 z`5{XxGX@N!iILM|6z{KhTLGr12GOnKO;C0Z_UfLGCf_E{B?-}2Q0Ty`D+-1OiCIr= zMxp8a+xk{Kf@q?8w2D{mVCMJnVsD8WzrU)I<8oJ^Dh&Z;CI zrY3LM)g+si-iZNE+f~(Kbd%j+evNM}KQ@lRs*$Ss^-^`Wv(KtXfRpDN5A8C`ci1^b^BUuTzu(f#mOlFY1-*=`HZpi z@$xv$w{S`Ct7{WK`9d)UT-gE{V=@sO@uIVp%f9Q~h1ShpVoANI{{Wae8_&`5a~7`H zl5(zbvPkEL{+;HH#jSi?&udsI()z<@<-AU1gDxfIE;y}|Wc;@(vh(*b*=>>c_pDac zlE`Mrk=|*gB8Ew1H_Ivd+$-HnS6h7A`QE1;K@^4tB#4vRrxrw=_U`a#boLVDW5|r~ zsNZxe_mN!3dK-6>!NaDI?u)~)WqZg^hwE1b+?ZwKK zQ+71T9}TBX_$Kyl*UVwcvlM+QOI=_Kpj5AEXyP7|S>!LbGOOcb!CS-yTeuz_> zFWR$Gbey%q#l)Nin8nO_3W6DuHgc%9+ilu1NXm;|@c;_;3Y{2Tnl=SqIS|p~kxkJ} zAGI5Ot{o>%{%T=`oHs? zbFgzHA&bF~#cDtLX}Os8c$Uo*jzaY;8suWgM}0>8Z~QEj_)@R6cX4%{nU5PJd0k3J zRwru<6L5N=c6jvDbYGV+^nlp0oP}mpnnewlml~m4=ZS2_TlaqRQvU!he=>DPlc&KF zWk`@lu}LYu#fDj9;D$5tE#hyhp#~&N1UD86f`F6S?c#UhcWyTFkWEjZZPzd@yFX5% zi9ov_r=WA|l16n?^+t?GhDVJJJq+rt`nqh{h*)CT7(JUeZ~n?^PJz=NNMe95%)Ddb zZ*V~o{p_EKC*Y?J{=d`k;W-&;wBli{S1g+qtj*02lKDX7gSt zhFZkY^1?Oi&P7*`nQ-Dx?{h`hsr2`!5soI2*V&Te6~9>*QsZ?5hIx`DnmHo57D&r- zrBfT-WU!ttB(=5vsr*P)1NqhC9I*@g45@ryTJ0RTL~i_+jc<@Gtj4$cTg|(rTugbgRTQ(bLd*p> zrIDm?vG|#u?Ht7$)5`3_&<5h6`Vn=B7BsQGQpmxrU`USB%#635=C;WETI|`ay4$O^ zTzgNP>zNa?V^9GcWl_QNo1I-=@2je0%8zd3Z6W1kx48Y?6M^$xJ&4)z z*$;2i%bS}Xq`=O}Ih_-#&ZTmlRa+k@fPpfsq1nC&)1jAWW; zJMv23c`Ki5y1m5QU3tO$`q^L2t+o9pR0Y3D*Asq|rUbPuZqj_?T{&kJN5n{E_Z>NU z>pgF*$;-v*$rdECx2GSN&rcDx;@$5%>pQOG#9)&;Rgob*sS==y1(W#9i+sKYYjsdH z*mbvWplMcVIVgCVm8a44=zwkmu=Z4WwO=-?q7Pxzxva{t!?SM_eINJU(G@8Z0=BPh z7+bvB`Du1b2g7mnaJRbayt=6x>>62^RnQQp(OxQjJ}q4%1Yb!s)o~$ti+6yvf9A<; z->s_UPOvH3RuOZ5&68*9>wS5=$pbUaON6?L&tTZrad6$IhZaF32*p*=Y*!v<5%+a; zM&F~e?CX3igY2Det1tA8QDk4B?EbxOk@=67hp_pM&~#*E`FT5ekg<)c^*3AW>*38D zvcUbHNn3VJlUH0X4F6!*bs)WB5*C+-w(sRyteT7bn!QL8A$q7Rg?9!7Y%Jr{O`b&8~m@| z%D&ITyNR`rGZOBy0Hw`INeNbs&$OSdrs<3xNhL*!2Bkw3G=O_A9CqH#;MY*-D=hQn z*j0ucKBCRoh&1FX$Ilq^;g5C9UVwRc`Y)F>g>N0E?FOnEBSHp@oSgT zaz->o(oi1eXkB(Rn2%lFVlxJb_b=XEVXG)yM#pS=6R-eoUA~<`e9bGlb`w`=wL->x zJBzub#B7P717vm;F`r>CTciH%{;sj($v-dz!K0Ge8q(KEm3I#2^m2D~HX@SP@;XZ_ zcT<=ntz*BnZXdF`#mwl*7tXAa&yQ*fi%n}kc_X&vdz*Vw^u9|dCQ@G>Lwc7a$s~Ny zX=HZsZfIc~G&#VEOjeh~J7qgrx#xyeyW3seELe4y%wi_C1KwFr-FuJ4sXCG$hK(d~ z?b;ZhjUx}k;pN7>R&RH;9Q{|6j;&Q@V1>Ph{p^0rYaTop<93{|j=LjJqT<_}Udk@M zZ$48rya=eY0`J3uFBAFMx4y2i^RxC!%;Lq`BU^SxJaW0?_P19{KUk=Yiw$HQiktJShaxgfbLiy$GknkDK4QxDmJP)Fws=G=XKunKmh4F0_v0_Nym*xu?m< zR9PJaX&hvb0Izwx?9Hy3o0iEYF^iZjuE{O6sk)WphoWEpm zGx2wHQZvmo0ZZ>($71Y0z8wHjs+xw;M!CQMk+P>rHVB=hhO{sef~U9q#_sRB+C}P1EhQu& zX^e_niIJ&o9Pw{)>Hh%JQaGZF(&if^aoZYOy}RC*#k;41M6||eSTJR;gBoIrr{QXlO5I{9d4c<|oen8uDFEd_q|9(D2KO>f%M zNt^t>(e#iv@>+W35Puq2f!KR!A zADe+EizIIZX5|rA7ueVDd%9yG3J}neXax_X>!I1qc zJyadjO-IuDgBTb)5hD+V!OsbQ!+q;__jUf3eA2gu7*~1yrr=)tY4PL1 zi=$%9rCxcmV|mWq+%UF@W?^F8I(M^L4C5j=vvat80~YZCw($dN0^-YI1G z)5v}4A6+68!bOiVY>4tBiJCQ-a{22fO^sQ(a`^mu%+AMOk;r_^pOnbQ7N|vKiaX(5 z*dk`A(d1sj#v5(-G%hbcWa)-H%HQxUY(gLRMIT6+M^D-n+%FXHP1scJhg=XV)1Y zbba031e&p#hbm<|KxO->d5gQ}<+h5Sqer8XUP-6rMG~Fnh=C_1JqgU*yYS=EWXURw z^8Cpj(#cv{B8_T3980*G7iC2>V{1eaqF41ih*`9_`EeXVb|5t6pJpjnbMrN=q9rPz zjkgd1`&#E=NQNHPggC1EQ0?sg7ueFv8Ll+OyF09V%j`+s_O(H@=;PDiF+8GsHj=!v z?2;Rop(H1Sa>!%dW4r$VDY$)|2Z5S+lmf`xTx{NWoADRD%Wtcxp~qlvAejiLQQcy_ z=6%#f`&x#10J>YEkXLF*cR7~oS*4NF6{A4PhJ~4SS$7gB_IS1PGS%aq$wX$mV;duY zGy1sh*Ey%<4?#w!2l>3MVhdz5AO@RstMEVN_VP*PM{3*Y%`loOG`*i3*CU#P^^jo!?)#Pka zcTHrE{{X%x<^Tpk`Mx{a_37FJOZM5^yTk`}?)5ePZaY)PhUFgk<6nD0@sdZd)ntfV zRQt>OJ?%r$x|xtBJ;oHUg*4)5_FYv6?)#qZf;eL%3aSO(BgMVKzSC$$Mvg<+t|(1B zCxx{ZFKUy_ap?=dKC|j}OC}Pi5-T}Xs`tAHkoR;XkEG(kGw&lhoxZeQ1#f26eM^gx z1SB{Nr3(gDQ+hD3v^9;?`f))#WhaX5fYee*o}Jkcv}aQ1e4G)(8rF>~J1^5{2>$2m zX&~wn#`u8V@x>cQe$B;p4ZRxiS)m-P&C;bbHxkDgyv~PtzE(~d6Y!gTbj0Px0*ac3 z1pAjS#QK+MaxtA{iT0~0s5gMh8nItx-?LY3-q*)J{eCPYm_e0x3p-2j&VPbeuew|A5 zD#m1T;ZW2H{{UCD;?>7uj?#7y)1>BP#d1_yvIVVtY`k9W+ANNXd8=<$wCwck*T9NN zJz!d=>q%~=#XPu7k&u8@jl+69?TWk0tX{N(dmdP4D&Arb%Vk9V(%%07XHw+!7J*YM z{-O+!#w*6^W<|^1S?%1FI3`R~ z!(R4_$0^K>jan>*-Y3q`%s%bChF)H_G#Dy-BVo>$>(h0AGU+1C$xN8yCHX=ym0~Tr zMLW(HyR$$@#$KCH9T?T21k;-fc9@sH6L)wuECAg$STMq(hURYm-r_F%KC=G+mzkOH z;fgGnK_rODCMl6F;Yl9Z6+Q1PnVFI-IPj@?By&Yo98AYXADI6DO6W(0UQSf`L-&&H zSuwF&xeD7XtGz9&xv08#LoAr>AXs34Em`GjR>prkj{J9NayrHV#K4rZ447pZ5vwt| zj!dy#%V%xwYh4$&rdT71Umj54;S+^|X<7oTrB`ExFl7GyY>Ci2nej zR!@krqFWO*R&enyh9^tu4;C_Ttx_<3qP1qb#Lsi<;&hfH)jDhZ-%ZSj4)Pe}AD}Xw zTG@vk{5cUkf6_&tt*&MpjFs_5Ll3kL%^Tuj^bmg4bg)7tY3ACPk)`u7{uD{s8S%+v zY2w#AHzF>L6Lv!y42+6@7FHu3CiW0XZ;Mm)DCL@5iISNU%)^0xBYY@UIG4r4ceSj) zo5WmMA$Z;;t;MmYUTz$+_-2tV<|lVkW@iAHu_HXBf<=ID)dkn?_buMi_0F>!409vR zfzzf?L=m~ZADjK;_Mf=>xHww()%_AwOsI`a4MmF~N8m}b;J@x=UEBWicTz;k@Z>_) z%>;tkB7Y32`!appy~fhyM8_L3e(xeG2UG3$W{bxZo2{vOenO@{UcwipwXumCvcuxU z%pVR!{3$nEgI_j?#wh_=qOA?eZT|q76Yl$3OwZ-?RL+vCm5n>{(p0y0a#wZb$A0vG z8Kd3PO+wch!f$8Inp@&)w^5WE)Z*5R`nGh!&bJsIr%vFm=Gq*%u7;y5rP_7 z9lR-{)38BwC$vX>D1W`DF}>YO)3as` zEG`x|U{J`UT~_=%`@5~b;nhH>^=h7fM!ATlDGuABB@gQC{VT23T&3{Ixc>l}MBHzz ztEG)gW8|p}sUWqg4(UeVlj^pD=ST`EsEq}yUlWek_I#UlLqaRqbXG_sd$ti^+g~@) zuk_F5ayq9@fZHI;sEZr;QFSHXk(d7fZDj8sk6-642;^6rK&7itJ|^pL@Mz@DZCFD* zo{$t?#-8Zc`u=RPVrH@<$g8$yRFvtPD6fmU)f!6G|oK@D^vZN zTNXnm+rv8r9vcnY-n~hI(Qy|hYRH9qqt`--c-qLXyqqa2{o zki#nwee`yXz2$9uv5n!$J46`*NTeg!Nl4~>O-%fexf{0=c7-R!tQ=<>eo_(n>{i$M z1|*^`j~-O{SyO>ll4p^*NoNa73`ne>haJf*o5-uFF!5qCVZ#3)`ch{f)>~A^&YgWyDo8&~5%pDkS;wqAXZvfdxN6_s z&ZK_0T>|(MA9dqD+SOa9WYg*&?dyLJEFbQx`z@feMUbFZVaI)+qPmg@Vh$5xyo_VG z)6A~C3EtCXWaY&nbXB5&pjvCQdcE%Us3lT;3syg=cE8Hv%Hzb~M!%*_zpJX{&XBKy z0df5D$^DeqF(MBj@5*m)*X;VMt8229{MxRo=hn?^&^~Q!?bgw)l+aK}U!>?La<>{N zElQt4*R{Q!QuaTeTg0EF>b`wk0jF(rLv3F{)KMf7eEhdOClM(!*~c_gDZL+ud8FX6 zwFgk@k-tpqCb!LwqB$f$+mDlvy$$&h@4Rvbcprtemx%{g!pMs{;Wj>V1Y~l&wq}fNxUMGAx37aZd zQyzeQ<}{PQ)@3J(*xJ_Md-S}FYr31r(X2NWj@1=x)^}BvF?~#&)_ukCX%i+Hv-+XN za^+7gu4Z0CK`1u#{CrDYqi?-tMrz zSC|m95Cs$OpPTnla}COor*~6h;`IECyi{e5V+$gvb+$&vQtYiIo2wmrQWyh^drf|vMFg4YOWo_54$B-{w)lg(yf|C`*&kr^l|?H z_t`tm?CUQx5;a(IG8x438YR3U&itom3hu9qN0l>84mCx`bxR%EDi5{dw^Nd&GR77= zL1M~ZjY93-*ZQ_>Gvma-L>0)0p%G6H*56XNOIbmm`t^EhXhiJ{Z+^N3yzRozWRcBPHZrw=wvHr{-QFEExvS60n1F9aNYHl?UB=`q_T9I% zFgdHsSLPy-aE+_F&`ZX?>s-1<>LpfD9U>qb3zP9Z*(~9^+qY3;V!)+w36}Xr?bNj< zw0;tP8vZl;I(dZakd!XVle*Vac*5(l-wZ6e`G~_z#ECK;wpv)xnfy)RMd6QG9T~Qm zh0vck4Off)T%y|PGgxmRy@#!M*YxWWoF)kA>lTeoh|#jFD;o(s&wbTZ^`*b9rI#T- zGEE9Bi?M>Ug(ALxt*Atjb7Ev_Ia)G;ZCl5^-d#bEz_%`Sr~_%JD@FIU6nTp-EU}}W zR>CEWk$sadhq6T*+KwoZWR5oH!j5RAN8ywI0Mp3Vdr7Wtdz^_*-R+1yQN_Tk`r4v^ zqtFF4bgUE}%AE{MGko&^t7g!lzY*Jo6<5WihCSF}P^w9wpcK>MyCkUF2v!7x;ui3? zheM~~WJLsc>Aw>*30-@T#>zWn`)%&%F{Dv|4G5*a&(o;HFiFgGAp@ zkY6)Blu0|*(9$_EVq?U=hXS`Ycm5nc){YF+IS^!8GRvhD_nT@%>iQMHjubi8Umi^B+BQkYvpA!wB3)ZPlmyyiKN(1_g%| zr(v(0_gmgwNDpa^59lO$DNfTs2WhXEds;z}6U0nlsF6yOLVQ|!`cG%3o7#`uU+U7} zhvnQZb5I)I>PP%ZKUH+oL0oR0T9RZlUn7y*3>SEOPr8~I_-P(AUM3(j9}~#?(l)7^ znU0OyZ9})&OSM?!k?FLU;6JCabid4<3Mk(qMOj`UMH2!pS5f=#;lAvi_K4aTY+ywQ z_E}F3mK;@S7IkMZps7L+5b&hF)}whLc%xYWCQ1TWjf$#2Yg;w8g}pk8S(qX!%1a)= z0_)`^U-J1TAd&33QtG^y9vRF^&aB^Z_IPz3H&n^%YO$$B6UPog3c{BzOGnLWueB!j z`s!YliunCg0%*=Z&1Lg(aurD3`G`48lg$rm&kKB8H}|x-eQ%}DpDbz=W%TPFIe;H{ z@JjK^jW_QTdONp~wIuNL=(=V+YF+YroXct`+sruF#hI=4<&RmCOOQI(S!G!y$dy_t z9;7P#mFgB8Xn0jIZ{;uEHuc)ZZ21}cgyg=TLAmRonX?`a^M0UVLswr>F< zkBb_6GA$-gud2jL1>Im&gI{PJeAYJnPN5}*nu_3k*$43Ci@4q$&3v9RPYzH7^5u+; zgNc?^x;EC$VRY<38zJ)6L{e#9T0D)n=+Q`VPB9w{nOlgb)&*WqsiB99R(7M!A>xus zZ#nh{;U{%Gs{Lm#Bc|g%0ER56g9N>$XObzWRb+@;%Rdp3U&XFY24Zy;rCL>5T6?R_ z-bwE9M%ss_F&w-Yax;*5`I6a-yY8jUsZX011~~gW(#X?(#7nGrdNxeB*?mGrj#Rvu zT`e-tEXwTG@{xEEcer$4`IcA{1~_fBlrmnU?@Z8yjyz;V@9*2isdBmz7`-2-qv9t} zZLC^a9I0@j@8n4r!^e_OhmRM=efLGwSQtsm$AJWKuWb}~k9oVy-Y+7VzAj{d^0CzK zAL2-V3Lk9ocQkTy3KQMZkokJ;1BVF5v6 zsKr72%5Bj#j#hDOr6^Q-VP9oGUyD-U%Nt~5Ld=j;ya#r6?sC_?_>1jmb&RQb`FRV( zI8kf&F)w!B{*$Lh{G#aXeJU2!-D19Rb-G@o(&fj^A*4woiS1xfnk&^?yDgWZJ*}r+ zvl)RnS~-_%dJ$v%OS`t}Y^8?C?ztm#b1I#Rg^hlnXNO-d8DTbE8L$xT-d6P|hl^5U zNVZG`k}rgw7GF$fi5pP7ZSm2Hl?T60#vaw0f^|~lN4|r#kek}i;>6qW>7Zh=I)Lil zXI|Lk`rI-vb+r=3C6`B3Q&(Z{D%H0ecY97=0%unEuJ;Sc{79Q~ciFe$=t0R<0EP^_ zRR*_T#j2j&0<$p17Zr}sO0#>{M{lm%^ti@GkR?E7*lFe)JUTE*Pz?xW?N$b=>+LSS zb=l^~r31)8w0kPMqh7J8I)tEd)k|2ysE3M40PkJl(aJIMVs%Ff+gZX9MsDm+YjF5< zLeiiXB=!O8rq*UVsGaQwacdANJqJcug;4$Eev#vk(IWo7p$bDJ=_GX>gfi8Ct5HP| zyCubn4`%M`Nhh$K@3W?8$#smB4trhy02W`hxf=Hoe2Vc<4UjCbdm~`^mz~?C3+(Vqq!}@nmBgUN;;vtZ&}&3$1nC)Yvd4MA?}% zGUVh^=U{H;JJp(t!yGBNi>n^As347m5!lMz)23!~EUj&BG`Uysw|H;TWZJx;z?O=J z{o1GR2mUQQSt!ut0dgr9RfhqM*LJ=w0^PeSPfnK?4hr(+c=_@X%Rmj)W&6n)LvF^p zP}561(y^~FfQ3;@zrju44ZGTnrg`R(kqzxDSA=wY$7MTYsxu1b%Ha)0K)e6=re(1KKB6 z;&XDOJ&6=ew0N(Q$n5s?S0W6kX9w<#CC}z~{u>Xiuei$}{;uEe)fsXZ)N$Wja*zK2 zSCjr7G8vs{2G)i^4SWXP?|WNvkbPGl*wqGPL+QAGTI*(RKij5{FD?V<_>2DiZcP(? z5-I-HxRRdo{{X*R^F*Y2WKsRCf7N4;rd0m`i(mD){{Zt-{rV-dG3ov4{{X*5rFyAeqL0Pk(8LXt|pV)(%i z^h>H7MQ&cfR<@okm2K^9!BbyEgIhX%Kg1gU0HGgmU-ZF0Tl+&%O3{{;9;)z%3KW|GfQ!mvr2cCVA1NvuyPvbB`4cBj$Omf2LV){t($y*b*-c4 zKJ@ZkD}AkXCM;Fw<-!eikt?dQ4|+Sbjh@kSqQagj+9BRp&CILqD(@$|sPl1LOO2AE zL~+>4;-LQk#i&e1=;F;Bw)Ci-l@Hn1P>;iw=jgaA>*i&4hX5KWU5_n0%HM|%t#{RN4x~^zaPwpFM(g%8t&<^{;z0~# zju^*x-*3cj_PW%){#GK7qvD-c$a-H`jLnG7j>s93r47kejH_E-?ykk@_|da&+|h@2 zuWipI?%vk+hh9SQV&XGP9z3%D0G5EA-f}DOTX(}&lb09arjr+?h=ved#EgQLvF2>< zlzZ;hFI)azSmWv#l!f91By;04d~9hg-Bye5@t)nuSHmM~bB&D`Q{!|=zE7s($k5B3 zXnAIpe)=2)e}<_GZcCRX{{Rzm6x_Q&{O3|kuHJvnNqv1bx54_nt2Es^9WirDY>TMK z{H|E^<>4ayS(m%={{RkN_b)@Me>3J!)iUj{Rk;x=_#uK02>!nQnk*!nr{pfdBr>yY z_M@1{k}k1&H&j$HWK13$r8J6B5HoUxcE^wV*@bN4h9b^$?O zR+A?jt~XeTNP{E~H|{b=<6}wQR{Ouak9$s;5twpec8Yk9Y;rFed%ft}zZ)xRF0_V{ zVY=K$dM99$#NN)^*TU&`va^yS9#brmiDPzM;HAWtSC_rt-QLn2f<+xL13_sk1uIQI$+lGnbFyMHACwh~nRx*WE;so0-FI_M7>muZ~2_0EQY=#2>pH zfBU?yE??lIa{OA(=^aVr!^e{r)r2(!N+d=SKXPeh98cW)t#bMoQGgIQGBM+^fbO)| z{JD^Od;b7iPyD~vvH3Z2#?{A`jM$|@wsnt==h`kMa$E0*Xz5)NSe*YB^|)wAUmh<@w{ z-22jhz`ErsMUbMjk($=0o0zJkU+pIrtm^pI!C$;UWI%lqY`!mg+jJ$sm1oB_0c0eN zovR%DNly%yuDKgy$o<>wZ>imr>TB2J9XqK`@Z(0R^Q0AQneO|%95~Z_b7)^Cecn_( z^uFyUPU!K+&^lC0WN>4JdF}S5-h&;#xmjfXE{vT(Nt+?Nj#kFsocvnw57~;Zm)JUUC5WitJb0YBVo|G z*B_($wY-i8q)_M^s85)JH9;clY={rjue?vwt&*s(wW_SE_O)$A!)mt1752T8rV>LR zF-;g+D__y7MykI+16#(r66QZH<3(B$&V3O^H>7WORCx?l*;ylWTKX?#riU(A+Tl@0 zQ(vQQh}4k7BSkBzvDDCp?)Ljzt)N#rMV$pCiO~xqjgFF~1G3%2?Dw_J`Pb)ri^}>r zK5u)OcCJYv$OKTUsgBd)44ljTrEOA}vV*p@bhp*`m#?+Or4!?%5_i60bc{7W_Qz?K zz1LuitDaw%qTNZiNgaol+g4g1-RUwRb!cVUju=tB&rZ5|>H&rz%MnP!VNP=L;hh_~ zBvV;q>AE*oA+uv!5A^6jA_D zox+9(Xk@Pv>4c2#Gf?DXPLj3C$witdof^vq?6G}h)Ph!7-Wggha&XISJ|zb2!-89P zFI{}MQOJR+KnrzPH+PrH-&s61Z)tIQ<2?8zg^x7tc$xS{%d8%q zni8Aw|i5Q})hTk#U!@$G%x*52^jyw<;xvZsmuIwGcD^cu)SC7S_!Fy>_PTxk| zP>OklbRdCMB3{K&KtC|l*%)yyPCigmEDZdzBwf)wQV`2?CgiBxR;yj6>7%Cz9LXGs zD`X)E(Xe~UsJXXpTSlOm8ZJDBOGx52m0z=U+I(5=<;W=3ni4$gUu(Ug)B1BJG$aLS zJnEmjf;Ia$Zt1WvRGdW$IrC8kSbReo$GZ2Ag`246 zq35+K6?=-c{{YEP@ii7KQH7FXkpK-`mfhX%uAdh$I>#BcgPOEt@Z8<_o5kJIq-BCe zInGzm2vDcl;?g^)dkxE9F+Gi;le2UXRCxSt?JDVUu}yL!A&i4)i}U!84Vr{Np>IhQ zspkTQ=k?cI=$6)@6bEMB-OkNJk`1hqDwEhPeUEYQ_q6i}%e!CdKh1d3iHnqr5=x@S8tg`EP0Z49Y8Ww}EQTR9;l zyO|phE;h(`THWpC(@)582wIZXs*rbfT-*0}SAR*=dUj-~kbW9PJT{{RH*zK0&L~@T zXI>p-=i*{Zj56exlN(D^fW#6hXPvjXkx7}mACCR)e5X&1F?z&su0$&tDUX{C2Qnvt zi=-JbGg#ceyJn70x@KJ_R5c3Ks<5Lg18k8UH)99b?yrNrz+ zyO|oF4(hko(kwBV;aO0Y2egB5Sl7SrXmt?K=1D448n9+kZn73{hZpyD@o~1I$ipFI zM-GL-8%FGq$=*)`>2c-8WS&+Cl_17R{xa;h^|a9!=FTDqAdQL{kHScl_iWL~WUP#M zs&-S%Hty-;hBG!am12T{!}*%yPGoK0M&4fTmGjHwzdXHF6Y|}_eEM3jpDZTfcn8k_1-tRuLCxNbtNtQ)n=wciCICN+zN!#nx zQd(SxpjGW8f&ka~)d+{NlB^W?BsBeQ9S4bnA?zb))N%DHt{_tEXiB>d2%68d%b`9p z6vvJs8eFzrw)QHXWF6bISnLKGn)Xp!w^fOZta}jwyJyqFJ*LusFiwY(pY-b9ckfI7 z9}4?gDvfj)k+dNBt_@js`}?|9LGai&>87FQTqCt^vX@eu)?K@HxpDNVW;ElLOIzN) zw<~+Pow_21NtD(p*vdmwa!BO(d&%H+YxVOTUk*I%nE>WVlI-#m=Uw}vjCfKcR9$5C z4wVFu!x}5e0)WN`28`xDCd9~3#fR=?P5AA7QyNu~fUThK0qaw@L4`r}F&ad3cPtR3 z_RyP(-RE1oG*$@9W) zRCQ$fV{O*gPE{3Q4q2cT?!>yt{#EG2W_4`X`FyxoGQyWHGb1uptZ+nucpUR3ZN*JT z)8Ib~9ZNiovgSL}WJ&L~_p+AvS3+pnUN+ht2xUJ*tye&H*I5l6k0VVY$&o1}IYujN zD!a`JQpJ7`2DwqfjT-_RlO+p!ou1c@FBP8=_-@gbY*{0O5M*;`Af4N}N^V&DtFM-7 zn4?>ne8jf}-m690l1QTu6NM~*g(_5WDB)|DyQuR@nlPlm4YYG|yLg&2r)g@K(luT) z#Z%clN&9Kv;?#kfOk4(DT=NwoLbVb;G!cF1X~nAY_hP!;=F{Z#E^am!U0pVq*%*D~ zYiU+kJ03f|-E*?1l37-&9%g0((__hYoJqDarl+@NgqZH!*v$${v6a`(lCSpl9L3do zglj^Jy~vtcUSl1POfH?3?*H(mb#v!!TD%ZLuurOzFE=tlIB-Nw9n zSdh&W40bXp+Rev7Kw^&WE4$h;;;4)hw2h>n6TfR}r_HM}WD3V2{bwq(j zw>i1K#Cj2_s;CMNqycEwH&4ZNi{>h&fWAdF`_5l-6Wyzf8TwI9xAEfp16y&T z`#Pw_gdcEg?jaQI++X)-y5q(LXbDB3_jYUUBKr&e?QBF8_C~jMer;3}uG9JTUfndY z0?OM;j?jHxol~&-4$XRXN_jmL+pqq^O6qG9Wpeqj$bf~KFli^lZV913dW*YjUc0*atYKV?CmAu*&tUk8{wz19 zv#{Ycjb&V@Y3GM2d8&SaD0SA&Z1d{O>4MDMFrY6hdyq$Tn%kqBmbY~NmdPsv*(B#~ zJZHqP{rme|tz9Xr9>6DY%4`b!e!vgz1dfmj-`QOahT*ihbF$LX+ z7>(t4Bm7BOtxj~eNc<~qqn1%?vZ-O{Bx@)6Zv;~tAd?)`-p5z3%|!_F^EjdX#qaFu zEL>31803p`B`#G_f!?yT-O))zko4^98QMf>gUE|-%iQ69_j2za4usOBBTa~ups3h3 zcoVs*HqqobG9kuvs1Jb2jW>d7a&q0%$4WX-^erU!+9mL(>< zi4sdhk)wUn-Eyw(hBIUw9HaPIUkv_fD$uw5&1GfbWW|(mV3tMY$gV+DE!-zq7~}A< zBVv1M@(yf`^_|(YQM}_}^dC;B`$6m@N}hlQgZRhvjb`-u1xrHmL`Q1N80Nt&XS(Sk z>-}bRwpn71HD5xg-#<*U-tDHB35GXLjF8!Ew_HaWV#oNl_oZ)yzSgnv21DiI<-*St zk|+)yG6bOa`_HIhP#L2&` zoc^v%n3yxHONurut#3B`m*RN8fx_MUw2joJNCWQ07!`M>z>q;0X&#;wO(t|57crrf zlu7b_3`juO^G6>$DG|H3#}(RgxxF@*R7VUv#iz7Oq?&eC)*zE2dJlmc8-4_R{F#_HE4v@wNvJwkPEKAfG6Y4fPR`bL?>n~q zkKS!<+Wujxovhl*>K!hPj3SR6wrtAGyGqkErB0j{y=)Mv|KWJJ+>8 z51YAncU8ll8OQM5TlzH`WyB_mDHdc_*iqMpTz337^xL}pEv`#CjEL&^^Q|w1&#Q}- zCk&Cc<9phdr{?lt&BtqGN02Q+-i}zVGlyeFAN*nQ|bi3gDOQ~?P6%!^9 zukgt!ByYhickl6TI_Ps5R_@D)6{l@3^k_|t>m)|BWi_(M41{dGkZ(mV@nZVg5p~REf+pdWSh@!EUZ6Y=;L_u?oco1VHee^9@Ll)o?{9lr zCl)}=y{N#eufB(PYHY}3A2E|oY=G|&1*)UMp2*_W7!l;AI~2-|mRMYNq^NF*zfR-- z01e%B(?6PGTVd;1-zzZiO)Q2rWKi^DLM`5woXIWj-*&cnHh)Hr zZZimS*aa@i9U7b~EN|WZ?$*?OT;SFj%S2;REcujsFNC(s+j&~ieYW4Aol^oherf2A z9J+}cxKnqO?tAd9m+A4DT}y%$%#Otf;E@%Z@Y>eb#kGH#x+z?)N$r(m7G%o@o=kk4 zV%OWk+v!JPv~;P)Dsng zPc}kw5gd!TB1nt#=2SOH%Z}Ll+uE*9ZXPhFWN|#EzVweD^e&4*k%g8!LbAyVA63J-nN?kJ_Rj^V!y@r!_ zy{IA1$c8*ziIO&0l&plXCwqCLqEmTp*ZL+iyb)tYtQID=NnQ7qjGfGQxaM!glGyaw zQOP8^1l+<#y8i&C?)5lzg3!Qg6ui^SAPW>5&dTtPA8S}`2-}j!8PBVTH`PnEJXnze zWRH+t_Q@%2i_L!Zyk5?v!iCDi3)*BHRHZ~o?)Gy$I$)$k1VZl9QcYC(`@QWlhO7lc zFD|G9b~iSb-67&lMoiAg;70Qm4$-B1k#67ZceRO+(K@^JE`9$1Fsz{@fGDp!v1|1zW%XsD4CTNohmb05t7cCGp+CNhf>m85lLSoo!I{pn}m_7hR$%L$0E z7QCW~5})12#P3e_voSF;WrGW*#L$9`NhXm%dAYK2Bnx*hmmd>%w{_Gqv8CnosX9rI z9w}V0hE`>tmlHPeibh!MOPTqbtFDvQdX5~}f)<8EdR!VePEJfuX4ofWH?BONd1mhZ z=DL)fCBx%LG39W(DLV#Ps)u?vc+x&%w|je1Ms_pH0t)tmWM0o}Q{m)60mm-NQIwOq zNCxWhjUWZqRhexY3fpqidyN@%axmT~BAA|HOvE5>-$bLo`@~yS^(Jqg~mXRSz6w#>dzK!BrZf|EndT?whg%mVqDySrca)yJn{7ucDS4%op*A*4mbrtm~V^w_3LJs$(br(s+G?yrq zX7I*7_Ez^3gWA+sc&lU(Dxv}A3Mr@)mWu=9jl~##Z}@b^BW#wCroXl9*FY#` zoPo`%6Cpj~?@rI7K;adg~g=pxC_C z+-P6zEBAC~!f`B7&l!-7mVkS~x4qpgu9m|gqMtvgviMuO#X)Jmv0z75vhxpQhB zj1p`Nf}tRTE;AW*L2a-(x+$4ZaHN;}I-e7wbjkBy8drs-XGmc!AK#+N<>clod^BE9 z#FM{f_OZIJO_8CQ36~w3qn9lj7fhH{mz&DpNg;jP^g6y^a?~v(3TX_IkQK6BJ8#`b zw(egtIOKI_-qpPx2xFBbgv*mTQba-3@@1B3wp7He_P2F6Tq@;2&MGM5Ey_GWk=1jf#li}m=Z#JI;A%1Tm#jTE{Q*WAg;g8+p_H`y8#>d6R zfGG)%mVoWp3;pDdsl9tPlO}RnQ3O#l9i*7Ww|#9cXH`QcJ|S8ntP=IIgqs*6n|%^o)4%F@-9T ztu7~h3X99e<)yQdK6-LK4(YbegNfBS;#=N~N{{SdRFy}P5;ewc; z9^aUW`H{->?k~mmwD~z1)qzIvk~JXLWwfQ+-PIarhb8eMT2UE+<*DpjTD$M~aIf93 z7N0(ATN)r3ERlthM6bkc-@CPUmhL|eqv`m_^BKsMtQDkaLw>tjx@jd>5(+D+EQEM& zPuV(SwVEe&6+VMS9`1wZ7RZ;+QdI}J8uxweEb!vQvZZZnc8zrk5XvV~NbLlo-Eq+q zuo8v_A3HN0jT)%hRz>6cT9ySAjbt=av;aUmE2%zA032^1*|)_X_Lo9fb`w#Cq`+QBx|&j=GAfWi9^_BV1)e< z(VOk-M~^>5Z)KTgMzSItWN84+LCb^E)X z88n?XSRjf8Xn8l$Ntx+;33$2gx7DuD1FE=07KF=4K!&G9I_gG zLavk>Ookb4kRNvaE`B@2k;qDk5b~H2+LkrD%ig&((sb!#%!GmpwE-i}wO@w+0IR8> zd|7u&JO-6zDtLQt;oRN!b!JLjz0=ssUfWx@L2*N5#KUDuhC)1T=R@Ms6@%;Y`s`#O`aP^(4RzR+`cAj0Usk9BSLr%#Yop4$1W_BDp37|-V=e@nqT|bv z9-^0S?NfKNrO3vST^nd4Z9SJA*B#~7-MTL11zys20r~W~9Wo?XB(1Yf+Xx2T+<5*W z`plXRa^Vf&5bhD}HQdb>QHwJuBmsJt_D6LaNIHf*xQQigl1de*?y-!$zRrY@y1Fo^ zDryMyje7i)^y-7ns(C$Hr=QFD^+o}QtZQs*Uf#`ZN___!8SM zzozJ&36*ja{;Mc}$&9DC7lK^bKMoe%i|-}y=uOh{X3pi2CoX3TI!Hes2QG@S$>PVA zc@l8$X`|~%X$u9Gb&RP`S5U+I%t!tzUyS@p+J2{nNhRp-Ea`Z<}g<^K% zaZ@87Op`s*zuMDDCkg_`=o@v16DT>kfaOX(xsAf_?&IagzV4*xeF|^${h2vphmb#W z7j?2v{{YLc@ig<~+X=>z*CB;X&OaH8Z^@zll44b-V59F}mkan=c+WX$CYylL%&@bKaG%w|jegLOz`WV=c;{ zMkqg{x9e(L9IfbPQmhY}y^OvWQ@py5q~&ExmxQPl3y>LQk#{1XyBI z8#H61D}o59^ZNZ2*3FuvTShEKCvQu+56b@l33$Dx)ds)Rxrb^R$%=@r}FKU zR?$8)3S#918>uGiL6C{L&5q^Weq#*5uSu8h&|D4HCA z51kn~cT?U?Pt>ATeC(1-&mp=%z1SjS_c-zQB9H4_+T3lPgRC60g$MeCnenJ_wlPIl zmTRVp*R|1XwY*xN`Qre`5sCTGz{*O?3Z7KCllWen(At+Q34ar5f0%PJk}RA>cqGJu z8CVw;vo1$t&5MS7W{+}B*-`av{{YdV%zV`({{UG!lcIku$jgT3lP*+djgaSe<#5}% zk6-$Xp8o(0dz?|?<>f-sW5gAf9knVrP(})^+$*Vbb44;TL1rFgP(Bn3?8cw3cDi3r zHRk5W5c(sC^JQlJMbw>ps5dX8$8#iYy0Uf|-TwgkJ>CBR-|%o~W<661BV1UBr>o|q zU*0Q|4xLrW7H~@<4xm72DFq``Ea<$*B7F9D(_`!XVL+%a$_S*q`2yc~jnH z*G=l6Rf(4pPg>KT57=w<(<6l$m}Ml4s0kq!w@Au6BTnovLZK#puw*!%v(z zZ1H16hJt*a$){)GOl&Cr8_&YBG?s7aX8vKCPNR}`x(OOQWk0)z9y@M{cyE=jlZ#on zeK!^urHVduMi`ZCk|HHn=F;xvyjqJoDI&(pkj7<5h!@8tFKJ^NiqYN7SvNGz{J+&< znlW$?w4VusamLVsR>^zTuJ3nPnO1+F>G9gZTHx{aO$Gh%(eK0jMAV&9NYZ?a#E`^f z0fcKtTxesvWOngCidNp%H%sZRkg`OpJhG`PjX`Nwi)HyP-**=e;y&)9!NJR)tK2`# zsa3liow3W!K#?lHdmHZ+clA!+`}XUyqghJDC$V`?06R-Q>~TrwTiEL!2rS6X$B5+2 z^6hD)`;Jn}+Zx2TtR2o9v?q+4(`7-nSkIjwzKp&G+|{`&^D%z%F-Zsak#NcHN4@Op znFEOz&rdh0l2peLkwxXB(?7Stq1B(-75_K1SB?7kK<%-M~hzsH_7emo6wAzxIM3jGv6`} z^q5%>y)TKer~d#A^&!DBGQ~hyqhwl>OHjWPqjC6j(a53Ewlc7)pHnH=bf=^rn8Z_6 z#g*vEUe(2&tMJe6Cf)EhlPebJ%NA1{f{d(&*&{w;$le_gySH}JWqt2Y*4L{^gVols zmfVyZWQ6&of?g<_^*n2(==n=F0Ny|$zgpfU#LSGUvnq}GF8jZlg#0<8;hA@|GqQio z;1;6fr339WRht`U#aH-mW}seMZaaGd+gsn+ zT~`_miIG0>f?81cd2(9vzlmev(Tg7&BxFh18398tjiug>I(uIeyP?!^v6~PuvCAsG z?Zm4r5N}&{(d;aw%3uje&JL8<%C@+1Dan z^aQGh6eU6UY{}hgbS1yUgBQ4xmV%HzK7~0hQxkFO|oMZk0p}yDQtwciw$A9wb>1KnWC#D&#mEOW#kjJwox)5Ya?ktcKo~bI`mhKaye`#!)X>)YK@a(EUkQVui`_! zdVSXZu;;; z{%awd;ylZ8+3?cc8M=Haic!pSW2&Gr%Dt$@Ey)GD(MrF09=2%U^*C01V!^Cx>|w&_ z%fB11jWv*S1Lfnqmq3p!fumA4vlg7GDX>X8pNT3jcb2~jNBmazblAN~p|tI`Qo9dz z)mV+?)Pwm^PgA4WEP-rAJ_pN@tTy-}SJaJ?vVW)|nIl-hIJT&{f-E;Jj|gUFp-^1x^Y+@h=Hlbq z6K&>5YzNi{8)>qR1bss(MZh%Hjh)!zvfBRucy#$uNrQ`NDA-Q}ISvQh=Cqu*fYbLW z?V~=V!pOq;9PDZdp+iTEo*5PRC&!bD8LhSZ*1m=;vSjrcl9CL3Xt#pbaq=BX^3%g} zrTyIuY?!9R$Y4sxksXDA?d3M~a@*du?)G(^osWoe;FTkd<5H;1K;}n0a!b0_zcM*j z+E(u9^=`6JvWO`RDZLgvXNowk`^n}10Muk#zxQcuYpB`fjAdiX7EExl1h|avMQ8CM z<|19JjQ;@TT&QA$l?@}1lvi>cq)7RjV`#xeZsqzI-Ff83fOgPSF|Q9bD`a29O=RNX zAW`z{5hER-3zZh$E5Nr<^+i~7@$wR{1YZVN7=98-C08KF!7|IserB^eTZtiD_)Luq zt7M4bd088rF0UPvtD`bIBWn<1br`XF=R{D44q~Avv|ATZ#xfP=Jds;x7cYG`B-A*c z%rQoiVu&N-Do(9>M2^<3 z_1wRQeY%1iS*FbCi9B<%I*w`tHI6pRYDXk|%YOFBe~YZ7D$$mE*&Rx{mKQR*9>aIl zZtl6Xt%X{Z?V|(RrpTGoBO$i4R5iZDYut@>c3P>AvuN8>*=ZZWygESfWY2_X7`RgC zz9{5Y-reF?_q85J^2DPL9}yD6VRdN$WoaHg?b{m5i(b#aqJuUe49Z3D!UGi|jbxWK zw|KO%L@h)CR1Yv3Y)+b$by8i)wNMe>lWzNW2iDW{=`q_IB9(q-)^I!g-WenJH+50i zb;?^?0wxR%rm{F2M&2lqzgtZ?hnE0m-cztC04s94yLY60Ns~$mNC{rs6i^?mceL;Z zQtFHVsM~4cA5NB8oUDjwk$`(hrOxZS^>xaM9&FN7l~r1hIGwK9Z_}lkTzrTij;57X zj20AQXlkW>pR=SmSyLob7J%0+zF-x{4xa_NbMp$-_!`h|Wpx{ljo!B13?z%@WpPz7 zi$DWs#lP-T!ulA-BaPHCORS3_syJXC8w&cBzAF4S(aOxjmFWXUR+}h(Bg!ZHyCb*% z01lzb%8WxSs2!tITWi=ZKF)qmnf)_JvgfyWjAQCN3^00S4BR zO{~X`Mp(xaHlmJrt%+EMSe)9x_B@;~x%PENkF&6XYCY3kng|JCHdVHt&UH%YG>g18 zh8q|kQ!d?nzf^lBjL~Hv(napI%h@RJ{jD&?LzXB@P*O4P^9RKCl~+*YDz7$2MGl(* zPBu~o?1|v;=pz~k#di7GyOlc}$>G_qkMcw3PEoFlL0K<+|mLyAbdUx|qHb+mX7e|#7 zs;jQh@MghuS4Q7=JaVIHFuE>8QbLzD?7~JY#^;hpEYduV`^@dE=z5$pj-Qo3%)vYg zB}&Mv^D#)O+{j;^ttSnSe-@$2Y{mHNba1MfCqB>0!OfLl*=R#Ea%LmpBr_{Pkw~`uCHQwt+v~-;y3UiSU6+jxCLb;#GYA+tmFn@r z%9#q>OM5bEBa|3(J{~?kI#t@y!3;}kM;uGU?QC)A7`i%)Aa?UIK*%G~sETpby_RiE z$kJoYiyt<4auUfAKY8AcSo^%lpNmsuNmAdE=DMqBlig#3}+-VQ*rn-Fvk>w4%(;>t78hr|VMf zLm}-kAt&mMGb)I6{vK?`WKfUHPqZijc1%?Ryh>kF%pDMmt4{ift`b zcV_Hlskss_+SM`-HUZf%r9l2V4XWS7UC(zwj>G4s!}MvCki5bYq|ghte^!g*$gK=i zQq`ao9qYR`YQApWHblmVf~K2E@T!jUH)gqy1SB@zSaKbGmU?p8y*gIQ2bhSzFOGo7 z_nopmh(08X!iT$~^KfKi;t#{IgUEl3>GyGXVph5P+BtKgz|OYE3W{2%iKVCFH;1{Z zX_x_X02tG01F%<9E@Mk4Mnnsau;a&&mXW<4RC3)aNq6EZaB#M%B+W5h#pVhW1Ms)E zg}%K>hm_8^IXklm%?S3>{{X&t(@}wtndp$9UUDcl_f$&={dQZtTD~a`9!l{o_Ao!B zB#YsF2r}9X_&hTJPt}$^>2DQmUBSIn~UTkq+fL}$dV$qN$k`c_*{-PeLu z`r4)>-wnG~Ux`mcM0HsNc?stVEP8t10k86&^>3kS}7$JmelP*3gMI zmLSvm6@J!)Yr>+Mk1(z46>c7I4}Cqf{hc!*sN|?)=_K5rtE`L^4JKApkg7%+h!sJ3 zWR-i=-Bi;>6oo=Haxy^K9o?{EDcxC}d)>v~e-4ue3NaQuLW-l(c%9q7BlqNO=GH`o z?MybdVnL#tL;Wqf%fqI8i4HGGM+27T$!29WJk7l5;ozMR=^@9?LGLOeL5g#e%ts9);d(PC&6R;OST+f%Hrr;EFX zJ*c}W&1BvAsP-+fGVb`L`^_ADanH_R3~&mP*KAgDzjq&bowSeCr<*od$aYt1Le4us z%YpYx+(*>_0C|8E1LyIh^&{Xx6u2SZB1EmTBN17e2R{wr@BF)4y~CxIDpAxj z{RC{;t(uc62ql*u3Uehzs-=8K_N}_k_N(Ne*PC9AcGP}H)8yOd@^7&E2GjO*T@a86 z03IeJ+L59T*LK}qE?4tR(@B{ise%cbIH3pdla*^q>-dthZ$A$1xf0~(HYLi&2A4046O@U%aOP2wHdWO20$e`R0AI! z&+g`aa(!_KSWmMaq3KX${F1zHJkyIysww5fk#jc{rj+q`Q%rJthE{AZ8z(MH6==eo z)Ob~0WlzF&ZPwNdnJ}(YBQ6zqSnjxHvex=8zk7A9)V&A!d92GjGACcaT7A@BZ<}@h z0QPkD^dmt<9-X^SYZK>Y?>3|}x~2~>Pewhm+smtecir~298p5cgk)1Bk^;QN2Bs+E zBG##+yn`15g&SJy= z05SC@PE&~Bg<0fw>{U^7GkpU`tK!2X5c8yoR!$-i&`D11{v8!N7{EG?iJh8kVL;V*dc?@xuMqH{VJ4mS{&1NTG>+ z0aaB;*p4(^7yeV}@z2vxnq_57VO)Z~Y$(-UM~}Lh64?_s4a=tM9aP&k{87L-anV}S z0uMZwFUOOK-`VmHq-z~}(Y`@*?cU$fJfSSmiQW@x8ue951HD z>GyRk@!JeL6%YRaRXc7(%ioP}eHc2N%MKHE;^Ng%k3{nyjX%4&AG4tph^-jxQZ@>9 zP-@84QGE&k8kv`h!UxiKMxerwlhe8;Jb2P5{8`ym-V48Wo4n@wn*RVuz##P4NE5p7 z%FDrx7ykfH3H#Pv*L}s^*4;^p#@1!3w}pYKH|A|kkCzgxQa3eZMhpv`j-Dc?xpxN+ zq|2G*EXWqcdqB6dcyE1OHeXN3ovpD|CZls5sdQ`D>Ak@EpZRW6@L5hyFz_%m%7uN6 z<(Wsnu9pIh!#uJxY}i#SQBL0WvI$u5^Dzqi{L(o1fwseu&VRy_fnfYOH!alTr{E;` z822Nz(ir4(P5TrER9)@cx0_iQxnW?;lFmmrapaF_`Djd*uPz7nzAg9bm(+7%h?7AI zHO8m0ZI0$<_q8q;Nyn8|RAhXtlrcpT5lJLi-{Q|ACDtXD>MST0xX_!Xf8LOO3b(Z4 z+2vm5>T3BSjhoU`S5Rg^%>pd(i7jTdqcyT$9c^#3uad^Zh+wg2grk~BtZ!)&O{;Zy zm${?L9GsK2qjI6ocJx1uO-sP(W4FD*&3F;;J7 z297sbNmnt2V};8{8V@qW1&-5y9r&ArPT6e6I44=4lo52Ix4d(YI^An;aLd0R9;52v z9!TR>j%18n#TeXNOA`{X<(T(Z zGnU11PPvOA3-qYBclcn?*XX-MAlP@ZBa>sV?mzBZubN&&TMPDE!OX7I*`DMf(=0)l_Ohx`t|6V4Zg15r$He_*lGeO?fRo; zr_XrFSW@9}rC6I$eLPK}I|WBpbdg0!485g&idxzP{Q5P z7>Mx^zbV9|wP5 z<{Dg%o)|LI&H?+moj1R-+NxtmPdCN?0O6vd86!-pvqp=|wo&+zTiUaaypQ*r`Y`l? z&XiP2(yK<05wh9qywdn!kLz2hBF4^RJc?DXj0mWEY*_vze#>0m){~~^!Sa~_J`e`z zq*N3?FDCBtci?UH;^Ec9N}U@zb!ckw#W7w(5^reo5m9QhF=c75<|iJPI}qBy+cYGC z@W?pfkb5n_{q*0^$%`3g>e-@*k%dVlRN|8&dVD-+`_A3%)VZ|XPdw?7W4jhs2YaM;LVKI;AYuZ6F_ zP1CWZ!^(ijWJ2aeWDWO-iU$ee-tTLw<~BH&6RI3xCR(x<#|r3~5jr;cigjDQ4*mRV zu9R|IMU34>5?-4EplMdVh1i;t52!>Y#Gj2?wy>?k{{XtwgQvkBFqyA$8ifqNTXhGs zp$0B@$YImsa-*!weCy3^*puDf)EzP)WLA!+sOJ_isRrI$zbcIHKYG{Y$8X|kI#*H8 z!s?j$DD96vAPXR57qod$qdLZ%zq^ygxy9v3CX!f8Ql!Zw3>HOn;ACPPey+Lw3#d*f z2E44v4nz`qQcJ!xHy_1?{vYn!MQzzal+51MpQv+phDukS9^Mw$qllX{d_Kmkhk*SlRDob1^fr9~q{ z7CctRBN)w+{LGR3NY&qelD`(;i1P2~M}>in7#@CFmOk{38QbeNg2n=<^8rDrzmxK$ z{{TtpQHcg#QE(-cENef@WBIZEW;flF@1(XwiB+`^$l&92JW*_rnAE;tU5t$L)FfQQ z;*GicyjpCGd8CUW&uoX9wffuYzV4byfs8{TK_#_9>VFEO<9n*DqimVdx13tY2fo&e zG^v)^F|!c0X$e}NF=cJq`%AB%!Iou{V#=u@21Fg+-Lgf+72f8d#p?29=F19`4n_); zp3}BWJeL+MkvAQ`c^j^ur~d#e;!g)t%5bras9$;8k0&P~ujZ~id;8M(V@)PkQpuk- zSR0zMWJp4*0r#m2*#tfBadgoC04~QKQpNX~5=m?bPvI=69L+b0W8IIw+M5Hb@}QOm z5tczIj^o{FWQ`+GdyjpMt8-yV4Ja6jF!x<|hKz7X?bBmblO_A{D;pt%$^QVP>#X7Wfjh`LZ5k|isBsTAhlpU_JTu7U^kfPCLkfPnak-y^I(&k4TdC;!E`!t~3iR>e0&) zqYbHR6R=`I&iAT#dhwRF@ZI)Z7j@&>Y9?Q8@IeyyP}c;tPKb~qt&HHV658|5-LxH zN1sURgFTVgabX}5eDB`VyjW8xMJ!7t6an5KZMWUiOEdy@mut%tRjnK)NnR?O3S$Gyt=rF5SlN zTX%~|j}WABD2+#;D70$Y?DQQM%E88!tJ=_|e$}^W;l{(jY2!3>3mZD0L&k1&+3e|` z1_)qh*v2T;38#sXR_#=F`gOCk_MbkxdwX=hPM~A8<(no)K9_mqzQ3bW^(l!tIXO8I zw1<%MY#91^0)~$avZ5Sh9a!dJgjAu&9#0U zEc?s%in@F(jO=LgqaZX-AXWtMZoN4By2I<8OC}s#9B5~Wd97(PO=wn6Pr^oBHYZMK z=gS0tnRF^p1HH=K=Ez&@XyWt?K^yEdl%Es49*~t6!Puaa=UPy0h5bS>5ad#`kN~qnPQPf zGF&KZL(a$_UV9h(Jv8&ksTy{%{;GGF_g7yvkU4npg3-o%NAV>7Def=fd)hP4vm+vo z{>c0|{;K}Aq{+<#ma?>bl>ib~zdWOS-`zy+=^{whD8@S+aH4|h{{We<@oci+V@n_6 z$t+?zd6*ln{Ki%UQ~>$=m>Y? zR9@;Tw(9DP0Um-Yrk-aa5*GCHJ1^bW#NNiBNkI}S3WM4!wujvs5wkKCVCu`-tT{NC1!3-v!KdB zRuu#qf)98de7w~P2x_UJsM5%e(?D1$a#&Mnse^^xUH;tdR$EoBPq2Q z)qw`tInCdgu-|-s~MC4%y!IFs);4vx7y;;Wpycza;#(s=0Fu)jrXFb4$aP6 z^F8fus9m)-fGheul^ZFf$(KzLL1Hxbd57~nO7Yc0MR;`5~H!u7Wi#V-QC@8<-+QFLt~xO{5u==^ncao zIVyx6P^56JIC-$wf75i$ZkML?MoF?H47|X8905n(xwh8u#Hqz5q-dT=WtQG#vYN96 z6h+;&RTsj#6!hwvHt_&R2e6uKAD>apDj1}74AGv|K6F1uzKt|ei=%K=l=;;5uDJs* zFOW7YYT<1jWait=wSDbLmxl$Dp-M`w*8*KvnIjhXl=ihhO~c4|u<{t0A^>eCW7@}h zK4;=v#i|XSN)2`&(WZw2DKgy}*5!&Kk=m~_+a1f{)zQTcGLt|iVq^ov$rk4KhW!`k z<0%^ga@?sNHfr9l>}uxDdw}l3mi~jGOw=vsz9CQW?Qh!AY>uHJBe2F11wUVIz6_CO zq1rAYIR~U}gB+i$qG47prjC!gQ21nD>h89v#(?;CYiDWg({*WuaQbr;ioK7M_>MiC zL^dz+oxgYFe&#S#>Ta^CwBjOma+96hV~% zBWqWa@lDVnUvjuJf>tr2^$7j>B@WWwn)+x0RPe5KlHrs}iq}_qbETA2NZRQ@YY!CyCow$&C_8hWCty zEk}=KVRT*@5Vqut##RY^ zd|s#1;=3mjN*N+}%H+iAQ+8-25nqoyd$N1#$h|+OW3^-JGsSrw=n;NuRr(~{R`y$1 zlAbA_B2!OGO(E6HR4^M!G@_2v?r488XOI5GLd0~ucI4A3MuP8mTzgh+G!*-MHMI2 zs~yB_d$IzD{{S#9s-;iRMwO$C%Em<9QB$zr!Zx=Cv3g7|O#Y{Q)5^V|KgG(Fdrf-d zr-wo)z*IqMsO+HC#2RaFX;V#9>|aUM5~tHmV&aXh%;zxlDh}Vy?QXheO>JM9Se%nV zY@o!|`%A38q^7vY-z|!D#)FrI1Dy@I>KWFOpgW9iv?H~YDmYmnMR%tg_j~;rFl{{ z;?g&k38deJ*>_iZ-*-xw$YV(N3K2$D9BCr{^Tp)<08EXPGP;==hyYq{u`9&-p93N$ zlcxY4RvozR-*=G`@gL)&eir_u&CQHRBx*!#6CR1P1~x`qq|MbGL6$R$+@Y(MoA z&$I3$hUR8G4E{%^3naXW2ATMOJKgl6puxyUlA`sk*z5jh&M`(=qOZ za}062_f`m_x7pHVbkLbl;N#5$&FIHTZ+&jEJd;NU?(uYgm;M5p0{+CCa+Z>k1Q?WgR;WU9D2f_l(Tk zF`2G;oA+^QSfn`99!!z(Ch16nOxt@vIQ@#!<+>Qcten-?UbA&_xI+{InDt1lL# z!N`l^^&t?3XjJmuO9POyUAG=sQCoGlB;t*3 zJ-=SfNtqmB`f9SIlGkW16|Ut|Y*Cj~k+jXz86!qDXdDwA-Z-q@ith5R=X*gqoG*?~ zWQYurvGgm(Dy{6g>2Z*>Qc1$IBO!n8uOAV;oqRx9hnVdCjZ25qu|%IP!DVNt+e^1% zP3~9mTZ_A)jF`~Dizr58%?w_K{m1Ud^={Y6&yW%hYfH<9EGrRk(m^1EX(*z4+NKPy7zS#R1?7BC1|n{BY5Ni zw}w2Z6(YxF1>7kSdibW{OeCpd6Ya64M+?9-JmKO73Ey|NZ+p9IZobS4BE-e=+ zkJJ=)$1H0UhuoS!hj;gizV@DUh`}x(=F1ZnNh1rrbH`oe6yr_C@oSwAF9HdEAYNZG zQ+D2DqN@@-oL29)tDijCC(vHR`msY`{jCWh6GtR+M$w4nZL$^#7v7eSd7j2*?rEgS zn-4276tm%DGnrI&u~uPg^0=hkP2LR;i_BF5*kgz?)Qf|vwQp;C(s1kNpiDR>WVY#G zTgsm^G!{47)V)`!$qznA(h#ttSg4gE-eJ3Wn)lQ>+}PGUOXg!FcYtl(m1D0hy zPCPMl@-hhl93V?0wYStHrHXjhLnEbSi@SV#+PDg@q-`J3sQO+WQsO}_GtGA;WoL9{M?=hORYFLu z!>A|diI3E|(geu{2%vS0Z!t*~(&lavcIvjA!mkw2u}PqnZI&kR$etGbIa284UIy}K zXGCq19BExop{=5y%yfDbY)&lriIp0$t+K7L<=9)hHR&@ij_pg<;VQU2K*JiyvPy<2 zm29M`k0e`i0{!;#?%Aa2y=Uez^Rfx~T-Y+_7q}HLIF?B{Q`@~A*Tpvv7P9gp>KM{u z`~{cTCqr^k5UF)GFL7T*aRQR1X*>&uglN3~?X#iGpARRxJA zfC1XfPn$)cia0Qd-OP~>G3a>lV-{|BW|^&i;%Lp%<@tcTNaO~n@Vaho@V=ITvGU<- z!m`kV>9@S6y`djah2vw|(QhI8ylbwX4qWQ}Ir1qoHp(pL z^Jjl9yV_cK(&>=#d@EO%AMRz`X}Gs_oH|EPnns*0Vsb;O0m|N2-e>aL>3Nt#G; z$~-7rcXNaKKWj}0MS~Qbis%|oTh#8yw}q2?Sn`ruUVK9LC7X-JcIlI-VzNj{EMaw& zd)BS3x7@o)n}kM7%+^4NcC(J-SMK>-Qr*D1e7u+yt}P_369y}BxtU`9-?^aZ!I13) z8iT7PQ0wSzqeJ9jmm)RYx+JRX?uX&s)O|y${Krm6$g*x&V9qzAjz!;&%fEWI>9e}L zk3LXA1Z@-r6hs>PoeBHtUw&J665Y*9jnN+)mX!r^FE1b)9k~g*v3u>zZw92ra~WwT zc~xQ!YKEn;DU*GyrtRD-xub*ABRP4!jc6qk-m`1Bu)6;MH4aRG_D4$-^F|NtX*#}A z$&b<WMR zAu4xCcN8_;ZHld|pYB`wwD`3<5mk?v7GBEum%XU|ZY7dv2Py8_!I#(DYp(k0Nb%g` zlR~7`z(2!{&wKZ4rOTa@<>lWvLU+by@VxXAqFvsNY;PWdGeBz~45 zN7`y>p~c9CXHBfJ$gacI%7pIuYCA@z$-{z7&W({PPVqu6pB7i!JH;3Nrw(TLjEV7} zlI_+_W%Nk|sg0G9Hdjh{VlfG$V}4vQb1in78Jq6geUo`NbO;q7)Q_WGL!_#VlATg{ zq?uS-$(@9WG9Scc+P_mxJh8_pL^1|tR;U8?Ad%?d*GubISFFNrV?j6)My(PSMvJ(} z_4tu)wcFY<;Cx1{#Fx4ha_%ZNx5hP4D&w`$Wzr*!Nv^N7TcBg*L-DKuM|P3-O9O(Dv|QHzeY zBV))N5~secY>}hC6peSaub9haX_Qq*;lw>FUia}^K!VZX0tt|fvJiM;ySZK|8(A^q z+RxE$_2m?@ny2SJTS-N-qTF)ac}_^g&RBP*XGoKN}S7006S|< zn+Ahp6C8jF)RL@ex0t`$UF|MrQW)YYW0dxV1cpggoKdUsYHqL5q@n~BU#--ef2rs?@^H&>Y)jzGB=Vd1_c9d-X-k5Od7odqtK=b6dC8#Eb}~r9CZIlJQDH!P{9T&2CBi!jh1yvAR*mgY z%opBPU+WrJ`eKQT3f>5?4-?7QKWj;b%?XP#_l3#rb>5l>YFy4f@h<#7cScM{hSS9f zV`Cprqso%T2W;i z*Im7Bi=he4mPl9drDDnSSMO={n?vStsZQ2}-TCZmWYyTNBvHjq(eEkVT~h=^vsdv~ zWk2Hgw{`MTtH&^_TJ+jHP?g*<`zgV#nmHJpxUs52$t6j0rj5%)?p?ckX|ghsIWba~ zOA}PBO)hv^j;Z3;uT=dywOlbCWd*-yO4zrPE2wzvV69!-`!`)Ye``oBEegyUQUz$L z4XjtgcNT=9QbjvM00`Bp00Yc40pogw6#~DVw^c`bO<{=PGL!J+4yyjof}@MMruh_8 z6$lR@BIEopz29xMFHXT>Hbj`o8p5c48vrhm*pI>DyNgi5qAa)|0Hji_qqDbki<|r1 z7*<7r7h}Z=a@beQ{rY>FhD8Bla8dsNO;wJX^K^W|)E;|${{Wu5x|PPsB7{hX))@ZK z-OypMFbDLC>7?%gMILg;VyM!|Ki{f>Pcr=;-reTbPB(TOr?=D`EWg&;$jOiIN^+w2 z=kAOjcG+=iXsz?%e73 zoLXhTg&+@0f(llf7Vk|wm8Q=(ugO8GYaSd_X>qS_nTSdw4z%1!F5=(b;@r_?>C84! zRi!{`Jn!L$_i}f5fZH=fI01BYSC`kvF#yhTU?dn~Wc3ee6FYe?Wym ze|HZuUvETUVn_>{o#osuUpvboXOY|5)vt*)eE&%Na9oNHya@w7N-8FYBf{X z1x5s> z5!tH88iw@Jr|mY~RPE5Nx_v+XTOHYdX!>pNyV;*`W;VpMB+zY7S>ls$YUg! za+t%O*FrCbL+vzdw|iQs?d;j;)DyvJlPXDGb3t2!6jXoi)mGohDzq#+Ks!g~)cq?m zqAZ29u;NA=(aN5QA&@MI?JkCG>5cr?(hK2E{ry;P&)_c#-GMSuc=rH<42$<*CTAlZwF8_IoQMc<{nx@?S(zMbBA zJ?R+8N7cIDEU%R+K@LPp!Q9XZB0D#|qSzIn&e|=X2TUJVq{1Z57WD*kQQkqHFtI_?0qjI)tkvFJ&Ly< z%tLAu)p3j%`5}2yWQ2H{?hEGHurv5&v)zi!LZOZ=utE-06#)>^Z{53Brt1(7Zsn`i0tE_&OrLl4&i6dC2 z7Tsu}<;nMQUFvOGyAigp_Lu7G8!8=>s(XmLtFJb@H4Aiuw+>!sI=igETgr>Zz1Myn7U-Do7I|J|?|WnN z>-*kaeqq_TY+re_Q>e_jGS_vLZQby@ej|H&yFO^)^)mq9nRvA%zsuRvWQfJ@1fbtx z??jTX$A|T_iPm6_IYSCh7_mvO1n4+HJYC&o{IVn&YT6SAm3 z#SvQ0ji~YZG)iX57Ra$Z$naEin=hGq1n|lC_wK{JuA7UIk&-$zxe|kqBejgIFS<); z?Gj04+}`VG^wnVsRV}noC{t33t8Fe_-Q5IHY5)KpfCj;?qbkbq%(*hu$HZK+h++3; z_-VV{ZQXySNSDLXVOVNK(VU5XE@`XrJbSSFx(B938g+Tnfz(h(8RDJe;JvAAd$&pM zuCj4DqrOZ=c_Ai4yjF_Ccz4l{!+z$zQa29<9MwwH7b{z3ET-t>?oVZ@J)6s>>T(s9 zOWIKzs4)g{Ntq$+4JL+8)riI%+AFY%@UMqLOlcBS^r;8*=r*$PF+-He5;G$;KrFPf zKSKJo1af6Z9H9|hNY)U+MZ%9wW8q9FxhZ>OmH`r`*sJEYM%jILH7evvlRW6h6>D*6 z2LzCm+N~RYCbBpDAQN07Av$u+3DH%j__pCjSq1~AJ&!AS(r-Nd_fCO1Wb z7~qMlcXC3P?R5e=$tx#*M{X@8GopY71;kL)+w93BHuu%jNg?m>HEoFc>BCMF*4mBXdQ%l zbuUeHWyl{F8bSu-$UYN;?S0$$qjuIGSLs>BGBep>$H$GGYbmIiWvg1T;@K-ryTYE< zmjf@Tb91pV#!fz9g#}g5%VlFvjyEKQn#m!3*;mD>dM;*e1|Do=s*I>4iEm>BkIHHa}hYmb!&17lynVVHAY4mHTuZkOgODNY$n0KU? z6#WuKRsCpmi<0V}=JDBqBH)U}i}LvGy58=f>e-}4(;$&%f)K--JE6KMW!rW<2;0ja z-pk&#G|M7f91v8kK?jLheGTE)$*)wKrdz`VSww{OCOPKv)7atA#gF*_?LZR0gCcxv znN>t_h@_TA2BHhCOBU;I=X^VO^)4q?$1RtPh|VBj;g#!Qw|3b#Zjv?s01tOunc$L0 z>sm66gnet3hL#9nk~r6eRRss9U^?XV*+dYl1T)U8L6GocLmGYLhj#a7Sfci|&B@Nf zOqy(kVRDDrdCQ0T$sg6ybkF8oc`$Mns|($_Snl14l)nw`@b1dK4I#;qv$}mk7j^jY zl5H2Xe|)~vE}trJN=HFO6(o~IrlQBjfet-ZkjcHwlDnMbS}c(#62$Gxzj{lwv*nSU znN8@Xm4sv2g(Bs{yY6U7kBJ@@Tr8*IhgP6F;gG$PBQM(25#)%5C@lQQs*QIF!e!oQ z?c=eyv=bXDE_Y~)Bv?WQxi&M%%IFK&`tsxSRZ10drF~8_x?h zBmnu~y|}-Jsd{W!l4eAAWVyLx+1huJ#}fDZ+JE&HmohW5INCsYV1E_YnJfF+pASAV zxO3pP9EmGibd2jd#RI2))xG$8n&)Lo+1(k)jpdXBBsJYd%eQuXW5Lh1`2PSC#j9{) zS(;}e3}{sI08w-D+t^L#YnMY6A(Tp^WI{GALEA;9)mGwe9b{*$4IVxq21b;soxPm2 zX1Yxk#8Y}OB0^{t*Li*Nr@L;2L6;^?=CBql$BBR&*6LhU#^q(aVn{^H5SU5$wg&BZ zU59@~5}NZuVsgMy{96kaSg zkbLty{u1b>ethxd)f9|WMMsGJ@#Z?2PFJ_NrH`g{EW8FgN#{DTKg8xMDb#&Cq;=`$ z$m((oL@z8>CE&A3D+u|tu~}6X*OmSq%XXpZnJl>r6iX8xTB0yfZ3GGM<4<99$D>P+ z)G^)OOBk3WQtV!pZe()y@m(H(>$r1aD;q?P14K#eUzm)vRri^7v|H<96jSSIn;RkF zXKR>3%v7=OkxpIuoa8y0IOMW9NC344_%`mpEw^vcn=Sb~in>fYQ1)!`i8xv>#M7Rk zlyUKb@W@pi_V*WtAJ%2p!b_>%SxG;gfz}LIiq)P;?`LAfffXrJ*rM$owtAAII{daX zK03KL(EKP@iFr{wt2K%DpL*NPyE=6exYA=ek1a_StHf(?cHZT_?2-86b<}Bva$}fY zGRI+&ZV$uVkM_Kn$JnRqHj6Q!0;Hb6JttK}nd9?1ro-z|#KYRRMWK-dtxJL3V@}KN zrF8i73dbO|fHc|k=(Yl@L_qj##1KbmMr)UQNHZXplp3-jUL_u2%T!@^5btRvT7+e& zQY|2QEbi-Oq{mTo(#Aj@fOl_yt;6EdLN=A{C(g%fGitMa-0VX+>^1wgZwtl2?MJ=c z(du1lMmf>3`FPA_k}>Uv^T68(mICMptV!ngbhF_?*x|rrd|9N35OZ4&EeR98o#3yDv>L--1f?TM%a`OF_e|fZ-*-W_1RHSNSwHbR(J^SnRWY#7h zS;WtRM2J#Hfu@Xuyu7*bxvIzp>RoQ2>b*Y?CMhxGx?H8lcwuE=V|;lX(up_XB&`o8 zcF7%X*E<(87dITzj|{3=N$$%HZ$|x12-Fvy_9Ri!-HGf86n8$GC#*);uZ$U%2>}eX z*wahmlADpDU2nainKlfohBu^;vhx*xc-YHXIcwhUFNas5xmZ*Y*g@>3o2cN-7J0&< zg^)VTQ-Xta<0_|qMQ$D~J}l6tBD$5xnOg8r@kfq~FApaU{{Ym{mn~_skYk@V%Tc9X z^LzWNq*Rc~0)Wvad>vflu@qDp&szq9e;;+JvHuI`} z)|VZ?F{r)AnE9ha`&yzRuh64cH>3bNNhh&Yd(7S)68MtaX}Y%dQ*Q0riDBC-W0gwm z?FCc%G|4#bhBw29hIHR^cG_ss79Nbh1-n z+6dUnLGdqTr$kUqvWjFZBv0<=UHfa?dzVVG8=8PI^Ao4Y=^UVwicJiPOm0Ekl89Ex z7saK{&BRiv4=OcT4UroBSs}Z6?2i57{oXq?B$pV4CYu_&e=_PEj*|-v>~=i1E&>&8 zlEE^)x5FxND(`T*Z)$#xE-Q?@h{Y9{6o~ewL6LWtmj3{CyL_7E%TXeMbwvr;#r3>_ z? zx4T{|bsi2x*5bl}5-4hmx+o-i8>D{r^INE}vXa>1Rp+{!ntM1Xy~I3nuX(+lb7G2D zLE2Srr@d*exl&43Zwk~kN12kBeXSf5X=GZ7BU?cO%_4Us{k*vdH!VmK%i8!6eVBcR@?1ol+bj;*L5 zdJch-mwD;gt7*IGubz#{X#%E!o8Td@%|&< z+`C6BFv*dc#;ubho^d{qufUpkJq;YZ)%!AB58BmpZI={~20{ubuVUm!_*LAqqi&Q!bjHdPlijL2uYpJdba%8xXBUFJ5jYyGWb|E-L`?YN}POTiV z>~xVzI-hPg-d|@=jVd-zO2}Z(8jv10;pank>AUeGZY_VPbeArG+UVlhBX8Z!A924` zxR*w3xnqVg+R`{x`%Ff^{pE-M0PPX~0LP%XSx`=W5z3B#LN=SKp>G{nYRyCCy{F_e< zmd%emay#S6d67ACM%UY<{%+{tN!2jWrbG&NvLOP7-~Orv`@6pNeiwsTcs&u1$#vM{ zNoP~G8#iWuVdus?k77mEM^nmS1|Lo7=dgAeWLV-wUh~@r!%q8aKlz_FBMZwQ!N)>s zV}dVblve`hQP}vNGo2iFOh^?(M@ADc+T|ncvJ-bsXi|vD5stNBB`U-?#B*`x*iu1Z%K) zlzj{T01lFVr72k6M2K3Xg7O<8UC_&1lcvyHItG zl=ne8-hqV~e9aq=9Bp)Nz9rFzu3^WPo?{|{SNpja;wRN@Nrn8Pt2P> z_?Lq*hFI-rtiM6CI+ipi&apzz`tmaV&bNBYnLO0SOMgYzYH1l$sA1T_rN>eoDh}DP zn&z|HiJIRIv5YjE7DyH{t^ounvC>8C;v3pdk{HW@GPC0bH7XN&TtZJ3i@%Ql0K2*; z;nA3)a%NGwn-^!F-qL*Ga|99z7F0BTQ+zC>{_$acXSK`F!&klfe6rzQKm?>M@EnBQ zxv`oiZB+U75A#kko3WRZmrpz-)+xXJT23$FN$lt%Z7td8`hJZNOANP@^kE+nx7!mRbReU;S?j1i)Mq%oIiU@7-&-L<&A?F2zeuod%@ z>(Pp34;k$Tv+4FvqTL)Gu`%T!z8T+XWnL&>{{X2^!~ODmT5h9~r5V6jqdl?4I8^@t z5>LFB?D;4GKSq_CX2DQ>K2Abph%rdsP^7aTLp4|7`#PEef=Ka7p_Uak0!7v`_Z>$T zmV9{%N}E-X?H~L-oo8Z9EX-VXb$Iq(tM{9|$pUzEkBJf~a2oP1VhGv3_coI!8Tnao zwb4oFJ>-8JQg_!*{X#KVB!!G9GL$oEtV& zAS`W=MKQod^jmel?u$udxGyx3$h&!x9%Ej3`&&;m>}AQBua-mJWBpO53~Ak6Nu88i zl(}*%ShqDKY#?v;{X?-POupTeIPU*~XL7tYW~B&XDSA6(2SRz{k6IKw2;-jxijjGh?eS z!#9EHw~M{5cTH0?1PY}^>OiOXignL`m~tcH3@Nk2A|52vd2>W#G78xKZ)tso?t4C0 z$&?cuYF(`rG#-Jd^6~Mo(kWCri84uYtS(*XqcL#$8MOG_Q>Doy4hX*)mT(Vo?HsA& zWNqb<66MxH^$^1}WCoNyZmUHL271$LuNJd<5SlR(NVyPD(86W-j|#f%i!r#V;qZ$U8B9o5rpuNj-$k!|w;#Ev)b2#DS-BDrT`Bir?B_$bZtA|Q=}IGy9N5tU z8p3zD$KGGX%;NEDVAN5=GQuO3WMz2yi6LFFq>Z;kG*mvmy%7w}+annrU&v$1E%sXe0nh6ZY94^Q(Rw zsqp1q9Z4HTPfo{K@-ZLH&C4-~;~v~>l2h4{wbbM2?Md=T!8u!O#m0)OEUMp$myt8d z&_bLRB(gHDlcs+#LYa+(@?p#++SfvCNraqfERk~Ly<1$^u?JJ>i{3z2G6C!4v|~O6 z`nf6mO)B(Gp^*&qEUN}%-LQY{@-O=jAHS}l(0avV>d>rqmr)s+Oo%?~YW&Lg(k5u- z``COcq$Jrxr^hwI1q3ccfJCTeaYSm8%KrnWcgGHa11SIS7KZ9aCCUk!Mz{P$?V)AKQL9QVZ>{XX0KPR*%IJxk_t zR0frVX1jQAdZvmVsHkM6UStgBf{GEPa(8v}Cpb#dZ7xt7zRA|)u(0g}+%%mgb%~@zM_+Q}h$D=GX)=3XxHX}NfrIROnDkP=ECSXnL~XHU{jHby>9dF1~9nS*f?idn60 z*%24vS-!Gw_cU7-sPR!*YDof{t#RU3_O$rZipL_AZ=nAGyGI&Q!dQqX>s_O{Dr!6& z=)*}NwPj6}KgEyxORik8#~~XRn4zhro(W7sK(`=?2rRw*{{T;UbRbZ&Z!=zFRXfJ( zC_5E9y0^M^Q_ZRYunmBAYA%nTk&}-OOhusiLZOSTOvfs!?vdMXA^z*S``So)w6f-O zX+>hmmVw}y8W?Am5VprEZ$m4syv@e$>N&biaw1|LCj=HkHjA6R?8&E<%5qaTbT@<f8L>DNUwadAQj=_9xt(F5c4hKbptH z>aihzl?It4RmVu$%iDSH_;JR~ zsqy-1-&q&#>)y4rB#SdKPo;9C z^Y(YNnOV6xISizPNnFash_`b6{?DtSG>E*fJWI8}@!!JEz6H`dAV?%&fH&T42H6|B zqu9}&--+ql_Nl{vx5cKJfnc=QJ9h4kNhC1BsW}CfX9R);6@x{z#=pANb8}>FrZ0L*7WCjM0$yZsF9JT~>T{#wssfK{67@;fPii z=3bwBe(k%ui=|~pozIC?Wp{`dk$@LuG-))YIhGt!bz5<=7i2gQryvgtK0uaCn|s&t{ngR1{QfeMM5wfN1ngIbYg(Sg+93@= zATU-6#cS~u81P8T*>;L_ri-RSjYP6k=Dj};mWgD1v)_{Ud-Rw&JcUszJ7h-2%TV3- z5Aj5e;JVLiL^fPRSNBB!09nz>SsHAD3f)T(1I0+!`&#LX+g8b~Jsh#O=+i;fB;`%f z$0}5&^8!!GyeasfGPbN%{w>Mf)=yNCd3pIVM=#3*x+91chZWnuI7YqX{r2YqE~V-V zRgVbRYB<@L2~+$b#qH{v$AG$XcZIhLxSPAEaQm~lE;y9T~aOqIh+FIFlGNNYlow4V)md`;hO?ykhn zSr2WqMgpI&5vuE*X-2IIpH|C}yXbscY?*jgn+Itpg$K0FsQLTS%KX_q8-sQ=_7ini zRhfV%&Du%!SGP?Q<4j_2Jr=&A61QvQo;flSDtua6>ZiEzo;F_Xt;3;@ir?lK5+js| ziKl9-OKf*|R{iaAvmrOG%1ER#{{U%qOiYJBJCagG{cZmM*3xtgymZP&VsV)!<*=^S z$N1xyymz8o{hbrkF*C6Mpe5nG2h%JKBI&WProLobnF=~E9hZDmOc-3D2eC zKR1j|wP!h3NtuS?TzN%N*Rg;${?KL9VP%IgJuAzRqhLX*m6jr|y8i&|M_9-TJ0i|R z$xr#83nTUP*dwRoWM#U87EBT_fDXoNnCIS&*SQirm+89K^PXgxQW68K3hXxaD>Q1- z^1Yam5p*#+Mn)`2*~?ZDpRBUkBR9RQxFTDeL}ZMOyUD(`>kBFqL~L~IK6Mtb`lWSs z&0nWqH`ej6LX%Ep@kT0sn{IaZZf#QvOl&o6m4_XYzgjqM{cTG;PY!e#lVi&uLJKOS zv9yW%$V(@?cCvbB@>H$VG77wMGgFg{SZ{MPI3|=UT9~PPw|(WBSTj;cL;+%0*+`Md z6jY6S&i>BkpQv>Lt0@!$yRj$km(t(7f5d%X3jN>R-N7I6r5}ku?&AC|{-t;}#Zi2% zwdHE}Pwv~SA|UnotJycxiA3CpsOJ? zxlY~F;#0$;kYhyH0FF>eU_9?>qI)_>Z(jId59kozfaw#>u8f3O(ms*mtsg9OvbwtUoRN}qfl8#cD`>RgB3ZF4l0@= z{{VR3*j@cR844C?$f#3LLE&^KZLQ?kX{t(!{{Tqa_PDfdxR%;W63l$VdA!TQx&V?u z6cy|P!aZ6i7$K9*eQl<`Eq!(>F#Qc_(#?KC6d>CS0Ri?~e#=gpBZi!Z6e}#dNcHl@ z?wN8aXd=z)nw}SJmwPR)N*ko8S`SI=Qg~I5t+jLV;Po*i{&1RXmYhS91tWMxKj+=| ziQ-Sz(@zt}iz8C#U?i5OZP}6zVJEu0DZ{I`q=&;@YSXax_)m8K0B4KIw^AI|EYYzXirS%jj?~*N{w^IDRuoh!S7Hvs=hSHJ zCO%wBRykvBjI^UPXWipYFRQFPnbV(}l7)gHuu)AKXK%w_WOw&hS-2V4@l0lgrHUv; zg_s(0%l;&bxhFS|Un>-o%Pbi z@yS6`j!J?M);|zvK z*-Ua7Wj}=8ecv93TEo2}GN8+gYVRq!HkLKnTlZUuTI<(P!PO=*&J?#T<|?RM^BE(F zS!}eozpUI+?$b~AnJ(3Dlr(NkFUIoZ$?&oz{nTj^@oOWl=OA3UBj-B#(GY)=#2;9z zN&H6kHJT?io>YXf+G_05NhkE_>gB^4fM^1b0QNiE+WBskCEY)#qc%*7!z{144m@q= zjxG5a*NOd|b=XO$OxW0cXjlFpC3PbqVr6UE<|l7uso+mzTMuuO)#R^~02h@*Q&Vtm z=vCpf(%PXLHM6%{Mz-s2wrZN&+5H-tCWN+2l@LjF5+V4X55DiJXv+fyWgyV4K^_m! z;?a<}a>UiET9M}Zz8z5%pP&<>B0{Wo266xd`Omwh#8~2!6;w2m$Q6W#iRF>oil_eo z4w-NxhaV72BSsY{O0nI$!>z8g^#iUYujkgvAJ3{;{W`cV-=|ZCQc$(90@qmxtE5%_ z_DLlA+O37Yf;IO|`KWbM6OYV4-=Zvk&NZ|e`RWdfI{>S+ldu8wollOkJnJNH8yI6O z1x2@W4Uz8q`bT3dIg1z)@}wwAjm@QZBp*)=+H6)Ovp<)ns-D(tbGGlTivIv=9ZM!E zoQ!sf7nvgNvjT3i?k(M41<=2yCMbVU(_EgbT<)C0*=`k;5b+(GG9w-3Z;9d5*ipEa zC|Gi&2BG3{%*Sxw-L<;5R<(UTy>YcX{hM{ogjSqNJsu_1N1t1DkNmxnvk_*WHz9$e za?$y5Lm#21mA)hQV$xvaV(1{I5=|RP2;0bT!J?WE;53_$ z7vZxlo0{wDq^y$TV9gO7vC5IW&^n(Kb1Js6I+TDbWMjuGk1#BupZaz39R@CERm+M; zft`ZK5+O+1dCzX=Hsp`-Uw2<8fmU}n&pUnO(jGZvZ(DGub6qnz6@D)|7jUBXAPFK@ zmx+;9`x8;&VMO^ka~eksd`;pzcUCp;$oq@0o9daZjZtj4_);HYwjR9Xli7ER!vm>Wsu?EoQ?7^d_HSOD=KWXfNo{Tidf!USq0mvD>AonwUw9EGLCEJqQ@;! z5HLY%$lRI+n%&-K7V7wQCI)kp)OvNRBOcjeKlHhS*4FYeKaU;XiJ{c;u+!%xsdE`< z)vo>OMpYz!_3XD@sCw2EvP%@@VT%Qg%=3$k4Il4qzQk7hySbXj!^ok?MLg0w46aPM z2EKb;th?FKf)nt;-aaGfUuR9yxNgr#w zo;e@s{a+;{ojcmq3Rgt;N-@Vuh76YjBW!X0vT9T5Oxq(S-oeYtKj70L}m*djA3dTv~3IA zpaY(#-`?_2> zS)X~G-MF3GYsmEU`MsS#0V{aGP*FUDgnLI@pFE}JhL#b6aR{J-+ z8pnb{3&#?vr)5UMN0FhFT^oup^o?V5oW;N7o0#&q;(@al>wf#%O;q;ka}4W;gNWie zX14hnLNDb(7Y^$2ODEM`7LrWano>EWXse407Vh7z)v_3ZX9j%U$uJ@cUZF>NydhNzq`Dhz7VLD@)@Myv8fBhD$c2!N z$q=b@kz2a`5Xds?Sjz#>om#uuO3Xn2*qTl&Z`O(be# zF-eaqfg*<66Up3`7UEw6`&yF-zR3XHm|U(D+@=Zs@<03ErXfm5hK`4|Pt)EW7Sd<* z^JaWUV;WfN`?);qt=_xYvr)sBbc!II+18a3J1OT;yH#I{*wq?EE$0hX{hI3Nm^%52 zn(O6K9%(Ce2>>wjg}aWO?Jg09Y>t`Q_|ED~W5?bNuLaWpx&uWYcLrCfRseHnM7 zlfIfs=TtD!xjKB4ZWas5MNTIP71ayT{n=>_>4QBSI{#@%2ax;x`T1&ZtV<8~sB(z)ApW(|B zufyQswX|@KLrUc=4C)Fevm8IW9@dLTmK65Wm9oCA?#*&KA%ZN1P$rr{ZgML^2M>FR zw7=`v*>}HWvE-LlBZ|@Y6bS@iDlhh!_nrG)``YW@ z%$NlN$vQ)f91^c2R^myMXya)mYZZI^tr$A6JxOG1adOSDi_dO8e=JffPV^E)zZE_o z-e^solCl(TVhlxC#7;P5N26pjukl-Zyqd+z%#Imf9g4nmK&z}xv5fGY)pYyF<&Sk< z?cFz0>NjKm04>0eBya*mnJBeq$jW{-hI7Fm-ehsfyQhIAhYu$xiL$0*sF|c2%lw;##@_kt+WC?w5r(wIcLY3dZfPTlt`W>baZz`?$Hkv7`Q#5IM-S$y}Z6r6h0j zS@)Gsb>R3PyVfL~AjuSY##NRQ<&vnJ(L8tWBiD9L>uKkfDqsnQI!>m)7@(JxGWRaK z;Yq{X;?qjIv#e&v+B-MwYf9dicUtX#sPvh{GO}{rLa0YVZn5ngN`CHMG}I8!^9e3I z!dv8YbzRm*Sgl*1nRUC`=5-ZCccBWX6@dOVyQRNp$+K^-SK7CDs4J>#)v9Z5sj2h2 zPFrI(RlLE;Nh@fzRb-QWWBwNn+uAsv&C*8rb8Jk}9jd3j26Q6zOTP;v?wf*3btYUW zA%`kyXO1-%sv|Mw1y1VN6}3*yY}CCUqXbz*N1u~36^k8Y1ybU>WXX_R(LlZ5i0rz@ z=$I2Et&bAMs~*}a0F^fGuDYj5{%p&QVUB5J#g)KIV^Ff3c`Vtv43SL}Hv6YD!KpFg zNSMxt3(~}gxg7&nMFT~wjbkWBg_>;m}d5t$Psb1c4N$}Y= zZ!OEIV#&|Hrlo5v5wV6>^jQ1Rvi7{N?t5BHoOZe?6f!W`PD32Vru8r$%|) zM-q0DJw4S`-e+#&F7tPF%!8z7yhKzp2;(FlKPp$|eXSm!@|i83s#)Q5w#6Oyb><6w zsP5FbYOjTvZ!!rZaKN&BPF~U93&7j5aO$Mei>$s~T5%{5;3ti|u!H4@1Dj zj}BQQRVF892?CK>@`bxw+Fyw-_ZF9^^z6gb@!dmnF@lSIe=gT^5PSU3XHvmDQO^u7 zV#^q>J=pNYUGXBe<=0xh*4@?~He+2kG_}>KP^wr(e|fu%{rxnzNDF`%D-b9<2JYHu z30a#7wl&1Djk~X2E>m~>99j(>9Zz9hp#F8!%{*M?T2%-HZP{~O!i(N*Tp+~*z%Ty* z=7as6EK@@+I8i_qZ$LekO-GfC!Q)Jb&3iod6<~N+S4A<}%M#amR@;qepTuf?T^Xnr zgL%%@{O#IHYT`~jN3nkpk88~r?dT*+MeX&I=_k&0@k720iDc;zPH7&;I5K~4M>ZUJh#OsC3wkVuL5TO+g1) zKg@ZEvu3tT(8OF_$ch&*BrwaTkhN z8&CYh{NEjAnF?cK6TJjydOUcD;mLiHW@PtxI1^1Xw*gL4MDV9w)^kg_;+5~q{zr>R1&PJ^zX;a3e-Lp z-qlWqJ}gf>#4`j+R@4_r`+O_*v}TE2pirfx3spPkFDfF) zB|WMQep?@B87|JNtZdQvQz1U<8zdiPwUJX&awgm9-a4k6np?f5?oT^Cb zzgI=SmSUQ0V-ZVooGQ4c!vnnvNWLGrZBK}akq633;z;6zyoklE{{S~p%ZqqgiFW>? zNu7sKl2t}oBe2GaURyMM=G%STI?U$FD}q)bR`aM2%_=up(fB*M$Npb9SnBsxa^qd; zm~Q-V;^mod=E=Wn+q($7{K@7Mv~1Z;Z*Pu|e6BnG!dwEoJ`Bx~Emj zm14(^M2+NQx}r6?$E@Eb>i64sUn_``MT08{;>Q~%$z#ALr`<;X0JvV}^sS`8s1S>jV~>fh-`390FQdr~&O{M0cZ_Tj?$Ni| zJNvq+J-WG+p(lmAf1}B>TXt)1w)X2~4yfBTPdV1#H2E7D|5+8+B{bGw3EQgEK(?BbTw87v6PP`bzerPH2D*-NMcgX z=ddUn&8~hP6hj-eQh5r@qw>ixdVk|kyE|*Z>$cRk`F5)c^J^!URrELJ}a83X zkj6c6o%kE*<(q!5lBI$H=O%hD_yJ@mm(!F!jR;abzV~@<3TOQa$A>$v~o!TEC|KcH9(A^`DmQ3&Tdq) zHcLg^f*6_j*T`g+ZbMGR-Dy zybvsLd)isP4@Sn623YxA%!UVQyx_7&8#fh<(n;gdmjZl#qM&`#DaVldqkE)xHJ2$7<`E@>Zk&O`qInZs`W zqRo;uX>o%r4#K4``^R4cKa0bp=?Trs%rS;Az_oCv&m*<5!msVM&7+IcBL4tN$6-cr z;pbuDM_-4J?=A9pZPl@gdC4S_N$qB1yv}@HOS=c8>*eu7WaJ;igj{~Ra3|MoWIS0= z;jUGsq6#J|%d?qt6^SHe+2f|pFV%Qs zN2hw(b=P{{S!}7YGR7VZ5Q@t)*&Nej#EssKxoI@Na|*`X#@yCl`m|8PJ}y(^(;bfu87x3*Y`rn!-?#h6O*S7@%Lfg}F9b2HYSx>AyKlbo(K}M<{Y-6%5P9utqrS;b~iP?E#zA@?|6UOB`e9;gSCUTTIeq=BXcuat%TE zY0Ldh7t4Q|>8wCZ#7k`_u`?t5BjK5T3;PYjlD=71JTvL$lUA-b#Z)Gyv6f zuTAhON%iZe$_V@RO8T7{f7zf|5D%ZzriwvSkxDT2Ftq;wUWPP==f-BoBy9x7Y`IUP zLDW{=gbv@QTRU`^&_wfO%lC00-fD3<^G6zYq6|kMqeD)_rXW5QawV zU}_Gsar&&H4xiK&8=BR!In#II5x|qh-|?oFd}mo=kX(+88CZCgmt$y*sFGw9Hb|j` z>USR2?Y6y5vB)Ntf2L&gIG=sZ81ExN?$ z{Y<=)!69i;RJ5535g#WEOW%3euQj+=m2>J${{ZG1j%tJ$k-4!D8`WiX``Itwdo7Ot z02YQcD>Ds-(=%9u*KNAAVcL9RM-5+1*XXxM&6XD(k>n0+b@%sXPu9~%E+Cngw80{i z^z!7f_UUmlvF68_lb9AortN8V!{}ju;h@>t*4Tmkh z!-duF8mst_+TW?FK|M;Er!#3%JTj*D+SI?xIo&!rGvs2!ElSWaYt}=vn|yuCcXcFq zAu@1feq-ZGN`U8zOnFwkrhfV|v~9(t!^khw@}IICnkupW4oLVe-p$J1&auCo`hBHM zxYhM^##kGb}JiB^Ydhm0)NeXs=n-UyjKQf?pGGI({U7JnS4ea0y&O(yr^7vKmZ={_jJfVP5&}Qf3JD2$4<6K4jEx zOn2JRqI`Lq?)P`K9$!+*%FN1DA*3>usV3{Avwk~Iw)c1SCOYQlByxhRIibN*#J>?W z{+EX92vHKKa7r@7SKvuz{{SvaEp}Z-A08f;n<~2UrY!JeyEW!qY~;J*cX=`@N$hJZ zJacs3r-L|z%Z)j8y3sPcV60v(Jvv4>cw$# zFxt5?9_WtNj5xpMHdql#fx++aZbr3kM&bsKcGO# zjnmvOQqIg2b1p=OnH(6=_m%~>;y=UtzAhHVgQI1%ok^P9m?eRgc^U;BGa#VIX(yE> zNf>WOENICR_pDgcm*Lc(C!L!EF{%c2l@xdyIgyOX{p6Q>dTx`|$``Q96zRH>#5Y~7 zf4Y_*#){_Mwbya9W5fq4LFY|~Kg2!1S4PKJ5c#4Te%o(pvoR$s&qkIxNoeJ?Z04_y z-PDzLlik#Loe};@e8}Tq&Dw~>b9i{&QtnmTw_B&qT=}MxnzF{ZYO_XNSC*eJ4IW+J zcHgU@{X!*!AQBl>?^8|}jlXvN)ot|QZDlL3#m0@YAYs~)AiCsk=ylz7;e7_gWO!bT z&^>Jg?PiJB?!RMCEOJ8xMD9mtFoEsKxwlQ7g#;{itlWmS_U=1FA=v)_#9loN49VZ7 z^*Ji;vK3Iv!W!+-4EtIo`SO~ zw8ci&Mjr}rz2D+5)@@uJSx=szjUA~^IiRQKI#t3|Y=+@5XtJqvTTzFQv;DqfeDAY8SG z3yO{_WTa^uKix|AebxF{qUm_+5`Ym`C<-XptM^uRcz1Op!HpbUI%d9DqnI-@cycA8 z4o`cRA0K_RGCJS}-V9|mKnHqOUN2@P-SKI0r*kG#Y>yfRx5quH_qit3SzW$LIlU-$3a*4X?_0EZ)z!`$VY)C4Yf#e0rU;p zwwP0Y6iXx|`G!2rBwt#{?9rEPxzViA{ZJA?`L}g9$>BayOC`c}AroM?l=4ZtWPT{` z)cNydsLE!#*w8idGX;(*C6js6xT_k*z8y`4(;93nLAjJ`PGcU}7C*!OB%ga`?(N!M zrCexYh1Fw7l9ae|QTcS`sa5dkNC7e_t;CW^@wbV!UpJF*a>?zql^?2gG!h|bO7A4M zH5Ao;@Ljsg^>m@d3hZ5=)kgujc5v%vnIdA*%PelmXzd4UUB&fvBB(M?B(6d()-*Q# zRrZ@it*<0!YahCd_)$A$lz8=1kuBbxl>0Q-%SR;c>MGWqroGkSjTglueO)YnEg=K5 zeOUhhUZhY$7Kp|J5mq&*x5Z|ob!BEKE&zf->^ewnk={T^2rIC5{XXv&ro-yuFyZ-# zXMmm3DEn+ASafna1hGXa9C$e#wm(%L_LD^uFl5HSsgE`g)dX70^AK{R?DktrG<_|n zG2=&uWW&l?s~kq?gTpT=`H}dzt=-kVK;&S^eA!SskNK(|Ki1XVJ0dKo&+epG2kHa; zofgT#hnjm>C6D%_v9$AH^G7fRDuCe&Ab!`MS<0c3MS-MJ2~$+~ zqK)-6pVVY~1{MYc>span8QIV%{7D1u>Q0@8VTT?^G9;N5a)gcbSRx|9Cl>p0YpBQ6 zWl3@$H=3gvNDa+IX0;@3o9Op%ap`(K3Fma2Kqcx5c3&lb%iv0!R--FVlil2jF5=To zfti$P(D^Z_^O_9}dWRc&@ zD5{|M7BSuSb;z76Ne!tAr2^b`Dn}0y$bbIlSs3{>DU9JcUTdkp&G9-m=PkH27JEcX z*;8l)cswoc=wlh=%f|-gi997?HX*1BD}boz!=eFKa0KQy(EGY&04uN{H3rJ}w6LcjBB)S8wLl)K?bbYU5OQE?M6?tDQq*dA zrQNsdYvkiaL7oV~ZLwv;fIKHop)8f$bLl*1muFW;MqI6`9$7 z9IIQbNL$T!LD?DQf;?wu6r4l{pW8BaHn@z_*q>+B*4Kn#)*ikp2agd{rf}1 z4a>RSx%6Nv*@}GBqSxPk&#R+ow0VIwp!$6N_N~Ipj|V3iM3Ktu0WNn^G_P^L81H+! z&c&x9CYfG%R)86T(oP-LgPU{4tGnLO4O$(w9%JGM#jI?eqm?AEGjgQ3fRu4$ZOdKJ z@h!RZI%i8iEk99_l6;jv6h?yYmxaFy?-K85M;NsSU?2DWZy>EnV?|XJW}vCHM%~fd zpy+C>DhTvwq1krIk58m%Fk{ROc#s|Y{PN%9uD)7xP)$|4DO0oRGj972yTfjvfzz10 z!j1~nca-dA;kaqvr?2@{K-M!7Nv`rk;MwER>E!&ZqJ_Dn2P%6x3Ey-2ng$UhBn_n) z)cW4*u5C+$0(0bn$~2o6Fb88h@P_oFYIIW=mKNohPk4>)V1DKQ0EJ!F(2z%ZOszh{ zyZ|=Nw)fo|dw096be+G+%PK6ar?^k*t2LQtE6p)RTd*gVeRpaiiq0YyGTxe&>SteJHmnF1dl4Ky?Tbkdz_HWh( zcx7p8BqwMzOH7v^J;-=;$(kgF9FQl80~M${j?M=4*LQq6lN%(nIbIW54l{ z^iv9Wa`R-{l{8WZs~^G!rGzQMw|(axfTq)_Ai~6a$RT4HnIuIF>-T~+la4fP&To0R zb%%ilBrzsLlw>YmK@y71IdrxtmM^b!Zfj=adq9%c3FJp3w{IEc_qeEd1|`)1dpMRY+v+-ny3$DW{Vc zA*1%-Z5{hc~ww=*Fzp^|3t6*0*t>h|c6Y7XDi zpcKr>VZXz@sWUo~G#K%!nlpwX(0<}X`svh>!e%rDA<`kg_#Xf z@2z?-yt=E)h@Wl0;nPfGi!L?VL5Ay>~;)CqhSZyUL`sLZRGU%$NWQA z*LIbt*TSMNn2}O{-J+7w(25X7-AI#Sq@8yh6Fbg1h1Bp(jm+Ihsk-r^{5Im!VrAiD zO&ydgBq&DRr@N&%$1e{YR_uIisUwNK=+(DE_+zt5W$JxLs6Gkn%M?j_Fc@%NE9 zejbPN_y#=qFP=p-B1LxHnh96$VNJ-l{v>=Yp_|kT8`{X@j9l_HD`GFZ#Lc?8>3Dg# zqYDB&hLALphrVEpxQivBQZ*7a$^2V%(FpEh#FJW7`t?BEwe%> zk?vTgXzpnfg;6|htegx?ft8O8tsHX?!~^;+94&6{?zZ;ndUr`hd6~p*Bbr8xdlip< zPvQN$bormmmgP$oL%vhe6sK*drD6T8OyA4ch_Rz8!wW_7@ni$XEOHgOqL0MU@Aq|b z^q!wzR!RQ=^ji4YnD`6f#Dex8%e1{MS?F_$_R4 zA?|YGRMc3#JPC7hO_-RmQA4m5W?(+*2spAP?r`z8l65~n{NvSCmN^LBjXxSxh=0=b z>~1IgOsOnc9o_XGN=9Z7)R|=1(mR{wmA{EBtk2|+=H`wgD+G)?1un<2BfE|LmC?+| zkPNn0OlSf4lDi8~Mx0iwZ#(d!>!slJ+g}pnRc;5I3$f#u_-!wA?!1<+uzJ){$va?9 z+|-O*{E1VOKQ1w~`Dc|UEq`~rrjs|M!I9E#sKJ?t%ql2Hmy+owM}?!~)>l#L*$I)Kn(?!kW93GR8uHR8 zk(x(k+Rbyl&8a_`dJKHLn5y|uprTBpYs#@M>SQACT%UWw+DP%$=ax}&BuZJBc&X-3 zX}5J#)3PldiwXNT==|hz<1hxC*x5yCmVZoOejZ!hWb#78_68jRHxO9!o2JuiA zY5Kr$=%qxlnpT~vM`x{cVwRFaASw$0Lyq)vDcw43ujRq;_OoFzsPvzck-qQyhxmRA zbR~~!u=9!^L0?lT;?*jDugPA;^q=->rJMBXu@K&-{{VidG?U_}l6-k%nGuZx6+2X) zHtvpgK2v=BgtXU^(8x)zEurotd=a!(vg%Wl1i1N&8*;!?By9Bfc1<6(@I^&qBlLzYC!JY?Rd2} zT**ZZka>8_c$OvD_V^ZN@b5pnq0X3x{oQT-ZuYrwDyn-vf2Y%`w`Z?g@*LJX<*AQg*zGrnC>z3N07e_zO{|6UsK0P(S<%L z2HEVrKV`LOz=!m)Keex!{#`|hz~9EYi6uMHGgp;A>Pg+d1`t{)+a zRSz3>t8E8aAIjZEcW>qHq8c{5*X3Ql=O#blB$jiR{9hKjY&qzY2bO$k)bAsXTgNB8 z9K60_=`wK3OMx7Nks}(sCAUrMnaUHbG1)uAmEStPwi>x<{HE@ zR>L@rttCye4p|p3wQjjM+4HO-w2n$hpJnvMIiqG9R8XisuV+-uiQ*oTD!*-ab!t`H z(4z0?U00PYM&1V5PtC9Nu8}@kU^5mlBHBfExQ8K^nU1Z+xYpgH$x@9a8Ot$uX8ts- zbI9Y~)dth9Rz%Cq{n}OE>?L*Z;hh)E(j|lSjo+)GaR4!(sijY|sQzuF<;7YeH328Q z%OIKc`z&59T_KUacU8X#ohZsd*#=&B+zLd|Jz!`F8-u*>I^`bYyi|L1P|HKtuA_ z31e^L8Cl)G4@r-Z7v|(9Oqmsn8D%_Dysbu&yg!E@3~S|}?bG3A!Y0R;jyDwt*Xnid zy6>*1$IX%E=~>gOrd)>O1f@hPkDTATkOWwAo4vU=i%ilGs(_Xx>;P>nPlR~1*_|&A zY|KSlzGaAxCj-w5IC=6{!^?)>2BXHzhFo0P6`se6MM4zqK{x`Hfu7Cx1mD27~W+%e^G@TQKf{$31&@TQ6W71p|2tdHebdW6v6 zVr8~AELf5%0FF73!!~pJ7El*7k|O&4VWzLOGF^3Tyks+im{d-SrN@V;X0nz^CV3jlZr&o6_-;PVo0*p)IM~ss2uJ2#)$pBBv*kkDXkMiL zZLO|!v&!?@6iG%K2LiJtF15T`6X#$>)bb`$v*b(%JzS5855!hQTsrde-plzRwqTSRF$xo;YolGp0aIL#Sv(=)6!vCw||8-o}vhc_Qlha_v~)m26e- zNj^sUMeHXV>3U4PGH;kyS)*9jm|`B3SOYurQslZ)sOzB*Q^m-_W~HKdnlNkF6tK6+ zQb782dQVBm89{bIJMhA%iZ>mTS@;{?%jgcPjRse>41zg6ylwCs>N4q52NFygw*E}E zNB|wwM7?f*6q=V8s6mgMvqbSMg0b3NZ01Q4-5lJtH!6!RZ7etiSU`%5tbtqrDRVEi z;?%g^9}RL^0v1^utZ^d|cPPlp?DE^Z$r?4C?L*VDq{PN-rEXBcR+?62rO-Ns6RU4- zGOsU72VRq?W8+XvvNU%DV0T*dGQKpc8*I<4G=NbGx%fjMP%b$kDs8h5K5Wdc$MFi5swvR}UpZnpq4t zvbVKzY9?qT&zMGs{K2w1(0&wmJN4vxvw=NGwi?esx@c6Zli-Gsi5s<=_*iR-Jud{Q^zUG%6EvSRE z_L6v{W8!w+X4IG>vSc!=svxNpA(fxZp3bhGB}m(EZt(S6-qdi(_j1aJ{%z8Cht}cI z!jPH@v`l-^`aS5l8&}A|RQcG@XfuGs4TsM|=xqq17NFVy(5f>j?+(CyraU?m&kTtX z73Napr>5x3Zs@eD%$4_<_KMfTZ({1)CuWhT3~aa8^n6VNDy}jbZIIQ!<*)X%@j~WE z)ryB83#qW1N42g{a)6qe3WgpA_H=M_aXEwwSCRlq4i-jlxMk3JjAfIuiL})2uQ4ok zZ6COGhDg%UEHb=uH3t-r8!Ehw<7LwI70AuS>8$M; ze8rD0DA`+<(dF{&$;IE|X*XBA+Q`Q1kl{nr@uo4|3z&?8ftMl%ta9?+?cL}0TTso@ zI-Yb`EhUq)xR^wQZaPUSypi1|=QjIe&|H`?`kYDz`oAW29wWz#BU9YJSa8XQl8Fpc z2a6^$6&#f-GRTLP_agGuxV4c626VXbyiTtakIjvguJZC{EpE>PD{C@5*Mcsfn79fN zTr#|A7Rlo;>wk$C6i=x$dQw8|DJ<}k5QaUnV@$ty;^nsPrNinNFR$c!Im6tw`*=gTRG0~k&)191Uf z9?mTZA&O>;hTw#ao@1qK9C;c*c1lo-Nbs?>uNoz>-ba0HmS4sdF%(js2(BD;E=)5|X52hGj=Pkgp_QtIr zY@P+NZ|>_S`I9pqEJtAqKv~@~P#0LQ$VFC)MwMUwmA997dz+=l>A8SK5VcZR{{Xg! z&fDBNDyarS5J9#}Y7c0(LH^xCkp?93qz)OQAk7)4c`atK*SX!-#SIy)cflXDH6)=z z%_$6IQ&I>ux;5ce_O!Urs92P2Uf$l))#5GQZ9#_?;|H+C_zDBhM&5W9vutkiS=05N6>a%E85p(Uvr zk+~YAd^WD5pQjF7ueyPD$U){c6sn|$hjn}W zPu|orOcvafx-zx%ejC@lZuQ;mOAHdK2vtuFz_H?1J==YqK`u&!c~2(gHAhD99^<3Z z?J7lYFCe){$)&CZ%}?PweT^(Km1BwO2B!+#HRL|`y+YpiwIYe`vFH?L)~ zt6QPd04X-!Xl~R|@g|s&ySKURYaV>Fbgvj|B1WP4Ylv8rbvcB0OksjZ9HIbRhjx3BfifAQ83d<$y7Q(z- z#F3KD_LB>x$(5fzIXvSlD2_C7aD}Ck+oh9rw|?(O6FN7?$x;U?#aP#emaBI;Te{KR zsN%;G;B^?(yGmBs5+k!}aKAT&Qcr(TWaQ%@$WS9LZ7n-ei5+`s-*Vq~tj?>{XIIXr zDmbBAoZa`|FB1Jo7uZL3)VLi%VaIljWygdyWT7msuKY7dw%pvl9YxbYl;HH{CT>G0 zcAb~G%?394bvClMiM2OD{#nn6%arD6V#q^}l;}mT3^Fe=3msGMBj2*^M4d+f<6~qm zCiPUABPtD!#2O-g8!xqfhGsr9=Em5@G&stUfb8E8WZuZT65dZ2e@-6?2qTdhck;lH zTngN#&Q-(S*T^*K4rU@KmmH?>ABQAtuVj%;P05pUnW-{^2kLVgWdaCzY4><`HuQ1F z{{WjN{`R)(m_WP&p!wghBhMQg0Y5@Y3aP_AKfqBH+Na_q}e#R zJw4&a6s~XJ(}7y$Tql ze05fyY=^mt&NCo(}R6+4Q|t0Ys7C5lzw z{5EZ7V&zRgPr}6s7f@J@tu*Vg5*Ol!;DvdokA35j6WZ6${{SVdsgV%|TsN7XJe2RR z$7bbaQ+gSdmw$3jEo61Y$QaFzWUd6UDuK#2$&HZD@xEw|`fjV+ZtlO z^RoclrXzMpu((!F-(IP?rRtDnM`Sd%46T^)0xfK{w6FPu;!bb5yR3Z7c~Wkovi!ol zfXg;n3RjmOBI!{#w>c}wkH4sq&(-p$-K)8#2Iuz|X zOvvGY;hc$ap^?d|lC1=XBkQXk#wtUP}KKIVtp9_&6 z!i#g_ExMu#0(MtN7b)P!>5b1=-a~8M2@#ndMmGFeE>(xXx9V&tqQ+=cE5fc=G?5S~ zl^pThu8jMPw){PH9o7e-up}yN%!8(zYSxybV>zU6Ka=9D{nn`uc3{utUm1s8u8)g%<2u z+rRgZqWwNJNDrO%b398OeBZ=<4uLUs#%2ht+aw4p{#j=mvqN>ezjWx-qW`BmOMOXe0dx1r1){xGgc49 zCm(X%?Q?pDOPB1o9YkV>yUgC1m+NYfxL8jb3YQyLaL$>1T`wVzqdO5}#+x`k@6`e8*u2=+S)qWN8mSyJ^Wm#3zB zzsss@nhbVZQb~*d0P18*r*7;w+1%6^m{b_h#EB5CcNId%z24pLX`;y}f`*0YM$xrd zTaGv3b=GG~#erk_$o^*%O{KYD+mnK&kKMs7vqr1sJHNpmNIA>=e@QYYo(;iq{b5Zfh-_l*3;)!7pBoOf5V?63QE zZafCj*5m$hm4~HcU)y#?);?4r`eYbvUmas$ zX1#@tG}7>m&E87x__Y>)SeAV9gsXF8ENa4#)4Gu?w(~5vO^-U;7DD{YVTQmM*(x7$ zRsC&cV|=s|{M7NelAp(edBP= z)N(q!dA(;SsLGV2f@VF;e0(c8@Z!bzFrs^MGf3BIf6=-;tq3M65Y?A&H- zY1_on>{))9W3k)X)KOssm#SqFAxGM(i}$%R1>WVS3a{cxsi1=rOnjcOjRr(`vfC87 z7XJX0&ctUZ*twUYEYZl^tf>3^#NL5=s0o+KPH`MJ+Bu)Eqk7(tyH7O^r|80~3kezm z2^S*{bTPk*Bwl28c;nakrFCBtHEHiIwc-U20c80HbYvD0pNbMhIO!=TBYAVlKC?4I~kL9AKGz{Mzs;?p+!HqbCS8wwq z?{7!0q5P@VvQ|E*n360rO2K*Pt8`La+d1*u%gA0P``-4T&0ue^GLJAUH;p|$9RwlD z%EC6VRf3*g!oqTec@p;1zRG(5v z{u%lmG&%B|Sv>LN0;GKny%P^3ZMqFt$eWFmJv^+Nf#JUX}OGXM1IZCli_C&V3gv^5RP*49B&(X4QYJ zmguSMBASFpL6Of=fd2pwec1l0=qFQ*L`nPD>QsB_#F`A7!M1`n)E>%c<1DeXhM=YD zPR}t)>RdjD1QAS$&z@J@iX`r|#Xcjvw)`k#_wsY^j)s1a>w*E|KEce(hsVx24IRf1c^g>lvApB+!;N#?#sGr-h!> zX>E<;Zx*P3KAH@u)>vPO98?;5MuF*aPt)Cd4m6CaKA0Z(TkPo}>!Bvbk(M>hgjs7b zwHGrRu>&^mJ{`-r(RFFrPTeL(2mb)PaRc(!wuw>2vt!@fcU|aPyDo%yVpuGDl-}zk za-rMIO4-kiyh-}HrccV}FQw4J=j%neU#X=|tBo!N#+=%TVFdW(P577FbhlqOmmqtG z!ipvhB+PhH5WZ&p=iQ?3XueKln5f5O7_>w|;O5ZFD~|MRSph}6$3}NR%zOHz`0&Z*+Zz7>T`R6`2skqa+>#bG z2hVmpmX1is;<trvRls=KX;&gr!4_E+j{3Bw>p6DvlklV5)?;Bt zko5D8@#D*oZC5;NDi7j1{3q`5X(X8B=1R&7MmH5(vEyUuM%_9O2T6lxVUk8;`Z#nW z%f@Jv(-8~@_PB62_LTD*Vsx=*s@?r0QJ?Ibi8e8_SSh zK3rVEPF&b=w*LV6jqYmLk?={x+Ok8-fEuI#`Mgs2-}P5bS1FE$$|<38IJf(eFAna$ zWc3I{g$id7+j8Zt)w#NPR-Z>j~?j0{z>Cj6$ zNB&hz2Z$6`Vu4H7Fx*d zMTYIYzl{yM>Z!iGI{8oKtd^IM;7^$J5Xiv%Tx@)F9~;}qX>E=7Qted%9*<6%Vvh`t zYTUMX1i-Ueu@I;>i{yGI9gqRFji*4s-JyR`39M$N2F z(oWJm_PbqcYm|(U`dTy>k?l(LZ5XoPX`=^rMSEP2T7zq9Y3*xW>Vf-dKsJrg1Or*Tup{l;$gnkeDQiDYYwIT8|SZN|;3v%8~@f{#3^Dnk(;{{T06 zzM|^v%voVi8q!rB_bYvV#<`F%l|3qJ{{ZIK)1n$f6l9BmdsLCbdhoTq+qBbkJbL#m1kgX3d0EqMxV4%nYh6NuA_Ti8Z`ybFy8gKg!m zlO`zciW&TA6TEtCtl1VQQ?;1TfAK!fqrv`Pgq)m`Ry>KtB0!?&kVW^By}xx9<;}&r zsxE#&J|{7~-t;dYD&J*vm~u^w;i59TE+lC54PZ;7rMLM0&Z%NJ_O2hI!Zg`=iY6sO zq;4v)uX^7RcHX(QSP`Vem4d{fs>tWE6L;Y=a6fZX9Jh~`3v$mbPak<#&dRLTe-lme z$RR~*OXO8aKf{ZO^s2K$RGs&*t03_zlWdygLeAi`F=wSoZLPz)G|eC^oHnm(7Ti={ zY4k7oc$J4PJSB|1_52=Zj@~&fu{+ug95Le2clb@do25Oz_Mndfc_*1qDk$WsQjB); z_f%Sqy?=*9#-B{blG^)7@#N`DBRwxd<@5UY~z0G?&!MU<`XYypR1U4S zmEpFZc(2@L;?-2#j0mXp>_1yj^q!*|0<>7AjLQ(3VN<-`+wi=4%jrEjFPmA1HZ@YM%OqOD zR%2{@wjU3^+&Yt`V#M=FaCRI9EvtIYvUiKC+2YbJG;N7CIlRp<*rB#^(N}hLb^Fch zS3@DPkt9Q6MFQL%t}F2(HFxIs5iPTd?KWO+Asq06+;hxjv>rH@;(Oe??9}Du6_QTt#op9u{Mh)|m>B;68x|~iIhgXwpNT$6-;*OA>*2%Y zr|&)`x?FUgk~yL*i1C&uz-B~NCsE<_l}vUjOXoUw*EPDY)kg5|>#xx8gUv0Gc9S$gElnuavKt7$T zO4>gSt-DLs+7>h8$debDt0ay$V~Qx@yOy+XadeV@FlPy8a$LjlBZxB_-=8T}Y341* zzLED=O*cf!#)}F^5=DC(p@06GXxo0Dhu@EfdsAfPO^wy1a402n3oW9H%lsDcNx;&# ze@{P5%V0TzDGV543|@ATWM`e_MB!$GnA*we@^v{n#%?Faaga^BH(Cj?+^o^7{u}OC z+C4iH69yH_ugm1h@|vkPuT5wD^n7Tn%gtU5<?f8N<`LPF zW49w2Tfbx}1N#olnw}5lBCFGgTin!G#ej-bb>50dK#WR@uf9q zoorVRJ9j1Jqg`?C>P*bp794m~yplPfRUM?AWc68LCVsJ#Jh5|Pdkk%{AdXjFLrmD| ze2E_Z_p_wO$3>0^lqw>MDyZyL*H7uQqRWpMmo{kJRUel~aneQaCpJcs*6${z>Kzjb z988&wB`BaUuJJ+pxU0QncB5)6zKuF!Mb*|uaPi)sH4wPEg=Dd^ardA1l0m)2sJa#^ zwpUcSB#B~<{D+sAC6_ML_=vn_=Cv){)cr;tot1$EbY{tw;8PrTd`Czb-MO}I#GF^_ z{TCKwX(fl2W|}fVSqYL^3_rc!_+z;yqUjiO{Nw@(sLVx;R1MV_&x)#Lbo^-aVvh?N z86!Jpc^#u~ION2%lD<3J-PTTDQV>EiCTWad)-)_A_O#o_n%@z;JUaQVm=l)u7p;89 zY74&YF77R>sd2iC^ZAj9V-Dn4D{Dc^RtakHuX{!=hn^_A8y-{7h!095HSrYo9?tH$ zy-zYsmWhFlZCKG6w+pI9E5WXq{+x7dE!$+P zMqgSUCHJFk7XDv$$O;P_X{uN#?c)OF-t#^*Hf8 zKMEyYbc^3>7f+Qr0ytKrw`Sd+v#Gj_gu#Q3wJlBd^CBYlD@fasrxu=k>?krIkkw*Y z3QHLCFE#FtX7O-uY7V8+@bh|iSA>N5kus|Ch$|{Jg^kuTEN+^zAw{V^l1c9|J6XN2 zCFBC$W2>1K?+_F}X?L~A#_Bn-L^}{nNFPHz&Ii`ixj6ZmanF(W&a<#-He2xn1LQm%%Pm$Aq3@3vPdcyV83w=wmTCIg(YmXASw$?W2*_`iq!{XjT}p4`<0aKUqMqw<(j`=%P@K`UfSun6Ia7$7p>Bz*4nLb?$#R4eZS!9dhM$PweMRo4_INcb& z93ExHkLEJidR(BA3_o{%PisVVEPkULtjeD=l#($=EICchl(cJEY~bDQ>oCcjxm{Z& zn9ndE$gD-HR0nlp?k@`I;=#j<53J&l!~|A;sg8=hXuhU_&b}60)0;MfQ>RhL%3B)6*!Z z0j0;3BR8e_5{qy4R!t19mnoAT>scIH@i^^{SkBnn_PCc=*^mm$fr}Kfk4P^2p7$Z0 zhJ&H1Fbux1MOXSY$du9t>^@{~_#09jwGRPO8Cz&z+c|#K`W*>kk24k+)=YCOtgazr zMS+O8J3;qJBk?7dXb8GyM?20MNYw%U_s%}9j8jOsSm$Aj7@LUnNs`<2{_4#Lqfn?j z0M_2$>D5?O+qc#1>Wnt}M#HVb7<%>{Grq=cn>`b0({l~u=W2(I5I&m{n$+prc^)4#BOu*`&&1!f2^ssAU9s z+8F~yC)Zs=&_9?XhZ;#3CO%XMBZgKyFwYY1<778;@MZ4W+q$9c)=x)936S7P1Gi$$ z8RkMyvv%YAEvLoHjiAbf%yUHCNaKkQ?IZBWo6Dk(DvSst)OH? zUkfP;`%#d8qfz0>ERBqggC6sb}-UO5+g zZx=CI{V!1GG{4KaNy^B1D(wMZ`d^rC*NGgmN0r4IHJKbMCZ-sX{KixzCx9UrUW^{G zZR0WD@9^oG20N#DSxUMe43WJZ8_7fDj(llOK4b>?CmpEX(C@=11ktwZrjl-}Ajawo zRGSe)Jc}ana^pbG@jo0gaI!ZRrNYJOO)fmjQO;|Km6e4)?KzWv%V`Ele1?SpW<@N_ zeU#!q_wQ)WJU=fH`?O>62=U3?j=#I&@;*H39w}6#sq7%^I+OW#t>soIVo4#%kP^xc z&y&hz4RfmRML&5y^LtM$9YYzC6}m&rrK&r`H5=@%vihe_S6obi6&cpUBdXaf%O4O& z-J?G9>W8psk56dPXd_f7w5Xx0NDv!UG{{Xz;+|ho8)Mi;m(H3Fn#NNX_ z7a~7>Bx`&cew~{i$@NqhJ~WICSFlZsCdJCeZxVb+_$7@SK@V#7`6lb1%h2=XdbId{ zXJfH)-~;iIx3VJt0MtkPO)BO*`5BA>e33JwmLq$VhpRPSF7{{R-|u=C~0lOd)=n8+n}joXiV9qo&j zvVI9(<+`7#H&BJ{Q_VS1tSCoj{IO9!vuX?+IiEioRSFm@vBq$_(aDlgBgw;Wz@P6E zf=jr(t(I_PpB5A`z+!YPLvKwxM#W9fMMYlfE{-%#W5^)ZDHNou>k-MtPh#z3e=Whv z#l`7hM|>cbkNBotO8ImQANwFtSG-0angiy&T zQ*Xt+7sIFOIXMrNikS8=&$2~Aw7(%`bsVeFek$;{)zbWvOoa-hT$YzO_wwr)?EIxHvF7j>JqXHetV`Az%D!ecB_jR+gO^B%S%avFnjxY}q!35x8tT8xS#Bf8%f`r?4cO5{mX^uFEOsj~`0#k| zk#!_^p@fYTZ)gUkR@Zd)D!uORmOR)7Fn#FUHOkcO!S-C)U)RLHeYNnPx-6OOC6*%l7;I%_dy= zMoDS#+Eg*3gXfKDZ`WtLK@wY$SzJ6WDj0C@3frz`D@z39Xq9AQYwg}yWF94D*T}1^ z*vv?8ms8G#8*Gb>dEZyBzZY{~>PRH=%Tr)|%5 zpIcM)dD={TY=`(uvzSl|W4XH{iF;93k6$+yP$ni3NU z20Kq+^Piw^=q{}IH0Piw{lEz)`D^o);qpawq705fP zdu{OD-fdIQqmK-t8<<~ENObQ+*3s2u?^(U2iE;5Ig#{HNW`>G86%s(nsHDShmxZL{ z&ZH}4$1m=e8I7$Mdz_cdhU=+`b8BP=^v+SDHN_r9)#{{TH4vc^M4^58O|2D|tC zM*Uq>>?dx7*%6T7ZMC^~3fJPQ+syji-6kw(n3#Fj$%bXP3zU3(aJyM*Kg?s@#~(Ap zubmKLbvT4!Iaif+p)Ai2Ie9G7cdz?ef=-i+FuIaVA&FMlvLczbR(yTtk_eLNrE6q@ zNY{2vM~Bssa`|*OxV5hWhGZ#5h1>W{x?H}sojlzy9Nw7Ol81$4?nuSQHgdm(49_a} z`1GASrAIDAuUkk_8c+(8bhh_>oeIF9dFvqm0CutRaS^9mmMGzkZxI&THe}Z_2eo%1 zU)j-G7?`#IJ{$ceShMg|i?#DIddiK4#^u+{oL7mh01tQ)c92 zqREjh<}%DmpaEiqoHuoT&DwvIiDbwEsRVV~?(w(U;?f?Y8m>Ie%SVk^6_c}+D~BD`o=6abokSmERt>^kpZOJ+#gS=_1Gx%@OE$ z9Qr)^Y>6@~mG&M|4#C~NOPv0$tT}TS&uF58eL_GkT|t3`6oNJerV+F%@Wig$u@~>k z-QR0RCn1`wEm*{i>b~iBI+mr=Rg?0l&Q+gETqO_wAe0wTB~o* z`@8tH&d9)$k&BvHTs5@bGBaIj+o9FYEQbZjD!jH1W9(doknXcT62gBEheBu=JZ;#+ zv;P3k?C7Hks{#o0gWIKoB?2`8ReZpDH1gu&Kym8nSqN8pZa*wWzYp0hsG-hv#D)|! zxZfj?4U)nsoT;54#*LIB^JF`%D|i({GibL|R(X`#%{VFp zc3ToR!?(k2+8s~%djwB~7cmXZV3eA37Zge6jISTvyY6c@s7D;IBnq%8c*rWz{9LGw z*D61ASbxkJuuatBFKlXr2_lrMO0OI{v1KvG-sSPHcUc+uG7OAh(LKYpY?Ta`D{sXt zUG!^RG}#%ltWh&jN$p~Lu^``-{ghotCMQpgdS*Pl*gj#o6G=g_p62F8JW<-W_q4Dv z2R3hsl_2lR+(Pf&MfXv6Y+XqwM(LB{%LJBBnv1_scC5WREwTw0?&O_#chR)jX(;6( zwT{qLybPNiWcFK3{Wi>OT9B_Qmv`|pCkiL+XwTI#-!|Y)c2@J><*7tb;kQN{95`{3 zBv+DrsGedjtrk3Wb5Xm$D>t*LaGxzR@#BIiRz!qCBWY^Mj;Nb03t`pD?n5la>597iw+@<(63$Kt0cmwWMJ;@3TScvzU& zfo8A~%z0kiNUTb<)2}W`7m8g))cI1!gN=;pC(2GrMJamoBj+8jG=C23ZcBZwbwugx zCFyHAx=N<1XOU}{6f8L6;d{J#$<66z+=#%r*NQlavm#i%G9+#NuI`RUPQk{P2Mifn zJc!xgjarK?Mk_bO$DP-Hc+;4ZZ!+54S()-<#nSMmSlnaBD0r2XNuM!UEshvwTX!v9 z4r8jjYAoKF)7oq)rj9tImF$vm$8X8vQ<-Zf^m5M8t-Jg>I6ZnO<1ZgIMi`SJ;oGtt z<&6&XtM@Xd>ov>mYHZB-%n;^gWM)LNiaNz30~1WW*;?KY4Z6EN-DWDHM=Q zlVi-vF6HjGIu>Q_O&_}Ym##tr}fdP?kJ*mL;1rE@lDb zk%jKhA>Vzb*rHw@2-ipXk1j<{g^12^A!E9wH(#h{5BEqwGnFL)RmOwmF=S~Yq=a*xmMo~ww=8P6S#`Y5E*&tA8L{$B0`pWA z6+6x(Tcf!L3bz)QFhuO+@nml~Bfq`7z1^@`;ncHXa7$k4CC6#z&$elO$w;@YojdZ;?BMvyCh#pJhsESBWiU}hdp6>(q z)wR?A0GIy&nj;ywGUO_wnxbUGFTq(&g>1^inWN`Lckvf-_0!X!Na=&rvX>TUBx21N zHIe1VcHialW074R>o;2Mbtz+5#snFR2&e&7RVY0aT`y3;B3UB3l<%+N#qW2M+tOsI ztV}3RvVY+^?WoW)RhafD?LYo)6v#pqfd-=BLGKFz^&rYMFqiNhv8!*Ti7b=TRETU1V@ z%)V>jLVnVf&}NXubqKs{Aoeo4?%H*;A}zkq)u}X0eHV>cl7ZLE!0jIEj?GUyLUOTY zx8kV_A`!xp*LRieuBHC~QieIBo!Qzp6;V@N&pO-UT|O>2d6zCQamyOAtY_lmGkX^- zw|CRs(QwMrjkXTYqVE>Bg$ka+HiPK*wbdXyB)=YCs8Gf~L#C1#$3HV5lLQ3ONm0L% zKcgNV_ldU?Nt@O(Um=-`qE^_GX$i}LcNLU(xV5*-UpJDzTKT;`jT6&jz7esfkl6_O zABtb_^d`%iNfi1IB@ehargitUOmK4u?J>z9$xs@}_h@DHM)ab5@LMZ{@`(_%FZS`^|Mf<@W6a z%NNloynUJD(`4eR$t{}e?lhgF|Xpb=9+XZK4gR9WIoq#QvT{c3`x7D z$B6viVA;ut)Gzna@I*gf+0e@BPO{867L-WW!wMhPk+<7h=#NiIgP;;L0Q)0Y{WGRS zvt)@U3p~{kK?=Jfe9Nx<*%w{P#*2HGYda$79=9~TR#CRcJiK-Ft|U~C{&P(FI1e0S z6p9!T6h=p(mX^2K*C!GLia$aNN9tRypukYZvA8um3doE#7t7bOsp^74hGjAEKc zqwD2b4T9R&nbzG zE3^^m)NZ1Wk%l>*wu$*_-%l;6rIFMZP7-@Z3JA10=XLw(Gz?L#knz|E<% z^JV14)H3&_ZK61C0Ku!@-cZQnJ{rOL_Y(X>Abwn@9x!f9SCG`P*l}O z^oAQ4X=ckTOCN;_n!JtSi9c#i1k}AlHiCI*EmKvE7w+Lh>hHgO{FK)%O$Tcc<{F}? z+3DM=pUJH~dJQR{CY_qOO+oXH%_ATrEp`tzd)lGcN9H;Nc8zT8^4GoT^Xikxh<$7; z_Iq{yM;{|8yuv7$gY}pN)#DaCQRvB(2Ksq%hqqrdosP0&gGPL3GL-hDir!_O((9QE z2T`)4{k|Wqt&~(9ta}Il03A{VEPO}Ls?-n7T?>>Sqh_x|QQ7MU*RQ8ut#2?NpG_2` zG;SzYZqfez9)s1{pQ&OcW02Cb!Zvd~bHl+ui*{c2w;OMu>^e{8%vHA|8pyJU9B{F= zIbYkwk(Yb-PWs!h_7SXJqD>%o7_dsN?f(G6z3qRe z5Ndz;RZ{wDceqJ}1i6p!4 z{pQzF#OqU-@e~Y ze9E&1G9-V(=Ofy^+q5z|q^TSL&$~9B%FPQ!kwQTL*wpRXcs$-6T}jh(CFW5UWRX_V=-aF<-nF8T zSlS4RJzF*Yozu~?GmQ#E0^Z>N01=mR6!A2yx}OI=F&0)dtrUueHW{D)5 zCI=BafJ#dq_rkk@o+f48@arQ73Mex=W(qjZ5*jq(pXMXNyWzLV@k@W-Kf;e#T&d*9 z=p96)ar4P9j`9n!Y?4oiai{yPOxy5FWvy=RkvfJ3FmC7%+o2RQUGtqqA(NlE_tZW{q~dIQ+(6dr{_O zWkU=SfYHe#gbWC|N?pafsba$FSgDBfJoXvXtY%H=5+(iB`|6(7hg8gtmQR_o?+uQAjpSk$p3_9#XDt{r^b7*oxRIG-G(!J25IkdZtJ3dpCjS5o(@_?J`V^el+s%$@~? zSn^>d)ljo6kVaZPyX}7*ZLgXgV=v|bs5MSqeR#HVihCcetl#Cl>_=Xymm0+s*x

2usxqb>YUgGJk@XaXyo;|L^w(|yft!9nL9om-Zs`g ze^Q^P^vJR{fjMlM?WI$eifqW4{1GjQ<84RP{{WXVaWf;HI;ebh#(5}sE>iraxLffO z-6l+6sCt4JZ!0M%=-$#gvgu`f?2yPwO`uy*Lt#rTsNKO5? z#te%WEL@1j;tj24ha?aB!%J$D8| zcWQWKOLUz4nWKr?$)r|hWsQZhZ1#rcm;DPVSgHunmRTJTaK@bQ&k$bnbRiexftnLCY8oCVMg*Q%NU=ZFB2;# z+^^m~jt^GJ${0*}kW`nw4(;+}MyS&xHuP7n;%T7hf;@>3T_L{EgT*D=->a$O%4pt6 z|ql$TmeRtM@37ajo}!TRb`^J)<~Ml4gooL$=;0h#;arv%uPU zddF0b6?>99)Ffn@+Z$AwA9s$<72eSKc1K9}L5YJV@0l5Uz8xN!CpBSB@r+!?2 zQ!gBTB+}(z6vxR>R;70wcqR$A+;!efNe)W#G9dw^MmqwY$x-_r7V-Cc+FZ1U<$7#_ zpt}T`Wk0)9{{T-5kHmk9>A<=@X>j>aVnnGj#zP}Qrqs2UhG=`2ajxdA%bS-0Ad`Ky zr+3=+lUBo(9MQ6h45DLTe}^T3Wlc1>idQ7>7m8CV{VMSvhxT;6BP{&GyAc~Q)npyk zyLQ+^#W!9j<^geK9WIx2XqGo<*KDyB0{0Qb0%D zl_!gtxX9bK@9A^D)gtDY>Q@+vQYSx$B@HA|_^-wLtv^r6#2DR56%6E?#E4B7BN}$v z@V|$3;(v!C>u5Fl4z`MEv9K{_OmwAk5mDLC@KQ%aOMGv=cXLj?M?SU;&cRbq8kmZmZ|>YGmp8ON<>y zHW+^NF*h`uZb+T~0C{IKR%SBu8~4)^$LYQG9MYK3sSh1wEw{|*mp=E^)8Yh?ngX&C z$mwf##>&Rl5>t6?-nU4&)4p7C8YUJ+(zBlqEQ%i@Hut%Zc&*ULmKpH!qGpfcrISM- zl`(&{uaM1!F${0D2bp{??4mLO=UUV0zQ^!1Jx&}cvaY^AiJ^cC)%2VK`4 z>`sePxz zq5g5@i?^4StQCOsM>7kN{6Dj-Nk5h+UZG@Vq{l|yh_Mu!ReCDZ?wiA?eD3IXtG5Q%&cyx`_Z$<`^H}Fmah(zEgn4Hha|Q?D;Aj$p#`JKnn(rH zTK2~$!|z|arRuEacxARgkxB$_B92;R5I4E#pAY{4n71yU3#W9|$jpR`>yyisENHQS%w6P?o3O%!?_0y{qTKr1D8i4; z8~_#`{LT*dxVGp|Gs`@{5E@r3R30mPt9N?U(RVhYijsQ(9j8k)SeXqIimNKA1bwYO zR%EGx7-PEV2@Bl0i*dh&bcE$|d4`IwjUrv{GWO^;KTDq>2@6Q#e$sbWm~Kk@_G$yy zvUx9%jQosaK!HfznmUPEqIozy<$jnomuPiH-L@h5|Y{2DR!2r=T9wRsC{%EN`? zq+Dh7ymRD+VT8taB({`3?8Zvg+;*1ZWhMEj{%y6@_ zfT%A8jahk(>-Ke%h^32VVzFD;v1ePZ+TH70?CbqLCI0{^m1L4QJ3@sEHa)yw6_I|W z+A%jW#szKWH30NmT5Ry?;mIlfP1X)#0s&B~zEJnkc$bG#Nz{70xUk3y7RinxjI1kE z9}W0;ceOL*XF-)BxOj3)6uFpM=6G9lPZ-@vZ)o{^7B+;CGRTeC$U_79*H{>$=&ny4b%B;D_5Wn>4+$sMxfH!=No zUAY&t%0<(3r`r8CXU4CkE6suav{EjUqvBKNGnMK{s>KN1$jXs>$9t6mx86+N6m4|h z<#7Xv@N*-QIh83J<3=92Eh_FL*0(Bn+kctCy4sdt(!#kQ43vqjOn?sP$Vzc{OsQn7 zo0sTys4`bSKWegMs7S&QyB;qsWNbcPv&Y}jlP)TiJ)F5X8`|B} z6V6`_J>iuhjjonGhB$-9892Wkx8q(NHdjmPSnG`t6-iA31Go>dZx#CnFuXu*#!xTx`A3uI9w4cQIKlvrRukl{$Y( ziLHUeAe@&Uc>JSpD+=x1--|A!>3vcxM8$;|XJjnZKqOMBj~dHkCPVSEJ^Z+|dSsIm z2ohopgzR*UtW1cm*y_n|zrCw}nWQTeO=4rfd1)#k-IpyE;N0a^{{Ss_E;RO=O*4=J zf=NAq0sA!6S&>FxH!)6TOMyb|AuPM+v_}<@$Lub-9Zw`aK-w{J!InYqBzz~@lT+a> z*qH**Aj&AOC3lhGOPiVQ@oG=zJV6wAc~}Arl^Y%AjqZY8&)qYlH@l|lnMBMvi3D*& zLh?%H*x`=0t;gDK71Lw%+!X0x>@(#^vdF&FSdbP*e-AcmJXdIA#?K)v&hkiV@;jU5 zmPYZ&`*oSN+Qt^7&~G{>*7R?0dpeG6OdMZ^L&ot&hKxHM9X$Tlq{p5%$%iK=5;lPt zD^2l|*kg0T(l+hh3$(ps`ITVE>W1uz=W$rzL>rJ|ESn<7#!c03IUC}>`|B&JzD$^p z)TU{Y7~Fzmr!EWez+lYLD!bhudsAXv44p?I5-DVSiW3??H|5tF$dV{z@1k#M;v4#g&%Mv^T0ouwQy^@3g*cWq&pG$iu~vJI#d)?LZ0Hmg(cQRbp4+ z-hF4|bj7`&lI z-Y)GlW$F=Fu0n|sgCHk?d`b1SPReU0a5hDZs86ll>wj0tQLTcy`DnnGsJN;_UJ?7; zffdpU#8|@Vk{^s z<>Oib>34p?^|WLDT*djUs%`m63~?az;n4BX=`8xOfu6NMgzlO%H< zo;!7p($CMt%vZ)jR@O%!6(e=<>}xgFqL_%{g;DQ20F1LsUv+QOD3VBUj|3`83p=ln z%f8Pi6_;o%N-8@j00Z-X-L

sM<`;(ChJTai%Me;?|@E9gmJ5?^>U_~T~PvJ_tt@icv_;p89Wbm=xiTv@uvVRIr z852trF!^)aaoE1n{{X|SjK|g#>VM`)Gt;E!xvNVfkqpvOikTR%#?A$|<9u%R{;b65 zokkV8d6^MF&b9;bjw>*^u8QV~`G2jY{$Ku5$fOjH8H|YOWJhGo&nl(UxVeA4Z8Q<1 zGH!;ANLFaU9N3Y&1H4x%>mMtpZNkb*pry8j_+l%2jRm~Bd`qJQn@HLZrF>pYvVwwm zpqSIdRK~~kJe@jZ?KvEy^hl*CtjxtXMzV4uBhImIZu|1y+6CI#4{DK7`Sj7s3WGyl z&~5CY{Ie92qQ9V;Q$dE%dkE}5k+VwDQ)ns=pr1eI;nB|N!8f) zo&E_lokylg%z?HViZU?chGgQ7RPQT(&bn_$xRsUV$eKEvS~M2N%^l_EHtM$S?tmSG z&E)m@6DtDVb&U&NXactK$~;CU?rM_eWQ3?YTx}!0!*;SD#uH?On5<%j-jo%oQR4Av zGh?PQ9`-|kf90jmuk?4VVld1K;0ee79xXn%y!=wp8~ z1?l-iV3}@gX?>{VqcjiVhHt9PsfS0&T%VRIBq|6S+$@(#XOOH;>6*~*Txd-bp1P~a+UJ_46;ggMH2!gl~eI$QM(*|Cf?KMb!@EMm~o?9 zi%iQ~X&NM0_`I0zk*!G6#i@hi=V5g+rBfd!S>j;KD6@09l0flA_m9hG;o#I+c+Qy; z6bjiPnnL6XNl7Fu;;r1=_LohS(`4o6EKLwo!6KdRTYl~C`?*(zxV4VFhsJ0SL}HOG zD99~)Jt)U|_2bdT$8}fc#USQXqXcWYa$CJ=(?~ji`K_f;L<9u*95=?bymxNty4Eyp zYa4U%M%G77$CU@~;qQO$AoldK#KGfm8Cg!oQYx&zt#b$kz@Tah)6sVqmuat(o>%_> zO0Ue^wYHbpUyJhh{62lZcYc>E8hpErX(64&ib10*t8NJuw_Y}g2c@ZVM&BBw#yW?F(qp2R78ltL1(;1yq4aH#;aX^-@bv6E@)_S}>M-n$tByWsT zMht8b<4FmunJ(6>F+6_}`|GY(^9`Lhrn4)qBvgEpX}UI_GlL#aV;NbOhnt~;(jZ)T z0WE5hNhiGS+wR`B)?PnJlare8xQXjZJvVo|w{YLw;?#Xp5-wZG4K|&$eX?^2-jYj~ zjhkHbPDG=7n-g-FdqvXK-S+gOphFsT^etvyYqG4Qo1Ni}2RdbE{ARHqxuF|i!PHfV z7vfEAEBnZ@Z8rNuOP$kj@$uqjCnFH$izWnq?NOqKBJJgtD}RZ*sZly+Z%^yV5h~1p ztnrPKVtmXm$d={c=I{75h5Wp;D`8^C&Yv1H*vJ+2GVydU3+kWn*%j;!fk0Q$A zLqH10_enc1aytFr;x`|MRM6@8Fw2>mMR^bkvX2zb*2e;SQa8Jyi~fx`l+cE0qU3?? z&aJwAn>1%^JZaPlnBd6xpHrNP8@JZi%i~8p*&vm8BZZzw$TqUhgLW2H@xQyO04NVRj+NW+PVO1IAg)hnn{+I zFcE-?seQ}5?*0|w)ajC=BbvfvyhWt$vPbAa;nnlSDgo%DZ8}_dQd_2Y?IlLQtR!dm zl~-L$9~Tj&e2JGO8b%6e!o((YH1$*M{qx?PyILchmw4HS0szQ@i!F_-aBn#zW>-9i5%l;D2L7sN`b9)Z+?) zG2P5&5(f9nR5S+T`^CT7T@2oyrX;zM(ZE-ZMdONJX+4&;mwQ4!Vwn$OgH!str0Y}W zVX=qS8pP^dHWkm06PkG?#8O=1#g$pNWU+2mk51WLDtvj07|i(7#$^gctdd67jEMgL zg#Q3i-9v$uTzvRcMqrQ>W(&HH8n+eey=q--ecm_(Z)9N*a1&Ktv{ntWI*BZu&|&=h&3G9lbewL z0NyNoxSPYnsIq!OtX*MPO00s4tKa#syR8hvcbCT}cSk3v=FcRRs)Tll6Z@E=Di)sA z&EnC{dF7iSlp$$a>wxSIc$%Ij-qB*9H)9UQAD==+H%4}C?O#XJs3$ZWxs~lb{;y;%zm9$Rz{!#N!Tg0_MLOc7lomJ zI8nCR_;p1zgmw=XwBD^OskWO6`H1vrGB~006GA?nd`STH4X64wxUSzo1N!yKRCRA& z(fR4at9h|q=)G(DF4a_5=-a32Goq8zq7opd;z(>sDf~6M-)mLZPwHW5G+7M=-o%Pp z*81tYrk5FR$<2|r_JoQv%S*k5-hXNIAbA!v9jxYso6h8MRkVIqDJS-+YJH~Lq70Ga zFQEtr?YYs)&B=@f1eSRN8hV!IWkk0Brk<*M@4{{RW>-b2Ht7-Ywi zgW}^$K_Ua*r)05z5({Kfxnc4#<7wb0wOs|Ve4KJOCf#WrMDsUU?V=tuWqhQI2+^56a)DH+iy1XlZ( z&+RU!WnlHlnAJ@|s}o<&HOrYpEo(#S*Eb27fZAbpEUpJ?t=rMRftOJ>G8yEZIf|9E z1wH9oyS=+_d9)kl;jf@bf8o4s8NvG;r z(>GA+@`_27FPIUwJb3#fi~Bwuab<(p z&Hi9vgEl0PSPo zi8QQwmJ+Vpsf7OkR?DZYJuKSUCriv8hFPFv^_QNyIa%E=1}LK1@*bcO0QcmHLj8R| zMnEz8cT_CR3l)+Ke3mq2iy|waY)+$h-Tod=cG2prjA;?u^W;`p*fuyC!#G2dWfz;AQgx~3)Z-#$sS*ZmnB10>I=8>0w^RTtG4^thG zH6#Pi6K={ruO6=_nbYOlARA~84n%+b@OPI>By1TN0;FvO9>e4rSk7XdMK51C@VfBG zp37)K)aj2Y*d+WX`rm}!%l)la%zFszKSrZL_*mP1yI1;`Pt66eXJFERD$%tq=ckD+ z`_%f&rIt1i8-U8d)G$5ZeHxZ-*&K4BUrWB~{hlV$#0^3yTKyVTkdYZ>4pdZyuKOzY zomYi*E@$%0%{Dc`K%Ghqh{x~a?mGS)yjlr~I^$041L0(v8_({~e(vm%{bkiMA(bDp ziUSJ%ZAsDp0F@vUXGgMpiS|K_U*6mI*&ZBa`uaUXDO;-NF{|cgZ9sp67u`gw+(=XF zXi0}DX=6?3lmM;cG~dTU8acGJzwPh>ahX*!Qh z0lKCFw3y_6EM!(}Qhe(wZ$;sj-6YZQIJkWW{k|s6Xjy&7BL@n{HRqLL9JiFcjbf;3UY?Wp>XUO|=B2i;?+y&&`2sra*a<$c9& z4GA+_<d12WFEu7!?ZN5o6d{d_j9Tk@2sKNtE&i zBz7RJ-h!U@>g(abv)W(}^lGaL52cCGmPU#=$7>NlJ$EtGczrCH<(cePRkb~)9r+ao z^A+9pv@)_>D~*f&%zQEX+lvgBfBNF`u4s1&kQ@vjn3AAUUu9hV=d zs2Ah00>8w^X4x!F_Se0p$jfDd6cuSCAyf}(n^DhR>hx`=eHOtRoX zB23a$qP(S9qxgNYMv1@S;ny}eu~lhv5finFb}PxfVqe|AMh>NxPCIc!5{S{M=8z`* zp6fNb0Co<*HM3I0lCtCETg{DjUvCI!?X$$4?JfukAxR9PiUVD5F5CYAcW-l8{VD>h zCRBk#uqMEu$kG72)kR&Fwxvlk^Mw1PgrAdn1MfL&;rE+BX7vuL^z*)JFcjPPfUcxJ z%Y9U3U%YVgho8i`Q0_$M+lt>7p9pl=@FkELIhiv@7<)*KAE&l*rx7$k6sh2Ko%zSWY^0)ROPAR5s)L&~-<>ok-GbDzY$7aq5 zqwvEQ3~TlK+O2yvk%thZJF`YSB2BEHneNaUqmb%6TMy~h`6_;j{{U8=NX=Bzgnb@G z>6no|PF77(A&6Dlqj-+$s*Wdp#nv}Y>%A=I7$QVjdVGr`Pz!9xf>w>Wsos(nk{9mV zs6UqT`e?y?#u*UJG>IdkLRF+_)-91{7AlKuk8CX^-W_#(Db=s)_?YlwkfftZlAGgp z6$t8&%uD!|?MczPR3kg6N`(v~fmDs@GF<#P)7fUZ^@-9t^jVl9IK*j@l!1~$qOD0_ zX=(g4@LQ~WPMEB4ah%F!kxH3dix-y}-VsK(Z?_w2r2IG7-mgPwGHge#&p{rKQPp%~ z=-DB0jepC`yvW6N?siEQ-R;J=+14*W{$7Md{KcGJH=G^u3{E|e6BZ8 zh}mX7Oi`>n$eP~k@oNvLbhsjeq~u~DSdaxVH33^ycN#t@?Oo-uTfL{rorGBMDUwHS z#Z}&BI>^sev2v%9WmD!?Ym@bKN2fwzu~kCQkSJ-ryX|T6FsG6UCG9Cdc6eN=WnX1= zyVNp4^|)`^T?^hUv>n+KmdD+aJ>RsNtMvIfeyLEm*#7{SCV%qoI+vkkTQ5zY zju%jT_k1_vP3`Y{Sv@jC%=vi=25q-S!uap>wT)|PKbe%uG2-OF2;h#lTkSV??+UNv zFH-4paQBDG;en)ly6NZ-n;j;TAgNK=3_f_7M5(%)wVf#imetZvhQE> zJjRwkt=`bg!^+8vp|Mdqsph^aR@o$sNxs%4$wUJdK1Z>P}N{qaqI0WT>k)|zmYO=C~_c?WI%QbijLn^*J%v9 zSw%qf6U67*X7UwbRX%NQT!++levMqR0DTWYHNE`?qx9=$(dyL(jMK0RyL)z@Qja?w zMFwnWXO^=}9YHrpZ?)^-OIJ-dN>#+m?E!W~=fNy|D|hb_+jK)INfC-VH)^=!jlPX- z)LlQP#AnRNG>$N7*~IcUav1*r5=~pw@~4-mFxxaOVn%%s!NTeN_01=-qR>VOPyEIF z$zG$>vYn!K1fYRqHph0Zv^5KoeaidD{GETn|Zu`FO?t+0+UeBXV*0H7$^{#BAE19)q zd;TUaWNY|qYKZ&rZnS!dK6Xx>l>-MDCmrNunE@BBL@LWPG6wi>ySUo3tl~T4J;>}+ zXalsmcjIqqZqzvVvSr5vbEJxZmX6`NJ{*O)S8)70cXdxjt@C;{jn#U5YV*8u!06_R z(U2KAio4duF8Wj5(?3+njf(m58*yvhgApx-edfKqPpqNSx|>0b4lO3gfmI_6t$IVc zQ<-94D_g;($ZnI7)RmOJHbOEXmLPUZl?xl-mPr02NUHqrXI&U!qb4?1OqouvO4)`x z8lU}B$Mus`ZQwmSf3I0`PQNRUmjp5)R5nW}F0=CN7Pe2_uPuHgp4NjWOzKRBXg?_Q zrm2;Soe@2S@nxs!3Uo2kAq325Ba*SPK7f*hCtvJ3IWxsfgFs|PWOGi-nliV2Z6+Qn zm4+Zff=Q)K$9cVHLGomd6+MPV3tyt`b6|9mKFg7V57ND!TI#x!FD0yo6)x@DKs`f7 zY<`)MG!zYXJI5&lx8ou=!;+teyxQb+h@_V{ZObw=OAoh_&OXFxbH1a-yO_!eccm_J zZjwXqwx&g`(gj7QiJ4J9TS|I_@xUkr(z>Nc9@!e{9W$ooLq1g9Mj2C<>h`PwrkX|x zcXM%W@4lK@SyD9xnV5h8^s^mIs!#+ou15mX;b#*zv;oYp1lNP8P~h_c;Fm{XZPPiMgPvC;$KeHUK*m zDC`>N^=ydokoE^{=JsQVd`TPKT{N8*L4(pNRArUAd8loFlZpNu5i4AuF*WYZ_i=Z$ z%Y`RX&B>CWmCi95dtH%J*+{jM(x6UMII`HzA_cFYXIZ3Ol00{P=X*@6Fl)Q^ijQ|( zxPwoS+eu?u4-}4g7fS?^a|j)QKvDE}pWba$9^WP>PmWc`eCgH!Gg6U?7iZqx=CZAj z-Mh_g3?7{yEeW~Vw!DqrmT5SocJY0mE0_^uGO>3m0J)EAy*QiKt%qMT1-QLY2gAu# z+JA?Tqwk<@^0yBXZ)#i|`2Jrz7=biI)|KFvCj3l!dt#I7w*LT;qQ;!UPoQi*!!X|$ zX|bk59EsYe&FdZ@d|C}71ydJk^){CxU_}j4Jj2>Pm;IdAQ%|)#1cqJB+TRPastwkm{#Ry<8^CwL$rCp>^jUa;!7__b`rqY z(Oj|Jwph7HS>p)Z)mwY(#igDG4-<;35Bv9f%iYwO4YguMay=nMY4x=ZFdWRhiqA71 zz|wEKH?W(izV3_=d~A;S6sbPj_Xn}62jzq2k7w&~XiLWw2 zljwO5DL+h~5x&NZ8A*z<9>L2pGWya<3fSJ#=tFUEwc6CF`gG44tYx@}6xcjpMzVU> zQwNpEk@4X*01Hi-68N3CqD~ZFYf;y02-mmHY3I~<^G_n%Q)EqIg2wjX-gfqzO0&FK zAr+7bq6C#~*8u%M0>4ut8>-*Dw?H*SkuxC#)QeA?_qTN*!Hs2#Qd^cyERg;vKfC?n zeT_3a877e3Bc9f8_(uvab#-4L9%81yn{K&PrqEB&4ydDG6a!qzJ3PR4lkDo03cilh z_OzH0g2XU+NbFEHgg(=2c!BhtB$10?S61dRrENckyiKNTi0F(rLG$}s0C}`epI=U` zmDOwJCvL8ZgAZ1@EX7oiO*=>(-BuSWeGRmJp50PqDu1B;ZB~Hmvs|S#Ue+VD5BIjC z=<5847;`dRDp_I&cmlh5*$wcc`tRM)#>eRJG$<$oMHm$NUwicEG<_C0Av{w@BS%k1 zFO_BO?&^2IdD(K2P^_+83rTgbu)ELV(JinjsV8Ls?IymBWAqM@DrGDZ^XHl~as~p} zp-16%-e!{C9b;l+nIy|-Lp)HLQl*%4<>8OFvy0i$VIpILwvh{)^UW>BzUu0^GfgQz zIT-%{Kp}O#5}&7Tgp83#=p+ICdZNo4G4lr+N#b{kc#Tp>&90}}VgCT!>2UrAUQB|B zc`Rl=zEmfdC%oLW(#M&ZJ_@$eWw+DA9yU1Q_N04s7YC_k%ET3t9EVkBQa=IRY_IUy zzP6VaHW@L{ivXDj1bBIz4feDWH3*|%00FMuQGg@XG~9($CWY7!FyZ|AtWAHY>^h{X zRF6pi0B)r(*k5zcx!wM@)jWo2cD&maM`=<0OQQ_{Y?-6S3J+j+RHc2>rGha;j0I8X z09rM(QexrAsgD>u`N^VyIFVn`!&NBA(w2e#eqL>=_I>P?Ax` z+Egke5oyOt8;3yW@JSm{3gdd!|vLpPrY`8wn+Fr|4hI*t7MHl$7~taolszP@_eV!bqf&#cN}ge-H0&);u`?tdYhPsXIkD zRlTKM-C^{Op)AXTn3E-tKP`l)yybS0cbN(+r!VVk=DIAIeLEn~b7ROXN%j2DnOj)c zpUkqZe@o1japKQZ5la-W_c7-}p9!Lwz8rZ`S@A9Arv2J%Tu?GI2Er@2hxo1H{u=1z zi{X5Ai>Ijp$Lbam}$ zzuyVmZ)V*NkvaG>AAnDFyzu+4_F{)mklt_jR*ICI(CfH7GW;XU`-)l>OvCV@lY~b`~(CZL|k=9}-RP zGOxp5t*RLietiosdiGk3f7z->jga3&NBdOJN5Gw_*w%nYw5@jLh7vm~E12f$BnyIY zh%wiOY~#Y&3-IIO{Hg68>*_wG(ap(HibRpPDuD?9rD2f)?8Gw%Fh5_Z!`kvRjRtCG)VyQNN;bjyP6W_J7hTQG8(A&Bj8KQC7ZS%x|aDZiW^i zA2%x2r?M#f*%Eq}@YnGlSuw>?9$1yqy`^bvPTsjJ<~O~l+EolK4Y$p+x_i0;Le2rG z4(z~vS0!}tVP#}v!67B1ic+Xa;x>*Oy!Kn8jl&ro-_u{Fx_*g*8c8ycUL$KGk~KG7 zm^&3BZSQ-7dqV!93d(z;5?AvxIFS3=Gc-$=0_`u1OAtIw1N=|3euKtCDf5r&@>pbB zy%!B6(7VMfX5^AKwUm!KxX|VGEQSEo2`zuyTIv|5IQcC!Qn@m#A*@f!bgV6J30Atz zOOaemNMcgwmm5mPor*cdQsUmuu^%bgex=V}oXU{gi0!_ZYQJ~5Hdz|jjk?;*#xN>8 z87*N#QG!SWsJBK}V((j~mL)vb0a{09cO${fkh59r>*g~g5g_#Tli@_-X7_Z$cxQ*e zExfSwQa%Yiht%CdSW2|yQ7Q>UQEDT5UFX-vibA8d-rZdseV#CC57yN!U(hvIjejtq z{*4(B)-ZO1+AIBf>ME!|)s?}LL&RZkx#gbhUDjXTad|p!e9^ODV`V&(IxWnv%jM&! z?^`3gD_h>S{V($mQO}nPt!4}0!C)E%kMN<%ik!=tKJsN{Xqo=5vu5f+A~}+)h+|;t z3ayVV^k2Q*-SDT2Pt*E>UjvXu4H;N)OB;7&PU+N5Jgbq5lEq<{V#!c0wrGBj#gF0p zy6pVgNS|vXcKTMHf1}HVlHdh{9(HCu(8HA(`%kGTi#yAY@~aE2>K12TnVMw&?G+d6 zYHVzqP9s9d_fV*eExSS8wGe$>W8q<(Ly3--M6U_BpeEOL55*w(heIE!JaOVF3}Asu zqp;z5*^4~3_hb9NEl+Qfo>Y-o$1G;(b8=|=v~4w4SIwAvTuqZ@{&ig?D@y{Auy ztogyXK2(%7s3B;g)9BXCQPzM82kvclDCiT}g*E zd2=a7r)>|1-O}{{=HUm++uLv~9bew4)VR>7XmP+7@8i|UX> z%DVf0@%3Nz7AM%oTYpQorpUnSDFft%SsdZU@=e7$iH%M_0jG<*zWVw}kR zho#!41IZK0;Z``LWxdY9TTQo9jr5%_!DZK$Kq#)?u@HA;Zh zJ9bExxYIvHc`@=ps-sBH6Os6GE8T70HQrrEFa<4UM@H>O8?2A*BY8j5VKt1J%l5i^NW}YaFh((OSZWi!S__uV(lPq#oU1TI1U06tsZFbtrrpC|e?=CdEWR5Oe zS9=RAG?qBLNUgo29w3f2CZ^N0pA(XIo7!!2C6pvylGF$2)iBmvgXxV;KHJ*5=4NB8 zPw7UZ{bo(wDP=D0x`;Mx9(H5cx*=RZzKF#S+dJC6ccV9*+NAxhNhVtr>3G~lDRi=V zqD#LHF~2i=sjO~{(n#64vaEK7CF6sNeoi(xj&UHrEbjz3|!|7^&>M>Dgn2!@9ZGnBL;gy$3)G#26I7}`XQ=WUj_>$dk zxT=omkRtjp_7HTZ%!oA&d6evGe<0EX-N?B<&M4UTyD3A zO_7$uC?geTb3g`_lWMpHNb}cfk){x)M9PGzXy9gAjn)CY^lce&97`BBx{*Ss!7OjQ zr`d6*848$iqZek4D6Y-fxSg{e1zz^2&dY@3q>u1Xj`=_>R+T>u&x6QelAsa@Drmr| zxfvU}%FA%k$euHikla$_F_q1Iscxs$*UXiQ1c#>2BQRA_OVamZJPEFLO;@9at~M#y zBm;*lEPg3|C}3}g5^-Gm5amX)BJEH`3X#~+vf9y+=H=U?kB`;z#3U86OD5PwExu$g z_M1!7+u}m8^2mL+FSV{t2UW^QfS^fin$hO9=2nySwM?$9nZfsxm9gEuqXMJ zRvhOgfQDBwI*`K%4dXs>2jFK5grtgzBWI+jc>7}>R8Irl365)_@j|cvO@mjcf0Frd1zPFdBV$N7aE<(oEnlTO;C=P}PMvWrreIc0v zLHD_2TQr6HWcgVB70vjr`Y}waA|BOX2-3GoZgHI3bcn1}_*wh0=r{8$e>aF}%#$6S zGZ6F1$X~vVd-nWGceRh!x(FF6j2T19WQ3{wSlfT&BJV|Z?uK4_wXVWA(Nw&WIoczN zF}0eT-WBg_{HISukN*IuoZa>yR#p3Ls<%&phw$fhZ~Vm6onI3ZBO9K<^0Dn#ji0dP zV@nC5P5bzn5oY82%}Dst2aa$W8g0}dW@Q-&}O;4XlPo|%z zXOj9{%xDLs>zN^|pXl{2j6<1^5aO4XN&f%|K-urMio=sE>J7z1+IIQfR0prUuk`#l z5dzV&C2gfgYD5{f-zR(6)#G`9*vGJYgRyn}Iw;d1VX)BD4|$h$bxp+19ynmbt8}4 zcGa?rv+@Xe?c2RihXVT$@cZ|+ugC*4C?C30@R0ui5&r-c{oPQ=VNSrY3qT)F7OL}1 z3G?$9Ya97!PTwyI2g#u|aZ6!}XYG5w@t57xMIPlr0H~!a>d=M(Y7go4pG#`Gu9FiL zZ^)R@2bg%|f8od8`#KFIOO=p#rkGqw_EooIUka|Rn-&KigBt2ym(mLSs@lcemKfJ@ zLjE`JLmk&z+xjD>A>aGl$#|Um-X9E6{5=?5~0r1cWWO{ z{v8=uSIh^b`Zd2H1JJt$wu=7%w_dMCsCzYW+I9;1y&p!gWt99B%*T=aL0xyW-Af{P z3GX^89mTMrs;RIZE{NERt;z`%1Sqfa*-69ZgdjJ&`Yub|v1_T_3AtS<{glB6u-}Em>D!Mrz*W z-1nPxeXS-w1W5uTva%qc1Rc@#JYG`7(Lkvuun$SoMBQnzx(uqMLxhSNK~3hHF`2oM zG43MSZx*G;#>?sxM~p%b^Cc9I6mh~MUR8H))zaa%T!+1tG?P>45;ddj>oQK67t8dH zr99E%ps7(NDG89Pckfur@vnkEXInM?sR*tYOG!}5I9no6BjlrZxe(ma+rrMNrNdy$ zhYbKbLcFXlJKg4ucy*D`p~{jZm@6PGO5Tmkj_U0SU3$eD;xeD;Fnezh&sdANqmh+3<6r-n#m z9v0wze9k>lfup5&qH*T>yivb?P)|fPN;hxJYrMm<|4L&=I8PUnFKPAqUU(PT}eE>Stn!_<;KAYJ=OS| z+LxoVQxhHt=8`0O3Cq=jG{f*vFADwRYB@7vSfaBHROioiuc3 z9t;e5D9>O0#J>r9x9CXNOP!P6pEUF2W9j&x4L#V=bTP1Dj~)O?5yYVs6Sb&`yS=ZM z$04&^ZjUk#-aqyiy{E>F&&~A~`E(@JsN2~xpYZo?_Vf{UDu4j>4F?gqQ?w8}b-NpW zdJPnErN?MfT6@P;{EVq_$XY-nyscD7TIJc_ux~QzNGFlP%tK^M%md1N;z#UQ&jpLY z9_s3BPM+diheH|&)Y!EaZGHt*T?Agm01wUN<>RYQAnwGsQ|UY_`P)}ND-lm;Fy7y0 zJ;eK3>Lz6eIdT>`S$IrgFNI<6Sl2VP-Tf3(Pt8Q#r&4P`U6(}W-_x6pP=y`5=Txund%$i?b- za)44rx+kF*p)2ttwb#9Nv9fxW6p`cN%R5avGRUhO)Y?R5`(u7Kw|7%vM&TZ0wO_Of z?Ym~43{|x;&^iIzauFeO>1Qi*HnJ(hlZ_0+=>)0$R@N`b&R~vrXx`NYss-xG&su0o z#iq(*K=QF>{{X-}-B}-L;y!YHK24gb)pbukmMR+#@jhyf!KixgPX^D~koC({fozao22 zZQ42gN@mE)ZI`tGRsGyCjmV<*SLh6YIbykifejJ^y^2p`Ni*>>Zt{Kq z055L4N9CVbr|Ht;#0`tERPEcQ>OE57(jjvi#t8=^MdP`bXvT|$srRp;i;Wa ziWGfXX{LrTft+}9F~z%ojR^R2CyRFNWUZL^O7xBAl=Bga6Kwd{@$GhH^UBM+tB+lu zo7=M<8$adoTlMto)ti}sX?}hHDI{y&`HWV*qK*6c82575dr`xJsJP0bmJroQJ8uo& zzl#3$lNth0=1IwC8wg4lkSXyxi!RVq6jc-ed4ScCEzR3O{{3(R^ftHAf%-MD8hr;; z+CGs_BFP)HQpUmKkqsFbaJnB(zDGE$J!S>JcVf(|{{X0jcU$-H_c)hxLQz2L#=aB( z01k{eCWpv ze+etO2et0$VvJD`00*dl-+NPKFskDyia%4n{H^vaO%vy)gb;xws-PP1uFm)TI=rxu zdDMymJ)aJTRma(j)Ch`k=S+Y;6twemSK-O+s8|fljVmS2Qk6U z!IZMX;1KWf%^I^}{KdSSq>9v)9_}lz{{TwMfx358iFV>kP7&Y5m3|gX9^70Xi5z;L zsX_wH7g6c(+y>T6h(j0_G;>U(eVH|P^6yigCLNIG0g(~* zZZ>2`?<|^rVyaC9(m?#Tx-#(_UGe4F%!ck3_m^DU8>SfqK3`9bOBM(J09_5cxcMvI zR<$zM+uqhbd{Y_5Pz?kyuQGQdd5~krb1SFfUus3)ZDmW;Tm3TwGb(J89Bp<}EQa9= zO1DLdDfgVdWWLs>&uC?s!3?gAlQYVxL~Zp+Pb&WaZI^dgn0Q&tphFKeQWbBPURWZz z5BTyo;ac0C9dZ@gO0zpN@iRHS-*~bBxaSjequtKiXu(eSK4RQe1aH&X&li(G!^ZA= zg4yz97EJ5jhZZg#f9;V@KeAaBJkC8?sunGrt z6UN>my4`6Qc!V;M_PKhrX~!Pj*Z(67+8R>cjh0N zGgInmrHwvbq>7v5l#d(aweR*>bZ5p9WqHYtO25`gsQNKDDI)fx3NZJV`(91DqVFF- z1pfe5g1WMk*ccJ|E96&(Mv7Em$mnRwLE={PHlxP1C4p$5FrxrZjd+@-=DUkj@@(zU zd~Cn;{FXag8g5x9_>ry9{{YNQV?~{qnNj1)CW=E46Lu7262y6L9H`d5=9$+ZbpDYO z@}$b$=1U;r#=+)pZg9(x*Kh7bt-Yf^^44sb3th7~lU&DI5dXpYhe0-=4 zvcn*xk+-4O!{CuV9E-r(mlhgEWTPnpg78FiL{*O}XEVAb?rBrT2KXr_Ug?v(d zx$QQn0G48V5fOKp&!A{c)Fl4^PK5R#0p~vV;X(TE ztE0%xQg#w12B*cmwAK_|Mn#hxa~U!zYLsOue50~CA#K?^yVq(gOd7T%GKr*_g{Z|r z<)l|{GTpq=aOtuPrXHIcTF#p!l#V2TpSz32H`vg`>Cr3@4(fT&ibvy-{ioCtra{KY z#=TXny-L3tvTp6&-Ep9LjQJUj;k%U|=18}`(`vEw*bdIuQpfbUZG46n1~KZAt!fg2 z6hDnEg?G>3N8aM$)rijZrAxJYKW9}t286G=fYf?PAF{qqTkP9VM`%8sT_6meCH~Ov z>$K=dYO=1?kxj0@Lw~WfB8)S;F*{9JnDH}u^ukIDjco>?Xh+O=?KR!n2_4x}@gwmj zlcjZdvHDIz?i5(<#+JJ|usyaazkWHI^!Bv*T^dB`&h%iBDdjQoO9$PO-YEHcWtR|T zqW&futJHsR#b#gD)8ojm6v@XNic!|QHzR<}l!7{1E%v z7=05Ranrv2vPgV$Oy3el{{Xt{*Q}RQc0W-ADF>KIPF_rYi|$pE>+5J5uV5deU;Z-n zR#>qjugh}{qNicXYWuW9vWs*|yMD>x&5^pNaz3SFxV{J0z$@&!X(0!HshLwdt9fP!=N9WUI zWsv#vfy`mpi`~bI*t+06!vjU@kkp@?Xwxor zjmX&Qqip`{imJ)%>nEYW?<`UB<%QhUxl%2`AH>nfte5wf$m)Wvv49?O4chs>rozl~ zNO4Bkp%v{T@vEU|viLQJ;Ezpbl!ipkUE1887mjQ;?4EJO8OG_3$+>Da$;t}SPC$CV=Yd=RH` zH?=MkWQHh%1U$3blk~WfJ z5n+3%s0ZHjBm7=!Zm)w&)9~_8K^V3sk|6TNz66oGtK7cpbj-}o?n}F|t1})c9lY*! z2UU8Q7U-t~_fl~<{^_lgUny{Ca}+WWv=##7HU1=iSl_Bj^K|H!W(YRK@>lP&ic#_v zS9KtNgWhF*f26~XPe%%2a}Y6u;Y?OrW3no6_w=zp4n$@u(wj#7ddccfwQ-@6U$UjG z`o~zm%l%L=aS}>pLrEjZZ;ts9H+DptNB5U;_ghQSx|2g6PYv<2;F6ClU%P`Fj~^mo zxg%Xb@4mVGoSa3S~r%wh#+bm2`hpd0F z>MZ!h6FMRugYhEoeRz-R>gL!0+DV|$Y)Hbye;Qh<{YCr9KW9^QJfN)MnjCgs8wcLX zgZPcRew(aesWjV?gU$#3p$CnB7sk8V8MrPMS^#UcBwsQ}zIE`o5^5}xeorwr6qNio zQ^y+3!phy-?PS;I)8u5eu|^9sdI0o#{5q3AAX_Fut-cf+B9H2?7qz9efK?>2kVtQS z(ygm;R}mCT9KbxrP8yPHG-vfP6!CL|?U`lb48zhy_tdD$-Za+8JW~XVFY& z%ElgH4or#%x}>^|2gB-_u}C{Ptdl3#jznFbUqcJ4%ZZf?Y0PF!a*PT6<>p18L3Xo0 znOZRz>T-q0T2h$t4qRKk-eX?=N6ZjSly$Z4tFRtbEtYoTl36?3i)!evP>HdE zwS~zK5O3Z5#0BD3_8#4H7=VCQ>g=bc?j1DPK;mFXrc~9_s9L;6o z!7Q?3MJY({tdd-V{L^j%LJK-E%Lc%Su)$NKt@ANil8Mba}^ zi!+KW@j2n&nnOEdGx)FN`?{f-EB)C20Dit8hHp_)g#Bf%qshT*axx97r)i9jy}5mk z?xoMplGtMgNo9Sf^Z1zXqWx9Vbxe_BTV^~*@Z$4V__FcI_I18K5^;M+!T$gjs5>-Z z$32@F{T|ADUe=B}60k=@GmVFD1SouRciXs{0yJn}uyUD!KSzO1{kT$a{yl>+8R$Hn1hFe>Y zjEyXW_)uJb-KB1*S+esIOq`3&NHbk8DE|O;6C_smZP!cY@eEWSm{dplmg(Rs1X)n; ziflJlC;LmN6zybEmGhekjDJGvXo{LNZYlJGu8ovy@v+`2`bCQW0JfTrJiF-=7h4+B zQZ3qj2Tzlgk8A^CxRua=zk4?_?&g`HW|JS8Ac5rLXoFH0liFqS??@^=6+hLlhN^?t zwCc519)c)8qemsrEdV8nI|Vql>hhDS_SC^BA5R9ZjHGip+f^vcewS3cO;X7$Z+g0t zthMhWjpfi*o-DK*DUlxc{MfDiok!E;#Y}u~*UTc2u#}IxMz}4JFB2zyt=GgTpVP01 z?BCEe@X!P4rGKRAx-SU2GHYnBX9dcor#G78mR;8zH7&5k-sO737 zvZ@41(N%awTZ>(X$ihwp7ZvoA{hd%K1Jnk#sHf00OgoSL2i_X8Rk6pI{{XYq<*6V5 zD^uvwj+cdzlpN7rP^?7%0DktOsPSoJ>)+?ISXGwhSWutCi4xN#zrB7f8Go0gY)pmP zA(e~5{>@wBKu?*~nODQCUWlY7ZXNK?9D>r5T+*~}?<-v#yb~t+>+aIN_}9gfG#;w4 z)n;du{Wg!#H6&0*sMgg;8)`Q8>Z8s-uT9e6qTuF6**MBOBV{zp#!p0h%REcm-(4)- z=&~VU>#4B*t814P3lp-vnz1{4=hNh-tDz7TbTuc@v$J0{g~^W_ut_Uak~VCLJ@o$o z65Sbdq74Y`ni5?{_lftB``kK@D-uH#@i3ApSG8DhviOwu*M-w}M9@Xlp#gFr2Wb8* zWAQQM;$H^?Xyo+?qsD=IURDY}r;FWPf1vd1)23QvmPb;pk`;pTk$9oSCyk$eZXO+F zW{s;f?`OE52`TLEc`jlA*|m)Z-paOta2`)NKiD3PZ246DeU8f9-iR#@8G zZjXCGl+{>NA5qhv<(U~Wk=5l9&`R)+zK<2(ay*Xm-NnGW&8hISavL`XsKv^~&1Iyq znFx)c%CIfy(U;}qTe$0Fw{Et&FG=Z=wiy`=(L82_IT0RF9+g}7lfJvU#G9*ioVc+J z>(8DA<-?AHc(Y?;i{lY>(W56nP;&JGmxuN16SJBB8oQmRh#;?&B=g6C!R!BTKme|t*wMN ztR08frU)wJPkJSkzEFDQf$1nnSawEP}l~=uY z%eT1NZh?~HDI>}~PF(k9fMqSC9~TVEjgWSIWP zAG?`a*yKyMmQ~;J>mw^9DovL$l&Uq>r~x93$=_sE?(61JIXNKQCWqn5r^K?R_x4-8 zt0wBX@()0jSN{N)8n&7|?8#?g#;-inDD_QYX#T6|en!uh?wE)x_Lsf--e0H7LMjjC zZSqo{PTjsqGC!K#VwhR}ob&$x(|||CYun+bZ!^6uw#9ENy``ELSB=G0l++RFRvK(R ztB)RDJ9ea~7=0q{7WRg)fBar{iW$SC@#RYI0z~f?I{IZuF+@8_ zcVo4kj~tHPHq$OsGvUa77#k1|1A+LS)`V8akc+WQl~)7M&cAu}x3sUA!qhcL(}7Qq z(X_KkL_HO+?1j|5Kd455LSC{ZYOPyG z7Myi6zIY5xv;pGo?`v*L+32uW?PyjukosMZ`z_D{yE`g%A?bXqTnHS+CS1U^Tz%wt z*y%$fN8WiE672@+vSf8heEjJwkN*JK@%d@?+4cT~k@8q_G-5-HAsbV$JE}(8n>gQ6 zWq&F4$j45Q$YNefOtIce*ptN~?#5qo<+(M{zm+UmF#2~-k;1UuX&I6Rn$zF=#=DE+ zXv@$ua&e@IOC&}^BrHbtj|AMoWAL?>dpg7G_(gGgtK+1Y^MOz<6?{ye-s4|#c;Rn} z9;L<1jN|5Gzb<%NwI9@b@wnfLUKtZ!eOo+$xb7zNetLF(eKa`n68y;;={6_~#h0^d zwLCg$S)*{ONd;;4O6#X(I0f1HE-B`eTE#prjl$Zdy?T|3vu0tQd`P|ZU%iXk5+`@W zi=ms>G5-M6FbD+%Y(R}q;=Vurrq$x#-SFx+#bkVTMKQE=u%$P7bnf{ZGd@*<1=wBu z=fa9Nq;ud+82VT^IH$4L13Qlu4(2#NT1`%RThA=maJE#$%^_l{e(eZvzng!T?l!rx zv3_>>k%?w{_uZR$o5&eyaO|iDOBBn@k^2HEsRQW#tp|=W%js4Ihv@X{<>M`W+Eq=Z zfUCwIvh-dh(=+heYoT98xp51d&*%fv+A=x1LN>A30PwG)Lk|gCD=F)2QThjK$syd1 zCGSYuOzyWk$X{rJ1~Ehj_n>p;_r4ydGD(u6R;*}}5Rn1G0yX^O;%TnGLkf0gP>Q9L z*v5jD_;j}KLhk7z>9Uibmr)RK4=D%UQ-4+InK8=B+{}E1H3=y0 z%sAC#;F%v%VrE8R%7N^bHtkma(l-=u-%UkGmUu%}NZqXsP6c)w+^fFvSC5B7C#lQM zb=ZqbVvo?U!@{2PZ|k?q7gJcw(V%GMjYzqpZ#;F~=0?kUt8r?1AXX5`Jg*(Xj8U59 zxqG?@&I6vs8(95Ct7xx7#(b4iYsh{aN`1K>_EB3w<;jLNVX;yP9DmGfH6%kFGUzG} zI}qZVL1-nlzQx+IHn$`wGC<&@h-tnWC$;xmygZ-n{{U{YC&4C2QfTrN(t++?PD4jt z;bh%z_KcIr)FhQeBr1yTiZ5@p&8y;)NZZmF)B0{*Tac-cqv|*5;L_zh%Mf9;9PffV zRHyy!)U!=oewzrrf#YyEZ}eW@cNf~!x!D5QvR?8$BeFRE0K-k)di=2G;Xf-Y8Sjbd zQC`MZUi418j=D^Ktf!{su>dm~z|H2fBk-%?mfw3>xmco!jgFJbgRycaqP3puJ0qJ9-X-D+~L;BifYN77~v$N7Q@R6I>N)OW7_>71> zTgO#)X+D!d`nqEZqB+>4jkW&(eztx{S8e0iqiY|b7kuegA{n6ODP-ox$#5N}JGiOm z@&f9tM`b`d^nORHN1)8*X2%@dM+a?+ZZQvQ9k-YGKJI|d#%7QWuL%@yYR1~Sl3aXT ziE={xI7kBa?x~WtqWIssmud_+dE(e+t%;y>P%>)S2D$9 zaG)fsQ+BKPe75gtC5+N&%DS5OmwQ-|q>IbynRvL)386)473WtS-@E1gZ4ueG@+IVv zUR-?2ZKMAH#b*|}Y(tFCBh$}lN;mCk^0E{>P&JXM>@URb!?C%1E2fVPWd8t9TB}JK zlJiqzBozCse(Ox%dBYx;pN%dwDgv!iiU8~zwYTePOs62l8Z$SXPz^>Kw%XItUF&|X zik+bPbY_);M53(hXaF9QrC5Pn6gMbgLm?fKIQ`oG8vTFB=5=7sxWGt|g}a#EX<2*l z!TYuRP3PU!VaP{g<|c>iwKcSM`6j@Lh?6@aJVhh4D^r+$tas}l7pG9-MG_=MdkTR; zg0$IDDpa2(O9e@gK0BbWJ95k63f^?Eu z4P4w`;g1A&9u?y6YaJt6%E+m2p5^#$_Db(*x=rmC4^JH2oRs4EreE^0M1O(z^7|Gi ze@WE(irdsWLvnhAYuPp=q*o#z6lZrP9}I}`>3ZfdY@U=545$=b$sZEu;(@-#H8*6z z_>k|%@e_NHzq_Gc94DYgNX~6`)QS@PxDRC!W zC~}m-Hnbq4ckFatD`9lW$s@;e?W3NK~e){ag*3yKtf z>Lmcv+KB|3Iek+J78H!iWXG2BKo@`0kh0xw-P^RXr0P+?Drjgy^lH5Det=K=G?_Sg zgBDciP0w%|3$mFV%;$?K5aBYN)L>83Pb0bqd>GO}d9B zCB5L4WVf)e97?{`x?H?NbW&E86gv$WSa(@<>edfW&Z)x4=H7tNNg^%q!yy|?ZM@cg zCA-?64lt-itcaih5DRxycU82x7(pQF*v-wv$O46A9mnxOIQUb?-bU6pT6E>%^$^`V zsKDK^Pqriy`;%Xa-XxL-)<^RGRIx|Y5=e5OP8O9~9!$jte%@8h-n!=3O#WBOEapaR zoZ{8EZJE{|9j(WVkB43f^CWG|XjZp;P5D0!8&Tu+S)`p&K(h&gC$8x~>LlC!-kT$+ z;j%ems;tj-2YK&iJNn0;`F)NPfXxasGsSoozcMDRs_5T&6|BA;e4kfIVaZ1+JP|2( zKnB@VuM`K3B=4?=Na+#F4^AKnrj&BIh`;)H5x4A+{q(PH?(VGVPVL&8tl_|04<4dI z`>(n#lE|BRxqba}BQ;anzG6O)PJ^MUu&6(gQ`@hXgcBoeVgWQC@iu`(aJLKE!o?H3 z;y&3e@ajCJmGW`r7bK!pL}Bc#Ti;cU%dN4*ewUP=(_I-lOwls-m}X|#{nW%=^<>h^ z)o~=oQL~%J2?xw(j^Mvu-9yzIGbJ)+y6#&cL}g;Uu?sDwQ{La=)%`}wGlA8THpKjzSt2K;~0JHuN$HBUa5uJvTQ2EXN?VX{&UK4xX}!W-^m{7yXx z>qMv&8vq{fW~9&Q-ACo+63D+SV@HY*jcUb|jY;|Jo9=H`-uQY>mDk`HnbK53=x)cz zrx(i1-IDjdR%>SP->#e146-6gCkitF&F-fYYFK;@K>9d_x=&M{>mkf#V4~)+;&qaX z-nWX~MTgU$n~MtxWRwGIJw6<9-NnnT?%plkY}iK8^y;m~rj7Lae?GQ(Ds}Tq+BQGY z=5MQ|&cd~41XWK2tLKVfJ5{`VNyVsowiU+@AP@uXXq;}#jXCqOHtN5BNj4xU1mT(D z0NR9cJYKH!u=jrPcW%on2(#II0r~rKf$pcKP@htIPtSSnYwS#)MwAgCo; z{b=-Znh91A0W$L2mqXY@w%biKZP>z^DEvxjbx>$Qs6KFYiPqnS87VbCcOd0V-&gNG zuA0V4vXCi|R1$&3(QNMCo6F+XA;W{86uBuDMYXJPxFepRe(mh$e-7ezEeB z^roaUe5LBpEBrN<*;dwx9hU2U?~dJc$a8aJm7;fD&D%_YD?$^^{$2=ADHr?BZQbof(YjKy;=^%J>|LtH_hQZBZ>!V zAxk7-QzRYM^X7qlz)@ zVk$pRcT%u5vDnY2y;$WYdc8{9Xq6AWD9eh`Q&WpPVGGzky9e{rBKSY1E-qEhW zHJwURo)~QNGA^jfq;DokP=#a^{`FZ>H58PWHELsx^r$@F~ZNQ1Z&mh6*qNBVvRj) zvZ(!**ThJq^+fK+{{WY)kLCOhnCK=|CnjkvScoCxnGi2AHG6o!#Bzt%E{Vbe9cjTv;wvW9gDeP4DhD=d+=SpVQ;Oz+If| zIy^~U_Cz)$$i68pk#+u|(%a;6W&y){?c<;F};3n&2wdIqEZC&k2i_sED;hBRnyssdr z9jYW|v)Z!VeD6+4pQ=WpIJsF*i~wfdGCEwACmVbz9k^9>@?Br#v$0kwk~{N{-wERq=Hfe>tq5M=xZNj~;hx(Q{Kx9;84*?kij zH&rm*4m{)l9QPz;Hr$^5uG_ci->y94uE;Hu=U104KX;C;@Rkn>V{ZG}r(qqn(T5aX z_p24JXda5_pO#_tvXA!YM?4ZM9>4|F`U>hSe0*6RY1+t;(Mvbh;YD5PByHH!dqHzD z@FvSWtIXzG?8gfFJZ-D;vKb`voOBU?wZB<)%3iaQA}r2UD3MyH!!2B|wLzhnxpU_t z){-y;qaWVI`?lcbEAHsw&5tT&Agf1hNT$QXro`#^l04C%l1hU_Ry0D^?ceU|csh!r z6#?>U8CnFV!MfpVNs#Ti0{m9u)sKysvUV8GEVqwEQq5N_C&mM`&jhik`s|kIO$!H& zxLHUlY3OCy}KxoJ}YC$LVf@i8v( zHSqg-Me0#mksjElMk^u{=Yu9a^!)qyQa&cW`iN#fv?Ee72v!l@Zt8)5QM5Xa3 zZU|&^beNO3;lnJO`10^x%@cQYI{yGkj2^3ov~(LjW(wTc{{Y`7-eR|p;rH}$aGB$T zZnna*G4CU<9Cq-s=wYNT8P?_5w4UA{plf>?T6?-wmMIWCh^FNrZ92qG>;>{0=!{W6 z^BHt~TTiR$(T5qEHf1y`jw+!0Q@6tXtpkmX1V9~^yE}fMRn)T(k%?TmNWln%@dUei z)@|)`u?cK8U}eTTRNQSZ5ALP+cOS!}hZy;up-PAp&>-_ROrL_j$KHE7`QD``I(689 z3M63nV2`=)@wSUGqJdNN4%4OTF0{((ZYMsFhjSJ``Fr1AQ+59U<>V4$f@H|ULA6H| znHYohrN;WvcyuHHHbKe0jNGg$2=jyFwTG{^gda+<;cshA6q0g!jAG$1U6V)Ibg}GL zk~6yP#opIWgB_@2mFRrrlw%{GrMR_W6mq~dJsq|B+9Yj0ZE~@xB!_Fc?63QM-7XF< z#GH$XZ@Y; z)cTnrg?TXpQ4nw1nZFiKsJoi^&YLsh zfWv|~)On*oziIcRZ?&M1BF2Nvss_CJvT?LAHVciDY!(lnOe7!7MV3^lz=H zx=&T+%bSTKM9hjP;2(!CZxhFD-qxhX!Hh!;fTPGCuf(MeMvAB{O(>tFEV@avm{G>|{C#Dnj~_ap0<)*-oneE_XJsWJG! zo!_u(H8e(H3ag*dK)3qOIR(GxB5-Ga~Zg zQ?OfEJ|vN(dx@hhC}cJIqla6BAE4Jt&Y_ujN!H!Ex>gFOvZk7>Odseq)NvlgQs11N z86-4C+DXvKm?uugVRD>+OpFg<h_9u-SlcH^4+m`Lq>n8z$4Sc~R`14)ks5UmPv? za%*AoQ9(aI(UMw5o^s?U1LzO+4%)i3M4h&;g>IIhz{{Y*IEz{@WkJUjlJ>wDV5u z97qehyHF1Evom@B09#UZS{25L3S+75ux;iM;+gjQn#Jf~lzC9gkmI#uJJWq>S-C6q zv?jNf*%V--U|7^!1b=6H>uIH#!o-5E&S;=}RoD7gM}=dBNNkx@T4eLb6~172+r4hK z`2*)lW(&1bV#W`PmN#qf>e$JVy?|TxYpR%Lr}t0)01mc>A4)L)0A_$t>`!0_#GlZ* zSy6~(HAhoxD-D%X=Fo?%g$J-?0YyLFui-zn_kQk{TsaRY(A#y$dbR)Qf<~xkY{(N(n&TmsQ?iGy&Q` z{+(q(h;5XmYf6v?^H@K5Zw8Vqacn9oqQ0H1%zMt~d7E7)0gn{3A=`(GSH&-PcO!*+Gt1P>_iv17XUM4phxEdsgzJ{_Rsi7GIR=5vh$b0@krH z__)(1?=mLhP49&+`uDVmn*?gAKB%`(1SjAZW<>KKZRU-Ai|%Fc@aq>KQ+PaQX46gZ zebv?{MkQHiEi9mbUdaCJTz8T;f3}ll2j7Z=Tm0-0#y*#uj)2DOHQYrG&9w5uyf^V{|tCoxpoNXV`q4QF# zYE^_mF6I9|% zZgMvA-}koo9DV27(#;bGjm1@z)Dh}op!mBoVRf1l=#n#XkFG9{>uMgWhRlV<%0Z(e zc1a(+kGSik{{U6B;C-CnD9h`SM#8?x)~+%~BcE0YY8JNvgXIyZ?QQ-3wcrDW>trX+6Ef-%d-kJWSYXK(K{E_=J>uTQ@p z5)5SKF_7+NW=M8L5dQ$vWAhz;A2t5~6G{BN&~W9#%bg68WlB;(j|kY)@?tOXnYS^P zMz@*0y=IOs2n#gEvb>FS)4vl-JdM9Bjm7Nnt*NS=gHEOi9w10ZQYypKYjFEISuEwl z5Gxwir*9L#n&aWn>%A>YWx$-d(M3#<@vAELrN=wV;!O#QnFDPMO>3^f`ZO7K5Oxu; z>b`$J`}IbVLG)Iq`ZYz7YJGJ6y>q(?0&7a``aE78f2cf+okt}{Fq#mtjp*^M;r68V z^swiF45wgW_iTQj!*6?cOeV^i!ch1Egy(|u_)42;6j8wZG z>ZgnKbzY^9lZivcEKC>vVqTxErs};h!{Rds$bn5_k!$fJRUdVbi@(f|i@&9o2IfTS z9T;r|SX`_=mDNbmPSs&Tr)VS4%6CuJ)RFY)QynF9BO+{Dh@oJ;-X89Xundd}vaqNi z_Nyt_%5?et4H`@VR+kiQXngG^Av|#SvAC1)^dyc&WN}bxHjOl0-qrdJvHEJ8er{xh zk=hlH#6R-x(!~mdiZuv|I~7z~i}rkxe>6Y`C{i5t8w0{m!^nDmCM1WC_b&QuOtll@ z%SwvTm4@<2jyI#4J~*XKWq&GVkuG_GrpA~Ge8R?WgD5X^GahA)GZ8(Rlkatp)G=R` zHfAz9xKP$RF4JRdZd{jcwwphzOUi~jL%9a5$8}aX*Lq21Z@Y>yb2jSh=5h?3GC2XV z5pO&KH)P0t^@>jSAwKW%9kkh4keM^29}_PjjJXbb#pjmhTKHqJHO&CoDg$3NM(NwG zn}iq`qmF5<1QUH$A$2{DA1e<^RQ_YL%0e(=J7{Z7Af3YVTGa>6eHs@1(;5#^@c#hA ztd4`1y#{D9BA?zU_^b5I6|yh48))LlNrlKT&Dv4N-QVr^d@{#!=`*pHl?jvO@?fbV z8N5+fZz69Gw6^P&Fs>#!4JbX1{87Q~{v^K6q|64eM_6F>s6P^4@n7{7e5DXonUD{p zvW5L^bo_p?40B?pRUeqOQfu(b{{VLH_IR~48Kg&t%5{>o3bEQ%y^s-f$rPewMk=nL z?tAUEOJ}F-rmt3dTJvd4T7KT)R5<*%Z)Oa-Zm8u7+TTW z-neNqv0{~^hwcQ^Jfa`&Rm}q^-B;pWT(USmnw?TmvJX#T)3oJr@z7l?j@tr_yIZkW zSzT%XR~kzqf}(`S7^2EYo0{dBeV-@F^!VQ@e*{A6d++yg{btY|W_u&;IM}<)eVJ$e z%xm?v@+*Z3L=-8FqFth$`__O=!-*7+JqEoVOgzcRSn=f{ocC5$<#QPR z?H=3xjqdKC=}$aDY34|Z^A@x%Y=gIM%eAzK;fzwJU;t^cx)2#Nc5{#2DfWMSecjJ% zSkTQOmo7;kDrar1KpeQscy`^(P8)TwooxP%NRdXea|mj&B9s*KXxi%t_7r~8YNIYf z-hkslGyXJ0fp8RY{{ZPfYe0^}L+I`GX?gM_Ww>r&wfZZj9XSN}4of~8wV_!4E*!hU z65aS4;J+5;pQdE=e5{Di63WrVV|QK&?qkeOC6*mz#TFh!oqsN?^Kw||M+`j4qdy8f zX!p4`d|7w9`i~V2RurLQ=cd<@{r0OixqmYeZ&PghTsje?!Q^fgMQ117Sk;Nw&0=)( z6a;RZsRS(kwT9UxRsQ#vrN!&m(qKr&h|*BR=g}5YRu^w&nIG8J-qEeUkzF=Sq$CJv z&cp>$djVtTZ3EJA8c0w6qI$&*Jt)pOlYfIB*3f>vkokwVkr6P!K9HXpZ}BAhy2?0c z?b2pO`DBOrf(U2AMK1j1 z1S)}ZJ={^-ZP%-5pBTGh86-H|<5@Wuf0yRBo%w%T#l7V8>tR2qL*`I9TH8`ZE5*Z2 zjow{aG2;~MDz=gCy6=q$v2y-r9Yq!_z+|BIau(VC-TGmf)FsAK!yXsHRr=fV$bI+v zx`U!ak&~UDkSs>XmEB>CY?mrjTVt{n;k)l8u{91RG!2WB1Yr{{1}Ql--g#fLYukO+ zRdv+a-B7MyLCz7!Hf&R z#k2$Q?uq%a?{cE#?=q@sXXdUDIO`90?;aM4BWn6Bf5EMCaEN0juT(0~ zNsL$G!6%=dvI|l`I1 z%92cpjye|?9p_YfQ&cOR`Mr<2U0mcONGa$8=o&OuTTP@eD!}&dD|T%1Sj2&_)lCQ>+@u{4mEI+olTyrk zUPe34{?mCA3O+oUBY;!WBLw}OEOClMii)Z|(PC;+J3S`5CoQa4>l3?;PhXZyv?BU;*+jNZ}waS9S&}p=JCh6GkNv1}P zRd}7qw#5D%b-H;tdzx5>aYFuql?9v>F+>l3E`04qT(@MFVxM*%E(KK5*<;fWP& zjd!=d4($p50Geev^XxpB%Oom&6kYi}=`_%{Nyj0NXa!ggLb?#bnvbgV70I6)9%$bu zrq?{ulDQx9&EW~kCt8rdOM4F;%OUtMYn2QtZDl8Jab8k#N*CaY;1gS@Uq># z>^}anF(RYpV@Bs9LA3JTjSMm{;@|j@`EFZF4TS6@etm7Og2;DNQB-UKnz}P<4#GBR zWNs~?sp%T#cCpy2=_f{6P40V1{{Uy8YV;*r#HNQ$fs2&*-^>vydQ9cv$Uu0)@x*EO zix=H^ZPfn&{xt>v09V2{L4f;IFaH4CQMfYHo!FW?mml#yF1ex}WSzB@i|z4IwpUF9 z3dZVDlns<3gj>U@F}f@lV@USN3XlX2aYO#3^?3v7iIjn|M_CWRrz`-Yp4w z-eAN-_;9USo{Qga?CD!0D?1_~TjOa$hdyoS)nr?ID%vNcWn|&MnPhH!f1*lAKCGJg zo}`N|12v;65?KK}B4s}k3j2GX#MOL@JWlaUoH9nmSbYq-wR(d(jh_-UWA?4q-k|C` zD3Qj$+1JMEIc@$Wzp-w)vb={9yVJ_-<-IG8u5EAcI5c`bGMI7p6|~ir!3?uh{vc)7 z{{UvO(3USSd-}#)D(&Ti!$lnFFsCEw(4~FA(e(t$>c_S;8v_Xc2lrZne zM&;i8o4PC0@PZE>M3q1C;{O1TQ~dn*5~-x6qsR>09WQIGdv>@4UyTtlgXY4dsqg|}@8v=T%-{D<0HZ!Y88jBiLqKEjhzYav} z+)fpJQlyeeW+tVH;$}W}Zzz+hvCNmY&KOtSi?&auO)OB`j}^g5MA(W=3-Z&7&MS2a z^i0WevzUv>kg~F#DJI!$ZQw-FW@=DWl6C>~>9D#(l!Vn}$r}p}^mxBdV^8)pBaBg3 zuz4@RKMd`7816T@`ZRP{VXIc6-eWfeaaVfh;rDm7FHz1nWaJx~or*sWB>o&ryX4v1ub9laI$Ui@ zBnFK;4%}>G+<`y!85~ddaqIm#A&oH=3M@*XDvE5g*1jzUuG&!kZ7dKel2_QOKkvG} zCeX-`iL(fylgz%vBfIbMwzhc=Mso;RR?{)2(cqO^c4hW-P9Hiku;)LCjKwzk;*lLBVPENa1ap+3}2x%HP;X29~~gG-{IM;>Fh z?wiH>x@VUjSo(HJyCrI^%agO_ptEaKf7GXY?>Mxx#Oo|AOA4BX3@*Jrjc4>Q$L8@P z`HWJehWKZiimto$*zoT6B-U?K614G8hK-LTt#hD6dokqixQ^|~IJ>Q^ALS3_+1gB@ zixgRTDcO%1OQ%sN+-%7%CP-vhaCx6V_wh&ed6qY;?%h_b>4equ$w0z zrn1Dqk?`Tl$^QVYXy9Lm5-%b(-r~8mtAzqaS72jSfBCW(ll8Pwg;jwBdO_{eHZ1QN zs3a?Zzf zNiFYL-qT|A@QNY;%Ph6BFnC7p*O9xa_O*5{GW8sP-(#B z{o1+WSmaxxyWP--ty2+0?M*SBOk5DFcK!0Pr-4$$zuD22Y~fl^ z1%PZHS+ukBPFq3?A|eFZ!ot!u-j5Es9YzTr04O9<9f0u4gYOgC;?w7JnG+kS`XXP4 zDez_E?y9N%>RBTDT8F03Ikp>utVDpSShB{hcim&U)%JCEJn|v)?YLLguU%4T;+xk( zhx#fsZ^mG0vW_WTG}FT(tZG?_D?kSp_KfkmV`CO3D9YTydyM-+->D~+y4M{hxcvYXsnaPsPcMS2zs^* zf_!5AsVEd^q^A}(RChryu=nw%vi|^<@iERK%b7Z?;y@(AiR3a*hGXOBCj5BPr*>QS zZPA0MPTfLW41*6x#K@4^lE|U5aN|+6sq&G5vY4U z@)i45Xu$_Y!-{6uv%Yokr|}*U5={R9-LDp!FLimG z$MI@h{{ZEwWf>}^j1!RJRZ(+BvQRv7_&u#Gslwu;)2a=p)wfMFf`z~e4{bdsTQp&V zc%6m3!`<;Vmm3ZypCVN%ktY*--eg7Z$os3Q*R2K0%g%_yF$!@0TQuM24A(=9vl}wh-~JHZ#*?SYM2!-$ zkok)_uk=T5o2AX2lP^y=@i>8{Vt|5H+k4Bq-tu8$%eFakV+=hY8|nJGlOHJru*?W_ zZo&`!_k227U5vPM5;5jHMw@vPe-#&n{{R(rmC>dF8!H)_6Ho(NCpD6uJ?8R9)4EJU zGpZ^Zqq^AP40k2Xn0?ZD(l5W8xV`O3)VjjQ)cUSNT_!})f)`~L99Wv=iU|9i{{Rzc z<4cbN!rKgO5)~uSZMx3sSYWO;JfoDP*41@cIbfdZGj4l6LXHC|6d;X+dNjYw9Zo{k z2jr!5Qb6Luk-Y4jSpFpVecd!t)WX|nJ41is*ERMk>{T9N{{RuzPg5jwBTHfjy(@0O zgT=qS?&xJFRmo|E3kgcRWckBFMJ)Gp6Fa4uGC-x!Oco~gsVL@0?(b+0s>+y%K}>i%-h)#d;6ZwnjVu7mcvOVb8IMlEdBTPBhvo>t4jIvy8y8%F+d6PTE7xO@3w>q z5)~cAP_d7qHRAgBYS@)fdK3ZuT4Upl8~ZxK=^*S&vZY^G_;~kza?HL>*}Yp>bgvDvQ3dL)P@u? zNZ#y8w%=*DHOzydUJJBj=>0}Mp-;igPE(&!WkI`l_mODy{-p%CS-@A3Fxq{nBwvS+p43gP zx}gAru!FP_=p#ojr$mZqFN^@YM+}g*%NTt+7(dMU6Xd}i1X8=1ET?jK)bIN>w_*+AeFe)IS&dDmS=a;hBIT}=4Z21%M;e6$uKxhi(u2%q_O8=)@8!tf zD-JMBxb94nz`g14*zJ{5@gaYSZuC!f=AnWJQfzFX1P^hemh6$Axg2~_uY+IbB8REw zWgs~jQzE}IqlOUIEI7jNg&cj(E1!E$)VfG)o`RKWBCXQm4${%rdm{;aAAgR#JjBpt zHBtctc2M?egH6^t%3sl8a+vTPgC<2ZlOlf}G%xVri-uQMl1VsD!|hN`VaX zL|CVoxK^{`4(9fcRQ_8L;pH*AmI)9!^v5IwONl493-bQ}ho;3HTd3olcW7mTM@M+w zc$1#dmu2rqCEMw}qnVK;xj95yX2_AGlHUTe{n|HqV^!8}E+0=!sdF+p%R5XXKrBea za;2>$W99DI$A5QAgZ$4Dborz<$B>L$8OiQ6k89(}{qMtX-gk5vO;qg!b{#GZZ({Wf zs4-;pnAn$@7vD(iZ({9i*gHQri^_@iv+BrI!n*l6iPAJ(OQF zW=|i)npf>;k=7*P-q-nfB9GP(SM8nu0M^rF2VIB%{XoxZS4N8 zq@SVmoNT$+mwcJyQx>jLmmmDg3DvV1f*=72=ubKD1IPKA)74uiq=GHo73l|nHR58}J*LrD~{`Pq| zo4XyUq{hZWHcXomHSIs}An!htKdYgeGhsqU!Hd-re)IU!?|5~d)u{QV{)J!2+pd=x z;TZ+b)JAdrI(Vz`ZY)9VBfF_oc9d`G)?^(zDKaHhh6^G>%+8CxeG036m%Ce~oB4uq zhXL)!$04O7!zM=rU*Riz`oqTP@GdlOh{e@ww5!^WA#LY|Ug1K7lOy~W;t0_pPeBr|16#^=%dv>nKo zy1#47FHy9xmlj9>0>2i#%v-&lX6tAP4bmExK9(lw8|yLhZSup?dVQlOAkz2XjYk~v z`w{qi@42Pvoj4X|-kxUTnojhRAJ~tD7xEi?2Y}qLL4>$=(_M68E81C!(+oGH>SjYix+d57XGA%CP^SvCdkmxTitq&JNw!LCE8m> z0e!3i?%&&QhP*lutl+AO257;0dfU^ao2umjET-7ncL0;&iBI-57fm}P%*aI}&t!iV zPtCD)7fog{#P>YRyh1eFC7#>xE~ClEg(40QB@}FqKEY2El5t5Zd`9x*U_$p~VU!ak z2rJB9WM1%e?=Gdsjw6s{WCk!RRj&P4yteBzq+sI9Dq_f?OAvt;MdrmEk0BIgUDft< zA?gsxjUyT@<8{Bgm3|xjty9Y)Wp86+D!WDx-ZOA3{{RVX-|_J1D4+mP0001b6nZuN zdZ_LGtz>fXV;NG$;aCDU$lYr}vi|^T-7W@A7E}d7&;aT;NcN;o2^Uh~9>|+_+->Op z07nj&IstQ_wbXaxJZbL^IQ^|BQt8LwWH6c*9g8U5v(?W1yVqIy5D>|bAeNo9ET;7O zkGoACk&PqU64^7{O{?0tke=fH_MYafKovmP2VnB;^0rP>h@no>eLfW(uIIot${@jm z=7+rghRI?70Lfpkst=>`DXXPmp!$1%-gNTdi-EMyk0>gVgTmj#nw%1Sy;A|~$WgzK zChV*Ae-VAS_2{Q=wx}oQ+o1`O+8}BWu^gaYQO>!y5NvjePI=@;;!)$cV?%@#`wW+cyUkveWS;;r2Lm zaRq)}O1uQ^qW9td01Lb9c`-UNF+-OqS7F+*jp?0zt9Mu0ZAXWQf;@OsBxpMVjuEM{ zoY7*9+P|AoNi@j;Wej5~S%5otyx03Z-6{rkNytLUy_J(8?8U`J;2t;OMey%FgxTS7 zkS!y`h}^NS@#g$_{8n2Mdwg22n@Don?1`8pQ79}+9?QaSD(jn=+{g0{#b0rJ-?gJ% zy6iurU5E5)hsa{cjbw=ShXAkVyLU`_eqSRev}42!=*Ro8eh>W37s?8i0@&AWJuJuj zK3-f)^B4?Cd}`2-Oqi^G?fg;w+v+~C(j*fsO}w3q0po&r_@icDtKrsH^4yX%a3dFq z!J(59M&`uI$Gf$$r?-LQ(ZJ|Wp<3FTW#O5`C+@TIWI1xy$H}E(T%rt=hrr z`F$^_V`IX>BslRYkX&s%*-@QxF#iC14;OuP@|{;8V@Oa*R!It4O)JhsX#T4~*J^BjrIj0DSWJdgv>+dhB(K6T@n5X2 zjny&^Oj$~qc(MaU$c;da(9`iCxmsI(_9-KgcW%_u^x%s)5yJ>0ab8zkc-fcEk@GLN zy>6HJXCo=|aWb)=Cmu;ciBd?JQz|CqDkH-uF=mT)=(nTZTXj?C?9}KDXc0%#Z)UQx z;x}W(ZZu8e5q;zR4K38y)3EBGl0XVBB+*9-EqGCUI-%MQ%^XHwnZac!VkVA&i%-kQ zd%wbesM?G;D#1V?_KIxsd`1iOkUy_m91;1>p_3iKS>#xzKz1-~)q8(=8+WvMn=S3t z$&WKHro;Z-2{GWA9e7v@e_7B@p^Tt@@HhwSMgIT}i;sno=9NeP05N|Ne_KZzDQu7m zsT?dkQMY^O?&!?9Z;_0kmJq0pRURv7d5XTnU7;jdc?34lM5k`P9&Ecj&Zytky7^4G z(nuJBz(;E}4Z&G~w#xBpzJDV~{3;6{plK$ZX`7u)iM^1+;6v`kAM3Mfi~%074zHgU z64l~WvA*0^KkI8IPKJ`^s-E8@oX~;+Zz!oHj?anB zT3WO}cW)M^L=+1p!{|HO&FL|akO_pT=Cvjq>prVppoqw-y8x)wS8aO;(Sj<38ySaq z_(!v(#>G%)l-hvy3TFZeyRAllGS~2 z*OerG?Kl1HQ?zR@C#b}^IoQ($M3h{S#KP#LhBLWzjdwBIP-J6^8S)@71)!vtStMu& zb>X?2MTrWlQ*qb;9jxB&va<1oxbx2MADXM#eLUR8-|{C*>EN`|Z#xgekH0H=`?334 zSRhdzCL~}gk3x^>XK&WiWKKetCP^5bgU|XEbw5&Ch~*(62e*`h)M|eddHk5M#j}wA z05KzYRX?>OZZ4Ivm0v1(QV4@^2axWxhru5gwZo}!`mFM1wB=cysFt$uHYz6U7X7FE zO%*EgmUVZXnv;u8>q9b7!0~ZM%kOdBsqng#f^6=cHzDQ#4r&!yv2s~gV!Y5g^J%-y zSGQj&hZ;oF$Z{sI09lXXN#b|(pAV7xpHO4UUDQR|@;Ts!74JKKqVKk+>Up78Cn?Li zuVQSqBVSJ~6;|&p8lr>{L7@a~S4JCE*SgwRI)oAR6;VMUepI9n-fU>3Z*Oy72c<}4 zr{Ye5e@cdJCP!0c5yev$JXI0KPiyaQOE>Wwhq%5}#*M6Oi4q&V7qx`_ohA+%2=U<- zqK?WA@%EdEn@c$Djg|iZLDtVcjM*-*#yeU@3J229O>+MLmMNDqr!BG=9zt!c$z8b& zJF34A+S6q7PDGNiGD^m*>^2{>-Ch;)Rpbb&LVxm}NI_+F{ zvmh_Bta%c@v2tCmqt4;CLzmt*5%)U<>5bLG9J!{10FOZacMK|r7#fO)B> ziC>n^i~~}%By83>e3g!3Ik1 z^FMVuCdasGusUk1zvuS5F65&chKn zD)Gr8HNft&v|HB?tE`-V<(XR}qXk!mnOF#%k|o5AhB;>IH}h3pydC&G=T{5ccv8}R(2H$Mgm=L*YnpgSLou;FJv zylwUFwu^KOg~p8b<7B7ILto*uo^&4SJ14WIe7=tcMmp5AxI{}pJI5Y-XSIAOc9%1w zWKD{)i^(@lJ^Wl)?s zT>P9U{{VK39x?7gIFTd&01nM2S6IxOHfVtnnQaRlb~8l`N|CF#4>ONN+=WrJld8h% z;P^;C)vdk0k0m^rSy-8I;9}y=an|U0uOq6fJDv1YkABtfXwK0`)bUVNpAxGu1JCl3 z{qOiP-|Xm36JCb2AW+nHs{_2Qz2$A?@-#9Fk<_aXNIMRr=+n7_5>Syo^gbpW;gQNdEv?wd>Z--Dh;1Ow<0Wj(%erDyhesFgKv3 zFIhG_NxPHBYR5TO0p^Xqe%uCY|J+_d?#XRJb2D-`FRKYr|)Y9 z1cxRJTrOkJ&Ws_w!lFWrydS>K>AR^gI+QnLLzywiXw8#HCEo&A!!Y9 zSIfvfp`Lo0j>@vC$-AMM(1Yd$8`zl=mtjxF!j@BGdr-;sUq>G)UM!f6l{ZByA3QR5 z*V(&uySfX9kk0Xt=#!AtVc?sMYr$)7ww6+bB&F6K)jj0ZbTDueos{FS>_lJQ&i%;$ z09pIGY|?qzG8!3}P_;W*M{+LgQTTVbwL`QYH<*oe1c+MSJ2gP;3IbEfv&deRv=c$v zY33T}{d1{fJ~vI4QB0R*F;Zk@j_DBmJ+0rjS1F+#gm#ah>eD4b*}S0t08Y1d6WT!S z`gHkuZm{FTrR0yV!YF@4sqzo1;WNnNhP8WX*%*@i;`3aAXrc8;Ak)ZRF=l2td z+qsvYsLAvgm=SuwQ4*My{T>inp)5%WJ-_qr%5w9ESFiL-=V@c6)3- z%IW%v*#^|dQ{9TZf8Jy_#CG?8Bh}=!m@ytcO; zJbH^Ql30Y%q=8D-fyLC>qS()I9jbOP`kq?$YyD0w-ig$u3znVSe1|qgoStNdDeZ?X zd$P1s{`Xnn?A?rhnPVD*s`Xh!7^kP?q>?vgi&*f0VF_x=#&x znR8O7lw5o?#XFqKcP8NYi}2SAr$V^!F3_qwN#b{7za)*`l168K_md&e?+Dv&j54T_ zCtFz&Exj9lGcfH3mmmT%t zy47A3T?G-Ar-_X|%G$ao5;YGHJAev0o;cWd_IR}YXZdkiRz3N#0l7+d<;Je`Zyy^& zz{_=-45q3@LG** z*Gkrh#a{Bs#)rr=%}gY6@&MaZuiksm@q3yw;pN37bfHrjI|!=W4{AE_w+_B*r`XXs zp@*>BT0A3E-9{za9P@xargDy)CrZ%TB$(a zi!6!F{ujNdC+c$Zo*0BtowW;Fn6-GMcH?hnLMPaAapZ{)p@k*=WnDoVPaIOk8l$9) z6oR6Mx4Z3WurV`n<;slFqFEO3X?NZ6w(j=tl6aw(A=aJ<`LPH1h9xY}v5VQgxA?8% z-M2uG=+boFosOBEb2wcL3;&eHDaq9 zJ&_@9OGNTmuC0FWj_pg+9gK*8JTe~FiMTKJ)9&BOy+$3O1tm`$XN`U2<4p-7HzNSb zeJVvk)ikj}rb%4UReMR%m#G%VwD2(BC&3zb*}J{nO_3~N1oE_^G2E|a@bCAU-u9AN zC1(hw1;VDDU|+p&wXL3QKS|F20HMq@Q~SA3312{V-e2N-+RFK*rbEF**}E%-q%M^4 zekX&ysyQsirI`1a?RWg`NiWIPrmMf6aO>jNM-)V2J@{NH(QdbrXEHxrxF#Bf1=Vg4sI44pXsGaPV;Wa=-YqGMf^THq~qby#laIv9zZckknxp{ z5Zj_j1N=u{X;#?#`UAIMr8d-4ioPE&GXh45+q4c7PZBoa)8jTgok`l#&V~ItPDe)|PQopwMX(z^+S0*N`bu_6x zvAuheaJGZN@a3)1*S0xVwm1ET_FGk9Yl1^5?N%EdKC5asW3?kdKC|uquONm`yDSS2 zNL}E+YfYCjv(SL3g0Ak{BZ?*Syp8_=7k5q7`lYYbu;A6(8Bx z`Ke}~)g+8Z*{!;^B?vu{O$CtAn9)=MS&y)Td9)uk>>N|{8JHgm@WMU){YiV-RWqsDy%4cH# z0H?Boitr`z#=zV0F?U>3!@Z%A(SMr8JnA;ApXI@C@Re-(_j}r0KB)0^oNo|d%m=fR z2mb(kR@9id&o(Dfjd{N(F6%uuZuc@H989Ub;$0NU#fED3-5Q_vU94Fkl0%O&Nepnx z<@qEF{ssH%3;wT*Sa~>zlTV2c%S#)RSlxCu#oD*83wU*IToOh*EXS;z<#`Bf8p7lYoyb5Hn_Uc{Z_y;|211M9!pXQK-lHY5$YNzK7^TfZuVPyTYQ+1=G5Xzks3?^DoU}omoD%ZXr7tV@kOSE z+^IV~{$!e@^2Hhs>`{aLExY=<<>lbRl22<)fsg6#{ar6m{#9#cgx)Z+SiBN@5lZ(< zizn{duNB-$rb*Ih9T>+V$h%{8*(5UowO%&e@V64~>zf0KV?E_H{XUN;ZoXb^o^)?I zw}^jhO$5T(qBLrDdoI4i>PhgYSdvD&l<8Frc8c5%-MUj4~u^o=K6z zBi{UammeFM7G6C$*we<*%N=-2#@tBs+>$cL+H)h^tkpqnEfnFee{Xw6e1{Rny{t~M zy8EdyfCN#np?L_h6sNZPea%Uen%vyE*vT`UwPXF2;Z1AdeeEs+ z9jD?;=n6PPeLP<7jusnN1R6;o{9-$i{{R7d&-kA1w)rx1c3(8cI{PsTK>KXXro^70 zH3((c$jWX>BR(W;tE9o}wxp69Vai>Q&U`KZ0Jh2TLi?}yTD65eRMu8j4k~pFe8hw_ zW>FlGv`WaVmyTS@$lN!pZt0&Jr5L1gOG}$NsIT`>a~+0`VHh!EqX8_CD?6ZLYCX9d zw%y^oOPAGhWXhQVR5B4n2aA@96%y@i&@Wn(YJe)tPhz5uCOQs!Y}TE$426f%mv-nc zP=;(mPQyH9N88~2Z3gWGR1xR=`t^Q8EJl(FG9N>(`hKv~9Z@J2Xv4it04q)X`k7sW2U!yf7g_>gFxdf97kMm2}ViS7|@_tlG!u z&~Ax|GBEB!pML(UzUe)u)AdY9$NDx?uGAm&@=!<1k$-bFyORF%b+pc|ak^wIR$PDq zXJN$#E!(A+@h0Gp+HC;`Pl`)6G}#rEi9VK+w>P_?^4QR+9hSzb2iY1p_-$&9jN@nK zkNzz;^8Wx!z50f7d}d9p6bE&gzlo9eas77I?mHxCJ52yp1GLxGs5-P6xcCc}O(L0C zFo&@+5tEJO-erlcTP)tzFG_+y@ZrFatFaqG3vO@P(df8FMR_k=S>#$nkjM?|0|S1` zcW+hZrOg%EgQ-e_8Q%1oFlrK5*`k^|y!N{2bS{RgH&=8H<@Uvk8R5vxx4i!V`g~>h zllw8NKBfLt!jeg2W?A~)YklO*;;Dsr{9J|m$kTHZ2jQ>Yu7q)@R8SQ_6aWp1tLg(% z^!)gid|ZVoByF@ZpZo5&cVFmvjAh4>Oqe+h+bnCv1gHN1bBn^?ypGv5>imMouxtHq zAfs5KNnlV*#)rLs3$lJ9u8dPE$rFvLMM3m`_gY*|pVVuPqKKJMiOLFYgqX5TYWEgL zlT7lnOFYhGnpfKLNO+`^`zzdC)z;l);EAp2xzZ%lz@UR9h`hgu)%%CFUP%7{5!Zir zK?cPe00Mx016A^KCUuQGPQgd%Z7cMsX3o8tN6SXiZC$N#;6dSbYjpE<4vm&D_?eKS z$hPkZL@_y;T0S*+_t#Nl{{S>IO^s;fbtsgwviE*=G~bF(6v(`%@ABJUDSbT81YwQ`&kok zNYnf+RKw~ ziZxjO0Ewu&w_eIQ7!wbd$W>b+$GL|mCMbbBivIu(c_g|^9_@elsfOiawPeq9G&VQg zVWSQf$m5szAKqvp0IHw`08jut%lR}OMxJ+6i3M5M&;jW>=5%N>zIc)F;l`L>`K(Zf z+tm^ljX^3#TPo0w(P{XrtMdUSCfV7#e>O4N*s=#B{1&zT&Va_5Z|o@hj1Po|?`X*> zu@qdy>;XpBVto|USs5x)O!;NZwYx&f)rP;|syC8f=FX26`irxnLHCF_vg1+z0I7j@ zpZD>5YPt;>42%I*8$kzZu=O1T%9KXzDiqY3c&$)qy4#l#K7}OC$ci!%wi@iGb;uGu5m-I_bmmr(WYn&B~ex`S{PRmiuP z7D3v-F&F-9e%7t!2lkc4Kc_}+p(@1^im+4I2c4vC#MjI8m6IWxv}3~Z7W!nihwW)O z*L0jP)iq#pSa^9$@Zn$Y8&G8QOo=3tTw2c_OBY!Jy{NJf7TdS1W&5vpcS1a7IDJh; zUlu|G`_Uc@n7y?6%DUv|EePy&8$tBbQ2zihMh7|xRtcVzFARp%Fa6ZEvUqp3%AC{< zmwG+#__g%y8nAG-)&9`dQh`anWx0pWK?-8}yuKYqtJ@V(zL0;~G-P8$P*|T()_ajb zGsigk9c}){k)?hW6*_n)jp3d;Ulf9jwG~tDu;FF$NBphVWPnQxvYdR96}K!e$i6097r45=8wz$)w&?(jf94R{lNTyJPDCUJLP4cP%F4^Jk^8OW z7&uhs5p%n3Sd;gU=_l}$zS@&1*p>)Pxe}VaqiF-X8h;HnKU$J0VaCaj$;>f1jaHUM zIf}N{i@bbV5=KKQ>>!ORBQ$cx!O_ssm4^$V({#C_vnE~HXHAi`eXdn_l4*DvJ{8_= zPznLq2b;)AI|kBx+P?w<@sa?M&5B9=-+oW3x(%J190c~HG2BPjll|JPlRWLVoYKS- z?x|JQJ}glraI9@1MNl_`T8`(x;ZMkTL7{aZSF`i_w6Nom27E}OTvpiYXtuF_`X39& z^|T#HR$jt35%e7emf6?Z*xzV>w@U#H6wk3$hQfVLyEP=+qQoQ@YgV+~z0V4k)crHA z^*FKeCRRysXM!$88mr5SL^sJFf^^8gzo`EJmHNU+y=9*k24F6VRTD>MOjGtal^1z_ z@nqs&_PTaER_AQBLJbIG7V9bTdi9Bi)N{{F#ex{&ix&yGVu-fwk$=o&NZso#kHWp} z2mV^j%=t)V2{hUA2Zv$!kw*;b^UWY$D;hg|daujLZFZWk^=a_%?Q|m7b`=NGh(Bq* z&ZvM2_5s=d0Nm>@FBz}JjTaUs9pH!JNWRNR%&DcsjwEFiH6(-BJ9P3-8G$39X)9Ez z?B4BN1Np($M^XR`PE@iH=2i+>lihyqqX)LoPv_gJ=yfbQ$uO;C zqd2da0LMw!^OT9@Q}Xei*yC@;Z{p0qVn2IT$xE?usPa^7X8bt5j{E5|8yX{#8LCUm zTi0c~vQpu@yQb=Bn7JJtLWvdKqLw4r(_g<7(D;+#$i3UOkJe#$<9yg{k0%)RNdSc+*`Vq&t(FYa+6``M&!6=jV#-869UeN5h(Md8~sn~Z`x>!1+j#fLKTc`q8 z6s1|m0hdxE@X;{ABcZ2nH@Db!bpnquUxo#ptC{%AT9*w)2SXMO7z(4vqoQYG~!pQtJ z{sjL33&827NF_LAo!BzXvH|b5yzC`OWnb@POQVnLHk%Ix+CGz8UPUx~ zns*VqQxn?ao88cx1-?>sTR}iABAcl!TrR(_u1`=<(*jZP?Y)ByhSeL^o+NE^FfbA( z^E~ah><(itiexr13;^iX3sc=zx>~^ri-Kn zmbLiK4S@P%U&e21gWl1~%66V}-;mUgad=~2b5%c*IfjL{D)y7^sNOmptaB0`{N~U6 zy|RBstDTh0Jm~mlYZ z_O+IS%`sv0I1jDrAEZ}6L`-hGRH?UbuHQ3iJnox0kg3>`8zqg`iDSr*yuQ~G=;CDO zWvizYY}T;)%eB|q(k41dlbJcO1xvem>2sac?>XVu&O*^akOeCqLnDFhNQ=vAX=i?^ z9wcqTC2nI=%+{=b+SkqW-lv0@^rJ^4WkZicZvM5)s5*c1mK41cDs|nJ%E^lCyh|2D zMZTg*uDQ@6XP>9nBjqw-Ti^pFIjf4rej*gec@=jWKWkk+d89eG*xe~nr^fijTSBCTcqFM(*FP_{{Se>HYZF0T1lc#TFDSJ$d%i6Nb!+=4m2^UbLV^b7g6Ko zGUGskkw9GBeb^)T(>r&X)@IU}aiR#o5Da6m``dIL5LXs+x#(8!Mg64K%|B1fK_)!n z*F)Lw4?`~!wwgPy5xkLy@dRRu{{WqQjHqbjZl6ILSM{}x)uP>bqgG<3ggD)hT)x=Q zOoQ_=4<5%KM1!~MYTS0Dz*NNh9DZ)__jD_)$!FX91UUy_HQaOT6T;rZeO*xOIvW1~QB9AIDCF#{ed_-Jcg3rrbdY(9FhA9% zk1693xT7qEZ6nai+E&7F_%j+P3>%dH0K2-scK-l};o;Fq1y!~XeB()-gba#|=`=m0 z6hD0r)wh`!)?F}!*5%zJ(l)Q_YagiNuzqZ7cm!2k3uH$f)>qcmKciCTW;ZV$1TO99 z1JUVc;X&fmx!r72s^r7USX=)9O^d}AJRaZT=06mZac&~%@n`$kn$zp>zt&wtm6F`P zozsz+wLmR2yPLj_TpjN3Gg#eOWQ8-Z;e2RWUVujQEgKFO+rxJb_lsGd%8NmRoFA$5 z@;E?aOzcGd>R*o^@Z{A_(@Iy*PepwiITG#LYAEey@avtF*AZJ+y1wB4-nv|7yn^#F z9%CR;%lj%`-BVviqCRr>AJ6{)hgldosqy3jXl7GM7SUs*ZR~N`!=aDVoC2_(TY>k2 zw=1f6{AuFR%F1C5Bvs{yGy~Hk{{RucQ$`+=yQj8!M$hnJJbwI}x@jGnNn|y5b5>*R zAKCEfG4WRXiH)(Zuf%Url9%E-m0XrnHud<`ev z?rdHyN0RaKVu4shr)!(|nnoNx%wtO&E6kQg2#7n(dk4|t)>MRvGakj3T6WiamYx__ zy1ni#Nz`+kM~@JxC(e7QzLsY6YDh7ok>Pf$M4Jover8@6VqWYwd-}cSf(8S2HB#f< zXWggxYohts?2#{Qv76%_^Dgv%U3GGrgR~K>o}Pa4DNMk6Qcm~PkXxvteTwd=Nb?3X zuAic1Kr=GtxmOsCj-dVgzq){a_lx&?+J_G!Q#7$HrOi!!3NGF%i@3LMTdEa5qe}S* z(oHEV3`?-N9@kT*>O-5xx9B17)}EB^ozPbGV4U79)OK`&PT-4hBJ6!&6{ zwzb{)*G4vyNV22a$_OEc?-Jp|;_&ICY=b0hC{^Q9K8sH7i}a`Y39cZ<1<(==HpSZ) zy%*Wm7g6df8pof_5rk`~Vrv@je|6LBw)VDay4j(p{##H}88Rf2XRR+sA>zkRV(Xq= zTi7X0n>Kniv$It@H78%4X+Kig6?<1555xZeocBuKS6O{32^J^HiKD%i-~rm(o|f*n zbB|pxz>5%Uc+$iaP)6fgJ?-r*DZ+xE{B$wnGYh+Luvg64ExG;O`Ur{@ z6acCP00UyGj|z=-C^3miTN*+L*-)bQU-1!HKDMCh@m4W}(B(&OYVyjsRr*um{cSTNb?g|?>i zU;$)2OHuni)}Q@8-jG ztGe>$$p?N!@Y}+S>$@xWw4y^xji`zVW0~lydFpM?sv09R>g^=&}uh1AqURWF4>QpzOZS7wrSP(saN%G?Xo+#Or z9?Fi-(Wo-##Z2t?jUDoGM>Uy<48=qIIF`H#8mg{@ae#<61yMjhFx7ne>YY9jWNDMm zjaOg`I*I6@cX@_gDn}W2k%C7QOT8nv3~?g%yZ->NnbIkzG5-Me5wiCe{{U9s;P~_vKvhviQLq3z6-Svynl}OCa8-fq zDtMIrIx)ssi8W`Di#r-x3%hpOfn!e!E{B(AZk%vjop zqM)DRHwWz7^Xoas z3?@8v`Xf$_+N6|~h&XjJ-9*Le@Sp&T7S=7@GCN(n_h7qznfzOs5>QN)Vrd3Mc? z#89iNZ$l;DsQTtcYOS<=8s)k8N3i%${5r5O?WiF39UNJAS27~LtK;88^`pIXB{k%* zwn6IiKh*u5IgHnvYAGIY$G7b3Gbs+?b%i}*Az`Q2yF(roX{SAr#YOHkAXcd zi3zA9i;*jDK(c-!$D*+)P)$ucN%1>zGke-|R%^V?0UI)6rtDD-f}S>vZuW2| zadjj(xG-e(1NV)zMH%$V%h>XN2|m8LX||^0^q&asuZ4V@HBBZHgUC_Mnx1tB;l=(V z@q0QsvJKd`BOYq^t@j4v>t=^d>CYIzVd0W!B!`C^8T$uzE@MSG}a08wueGZjNc6kW~1hKY#icKy|c>t37;F=etk+;6O*l0xvBeW6NbiF&OP9UB+7FB53PWsl? zmIvIC8tv$0_q3nO{YpG6zGOyt-WYZ1MCzly(iZ+BfP9*-i26683UsN&vTrIIjrxV|0xx-y3?D;rxTQ+%=?1YPA{ zVindw$j5Acmy_|4W*|tj9gfKet49>;yvrwld%da+zO6oXdx$aOQq0Y>VDl>Wvw9J9 za5^MeG2%?W7cHT5EREY1Jyzsb{7IYYXu%l;K%rGMDhFoHC8mT!Ehh>n8hBNjgVO75 z+IV@GrWq-EayA-zXxb6vVwVsOABl+Dx~%k;rF!m^1 znCxi>{{VZ7^`BiQ6zo|uZzI#njpR?()VV$Br8|8|yZv`-8z&zi#SB-8p(+Z>tT%S? zM=VY*NATW_rjkMx5Ef=VfDbv;-9^bv95|jxkom|TdfwZf74GUWmG?#CGW(^&OZ^%) z(#@2oWwhL<)zFR^3d=c>osf&wj_%J3BJgW}t95$$&&`qjOR0K&cF2@c+joZ4E$QCk z(9Xb7j$_GAel2Z_nolE~pSXLT*{s}}KWkI<48{4JoW044fUhjQvB8Pqio9MW__FIF zZo1zq)pE#@+GbFWpxF*SGmX`Y8Gi}Asatuqn}jy}-zw5OD5rd%sl%*(rofywh(HgS z9_y&y9%%1*N7JNymfq&ds~YWgHy#xJ*A9$wo=z|BQ1O3#Cx6`gy#N3Jb^+KtpDy2W zpgg{@+>h(`y`59AdOcoBXtR*0qNJZN8k?x&lk*tzQW%e5P%hs7CQ9#J^>id1hxCsS z{Mt;SDJEky%zag|CHknk=1KuL@fj2!5jI`*2jr77-3B-WsqASF0B>eB-nYfCl*6JC zLnG66FncJSjWhRGxy0J!p(Gj#lU6l7?L0Vg{J&0%a%`|@TAQs7A@0+LOrNV4i$fEm zEhb#GO*kJ8XwwiG}FDlCv)0;raH418S_y2*+R$mt~xSHlPudfSSVkniZsm%Di?oj$Rx>JSr{FrG)?&b0L78)Z)Z|xXUMQ)LN|#U0PIvn8(EJ8 zajw2|tOJkJBVb^{J6W5#CRks-$Zx~P`=~qH+9N07;)A)44#VwE!|xl|`?c4j@{TSY z7RniAVO5A8&wf_!NA|T`Wx8|4GwqSSzu}K%E!N)MeLhNRe8~30vMA4`W7&V#d%Tp^ z5gR@!AEjGPN8&{rev6aJabNDU7iX$e8^7}-{hbJ>syc0sRpLYG9wqU|!rCaz*!kGa z#}isbM(mL{?&VJJ)zoA8iy!?*8Z%qsqDxW3&5!QpQS8{-IUOw^mM~~kvtGW;iLs+P z3!MW+>3GfS_IUL8c}kg>GjR&`A2TBj=%r5Ut**N2JqM*UCN7gZLUQwKz6ie>D`ES| z`G0*kxZF*w$IXH~47eoa<_(k%y@a^qM^?Tk{6&8jr0T!Q@XgbXQUseLEs_XjKqxC5 zf%2yRU-;()~8C=i8>mn*=;gC__v7 z8)EEXt5^DabuUQh?jJe9No8HD0-cY&-pC_?SMK}T5ul=|pdPO-ULTqaiwdPH3Di7J3bLNUq*}}Nbtg}eD;RcIB^3pfZ*tj^pA{GFuD zYU-vn6!WOJ_I2shojzUPm~Lbz&3!&BUh{6cXyx?cBFSy8jj<#?zuimxMf%!xk~W7W zPsCD6IQs-&{pWjC$IQx)-JR+B*J~X0+?~&%pH|qGir^rdOY8wQ~*=x)-PFJE|HMA3%7T+BT!yGcRQf^Mr}S$V!AU;W&+O~ftPYrlvqaC5{>t0RjDL#Xv*aLpH3+Y1 zU+UC((Q#us$@H%bi}j__ol?@K$|dw0B&^*7qE))>B@$CLj6y|32MmldsIEozFZ0oiiuT{UKM@)J zy6SGR*Cgh33BZ#wYE;*299ywPA9_vgUza0v>{G)8By-pw{l-S#U-wY(`1MO> zC(?2ysr>iqPMFAfQyZ>kXOU#4dByGAjqYWi0mZ^OTM){t17c3(VC=)ZFD}% ze`kkCI?Y2Ns%Anqk6ugz^`1T75@~H@=i7A@)m?vk3whJo?rM1Zyvv8s+uFv>4$X}? zXo?a_q`Y^caHl;!^4=#+MU?0U9#cq=wRf4L<1Oe{{6BYFe7{GPFk$=Lmq=IXb7%Ex zJV*txLW>#?Wd)1@o3h^Y{)pP87*KcTc4cB^e4pHpN?!6S~fVrUgm zZDZ_>eAHx)n~hY&L$aX#=2MRx-OmhqEla%$J4rhgezD!sV@?Op6l{Jpckk?@ca?HbZpWZtNJO zUI&|>l)$sU_e!zrGp6Q7y+b>vs$lTuUNyodaeEeciWW=%reT=sX zls@U*)=X?`o75wGTxk64&MlHpav0dVH@dotcug7_52bqo`j!8PxWY4U}@P^ zCZEx+Z%@vOLHntf_9dt7XbG_hL-?q7KSOr?T}9KndMvq_1c<|%Q9$FKckV$Kf4u(y zcAL$o%fwaB>yDfGQh{-=YCyf1@Go*0_`eaGi%8ju5^^`yPRi>G`DvQ7=FXEkAS~u6 zP2o~B-glaQTyd|z;ny+J9+wH*T#t(}AN~&!<;VUcmukI7spjM#I>b^1{{YKU{{XG1 z@&5pn8fkizasiO*D@zA1zZEkjn6fmM{mQ}d6}7wBrj9{$YznfUI3m{mjVJQ2Q#{i)_|UJz$WQTjU(1X9$qhLZD8tD$0@4YS7H?=*nG5^rum1oXbC+X= zkEg45Vmq?s)AyNQhv3Kl^}MYH9yo91_!VZ)WRv4efbT;TKz+nJvt;jIG=B{{_X#5* zk$@^!u!1*j_G#o%khc^yM+B>(^E6VeB#ph+(dqH^Rygb}<~&N-D!v%pQC0+1%QTzcyEqFU5s5BCX9|9#`?NU?z@kX zhT<_3&x98)5}=m6#6)>;75?gN4D4CI)onB_Bh^&+S_QNt`x2$v5yYVpMFN39K7cjU zvT6SSO^b_-+vj5@Q-4IMsQMgR*c~a8CpEmyHy#!ruFv|pm)Xbh`6TK2IdMfiX4gq~ ze{5RAT|50W#+edhTa zx$vA02G0!)WR4kTRbs?cUewvF z{-VkfNwV!AZKB4CsieV0(YW1VL;nDOPlrMzt*hxZB>Blcy;sey%}14wwrpt@WCzYy zi9Whqx+szI7EQ4GOW=C&%DVXg*JaA#aTE%XUNdj*;;qT;?rBDQwjMHo1ZzV(`s98X zF7|GdT#N{o7>{ketb9^A-*)%3a`PC327m!pc04i0z2|K|P|N{la1~G*h~pd(ucyT$ z_uulXubSzt%Ad8DxhJtSd?xSSaW13k5CWn5Q_ifrB#8U1soqL7I8sQs>*$hI=HE}? zrRg8Nt)060EPc4~o$@>GJm1}?>pq{Q^tT~~?nXlQKY?Y9W`fBgZ)n&c4XoJlL7w#)L}VQX7=&q{{Rn7J~Ejz39=Y+BWR7} zR{42>ehfTvviqD(r3K{ZlN@2@=VHE)W|MOOenjZwj#&z zB;t0}_>jTUanECAgFZnXCdZ7dF#C?|{w-58`I2`hwmfit0g+|EZ`iuJ7uaTT>Dy4w*kSnYef}a*8o!ocilYQO4 zXWi3dDFP>O?gx34Q7-mV!>a40*wW( zWyQ$?Jd|NoC$Sy9@w<19-9Tn#&&FcVV>3wC#tm9LRpxG_uDmie+}n9quI`f`tu&2; zBM86c6ChL( zLI>#(sv-0uUHavF?_Kw<_5OPA?VPh#);e>}na`O$Gkf;uGgp&W3xL~dN~%f#GBPrN z<@FD6MF6}8+#nXVb-xUMWE1;uq~|Lf}j3MR@skA&o@?rK|6 zKZf2D4vx*d$*oY)#;o)EFOSFv*r!`G_aCsZK78_&_t|sMD^W3Vu!Q96H;PKiDynL_ zdin;2?~RPDZEWrAKRP&iczVGR-ag2X|AmHq{t_M$7oUJmOiE5k{gIWOlbe@cP*_=2 zT~mv#t8e(({;Q)C-__kSJTf{qJ~25pz4(W?L|R^1U0dJX+dnuwI{tTZ`X4Sb0Qvs~ z>;FOa|AC9?8rO~MHlU#X4;R@D#PvzeL_zsTi0Y2KHnkP>?qlKLoA(rAGb`F|af|5u zW&QyBO>>{;)#8)g|DgS!$o{_r_UZpGWd9Ga{}Q=@%zsqD?Wukgn{>?{<1qhDbzb>0`>PCU z_T=m*l(V_3NDNxPi(Uc|l>YeexGU;J)iSZ+_(N-pUU*Y@$sCehEX-JxBA~k69Qw5x zFF#6qb-dYR9Sd_WN@oys^o!Vk?2S-97eJ}SMhw=ESSMW?E!1yJ?3PgZfuod^dA6x@ zz~}i0TaTf$Q(e?F?dalR3nPyv_lZC&5$LgFdNP9XNe0!5tVJBCD|Nr1sofM}XXMeB z-Si$=evR=S%=24Q4Bg{@{Hvc?&1vo4eV@o61odj*Po;w!yFIN`K;(0Pk-pQv$Cp_B-JDU&H z6hO!FU|`#N9|%?HzPc$y`Qv8YsF1RW-Ta)zUZ5YIVpw9&g0${2WXWl*%ts0yOdzP0$yGXslz>Q+XB(>X6|#2of{`3AtP#8(PjU{fFUUZHKs1*HYM3P%OhJjrRdO~`1J*J}Kesjts^;xUBznX1(} zmws?iI8vbWX}-}ipW6u-7s&tLhu|G$5iaMeG5Mz?GH6`F?aDuo;DsPZV#8_ra4;C- ze!-E0^Zi$sQ_D}q#YvMR0xzanrZmKvFg~;TT6{_bB%BU9SaZ84S9|Yb(?)O4;rmyF zRhCxMnRWj8^VoOYe3a9jf^TgO50{JjdiLzWfJ5n#H$PZw&j}te;I#|K1hZm+-~1?> z&wP7Tz~GF8zzpMpS3zR%s99Bx(XvNG*Uf^n?}xdP-?AJNB^GG%J2nMpo6x>q_p;*< z&*z$M^4?oj`$niN#?xXm^MBLI_9re8rOEZ3{Qf7M$jjHM%sU(>3}^p--lQa=5?(L6 z_9H{X!AkBXah0)2xRm#_DU0p10?knA``abhW@!2;otB{$4FM%d_xG93P)5Ri=cNzm zhVmz0{MrKS+SV0cVS6vOvba!lKVx&J)%L>{QBtEY(9SmGGnY0?)6|nsR{$>roE>tJ zKZ_%|ltiY7%;;)uhF4X&k%I@-oYTPTddc`SfOlxp^DKK~iFBkHl(<#x5C!9-DSfDwg-mS#Rp>H>@AG>@2+*iN9 z9EkP>o?hxB=eoa01(;=JXkG!#Z25X&zh7}S#q;fjlK+VG9m`1)x&qLoAF!|2lX2_x z6yqgiT0)gYJLfL2)@6_5K&KD-H>{UCO>!M$;~k(Eb1g4rjiU~!n6_Lp!@Iy+hnbqm zJ-Czr*QWKOu?o+p!9BUe{TJX%FIdk4&*nLECuIGT;_`Rbub7pBB0ljrs`OsrQ%iJ z5Ugo8{X=2@UQfNu2dtmxwPWjt^Ri5vxRptB{>`@u4>*zu;>7*a!CKCsU{rs4@?1fU z!wqxQRua+!&ztk^#Fz_`qEkBD<_{C^}m~5*a6@ zAAa|lj}BnTcNC^Hba>cCJ)TkUMB=U`fI6GaJ5_D1#y^=b1?Gt-N{&OuW=ZD#1`G#jL;uM$!p7z&I zJV~DM-)B_0A_`x@_UJkbvw=YOnju<#LFX5X_?ChnZ?)RL^ZykfA1P91N0gtlhR)!B9(h<;OWE?^%^sL4;i-vWWC`r{^5C3 zgI>22Pye||@-Bfn>fnYdlL-r3M42=+0_Vn5_tnYD=AaY$MvMxKm0?TwT3Iu>52pwE zBiyMpJ>K`Ypj}DqQX0=W6E)u75zN{_8p>0~D@7Eh5IUjz592k51Nv}ja25chN!_8O zA^CD`##>emW!Ixp zl)QZG`d;PuO^!n00e~2B=k5}HAwV~(o-+z8Tx=VHXn%eQvTD+bs56*B`Xa}D9fRub zb&yEqHm0S+GFF%Vj$76BwnkI|u2k~f#W=+4eK=S8?!N&29ETT=7ZKt*QUT;O_I&4G z&B856NjuN&uK@OC6Ke{>CoP~&aCg^v)N_5$t`q&VZA{T&ZoW%ez_EsAZ$^oFH;++c zy8Cw&6?m`|L@M5lu5t$n?Ga0T?NV+lV%>K97m&LfSAg*XqS6-_PT}vZv-;CH(+l3g}kn;+EoA=yFefUSR)T zRjzgzc%?~3@hSUxBB4!-am9e=Yqvh%SlG?=d&eDo^k)je(MPh;()-tMEOgy`Vfaa4 z&SH)*Pdk_PIF@S>C1I)DzjLBr6gbn;j{`Lp?nak2DRWKH-ixYj;T|Q<<-TY=AI?20%eaFl zP#zk0`9mBCt(|}!z55HF+hjfMSvR&)-IE3toeLwkEu8fn=Yo6Qdw%?uB~bs~YfxfK z%a#AF3!BHea)hC!F33k|c2GMNwYCSXJ8vK1ECJ)UsTesH0`#XfE2^<2|3V)rdE z)VgaO;20U#*Y+$x>*3r8_q*tsV%VhY$~{=#4~9??ZpAx{N!%m<0v`$x9ZX=QV3xsu zBW01!U(espU;qUNlj1+PZDe_n+NG;$4?KPKW!ra9eS8X=K5y6Sc-i;Wt3oIkMM$g9 z?c!->uybwXC&T}$ZSSF3;$}S3UD=g$R2@~4@9uMCoeOCs-$01>Of8%azsFY^*a=K< zF*uah+lu?_#FVtQw*Dz2M9;de1<(56bM&;AA6;k&8Eo3Y|MCh zjP_9ZB=@c9-iMrp`07w1xL@q`UgTNGjyCH@;ai-vIB8;h#3!+R4VJ@2xtQ+~uNeqF#AbE67{@F5$7^FJ(G`L zyks_LNrrr8m9RVOMP(J-`|UZrbz*I2{txh>sOz1MN5+n?zE_Gq0nXaMghES}bT13c zncwG!^-K{thwHbDSNd6<_mIT+!xD$^SbZfUla@uJhfysFku6fZ=9&^kx#(>+G*7(1 zYVQ!)hL#Eq{@+5Xk27!oz9*+9(m6PojA|y%T~lo{5_v~zi@!hkSRcNG3K`CN_VY2b z(v3^cm1(BtQTS^cI$7AM|mtq6zaG4#*lt9N5t{8Z)KZ|7RGN*?5UT3?jB|f zZ<|Bh8KJs%$7I7w@@7TzF%lgTk6ws-v<}|*LdEQXwrKD^uQH(X`Cx60tqTa5e2DQU zgFjahW5<=7dWN#1t8^_IN}(Q5!oC@hJtx)k9h7OX0O+ zkL1WBY`5cq5ribtinM#+!{PflEf-Tp^HKls?AQBckcJOc6Zr#XyiR@=-Bcpy9>rl=i;wC1iEExtL;jlryEaGJji= z5!v|k*%jc~%=g70;KS0)lA+Q$xoH*lrYk^axXqklm_p;$AoaQILyn_2r_peG<>{g@ zse1P3X|<2Hxaq@Kff-i-eSno7?16Ml!0r_QvMymWnHGFfb-uc1&4W*rXEX6&roNFp z@q`uW_Z<~d8dwUtWslhBrh9wiW>?#dtUE%iGvb2XZCQObozUeKICC_=4>^IEwZWRz z0yh*&Ue;1yct#iJzm@6k4UCBI0c4JIidv13W;eMXn5{|PcPK_*1EtU zu`^hs-7=D({B$SHeT5M5g8C6W@_U(57rvJ;aRn&REB!-R8=c0&3)yfz>i$d6johRD zdjYyxZD8M1y4SwDT;yJnapxX~O`0+*zb_5$9*486k0Cd;sH^((H~cK1(Ca>_ayk+> zrAz8I4-B$@rF6uk&2N;Va878}lIsM$=bv}$Pqc-24?xxrkUrXbrL^J`vWo_yOr#&B zLngo&Fnhzu_%Znl+sBF)30DB$JZ4Ku?&awYlpxi0fIXhC{k9iB(8LH4F}U;F$SBEm z(*^+Mm>KnA6-_M%_0{QmC%F&I0{2#JlH;Q8t+ZmG(K!!s|fz4x?TPxgU5;?b)gZKS^*F_KM z{UvY;1U6xk7pak$?;`ZCBAF{@BB6SvB{E+07+jq>y;Jg-558{@%Y8a3Ob{F3v23d& zkB_$K`8q>a_R_I*T)U2=klbUs(89btrr7tjI1A)o$@AhVz4OWG$pOg_{TBlF;XN-0 zyg|xtd!Xv3Wc-xkqY$S+1eXiY-;uVW`eO6$`TKPzwP)d9g9y7DL6lmf0tC>!APXKM z3wn%;Ai4ypT>42aKrxcL!)5Z&BQF-hQzbepwT^5s*bv6g=4f%beDv{ z@fQgW4EhQ4VU)H3l}?M8%91DNN{vV5Ab-(ufa$_*@HvR|NA%Zxr$YLIm&_O&S9Mgp zlSd?z@tZe%P#)M{SpC3)tY(gbe-ZDp)w=hIx_t+gSq7J@l%{Mc1O!9;;B(~+1C`}} zb%G6YGn*EBx8WTt+z_N2Z3y6<2jtNuIx`io_tKI3(?1#-xhO0eij`eKJ}!0r)i^u9 z$})1kbf|7`K(nqedk>>TDV$yzDl6iw-Ng&eQxD*AFYM(!E(aemi}_Zt-8FT^UJyZH zXDu&hsVa7s=bvw8eJ7;TB+`<4eg22_YTcQ9_@T4JGaq4(2vp0lTGv&yy&#guz^G=H zi{C#_OH_m~Kn<3v?y~oZZFS?Vb`EoDu{ZT!-$%&=xHVz^6~z2@{LMnSF-Q)gR1eir z*gR1Z3LeZ6;$a{zYbopVvc4+uVYM?oZ^v4KoFAeZ)HB4!=o&o+AkSml!@=$Qv7rm2 z7Owk`FYimVtyJV2tRShhqb>cwWGpMzf0*}FLS7=8T?TsWh#8PByjF>2OQ1uyAU zq{Az+PRf>HdNAvmRW<^0c{rzamNSv1w0iO@}5jFIHetY%IWiUs@EzlcR zyRAJE>CY!-5_i{?IW3R*ChmqNKbCfsI2?MPZk2MwBV@iDsFSnkbqZvVG!QW_!Z6I8 zdoshuEhM>qombKk%S8E+so^4zei9vauuboxQ^dB-$vTxeqwJ>4ilKs>p6-)H&!58$ zfRvma8@eOfhoa8&{a@qvP@2r{Qv60zNOv(5TIsiNQ3ydMg<~w>NgMHB^z6F2{m?D# zzRDU(QMZrt0So*Gd9Ayk=%IlZ% zsOr?(FA%jj#dOXcPl>k2VFq011cd{h!&ALXW?@|LN^l6ihF_=_NyXA{0W!InDa{rl z^dv>OAMdtXD7+nRah4bAINEpzzz#KPi2NYXzhAnoIl`{aw~>z(_M$Y>PS|#7{p56i z$I-;9wh9?Xy|`vFkr?;({z6gf6+ogiP`_HR$V+<)xheWv^^mJ0UBs+{uy0QXX-*jb z%2rE^?<#u9YPC)%&O9z;lpvXE`(Cr0eI6 z+#y1#D|WWjV!QIr8a=6FHcAf0GV zq{2Tmyt+}ms^LBZ-_hFM*K@)5w&4|z3)lOCv3_&^^7ve0)7*K<%S!Ar#~9^@JC0!` z6Br+gQT`GdXq^k2e|_GoQf7@?yukww-A{WZxP?0VMHuJApGtGg)~|Y`4okXHfRbJM zsAm@rPqoq-ws?WS3}Yjj&TjuDjFR|BSAhGnv02@1 zXZYAS-`|m#6b?-DArz;;e$VE1z;XGOrov$CzN@r9#34L!;qR|~6#aF});I4J^ja>| z+@H{5fqv_)MosSQ$hoAotYDC*x+w+y*3R!s$Vdt+R;rYI_Yo?J)w-gO}LRh=Z)S zDQyO-Il$?u_`QL5vRIb9vTfR3;aa}ddCac_{jLDQ+uE(Oza6E%oEJvJ&RV7$-~C!2PWb?s9dBLdyF+Yh9f zbd-cW&gK3(D&E2&{$|Ke)aaVsAbEv076raa;dv}(Bz(L23T}?H(5cx8#gGqG=_%(`;>nyJYU>Il#9xBge2&k2PR&>Y;XMhTy`wBJ1Ffzx_xZAzQklDdJZDb4UE157=Yq$nLrDpo_54yU4TKd z=#M7C4cmlPApCLFLR$X^L#OAR#7LJx$C^faH}3Qb&i1v#AHCoI7>Dbf_u!H+7X>R% zVDmy&XzE(fO*>Xuv9VP_U;EtWThAg3*5XI^Pqk*pvkU}&%0;E^0OWwXm;USC^L&$A zD{HBPwP+hzUx7$#*@@{gVNZTpeQX#8|iuTF|i-FD#5*fi8!awi~< z&#y&zd)08d<~QFRh1+V4{>uZxAPIpU^u`_r^P}{&>oET}BRPsIKqW{yRCU#736q>7 z;Meo~iwfASQPa&hbW6ILtBg}a(Lpqq#f8&*cTmlj$v#$8e zC64Y}&&(cD-~1Hy3s$<)jyT$QcT-_u8xM_c(y+0U-SW&!z5*cdeGk%8^PkOYtJoBv zXX_177jn5QM;F7&WqxA`LAfKOZ^hnS8ygW0p|Kju$a@BTan;Zhxe6L#p;h%~GJaW@ ze}fh|5`XMEcjl~zJn#LwAtAToxSwHBqF>69-ObrOAh~ey?3Y!u8yXsX-HQr%WIZiI zs&7La$=Gg5tT?Pn-tg6Sjr?{q`_~Yb4UT%iDa3&um^BirUsNmIDJYG)R6eT%ug^y5 ziERjU?)CJaK70Zz^*F_Tp6IqZH}Nn<&qeXv;VfXq-)PdrURP-KJ^uG5lXV5@_7z*b9Gs%uJx1`DHzvLJE~XWi+mGVY`7#TibL{J)%%`aUKz} z_%l1{KRrFXHBM#LTZg=RUcf)j#PH{P1$YoHT4H6(UD*AMaO;KotEj@Iu>zR4OqjDoFQe2Inzjc^#@G98{>3YX7i8uM3Kt>+>73 zsP|1Rp`@;ANg zK4&FEo`g00@DEi{Xw;kihoW|SCre10HVj^OI7e!LO#sx#-j?38a?OA&@TwzjYBLu7cV0-J&?Ot)^ghjz%BE-GlVo~e zs3=OpRbOM9fpNHMRa?UsZaYmd(}O9q;4N}qOWQl(-$7$Bfv1P=%qMAm{7r)G8T;em zx{j6DzM^BfwfF&%4dahBydK}iilryBd0pp{xzUh~*fAH%W_V=f?nLT=(-~v6Tu(ta z#U~{Z{6XnU^Wj;MXxt>`u!a|rpOe|!%Rx3R8KlDeuv3j>l=A)DwcV=aGKB+-3fNa7V?YNGc8+us$p z;iz!hHzql~em#vqqyf2AYNEYHBotIr~5@6BgmtZ4-19NUBdO%wm6Cgo+}d6R4j2=+rYu$FL_R= zjm#%~IJL0O&4u93=i~DKOM4KN4UL`W{=gztgX&KD*Zb zPD;bS!+O@-EyImAY=tWwu`u?WqWIki{{TKC;kJ_GFm0GotQ;?FA<`?mnpHcaQ8;k! zxZuZUJ2nqEAvi8KN7>+)U>kRqi&mR2#}!~vAJYr9*x|^6P(hsDN=cY9z~(|$9i=|s zVhg+vsYvDjpPgx|%`Enx4=)77)(FWR2Z#k&`g^Y#@>&RPo3F6Sd^;&5T_<1NmAUNe zcHX>__js^rB7R?AVd}WwFislVJ9)hB1Y6Ay|H_yKT&_%&eYs2n9Z6jcRXS!e(qx?p zWH=bpcaWqsSPN5F-fvWDn`H{fPq%np}Dr_I5O~pIND; zQ*~>tL(Q6!iSZ|6VIc$Ig7YGbeb+qmfrN`YUp77W^~BvIv0+f!>khC;`jm!zSe|N_ zbbr|$7ofw)q&@y=nZ%_w!=J#%Sd!GzV5_|AhLAB8$T{@){k`U-6HhA|u-X2Z`ccezX4 zWfu4r#=V2hBX6?6D!#c~UjRTyCnPdWO~ft*dn197_V-#W_s8@VDp%sD0_sJ1jw$D}DRiHH(Miph)IY zQ%jP3x}e0h6-U{A8YcR&o5z5>E2Uwtu;4=EK5C49Wb5-kgf&*Tp8<4A zCZZZ)Inv($;i>8 z@xX@vI3S5l<;P$2=zDu2iFw*OZLV5Ae$fUSI}sX?+oqo7*%hT@5NZlfj`>B6up0_T z{E|e8b4cO)lHba6`j%Pg@O2nSOS-YEeqG;PLShYH@|vJke;cbK?&5lDA#zwPyNa^Q z01%x-_PObncoHaI*lR`FL&w(4TgNcAzEb|_*F$ni-w#i~Ld5df_|yoeyU+16gXSK_ zdr)^eYxrUf_T}r5-E3dmSQW5;$aZYMtiuokoT%Pqf$Q`@DH?ui?{;ZKexg>JtHVCl zB0Qk~B!$3>W(b}TmZr0hioR}BxpX8Yp2OOMwO{8{ZS&^^kDMQufWJGK*3N$rAxxJj zyOAjE$Vsd>k(Z+8AL(`ktk@-_V~vh`MpUl=(vvVH-*HqXmon=K%zg3_odWJ}PZwm2 z`<{-LNy!<#snhL3`1iKF{kHd@agtjat2s0D-0Ws z8ok*^7rj^bt(_;eCf5ijS@nVqOsxCytWrNEe95o9#!;cKrTt)2Xgc2PefXo1L?-;4 zb>iXaXtM#H>0&mI`<^1z-H>B%uDip3>bzmv)O_A2(qMJ8< zd7t6I95od#%@1ggO+L13mwz2Eyq@{ZI;yIxV9$>M4Q1+6r{od-f{(M6R z{l1%&UP|hsRAG0pN&BEQ?~_t5v1N4R+=dV%^)l@vj&j$Jmq#sKt^hWOEVLj`sy?9H ztXq~3ol`p;YrkY$s;Y@5jihJ2J_!nQq|k7 z_da-<)i{!pcgM$Zg_@#twk6crn9$k1w}|CTBF{g}GhJJLAAD8_khsXZ)Q~MyFM?=Z}vW$gU&Q!$8Th zM+qdC4B^6}7i#I4fEoq;{apS&Ru4jsQNm{D)+F^RC^p%3TCg?!dVJ8+3eTon+xt5O z@YOZ2rNd*uZQBmqkqIZwE?Hpdhb7!WBn016m{h!BmcfmE(-*D3&a((7+ zo58OLUlSvQ#hFcy*`0*?l7y?=@Za(8bZ=}Lhs`Y^tfTi&Mu*V!drN0XgZEETkOk{f zHsk1+$@TvDsroGSpy`UJ?1alrQuFSmzGYjvU!k0iNPI?5VY_=9ylhtbdMPkb zjb!H)Iz(9fi#Le-`)m#$G)+?@j{Y*?V%j59v%P>W-6tMh+^px0=?#e|wILfQAAA!H zekXdOyd)yf_!;e`hpEGS@Mzi&Pqkm1S!awD}}eQ-r2( zW@%q(PzJzi@3F6g`?!Jg;f{1W}r@`>Gmer;KA7XfD*XLeQD`n3wT zOUbt>fr?NgkzOHU!2GU$k^z+n@Rrm_)>*35sP~p^dbae%AESB!cuCNZ>LftB! zRa*SIWTl6B@aj(u`Aco=rNGpj$EK6m#hY7AX<=aYUE?H?$~(WDb)>u=mmf-~pcAkK z*GpdG5`|^>_llDzMuP$0LM><2A9hXll#0Y5Q>%(hD@8(oZZD*Er|45_-2+5q1&nYzqW<3aL^4SFAy)9DH`|E|&hRX-0TzFKY4eD@E z;MH>k#G)@AqESicS5ZB_PK#xU4uc*yJ?H!D8tPCq*ZueS z54m!#-TTyK#fUkTn~Nz81v{uZ@J75jXV!XBD*XZCzPRwztTKB42Mkru!o{@CAcG$F z*6h?-|KP;PmMYI&<04#4m~J>nMjMPPY8!IIBF>)5%)~z>2oE0s1$WPeNZ1@!>L$l^uUdrSSOL zIgpnkD&v&oo-`24!1*8T2OOKk3iN?=z)(>hP9ZkfEOb?+@V9sx`bmQSrtj!q&FV6J z!gWT++{qq(K%r6+kGn9RLmn20->1j1sl zmlfOUC9o_18?l_`rn^_c9ihrQ^^8bX&NwkS64emLE#IJ-_OX@7UeIhHJcB*<$!xW4 z7aL4^oTb`oR#bP%?!WGXi$oDg0yx=cMDidf&~B=m?OMj)5|i|vTPJC5f3E<@{9ay8 zK@M|Cvc!80pB1t-6nieVn(Dd+bL9Wfl1Wy977a5tCJu_U@GEdz16B$kXJ>9hrLd9U zw2#@;PU_vNhWjh@M}nvTvl2{pASmKJ^OXKzB49DP#Ie_=-;1<0Q|K*m$sedzfXJ;b zcm!&9=w=^pde-l3XWKk38!ml1%$O+3bwP}ssZoEDk!WP}#dZVb@eVVFe!str01(}B zT-c~cK2IEYScw?OW%bY!dCwL#7-*NyurTini(&8`7H#Hq9d|_{$CJuG$AvVY>F47oYy3}SAYv$`I`mXGH=?y{GEdsVu_Ps`xho@-6SR3 z!Lv6f_=Jh<{BAiNC8g11U5{t4eo5CFew%+;hO`O#-${znw!0z(c!Rl~IuxJtNZNl$ zA4kl&uewTM#Uiu0W!2i2z1LVNZeJ@Xb=?2?uHZY%MOa9YOmR>$yZ>5Pt@CkL!z!Z(b zp2o6~+|szj-&seF-cO3K)nBR%(w!XJt*o3yk@QwuV#|m@;ltq z%xcM}TlrEzroj@u1|uL9J(lY>^`mG<)u;ABu0Xml@Vabg>cmg8LUB;VboNt(zoWH! zi5#ZKkFY%`k3ElQi1Vo}iR8Q6hUZK=DDL%53=deZ=$^itX<>CTR^fiHY?h0>o83co z6%Q?e)$UO)VM+#MX%bDo$M;MCQ>%%%CZncZ7dnt5O-_L$7S-oz*fB{2qsAVZb47X*2ciC!6SHG$dJKZ zY_Cq5VeF+k8S^&lYi6=$b1HRt-ocC6Z2O4B1s~V~6s272tLJuCv0kCp*Y}}B^^IGM z=wlyO;#_?1+`PCnF;6We5Gk=3z6vS$<%24@Afmnr8N|@Pp_1KRi9BU=ggre1f+7Lb zc_Xhzge$)h0zOD&@1O4<2b+4~=dyonGAbb6oi|klW7?aPI#i(8WnOQdqXYb5{O82S1%b3`m`un+<$Q-erxNXBI*E>V9<=)m~{hHdAp!#o$KQ9xWGKj1lUZRl$Yd>bv&{eSqdHrzx@JN?$ zg_Fue3~~G$;3MEkv*~S*`71!NBVSRd@CzR2;GmnUfjviv$E-_YK> z7A~;~-zHDG*_+WCW{Sp2wsw; zGbtv(ZZZ6NWM#{~WM=ar&pX-CJ0ID@_SPu*Y(iQ<9%hVuuG>+G?2|fBR%eAuvVE~5 z9VH)-Of|sB<8#m6Ee*{41+tXg?po1pd6RYUHdn6*4QZAXYHN&)F{%NlyCtL@M8N45Xv{hvLy2^%_x`%?sTWO zTbJ~My&%~VK2fvFmKg7kYT%b$^V}>Q!ic?#Nv=dpdL+DG&-JOt#I#&2TcGSLz^lV* zBbCC)+)r1#4{_1xg637B6`lw3K28MP-Om9Cb7y0xc z*AXXy*uhFL=Xn>kTqGV|du2={|1ZCm=QE5o`g5(1f>GnF)5sv7A8!pHU@fWR0+xiB zPV_KtE2YP$#&M>`aV6O^Yz$4 zp>+ah?MZI@X9whSHBqGcC#yTgi!#>~9GJVJ2!1Ca9@{?(#}8Ks>^z*0DQX%Ro}W7? z>6dc54lqOx3KCq(y+o@o>I_a&5^htQj{naks%b##;94d^NqZc|#sVqayTje?deTH~ zJeX!K!9k#Fn=1khq zNUvu@ynM$XIi?7idR8WR`S%+k2=6wKDx-~SarfzvG-9bdn8pK6Y0y?vFH8{cEl%AmBY&$od~`i{C@BFt{JD}QPbIJ{R**Q7$~Dd?#c zMiQ~c{c*jN*yl5KWOdy0zfRQ;+GQ-g@rXrB;49F0sXb26Mws@?Iir(aHA9 zXaB=A*SL;J*Rr0tQ`xvJa_8_L@&D#~vA`A^J6t@~_E;gW*Yq~5Zh)wvV=!c!Ut*KK zSbO5rt>ts>ND50^nV~c-lK^_~1#y4J7mq;tR zN{TR{s5MKRUZnqiz4wDC6>WLFLCLsasq~@WjQXj_wQkI zV<T{p929d5N}rIV* zn}#i~+zB$uHeFyy3#c(z4up&a*zb9?0z**BdrNvre_!z(BV5|aCZgStgR#>6TcH*o zkiVH{tV>H7LRF7gnJ2x{z3=X(at3jE{rG`S6oF!*dkBR zYz6NvSMEJ4PW0A4`8#9H9T)gBCEw)TYMP2=i;p}pW5Y1g_pO)`3<0#+*LO=n1PS82 zdF@n*CD+|n=s|U0mqoJEkW?G6-<~eoyBhdTtvbkB1Xq?`O!O!NvwDeW8E8I zyJ_eiMw2S9KB-UHY;qbPE3Um^H1WWRf-SaQ0wUC*&`_*d$ISb&`>5oOGep@;xyeTW z>-rlHfERvvyieu44ZP2rWAfnXAJNWn*OavgRhs6VKdfzkLUaG{<&<9F^eQ7s9$lQq z!CTo3eZ9Ey?#r6*2%%|agx5w_5z~90qHDR31kgh%iN41`=*tw<<}o+B6O2z^;?#OV z)Sy?*w&4npYeS^2ai+DEe|TPmi(wmC(|sCL;^IU~Av-aoSUMmdPxEr``De%9PNE*! zEht^)yFWzGWtT!4*lv=hqF({BozLm3f)@7bm%9iM1Iw6{J984k zUoo_B=7Q+tL>S%b{_ ztGH00g_Ln6gK0s{!5KXj`XFXQlCzAmHlaq?Sqh4l-SIqkEUBI}$2GP`VuTD!e#VEg z>5(V$Mh@SoV;k%}He3e&4XC*l-FqT_e|GA#X6BZmDDV3}&i+GG@aq`^@6_p&qC_$m z>J(>Gdn-3n;ePpE+O>;saMt2yepjU#{dS(?w`|O{fPTynGdRG-UYy5^nHv+tf=Wj1 zgCwJkiw-F42*$-)+qP%;vhO8MthJPMM#0i_mb#A>hD59#h^QLJ>G`F(@9cGa5t`)> z;krQ)Vq31+v2BpTj^-&_+nK(+v%CXNu z+_yT>FULnB14BI;a!NPs^iPy-UZ<4}74v8Le-}GWE}_YD`NXz=&ma4up^=sc95qmM z4A8a%*HDQ~sq-RY9fJsNyl#IOnI~sfSM|eW{!){JujfnS-gwnLYl_nOvOqum`Er(> zYWZH*R{Y6fp|F_U>#1$f!_tuBRXT2i=(EI=q(p#Jv zcBX@_`*I?yZu7S_>kg>Oe9GY?b7f5~ER0QO+9cc1U&2mF39WT)VEhZGjg!z=zef99 zS&&`fk70oltdzUpv$1mF7dCe*X4ghfM^*2;n?$vjKCh|_j-wXX3j&FF&N=z@++scT ze^&nW_ODKJq4ocRqVw=)^L^VeReW1o9kkSJY1M2|TPSL;+Iz3oh!KQXMbQ?qH=(t~ zUO~(%v7}W4PwT_?(C;2O(A@K6|HIs>} zb{g8t7QP8wR6zA#GA!aV%DMHgQbta}K|HWlA3b?%|Csi30(Y#MB8DIqdfiN6Q>FT5+nNF1vaNA=cv^8+;}Ez_7dZsC^%&v! z=aVA>ut@T&tS%f^b*6F%xOm@a2TX0t8j)2v;@1B0@PAbA0PN=-^pwBox=enPgrL<7 zXI_9ZrB)kO?4=WyTDLh#zk*hP%zJOHAHGyH1yZ97cXaa&4{ui4B14=DNGQiMKU2}V z(V_7P1Ojk4!>oS$jK0#&);kH|fB&c^e`G)aC{5E}`QljhzB3qyuh;&1GV>}H3?y8i z(Wz4NHZ<+AtpFd^jAaRyLPLMmt?KGx=8|ogtjffjxz&ybJ-Nl$nkZ1>V-RCBfghN@8Uajrs>;GyWxqe({JaB?EFy;7b3xhGgso2^X;Y7Fk54)tQ zG?tKX3krc%Pez}o149#!6_1~Mr2zvX4nhA+zQ4#!_lkVUE#a>&&qQIWCVqdBW8h9w z6mFT(tC2e?ZrdBJ&yo2pcf4n~)61q{SUu9YV>`=tiFr1ceYd*drU`Z5_2YS<>VpFANGp+I(h{l#X>0MoIFW;6CJ)2~PV7B6J*jR#z<`95WZ15R zkE)_~&!>HC9PVGJ=f|tm*|fB~`E+N~R4Hb@dvGtNqw_ATc;5T#!GcfEFM!9aM2Jh< zucaY+pYQc=M06frR~bvG0ISHbRr00g+H(ug_xc!X?~XDB+UKktQ%$gIAHDX#D!sQ~5t39>E$*$h<(bQ}gw`9FA8}`|oco<0MB$B5NhiRS);J);*=~nYs zfmuQJHlm28J>$B)lp|0uRiwSuRNLo|!9d8Ns&!l<#2rk-lLrUHsMO>InbQXS#X57% z@h>hWA+^_>|G@pMMjkJ(iZT~K!Q7FM9F@kz`iWKk-c}Q*+VuJAK zx->=Oe*D014FsW7?P4R#LK@m|gA1t#3!GKNBsO<|L=<#xLES3!2NL`Jo%mV|`Sheh z^DpdS<4=mWauRgVfjJvGjnxZGo_Pf4ORW;%PYotLvKV2hIGZ zduK**E*-d%Z>hN+QG_>CPvq3!-3X7onWgE+r3lRB`>S_*SpI(A^qD0M6MrzHf&S9Y z8}BSvUQY<*i>^y#Q#g~h#UK5jJJCHw$wwubq`oKLAJ}KZg3D6D!$EE4?UPbp^r~x7 zxZ^xs`B`;?LBo zAR#1Rh~Q+hGBx{ebr%*MU#8VNc`VpxL{7&?N|9*0P7$_ZvN>Q_nQr7FXE`Y`SsSNTOc2#5#MTco}FS9ORm9lU#<$q za_TcdX7bL`{a^;9EBhR2;mES*-~z@AO27omsNz-Yy@mAgu`hc$vRRsIx*XvMD_KrY z*cMl_e_}9uP0^!+dHgOVH>BaOHDT0+Z-t>aH9R2Nmhw*se1Xrh`QM0sJTTbGu+7&# zi?j-#n4JW6Ru}9U~{h5pN zS7u1)4Y4iwqD}nf{j0?D~ewB;S`B-WZl#w%A-%n1N@gc1zKwAGB$Na6X z3G4SHNO%sJ9VnSuxvK8OsKO6$eg%NTOg6*ge5_Y)jMlBko_C-6tuD9Fu0(=kN1@mc zLRoR-Vqa@NVHrw3uP~nhe$QUzhGwN-DH|;FCnNI{1pG2n^F6)KW{JMmyhRyn=kuF1zU;It@e!-Wl6_(5q zSD{-|N(pkCQn9jiJHMn}my01Eu4!f3~P5}edD?t9C$NPE(rBxTQXez(FO1RfsjcChUYp^of z3N-vP3EAFveTFYgHEH7Dn5LUg)5d!=X2@6Z*rc{YYWJ1vB9J)iH=$eegr55)f3in_ z-}UQPZdsb6i5wteYLu~4sq(9QNa{j#_qGN9!Ca5)^~C53nMxQBCf~Z} z&AF)y9b^*G`V!`ZEp?mwi|4a;MlBj1u28VlF5ypYE0}(1g?-86suwf zO&uNAog2+4OmevU4f7Wt)to2Mnnvv7WHHC3rQdGvu36zeMz!UT*S>T+R$SJG*ifn% zuO|Y`^O%8Rls*B#V?MK3q){X}n}Z5s2Af}Jah6-ve7853%Pju)AThAY=vh<)CYz0w zf1wq~094$^ae(IGSSz3_0~%NqFfSrS8qiB@mRI>7l~gDrh1wBDZeTh(!?DhC(X+(3gEvzXs|kFhNe|b#yv1{AB}!FP z!7ON-UfDzv#jv8Drz<0f4Jk%Kw#Du+6RBfJoiB5a_0>;Z@B(MLlqYzYq+I?4Ptza)=9>@0ya=9mM1=t zso*R3ldnBVeP8u7G}!|{GaT*medH2{O`oK_x5B4vAt7a+$(v{bE|TXQ*Z^vxt?Ca$ zU^xJ>`MQ^8$Xh{A-w&kVa=aODxqCj?;bTt#;(4cA@3MV6?n?MO>o@PlQ2D&vc)!v~LhyfGOheDN_|<=~5~2wPO~kgVZM-tt|S ze5tl8KL?Xr#bSi|GJ_BYm_~Ny@&G@Ss(L>0@y9*vXbCH)8vpXuw57HGU-VHG;_Yw4 zyr*AmF+n3yi6@-Baz*-G=OUvNC}lm_$>T=Jq1!z_?CpOS0&VkqC$S8N&v~DMhHLkN zFf`RO+~dxO1uBZI>b-ET8!M$48D0&|^my{NT4~;2>x7bB)Y8Xz#tI_Eh9_KbQJOg{ zsBug?F|S@)WXqe}360oaH@a0uH2|Ds>Gml6X~-+|+$%YsJWHJYIwHmAvwweP)+Aa@ z?7$K#)_2}h-i$|@zc!8Dz}H2hwVSeq^CN7R`ee4BZ%+SCTXTHe4`c@K9as8noxf5F zG~e2pPOWE=1GWF1{7kZyT}(F@dja-n}fDOp&s1j!8EwG?P*0t;EA31(S7} z4e9o?K^*QKl_Z4h+iFY?Nt0|DBY zBvpCEVFpVmZ!Vk|BE_(7wL+pf%icR#WVBh}<%5o@TG>t8l!ttoxN>WsKar|xemBC( zVsCium%6--*9N|$rnHlKd_2*`sJi`noR`B^$vMq)>{5E71LQ37c*i4Djo*_NJHV?n zTB6CD%pJPvh@ek57xAKH=al`z_!r5~`xWhMmTo}D+X|MrRU>igp}yR7Q5^w7K<6N< z`c5U_aRU8Rfw7LQs;c;^4rBbO9|7?1SCMEuyLOZJa$odIxjbyL{#*Z@^8qaQ+jhSh zkHvuu6)f}d*Lc4QL4id$+TbL48lLc!I(|hEL_{pNR5ZJZAhsxugzw+7`agUp$B*wo zaYPEWmSV{!a9~rnva}X-;R*jqxc3H`@PKL~uiuj{2_Y|-MMPQ6OpiU5Z>w8X9u#%2 zrioxrX;|+mJ-&#wnaSP4CXEteE+TPy>`CLV}iqtN%no<(lkiFxY&GNEG5BNvj zHp053&!5$Cu8D3ePrj^Zrlyc{)lx+vs`p2Z_Mn2lFonh8dnM_}EuZ=dyhY%wn|_m} z1HQ29IZf|$vqS^gG3+~en3FP-TYY`1AMu_={~8rNS9w+bJ;TO>Hb1oSgv}erm1g-c zWIjN1?`^w}P|Da4eYc10`*H!+kyrvRr;^}gC!_!B0A?!O^Q*|UP4(;%;ocWBXVa=u zS~uZH*%O*>apIzcx9xZZhotZW-T&MaFAAU;It>YiQu?@FQTlaruSv4F%(D7xfJXsE zFyO`UvY${tU2ba8=jJ?&zICx3B3dV(^|W_U`vdaEnBPUU?7nW1MEKUR?4X3l$SmZK z?5mOg+`Qq3?mIEdWqcp*Ha+w+l8AmisOz%UR5#HVyOqm=)b9^jL9t>cJr+)MfNy=_ zJ5Y^QlRTpK8zpG%o}K&Uqhcows_W7EogQy4MPoT@5wx zpY0oF{?v`jf^8NKM>k*^c(WhvY8b?((`~tA6~$KLiM}h+ObUa)V(YEJg{&OJ?TI}SBMQ`$GgqO8 ztlQ#JIW`jh80&hDE0)|)b^)>hqmuSdB_yt&Ulx6;=e7-`01%6&^hH)nDBCygqf11D zCkK;9jI(Q;tYSv(o$FGT<{fk~=OfpeNd&$qQ}0*Q^FB;VqO4<2uyktByIiJGlfNd4 zvRQ3zgVJYMoYdVDgno9;1qY0CpCt2v;S*d>sH4cf29;bHor~AzSMTi+`E_C65soo_ zv^k_TPMlS9ZFU51Y*PHT+>I%-I*?p zUe_Hvl(@YIJM!=TPS7g1sqsWq=vN$6mCyc6@WNe<#^ezeEKGbWc*LIiUC11>co8R^N5kDrf0jruIp{&J9^SRKNsI(kcG6`;Qa;P|yD5pRdyXqt>KLLGNkn z;q4`?{0kdyRm+gZta{)BGq+Vlaz@OgM`4%njOgCPP=ww8s0c?@U2{p!4n^Wna}K&! zn85d+(~++xEF z(7;-lweBQ6wONa$hjpCI4gY=g;?IWPP(*LpTkE-l=z?bHZ&$5O!!5lb5Z^M$PmzJI zU)c=h$icR#`iga995NhckXr;+#&EULb~>p6ZL{V5?>QoSA`h_ED>wNGUQTL9ZQPIp`h zocMwgWPqMo(4KefLgvW%r~h`l0ybu!jU)(GZ;;k#mJx=(W2!h?OG0|w#A5pBB}<$( z??#x>H~!Y>`1Zcf^-6T!T?{zG?2~Q|4y(+6>Se9GN6z?>p6xOzOAq#O~2>P^%S2caQ$ToW)%9 zUYdG@>W*A3cm>t!J=AcQ?`i{zOJKpZ3M0>E0@5GMdzbZgvVYx~u9K`&CqC?IrUl}U819ViZ9BJY_qKK&#t_d`=a*a zW0vO4C(qe~PAU4I{L1BsWYYp{a%*mCjE6bCR7*pW-Us5>gKTWC7=jFJ3#X?wtGwU~h?Xv+D>m<#|CB8H!Z4=}j&G8OdN@%aLLI@a8NV|Poezpml^XnXE zz`AcfHboDZ{Ix0_wgH|Hv!7rOKE>B6x4W!eptg2K&u3GI$Jj8f*|V@mpFOCB&oP&E zaV1(^=wCJjdd_X3HY2}|CLCZ}D12HB2Q$ENRx)Js;)D<@{KXjambui-g~Hl{f=3A& zAG8E7YI>(TIfYbK+w^KVyoa3^SVYaHT$XM4{lUlRnKN_466vv1i;dHo^IJmi%!Zg> zuFVg&_RPzy7(DB6l+^(Oyha+72{>1V{*|G;?+-lH-vW~* zYBSGd98Bu(Rpe!$ihsrVssPXZSrY_MhYoYdqznreykX59l0D%731lso$ZDs3Y}$`M z98`xs{jAEJNr}wMGRdRDFKC1-#bWUumtlGVJBwS{brO|*}w*#-~| ze2u0wl7@#aYr62nE6Lolq=U@_aRN_$WO-!mdli)jW=7_+C$jr_QVfwgci{4tZFJ3R?GhV0?&8F9+b}M~!DMF6UhWje(CD?xO{nfAKUGkQ3`?>Lk zdM~zUUA_~F_sAw6D`jQL!F`+p@BQvRUiwgjqgKGv72UsQ>MI92;{Ot0u-Ow?^h!g( zeE&lT*T)kU&o{K6EK4Y%f&C28jF&YD)S7Vs=AN!XDai+`U}1tkd>fP5O|zp7{3wIA z67SebqQOYBuXha-M;Okdb}tPnrP65JoeFyf^`_ADd9xpw8o{5X($$@TA;Hozc0z7_Z{ExBrbJu47Dm z<;q3~^YEg%Xg4UPKvFZvB;4p|u&S5?X4YZ`|$DOoIP$qLJU!*ZmNS&fKd37YMZIj9JYj_IVfZ0kzR2F z2-(HFu@sK%>ew-+dZgG~fTZ4foO7=u!tEhW*rVVQa0b6jI#?jNE8yMK?bop)5*|S8B1C8kx-(6GK z_nb#J+Ol?rX$qLMKYmNIQWJ*kDY#1l1}Cr8Y2w*6cixI}{zw1kYVVEHX-aFua3+u7 zwCHAHfqQwl0FS{lDYvnEOJt2Qz!M%J{~v!e-YTJMMHgb*>imk{P_Uy*ozFin(xhVvFy#}~Co(K0Vj4%a{KS4dC8AfXYbobMER z*csWCpaNZSzoqI7Xjo4x2Y@OTmzuxdZEDfh7ZZ5jlY^p$uY-!T-#xo0Rh0X8#4d)? ztFBiTrU^r(MlI*go+nZ`)AU(0y9qVho4buCSxampNH!|2 zqf{(tixK*td}p|F<5FRwu9ex5@549F z$5LcAE}5p`xiYvyEM)2_Rvsz`J+`S7UWrX6yCXL_znqx{rCO@{vIe2Am1KDpZ_uIm z6dl9w-DUQht~g_jh^f zZiKHg#AD|3QvI?I;(g;S!Kc;6dioEC^sNpOas;BNlj@zUyrH6l5nA1KV~(* zG>2o46hKAaYm4#h{w8-qcJ|drzt5)cDRnPT5GMtu>n<^VaXT>umx5C2hmbQ-k9STk z-rb*uUjGJEVjLlNYV#c=9O@DFqxtT@DO4625x_dR-PLfzx)AFt7HyqOc`{@LIpT7& zJ%ebvIf!2uzqN^g*{S;goyVuu_lUZ61Ly4=dB5k;VNG$iCFM*sk~G9}gABpMv&f?9 zw9Krp0U%?dLLIZz9GWr$e3T_5uDQ&y6S|PFtac@In!Qn|3azIOQT}fj9YqaftNfJF|bkCD_%|qn!3M|;bH$; zwpP8rm~kxD_}^cXG&(bKs`V6@Wzm+{<8n8VoFB*3?Y#X+zMn4d2YW=Jq{oN#Nuz$ck+G9CK+cPpJ8EyRAsRznhtv;#&T;Vh)tc%ngQ@=dp>XS_a;*QXl^#^5g_S>A-gY5Jo3)Q+8z1X z=H8qdO#Ijkzf!F0((sBMD2{DM^I4j-!o?EGzT3dtO9U)>S?}p>=Yry&delKny6hut zQQezMU>?#K!u^1Kt6xICTxLhe;{Pyf1+c+cMof%Gdy}m?m@zLOmiUAAh?ZvKTghF)KZ?OYnTAA{n!7cOvs zvq|fRYGfAqd9OZ~Are)!2j0n>^C#6}rc2(NG21R-QZy%-UdfZ>wU1<}z|4j7A7qjy zdcReE-{a0w(++-WQNPmXATeR$#<#8t`4g!aSu3M&r4WPkQQ#&TkFFHIQta4U%^)Ydj3VW_)Ee5 zhTF2dM4P&%k*&t_MOmKzw;If$hIKbZXGT@R20Gfw`VwDiuU$8D!`5{{$y|i9`N4lq zrF&%SC`7a(Y%X0mK9VAW`+M3A{|4*4_fB}gQRq8fP;*d9VBYfN^sU&WbhzL*yXT)O zy$3%n`z8LWvs@;x=k|~^MkC`F-{QyG?=M@6bc7EC;R^`-m_P74#F{j6Zr|j~kn6^^ zZexhMWBqTf$(I@)z3=}Mqe2>-;|?$2lFwq1PaDZ}_>M34UIxRtfP9osmtpi*lKUjK zns}=k%oSdh$j)$@-+_Y6m=}*sJKz5^*nFA+F_j;|fFharZeN%nl=y78^VvILdQRKY ze0)U$v<5Pqm798GhWrl6iIKxR%}i%?g2$iU_*OlZ$t#!DBIPMqX8K7R)SzSZ){n?$ zqW;60{vRQxnAyMRG9|aO^ohk;xdh>Su;@H7ic;ySpa0}=ZW1jn4dl4L+rQ*4FEymc=u;bWv2@t>9OgBlbI&O=Q``1dmvNgDOr?;37@tXc;h zGP=NWD%g#mw5|VhZk6M+NFHa$ChwSw@E)?5kjw}bs>k2V4PFZ@zgK)mZi5966ZP7s zc|U>3F*6s3*7I4_DdnWqmv(cUdkuFl%7UB=oMrbfD1L|uB;&@5mR5~*4I6=@Gt=&e zI;Mg(*Y*gE{+^~s7k8hn6r`Y{_KYWh4Kl8nLua0#T30?;G^aaL>TN|=yVA2z(@aDX zYIG@xlS%t4@9+#uV)^{GMF6)|w}Y~m_G^FKz&|II}kW|zEs0t1($9(VBUJM*m+8lH_Uu;$5ti$s| zcqH5l0@3sJH$M7@VVYussEGTPrwhU=O=;(GD+L7N8|P3gSnOEKL`Z^jZ1&^=p4*#} z?VWT$fXU5o)wkSX;2axb!aZqX6vmgY{71Bvdm8klX)pzT+EeIZAUzh7z5oj~c1#{C z`q!=ydg&oQ_LZ@$hba5l?^Mqk8Z}#h?&Og`M!#lmBe`UTbp`aJCG|(SThuYR@#RWr z3O-h6wM_O;27Wj#^8_;3CM4W-U-zw`p@&DtTFFK9QM<}t{YL3$g0!Xw7@OD_I0T3> zmmUYd?ce8-BOI!89xzdQBt-9%8yz%eJ<_r4{ z&euv`zH-nyI3ALin)lCKWOhn?^89)unh(a*JD(<#yWw@VmWmC!6vP(1v|o45y2`0e zAGQFRUa#i>*X)IV-!R{3SnTEHH*@S~(RVpiG(wNaH(sa|@%?&@^0Djk2UOS2ggEwi zqbO&f?&=cu&>9!>+K#qHYU}Go+UVTx&HnAcOy{s{ruGkg(2nYZSkH1ixDGOptt0hm zB8xz`Fy>i=3ZDZ{#S3z-&$|6|oq=z=ZwF1)^#H{=Grv|Q91q7jk|Hz_1W!plAHQ*q z)Tib%tcV?u_cj{fiA>Txh~t09ZsI^`=$)GwKmJ5>NqVg?v)P012$G3*T%-klOxDh= zS=Qhdk4c0IcGpBlXtHi=9#x6fTe3mdcc3lUw+Xirf%Z9IY-FbT!Y%$$_MV@4#mhr( zZrDggTJdmahW5+(KFszz!};$|VaFx(w_w4Kdkf8=Cu&44oYOwedLo@ zb$1Ok!bZ6cJA1pT*o#3W&mO1+}j+{;V>vyWPMxaQYZC&l`T{jq4rM!k}ovu>Ragw+%R`s*I8|~tn>=&KL2tU>acKcug?wp-vB6YUqLj%tDPbu zydO2)T=gKUM8nnd3hvPeyp%h4t5d#zPe;6-^TxIZG+jQ&*HVA#wnSkszQ|)HL*1n4 zmycHf;o{3?M#PBulfso>4)m+eS+e-;h@$DN6;njA2g#k&x>2#E@%|Rgd8-@!hmE^r z$Sg=|;>WcvJk*y~eVJ)CcJtjPy8*upDl*c;gpT6kOJnvAQL@s>jnJ!p=wk!sueWP` znz!d}=IWEpQ{uvL{y!=M4+N*EsJE6^aR|X^;;QCAC-7`R)tfy;Nw6q`x^KsFIk1QL zBi2Cq1D(Xa)h}#~NS2ddo`HGgJ5xP$NS>>FCQ&7Afo z%oi$dnt5ZdiBXcKy;)H}HajFvK@31Yo#E|NjWa>m&Hl(AXT(^DCx-P7P!gx|7B#k9 zMZ0l&*(!vIST^DohfAHQuO^TCqWj9%cBEU|{y~v;*0z@PbyEfCWjuxbefa#I>GCc! z6OwYl0UqDATK|c66SjbE1V~2Jz4!55dS2>GPg5JfWkK^eVxI#tE762PUI+5lS4_jz z8aPByan7`*m<4F)oT^jXw6s2C!MwV1fb4zR;~+LO-+>vU+bPN^MA28)@(Nhc)fmEo z_L+WhJo7#2<t{(XO*ZhdEOYPMguJh1nQ~HH2cMbhs1@JASO{*W zT5oON*nXE8F)3q1Qu;0tV+JJX1Y-(om#eKL>__WD|FHG^2JGBoy}M%ZYI`sSX!M`m zhM6gfv~S5E#k=8hbhe-u;@yJ*T0CcUlC61PbA|4hLpsas?3+KJ4Oh~8C{7YNq+5?1 zLaZk_+@)+YpcH)s$A3D$2Xl^(6);8(zSok@NfL(glk#$B}~T$*VXqyimNAL%P37Rc8l%Rw@^jV0@nzSq>H~Cfo@p8>T&`EB~eaW%*PN*h(DPO-`(Q0+q z71Yw)xaRxLLeA**BT@P2nC>*9rQ>r1MhU;Z@<(pmaG20W5_b2luikES$>6+$`yMt_S5`RrfjIVfV$kL+!xET(IgC% znt!W83j}Mot$@m2RA+q1KBo-LQ4}K@`vxKR#v$(DnWfy7FsQ(Ng z=R-q=zY!S^awVmp#?SVH{L5M zRb+U4@~fMc#Ytge><0Dnirc15cQs&)6D_HeaVdNhI@(gKi+O} zcdD=G)3b~%sHDsYc2HAlZ8`9}21VIf!z05(ikXiv7rXtckzl%-A!)UP`Y>nKL5`9| z2%SI@(&BI-{iuq@uOJM2pe}KIS~(g$-Y#?`dqJFLF+`S=VkB+8UHkQlZRBWV=+@&@ z#BB&iK_KNz_gTjv!NtU*vd`3ht=8kdulXw}@bR6r`^rbB@SoCIX)hIy zSh=IBr_>uhE=xx!xUW+GFukE& zW94$lTM~QFf$Sdf-@=PufJgGb**BLL0T8BIAAOr|SryrGUa2nln-FlhW{=NAzbyHK z4Emqxo`Ig!Jz8d+WuJ8`%IEEhO?SFJ8qicJf#pL0fA@^jq3{J+!U5sTRF#SDhXS|{u@Q7H;&q}`)c3=(o2&}ru7XTHuBJ9 zbGljj0Bu+_`Z-TEb~D?Lmow`0o7jR1IPs&yF-cdhQ^uG~y2O~P#YJdgGb;rSm`{Bh}!Gb=ApD%t0%oAoA&?QO|l zpIWNDw@RPS{AT`CCwNYoaoijfZ?GL@8ZUMFY-!8Vj3~g*&R7Mi)8?fA{48@()qlEo zvqOQA#vmKMSQ{_;-{{2v)IjaxopC3yyWz&ZviyA?V;JqL2R0NDy(3g?-*C*)yJ0IK za6k~TvOUKdG_;13p^N=kiDpzr)5i^JJ@O%hK6k_hP5_Ru&L(0!mn&Fs#hd&-Jh$Pj z@z2};qsj~$r;-NqFNT^_uj4|z@N^ZCJBQDflcJX_v;Vch;=i8V>=sR-a7~m__e$S+ zQIh3MOG_4pLNNL0L*{3LJfBwHt?}g1m9O`+(5@G-)t4jaza0Di2glUSM{M-1F>SYx zECYI&<>o7egx>K4IK1a2fBB9ceB z!)>pg;h0QqXrTwbGL9KN9%0+pfHDdfP`{JZzD!SbHoaNqjpBrSNu}H5 z7T|;&U#r5sGlJY1`kEiKV4vg88zeB|lexBb{8r6ElPykh`;P&qhs%04_iN3yS#2|` zduH~zs#1|$TWN0`7Rd$^(eeTK3y*<;1E6uHO+jRlwnA-wXX?;@gjXGzqn$#RC-xcl z(Oem+S9|C`XM|P@M62+Nr4r*tdr zvSu>!U3R4U|l;&V`uJzZ3B3wmoM~@Ot6S~%+w?`Km+J7h^+0D71 zi`bMU5deJNy+3*~JIZXy@nd})AWBGFUks9LZ17=`KQ9O*UcOI)JmT(dq-e3yujs0+ zM|y*H|DxMj*isRN#rMR06^UmQ+1R$dxNBB7R+Z+UlE0p1X`*x)eJ&OWWC&Jjxj*Dt z-a3yR*|2@9{DQrm7kE}ebCG0cC;*I3}o^X9SfA1RA;g(;oLeH zU`P=|haF!C^d}~+f_?N_@rQsju6Uh1Lv*$&b@E@@<0>va3d?UwKzN|P*v9*em-S}q zy1Mw*B7ur_bX4URF}V+l15L@1A5VY3%L__H@QNR%X#J*DcQxk*`_SB!_tWGXOQb|h zu$JS+uX~5hK!&A8SeG$h3OObSTlqgKB`cTa4=jEN;Ojx~Kv1Vo`CZ`Z9Nh^(__}u!Hii3h}nNWe5xgYmusVd<1h6ooSJ9AziCc zeKNY+V+RqBl|k3KS&s~lNh1*TMC(U-P5NAFSd{N|e4@#35iReUQ;xl5@!R2%m!^%k z3)nKP3knhs(}{+b>ebtdM%*73iA1ZHVU5ndYM_*|;9ni(#|^)RTEBdBeLL8kv=J^N zNjp^3ySc26UAt;6;X~f6U$Jp#vDzZML$PO9?gDm1-HzA_0ZmO}Y#aX6BNHlrXnits z>Rt{k%&bo~E2Z?$##k;4~O!3PEXo5$9k4;MXAYi8_NM*2bmFZ9H9^alLn z@V#E9NX__cfc8aNb-|Gyas1q& zP{j<%+P>FejnFSE1-~*k+|&SIUnUiRgb@eVhx0Qx_%PCqvZ+A6>DB|joMDxs?t{Mt zcy7EAUH?XvT`9iI^d8CkN19fj?2fUzQc%sRbcFod+9`mJivC5k;_sbw=+S1Robmt- zG*gS)!Kp)GEzh5##$Z9)a7TK`f*mZEEhFq?6(C;%lpkhs-WCs+H=#a3jM6JOB$_m| z`>f+&`r(~M+8Animneh-BlVe4Q%NW3WKu)>NrJdPWs_l=DaYO|q%1!`KwEApT6xae zQ-~`B(38oaOEolIO!-9=Ou3L~wu~ob-nJ~6yB(jdcSrs(DJ#A+j<3V7QWio!@iixf z;lTH2xqWtwbrXs**1OMVMZdPyMNo=qcX!_z+P)D;`C+NU0Y>=@Rp`{VlbbF9e|JoE zE%2DbLD5}0pt;`=y%pTn_P@YsawQJXLHuX-px$jbgnW5PUl!m=_k_|KV4`2OZ z;ROl&_PApNXYF*491wwh1Sprfw4V1DZG84~{6PZyUoMa(4W6G2Z(5 zR_I1S&6%;~qy^!f?2w$vAMuv4?@3*$S1e$&Hdh~#=-(6#?TTB8U%uHFMjzi4gL?cT zw{8pAGwRGA8>Fd;^H-S*IIo(|GiH~AIdA%H|E!s_0aXqvp#?{R|iR5Ab$Z|?!a`QMcWx7wM;XRdym z8qr5m?z8eOex#ul846fkFe_oloG2Xc2fU+ikl&YG+5EU7gDI?J9l$T(`hjbqEnr*&W5? zGycaJ`Btz+tgPi;qTt$U>j9N(kTNcTDJdi`=;KgF{F=8%0WXsG&qMg&%bK& zLY1o$^(n71Boqs4X_Er-k^SOE`2I&FeAN;*xS%{%wz226H$>$;({0r6zyYJ%OjHJ~Q9V@q_tnbxch6PcHsXII7Eqg*?=W>7&Z zPqaE&c8Ok6xz!I@3jl26pn05=phNEbVv(b|kT$UZq{OZE&9=sMO~AV47gf`ind{XU=vLP64QXRm8ne0+r*CA>^LZVwQq>KWw?z5}(^LMsreZh^c~- z1{=F({I|HbpF+buRBs2@m^NBs6AXnoHElUrGxVeA65c%&vZWSqEXevTM_F`POL49d zw#G>3Jp)9ujsH<;%GzhF-2*}2J=h%xaYV3=Tx9^HXcR5}sP7@o3m|5J6UngJlwx&C z6_T6qWv&1&e(~vR`y{BSR%QC4LZMFIz-PMZS(N5L-V4#Eu7WzQL2F6vzaui$HO%sX zz9ofAXg0L&_>5^UXzMbVej zSCDsXIp?9;_3AeMq33SRKEl&du8R}c!8|ArUQUnhg3zp|H%+% z)D^*!?C4Q5x+($Y398FCi0vw_@ULE5gUpVND@?$z&Hp@i=X3uGe~1WWvHq9aT(nPF z_Ami8F(2A(n*tFH&NW8CQg=Jn{Dp29n|BIs#m25|Vt-tq(qZx4a$EZoYe0E@UnU=q z@rT^McMijr@X&7s{OA?2^>|i=I)Ttvh2J+vM5!_}F7~FbwT7yH7L4YuFa}jf^OfQM*HcucC$)Icbw&}znTEKSnc78= zR7m?oz0iWc!y=O!k!3FP#Wv)yG}BzD_>bhxH#$kZ;smySyVsRY*C6lJz#kD?T1W;=@Pthlr189AK2R}z(R zR<>;6>~W6HF3u+7j5{NTvz2w3-{0r=FWi0J>-l;b%S1VIQCUqaFYL+4VPm|BtvS?4ZyT86~>~AX&qeewzff z{Y>H8b`T=uwt9Avms1zI)`00pQT^iqEP;C=HCzY1$hbCt5V8oIMFy7ls~;`D=;Vav z#H>GKO1)jPkRZ#8_}2?7PS&8^uTY?(9jfTD-K=*HMY6>ZWr)lZdg#GtgHmFM)YwY1 zK+@{9-tAO|$+Ikj1P`IN?%!qET25+Q%f-=SV{M;l;; zGSY&y_yHbG1c!AhC;d@$kh$E;Kd$gAlqo(*Z&J)X;$D*SOzA&~mN+cs4}-bg4uT@E z$qcVB5q3{f6L%cv<7c;3E#5mAb-7hxqN%FD@vk&dT7NJBTewR6&w3;YNv1g&U%whL zJMk_%$WwFe=AzU~gHffCV))J4%bV0N=66?&pVBdn6lvczPI@Vi7B;at_(3~@Yr@_M z`y;@)L^`MnESTj6kXD?e@mk+mepSaAxm5&69+Grx5SEUlvw>1YBEGelZ}dMcg^ziK zR+LQBnspC#?rzF#Sd<*~XF(P)O$d#>OUbd+pKmaqw&_qBc3$!c;U(%+ANccHTZPrN zGJ1|bOW$|jI=qWRC-a8sBXzyaOz~e{d0%Vhyx5uHt7B$s>~2W-&IFD4H&t-!HT(=) z$_aQQxS13pFt9`XmgbAe#O~##O9B}ynbrZ z4j)KUoQ|!Q{QTrrMbXFem*oRmwV7tB zq-u#cBkflPW9v!J3Lht|@_M~o{!V8a7yMniZYyh~e&YPgNrs!=cR^3y>lKaF3pDL6 z$z};ES}ti{9^04}SqS-bk`jJMnyoGIe`JUtFJW zpWWdX(Iz07s9EeS23kshdsXeL)(_o3p< zMjsNRiX+k<`}+#8Dz@TES_k>9gU8+n8^0>4%DnM_b!Ysp($5wGVD_YKa}dUDBj+_Q z*=ywgumx~2dykQ^D0K(L-(MGn{mQlzb&}BBKmU=aae4o++?D3pTuL;wksHe!Jo&}~{<*1%Vk0-BY(b(4Uw zb=%5$JD`@1`m923R^pTuVseF#Pnt9nUz|;)->qwOWi!p=6{4ER(?Z|5JXjN~!au4Q zQ>*m4^?0rzvo7wCJ1^CY;cG{bqyfMh>N=N)fOGIM(J5=&65}<2g_6mt9Oi|@y3-(B z%wyHQiR=Cp_=ePt9@E70%Fui(vC;b@%5lw=0o_IC13HWG*pADWGnjrG9Q6xqnGJ|| zisnw4-hgn_c$OW$;VCO>zQecBGM|8P5YH8Mh&=7ha-A$ZB*e3>k@#AWl z6YtDbdqNfHd3R3HmxdqkPM{ygHbnP1bSd~Bp2OH4u#OJzUrPSs2>Rg1H;a-ZMRZ;I z@~7Q?YA`U?mo$WRNtL(ft7cMGFOlPL8`9<)l1F$aK^~$KUm;&7t7Y0-_M~cVzSzk# z*f4DoT4#CkYSm(w;+O&<_J+_+cm9KoL=#`S^~Q9jahkT0+TJ?Jgj@oqvg4%f zK%2?9-=SK6n^mH*!xIWq9};;P_DK=%oUeU%rN_cZ&Obu1h)Jx@0sM!s+!=c{IQY(F zvKm@_%&?Li%Qn z4p(e^&z%dgn=1^`qhvS0z6l%w7t?+>I8DB1pB19TG`R1%4h*t&4BLpezsHaTcV=5H`zE}=06IVwQr~| z$jX==BYHQ!Xl&K16x8RS>@2gV9&+gW=Br&xxZ(iBLkBhoR+**Sp<5z)&6c%@m>C5x z&|kB1K_HouDc{mh=0^Q6hTLjVGyR#)nsmd$L6eQx=Jf2-nVMhy?z%+Ewu`Yr!T{K9 z7}cWBBFnmSD5>n+T5TpNUwfUZ^qY&8XYCUc;|Yk&KHeixfXhX3$G?}w3CKq=ElZZo zeeqJOEV^*w58}~^-W`yAL>S?d=~asPv>>u@r{$xk`#bwLGlo&TaKKTkdW%QQ?}(Kz zU$W?7{mDac6T%N2LM|I_^cz2Khtlug*miL+khI-Abo6#UliGR1kr<9WEVt_VW$bU^ zLlq4mEOE*}--`Epb?&1A&ceSem!|dc{n&85gPz+dv6D51QqN@LTpmf0<(u(_n)XF+ z-?X=XNP;X!WVuCs^`~H~11x#kpS=E!-bf`Zq$=#R0mVL%W7SuBM4r7b`dTF47XMs_ zBh3w?OGu<)(8;0~p6?Ll@{9{M^7F%2|FZNK3csb0bQuixs(?}1rQKynng*Se+nW%u ztCdO7s<+{8T_)Tb#~W{8az;tz>44^_K|U-iK-n;7>Irak0nr7+_#AlNVFa1a{EjEz zH7MGXPY74k)|6x^^O%KH>;i>m>`+gu*|?<$14vQj_dzi~oHI`#kmFuprkDRK4IKW|mqv*cGg2Z&gm?Vu zmP_&FL%Tn#LwI;!GShq4<=vmA)#$uTO)43fzAf&wvh-)3!CIr}+@8~KJzQ=%RY;yG zlTbTStN2Uc^%eExTc?{Vg?_trurv41;%2L3lDKZyUZE_ld3JN1lkGl)I;$?GbFo(!LYVS%n^+A+;ym5Da^lgMDNSEx6b%UA8| zRpYl%(&{#~x5mNJHS5d_d;7n8J#v9E0&6Qle@zdDQPObhbO82cRXS;0i)L|rO-gtj zhGP19Uk9&d4zL}U%Pn<()i-EH8Dba!*8Z=)Z}cHO#cV)kCG)fVwk90&aR6h)Z7d1n z4e1qXQ;zdpS*w`46+gUp1Z%mnt3ZXBZhOY1Y4>=~Jj?UeY=iJ>7flU( zD#a;czs0djp!!~8WeFj2&&~Zi@TuAr`qv)L%r$1(aLtSLGYcI5>X{T@b&*l)vrc9-uwp+JrfIf~_ z>WEjQa`;1KtU$=ygZ%m8@w2=s_?fJ7*pAH%>XuM6hdFKFD9_4dF7ytncXgCaaelK6 zBlKkCWv`5N8)P|_q2=RnB=%3lp31?a<@@$=)CB)KohKSHfK}wkh(Ay$O}Xd0s6tlL zi)4l(__FwoOCBq^!;)yOJP`;D1$WNhyn%{Lvn|gpZziKU=R!Ox(T()YC{$=P#K6Wa z2{GF0#rhw`brO2j3KeeuuuJK&VkwOxs_)-~mU%41;jDQDx;6}c;xf>A5H39&r@mhq zBdfH~^HRK)M{swALURdxhJkXg3IUW_Ij4mz*VG4>k4Bm6CyZ3%GTa$j=UHwgt3YdN zRw0!&ietaqArKN^G1`<18tBrhUpYW1(ZaLcxB!vrW-bLEb%GyZ$ebNFh6%y`;YJm( z4ar)+W(pc@XorMi{C~H&E;l}{_7kFLnIBaIidd?n%d+rf7A?JrgykwaAG%xf7};JL zm48#RQX_ZIF-9vp*4Y#1F>NjnK3E@jhzn-9+cG4J1B4!6;Q8_26a=4hdNAs}Va7PP zik9Kd2g^RVt<%!3k^{I!X6x>=MYKRpbOVlyH9a`st9yA?&NUo&^=D1+IY1-lLbe;X zv65g}AII4V;EY6~|%r5%os*xIVI#mHTM& zM&*M6+292T+os{~u5i4PWcZZc5I&}85V-& z&NKsU6jU+E3lrqQ#@ooCPkN!>rOmuA!y~bY5z>D%X~l{s2x*1ul#^!W{9j_O6;)M2v3O9-l0JV?)1hIF~?DI7rZ%u@qN3 ziGfn>LI12JTR!LeoxY~lEA@9Y1eb%Gp~ZRZM3`QZ{{T5fIfO?0FFrwJh339sgYAo> zVVJ7xmHoQviR575L96Km-J5x&haO+i8yucQUf7YH^%lm2FJc9aC@ zHTo53*MS4_H#qnmwYngKQG0#2+gw+|3v~n2o-GeASuSMjZ*h-PcHQb-Td5syrWV2D$P=Rn$tGH`gN*(Gv}r}j-dy~<8?uB>zr5JM#=v=xzFPujfd_TebJijZY7td*Jb%+pW~9irsi-Dpjgr< zhQ%qZc_S%uJkyiz0kx65Cx8~kXN});x8Vc20Xc2Gu3Qi(FGFEdk&PMhreM$ax-y5u zkp1YpZYRN~6rq9y!7;Hx@d{r%H9aEOKvk8xZ1(-e`!b8DUa>g4npuJ%khEQs;dFXb zcQ`gEjB`E6;a-e4bx!3Yl#*>cvDD4WrY~!=UTl$IT+Gg!L&%ACiy#I^{fPqd^4k0IX?BV zZon`KN52lnr9YTRao24kzPA0S@LK|9N3)y zHGuCX<7+YLREofOFiK`Vf6VQt^35$&W-JAT(qpdwC`Mp1MCZ(gs7)y%v&4%M*{I+=0wripOBCg#mz7i=*jOIEiwT^0OI*SNeV$3+scQ61OiIeD>ml8q@i&c#h z62S;vd4th!#WTYvoeu78aqslpt5gJ^Cq5>yeL={PBqe`=?HCvGDOes==(JETVn!&S z`1Z$(wu$|>GyEDT_fEqsAiDWmYe*>$iilpiAY3`2Od4(lR3PN|@tFOX>gDkw4H+g% zOw8aW$+gilKlz#ogYg6>HtflAc8x~8ykO9kV2V)Z1h1Yj@JQ(Cl>CPM(;*g^D3zaV zkMjVb`a_HhQ~Jwxw|QLwcafH#R(lk$clCWx z-d|)n_osW`c2LNlmBrGW?=?0w#`)6|tD*6idmx%goZ(jXt!Wwk7S^piGr%4GA*q_q zZ4T4Wx2bu&W3u1h_MT*YZM>B1)xxt2pwTxHe9FQMFr2%@eaZfg&+J#{2vP*6>A8Yf zEUn5D9%(KnLtJ`8x=lM;UQ^mq4IKXAXk7wVZt;rhSbv@a*8totZ*!zFq`BrCl{-!w zMcXlh!^p&if_al$3bD2IMMBaBqgvJO{^!jDwOw7kzvhtb`M3P9u;f{!o`T(Xu7^yY zwcER-@#S-07FMKfb`6;{yUWJOtGKbTZDkdJaDXp^7fx(@Hd2=IN4Z8mVffPX5NP4j z%c%eD58Q@4zs+j6%^#E5x@)Fu{((8toC`;on{pn5RMkDD_dHXD4%a?>c^)o!u>dTB zczC(_3jct=*m+#VVi{G=R96;X!h1kWEg{It-6Z(=!etK z;9RS$YDQTF2LX=U!6f!whUq_5vfxCv)8eNT`xlHt4|md2IgdcH=Pt^}e^@q+YBzAm zBKV+Zs?3HmqUlCp;vi2d_mm~Fl{o%kq8+DyO+PpC#ArY5t1*?khsLJh)E9ci5FY@4 zT{@xjQ-z-4Y7Q61!m4hnJ;u#d!vJ_8nllbkO5y-dE7>HVbE@7FDV;S9Rhrcek(ycBtF&KgLXs zG`Ze0S#bITS2r-;W4fBfeK0ZtfzkyDt2MiI9xWvVZ8U;-=dL;O(RG1d0HAi87OB*4 zjb6-2rja%)JXzm)P@!qp3@~t6Y^g4+WX2@PuXhM}okt6qzP)YiEd>f3E%DN{D7IpW z8(pm?rja&|Drhr!quq+b??7qh8lZ`ZL*owV$b^x~k`;$(ziqdE0iMBgXBQ9tR{bffG8^ABd3ej?9Bkf6yeh`dt6gIxwZ zAM2yWB0SSz1cr|dN%l_7bHCuYoMNtbICor*_LMl^e8)usdr4^QMc zjc1c8Lvn(S_QoT`3u_th+%4x%=1$`>p{7u)6Ip?32DK*qnrjpR%gM+frHyjn5#NFI z(s*k;0%Zf^^1G+ked_M~;1fI)l#8)#=EFlktTb4)X{JZMhBv|MYV2v5OPwc zkf?rpe&nu#O;GUE$L}XM%PgSl){re-sXm-G#YKz>W$@Y}^zVYrSuaapz0GKomzf)&L>r6rAm%^!l6# zk~y8+H~j=reMYW}G!$}`kR*1_<;Qubg;$xO>mIUr^zJI19)WT*`G(JBSOFXSq@@T2 zqZ*?I*EOM8`dF2TKmShB{okni%mtWChA!m90n2y`qSGjJV~#PTZW?1WEcH*CX}ZnU z0Np&iw?p+HH()*RY;rx!iP3!3`U@3)!=x$UVRy}7643UQVs>*=h}I3-Oe|0;d7W>EBM9Ik{CH{KAdqMx1) zbaBt)y#o7aB$;!I?@0n&|BdPWQygbQ z$_h@KLC$XE9FC%(8@SDimi^oh+&VhKg&*8T{}1S9|EyA{nb}Qf#C)j`4v;0H_lpm* zhR%O@l4O@C>oe(jF^WDd<(r`DEhutufNo(g8lzHih>ubq6FKw;( zFP4e-fzJ7m{Q4-Jp-y@~;6>f4(}-k~BJr)Rgr|T9lE>sY;>+Ff@H43TGLToJk8KHv}MksY=EkHQ+|SdM-s#puG}?A0}8nqE4b zav3Pe)#cdCk8IQmLIfOk%I)6!t5z_=Qhm zT-~!?P}B=yg`N>s37ad}-O~x;yzBv6^vtNm#U@VkQ?hK9Q(6eSiR4vhdx}Zt3ltR z!w6k$ACW6)lg)p!8M7|!g4(>nHBGzsnN*S@$??X5$`YhTQ_kJTr7{8v??bnwjmN8A ztMdqvXFPL)a3xb+*Uk6DXeb!fnKg&Jz9!%F_v#SVkvV*;lk*MjUT12I=%imdn|S(s z<9?>U8&)@v^Au9Dta^>O+aeeDMva7f{pX#Z-=Ro*Tg>%)teaihSeY3qmlZp7J!WtI4RDbvW z8S6E9{(?WZ{YtCt-QxFmBJVqBqt49YD#5QB*BeC7xOf5Ee5NnQgqcX0OmIKg(rq8N z%bKP|79^;V6iXMmQR0<*&i8ZTl7tCID=YS#jY=m~$Gg_F37KGHPGN$_*kjhWE|9Yy!_3I7EiU-kCTC&sVlqGERE$0(@P zb%hFI^@hJ|qu~qrM@k=$$~iRR-#5THx!VGEOfPIBMhbR> z=Kl0RTXu!E-GojbJZI^USr&aJUp6P2fBWabVRf#{Xv=6{YyED*;g$jlrbc#j~T zQIsY_5rO_n00ogNbi>qrtU$HCFE-k7`!3>NIj+Ad1-{o4#2#Z}w(#;m?38l}GLlpp zTgE8%U6P9_2w|VP@N)qlofCciV_%2#)kx!UNK~dNnpYr)RAUBn{ufIgB< z8QD@jKjfJ|T!A|%^-wY{u%)WmqDa9UxXw9j)4UG4fL#;0M<}1W@l;nlw8DA$?8oXx zA15?scycFr=Rj5gUsR8?@m2~rUWgIV3$dj2m7W0Ve!Gc)sX4A?#HFDj*V zG+wLbLXCdh9T%_~clfX5(eB7b`2Q=5vW3*CrQH3@6SFk#RnKhm~z%7dx}*Uc36DcMtn2i*9H^HW?NTMGQX( zH7&N~n)pxwLRocrpy`PpTxnq!W}iLCBPDgH;8UCmexJsAjCD6VB>EOHy=f?p$`Id~ z)6;#Qq;|IqUZeordr%$=LA(9X&JkJUxO(*2tknwnT(G64K>F1w5clbMp>GuOlPM#3 zxhcQ-;HhzW$d15SEb!RG24iBY?s0&{P_4HcHx=qyOy4ma`0}lC`p{(M_WnoF7dz+` zW+g=|Ema~~96erK(0Nz5KZ&z-%*lD!u5USGJZCtUjpNKjX+|3=_ftFS$+Tx{M` z&sVojE>Q@NC~X!S^1RvDs`YN>Q(tm{~V>m;?cCZYyONank)hl6ALJxAqC2&%L6I_ zT&>+CYbMoWAxzn&@KHs{2vsx`<2guwW<0EE$=&GSHvD){mDjDJu9@ez;qaqQR_>Rw z0IyaNrEK2wLC{xd0>4m%Y27b!5Bm_#tlZw4^e8?) zsUm7wi7`sn$QVtD&%ZHPv3biWWi_f;Av#8`d@IS z+dZP+5yXL2!HEXf5cP3}aWS*r>nFEbc!_i9Q>Qf-6>+jVP&KtFr1k4#22xsTH&nvn zBHt!E6V3QBH&1J(mX^Z{>ammzgSriWi7!*=_78HP#L^i*yHshcW`RpHSqGKA{afi2 zW@^IeIhl8WtL*ERJTZoqb&bM)!Hz^yS*Z5XE8s#1*d&W}Gt&<*8er?pbQ7MXATTxW zWYs>}w+lD71q@;7DaLhuel$ea0b6&yXQbC!vt>1aUNE#=X{h8;09W}{*Vke80A0cKW4V%venC+GESuU|Hxo#Jo8FO zMW^dZjxYAGaxXuyaB52=5fi;?M7l#{_Aw0MLyqb;8SU&2uwGSKfuSA*b*)bG=ggGP36f z`XeU^E+TcypXT9?@~^G$XCj!r2M{k0tF$?~bEF5+z|4zj!(sz7&nE;wqMBZZ4ZzGF zob^g>jVc^hWvxHoDIc#cERVYULlR)f%EB8e!td@0idoEU;(y#z65Z5X7ks<-m#jNa z;K?qz=WJ2!!lkmn1{6i3WvFEGUz@26oDWWBVPiHv8#DtybOfNruGSn zxdcG?H5|IEQ`k6tPN&M~M21&a&EHGB>0uRE6X5bvdwKe+!YtM{ZQV36q_T(tAe+p` zIb`o%EK$?IM&AD_7K@*q^O6{2f{mk62Jqw;&=EbLkwEl0*VNrUrs2ihnYDuNzR4!X zB-r60+tzC}1__bBzHG$vgV({ON$uh3{E0MG-Wyz3&CaCm)93HS?ndjse_ICDtG~d<3QLW%bxq$($*P%e|go=vrEFP6JKqW=dhvkpS>%S9y zAazcVu2Z^z4M+c}58Z3UBN&CW^;!~dP>DA&GI0fyB!Ql1Wgf|7byoNg#l!T|vr~w} z+FE9`B55#BF9g>x+%9>*D7CUf!^;lqMhiRIG>6zj)09?dQ&HP25^nh>pV!UvEgW+Q z!=I*7*;YPlrC1Nr_hHq|%aGJL4pZHMZSi6pO7Y(i__*FariZPzbnN9!yvP1 zb|!MRpk7!cbB1YAW~#lhLw^@=iY1Mw*C=Z|oG_(KNupi4smFhoJ9Qo1NnwA`tGH*i zcoBqaau7W+57XDS0RZ+pS+X31V19-bC%%clr(kdCBK~Aq6Cq|-xQ*iRwqL0^Q=SX6 zfSZ0Sy+unv4bRO_bW|19v{$a61@^c0W0Eo+eAlx_VYgq2?=4` z$da`G2-B*Weg&w2$M40g1>{A`y>VA4W_4#KWf9lN9*R550a%q)1cNd<68c)YLb%xw;viMtpjH_n`a)^EMvXsSf<69(gvU$X(|%c`Jnj%* z&l2a0)!I?y2rxAH>zAw(DwS{PB-B?<>H~ji@j(*Kim}g;8f?60hF=UrYF>QF zGUH^o_zWdfvaw!i-UXG#xSk3xz_NC)#{^up5wW7-f26XqSmtbK9u&HHn|?ynJ^d|~i!ta3!V$PDjh)(G2W%a)Jm=h5mKZW60--*576 z3>_=L;yw=`bX?rG%Q=B|T>?Ent zh0>5bvl7SH0@&;9d)4CL_)!5wVb+AW#4B^ZkqoPka|M_V#~0E*+p<-Gke^#EZ&u1u zT!ftbD5+=`@>6kllV2icv40JB;U?Ff4q~{x`;Sj?Zn*pczuc0##$!pbgw`0Ya383u z00)$f2Bbb-*3Yx&f&bFvRSDy`fJn(_W>m|e4G~k8lDyFQ=ABc>-&p=S;Tg3x9v{xz zpzsnXjJ?P_O|PwaUu>E?6|_)A3TZQ@Q8+lk>EK8y@&FkGa0Xt08~s}zmBbGPi!0^_ zPnn0Be%LNZU|WePbZ^a&fox5G17=;5HJ0{sRpgJuGb`a*zpRdHxn5;0CDB$S==}7W zQkwu1fPAb`^$XTbApy;{WR1+?r$aw#fWOeJNTSv4Q#V3MPHy&NW>MhsliNDLWYojc zs9e;@_%F7^sd2}XPk4>~9sMbIM|u$Pg6CNm1*11G)cX=7DqV?M+iybFLMNJ( zE_`7iGwsiO47si6ZA#cG$L>vgi&Pm_S;-=YU=GV&yAF}7$IJ>y!Q*=+M+a{h7VHlB z3ltK%8>->#4^%>TX{=zw3k4b3&hw2onQF$%@V(=3f{g7VdOTf7_s2|~y??Yt;a`B| zmrbshn#TlF^*UF$tpb<-8tV+79(9FI4Hg*CVHPqzyDpyD5H30U5k!MBiJr;?Yau%P z&tY%rAH3{X-Bt@aooWcD_pFF>rz#UTzq|{3S8$Q}pnrh8EjLvWtU^VEm~ROS8GUz?!QX>yk|(qm) zFwXUo*SQ3|G4YrDEm?QDrR_muaTM4apBolkn5@@uf4;$)6-&btZ;WbwyYwOq0#w-h z6ukRxMX(3#xn^b;%4Fu!C)e=@9-1}*rRMa77<=vvViw}J;s}K^i_jRf z*hcT~QPA+Kv@A;avDz&%bg|9WdSP1_S%RPrtx$7JhIH>*iF?ijXAOOC@P2ZV&E>1w>`sx!0!%_5aGpX;2ec2x866zSP zo|fD{Tu7|fE=cSjxZ*nALnphfp;vI_58Jc$Ev};Xx|-aX-+s6s#5K5qJY;yZhWqMj zY_7n2hY3)HFz%yFe@ZHkl{>&ED7P+B$U%Ft)KP#;DDM3Umq*iwDzUe*|Dr2Tb#UQF z)D<=@wgyyx)cFO*%l`bp)GBA#sLhOcIM?EQ<0_fC%E@Uz673?wp#gH%GP`m6WwAT> z&@jg-4pPi+J)8XSL^+zorK9KYtx~JBg>A*>h}o6lo#2keAL<}r>wpgXmJOZ#fiMI9 zjdyxi8dmi6_7vZ=b#yn1l+OJ2-^Nn4@42$~d`~r{-37n-c|LEPHJVBa27P8eYW}AxUU#qbCaue0UE1A)2 zcHV?P;j}~O&|#E0+SVAX&`hZy&C0fNHsx0Eu(;V--~#XFYLi2ZN!mI8(eJb?+6H@v z(cq!mAWUWK&W;XX%Rx$7X)&+YeOe%M4{4Fe0Lp+-o{^gB;$M$8SmTIXqg<4d16-a^ zT4d3bhLZnWLEDs-a|7lt%^sjOYZ*Imh4%bMk+G(iY7~LV8_aSI%D)4LOCiKx;4g%- z&{JH$1tl6erDXxL@P8Dp&xGd(N_V5EHt_EE8RN~5g@n;HOleb$~m zsCl1CfP-?_ys>WRHOU3Oa#Q}-Q2VXal%b3UC~d%D4{R2@Qn(uC$R!4}G^oM~MN(y~ zbZJO$qGIgNJlbJpKV!dEMaJpZeM(uCfynT(Cp~bYEv^wr z2=8q;xWdygG%h`i$<@$$b1 zGHL&oLf!)(R2}5_dC4)w<=Ti=GLuD6aPZ_H8+NF2Fo!hpw`}Ee1qD`{y6Tj483b0fpxz4l z?z~z0FT0$pZR-oJ)!?&-qCGaKqI^^7ZL9kNT=u-;_T@QC_dX?Wp4qz5d?VfGvcZcY z-~Bi!C$UP!)8?CK(JEa|0!i&W^goJGrGdDwgI`PiWw%`lL7!hI<8{s7;*;?$Y&@wZ z<31@*JLGmYUn&tHPY*B7LppZz%x2Jy`?Pg)g95guS`hOu;LFiD=GJyGfF2jCCq6Q; z=&wNUX_gMJ`_a5V)5o?l?tGm6rz_0PJAz;^oKHucRTr)L#>f+R=-fOm7oOf;X<8z9 zVs)oruU{bL;QW+v(21D1xw^#1a~}R&^9;6Y2JvDJ>2Eo{aQ^=&Ur4u~_KF|C7;|KE z0szJZ6EPu_A9}$yrlrLBOr5ia-wAa)@gpkvC0r`Ci)SKh=&Nb9`Jlt$)0ds6#>#GY zUwJk@09HK?UdpTOo3Oi*g!MM$>UA9UUS&#ccldv{LUYal5XiYv<$`h2@atE>O54#G z4~>&Bat+Z;;zkiyOhO&L2_0Ms?SJcGYRJ`X2L@zUv^VSTx8e{ZnsLRyo!M+QhL6ad3kFV~w zpTL+ukJ((#_dCI?P5V0ZEd=AZvjo^2`fD0>c)AQFk>*?QnbEy8d}`JU%$Gk!wU>=+ z?him!XwI7*3#aVmXLw4O{KQ?Yx}_rm&7Xs<9ph)!y=1r9q<1IZmun|a-qcrnE&4=G zh6|#cIC$sUB$6pd!cr}eUEV=Lv%G4wL-%yAE2NW7z!>w6`BXPd216gCrx9k<`H3v)5oZr-(F^&vH%8am{;h$gH8VNbK@+haQf!oI|ouE~_K zpNb!KP6{dmOWkKl@?&yeHIv$W^$DL&Q(C)Wnk16h?8XuFcf3a3`%}}!aw#XHrz%K) z*3oI-^8NN>4=>%{mpYEGi$ud5oTP33&8`~98UMS17_i>(83#_LZy_Y(dxtKJEmZ&C%zBlNwIx#Z)~Y9wLfC{{8sGAnfv(%?yyDz^%tIX|qx zm8Y(OkVXy~n=X>fT>Ok{scolrAfPXhT1ad79X^$q&l#5Y)xJ_pV5D@`J1-r-Vb;_D zx5U4A_U>-3n8|+CFN1@}u(@E4+)F`@Z*pMucK~Fw$+W=X%@<))SIPoL^y2+?{ zj6|~p8lv~a`hY6KMpgNFwkC@Sbl;i%=)zBFQ&-zb~;D8U7vTv;-VyqJzie1FfE#2&P7G=au2@korg&<0Hb0xZyUd%UOQe2 z^0a)VS{yojeJiePM}O0gI5=lWueV6SRrLR-uo~vh*z&))NK_j(WWr+Cefb385u8`$ z^F1M&Ii|0fpytBq{Lik6+#)FVe^tf@IhK44UZO7J8a=1DG3s8TXE)0uB^n$-R@HMW z?AsS!#N>ElNro>=`wjx3YnC(oe}|QvIlOv4pvSUC7UXj@)Q3tbD-0eWMmVWg&dW-9 zo=J^QBB5~k^R^4;1~abxd&UmliRK*ulrbIet@Wes;qYkIF!^$63HT-yE`62P9x%sT z5cZ2oERvYzpsTDjW2aNjBryHJg1LwQ)q9Y0FIkIUyKgkjFA4{0iMxX@;6CDAQ7=TP3NGg*_4=hCY(LA9H=b*q8l zojFf<%m!^&rB(^~;VHTZh;m1F)us|He)frFJc~$`R3<+V_@gJIu8aP(6zz%LW#OI|?2P-~K;HmG$ozka z#G8Ab?AMj|VGm2iYd?A(u?n3F0Bz@nZ%P^+X4_2GiQ;8UX<;Aob|-P@VW$VZzv2Ny z26<06VGV8B_s{Bs|LLUL4a+&(^Iq@u7@66Ggfh|`a9_>RYd5??P%SyhIL;ZjDQ zH4^uHM`6j}+mEPMQ)KuPNIKCojb|PKn=~+d=Cv$#T5KOQm(=7O%a#&#k~tzS7YA;D z@+V3UTvy2n_g|8CC_*Id{M*})3OMR6tZd=_msG|syn+Jc<;3s)(tcNp(vk$e$ zzm9JbJ8SnI%MG4Z#_b6SPud~#w`qXZ0~yzQ_I5q*Yge;#&K#RJCL7jV??qWt2f)vk zdE$K9s3&07E-VJK=IQbVmUxP+Q;y^KrsiMUPkqcms>Kt}F+O!D(+7gLAHSfanTi!7 zLrtx(wqG@Sd&x9$?%+qJL!z*AKH(2%+56Ny&{q-K=`?RQBC;Z}i%coj9oZKT{#o-X z^n3J>Z+*oIk4jgNl^z&zbj<6RY*iiLDxkA#&=J=}xt8*tm`K+<% z9*56lp_XwEW8$*BrU)r*NSdnctR7n2R8 zcKKQvr9XnX+AjqoR*7|>2=aM_MkxT17AI=?e7BMoic8j`r8%m=C5L7z!mDyw5JEvD z4JUfqH2z%A{RptRy2%=WC4VI;4#)zq7w;ai@Co8I?&%uCW%?EJs>JufwqG%sdc##>>^UQyx0mIecz+7lCh+s45^+1^f9HOHQk& zkcU~Jg(1Rc^jm!HE zW7cGKVk2E;d|!;14}-WmDbP=>x-0irW=QR&s>ukrA5>lcrutX~>Oa^=BupA~7Z7;_ z>vLajX^RFBmBf*cd-Y^SQ3Am;3WG71P~nNVJ5gKMDvQs?E^u)X8Df(V`v}C8hMX=l z5@y!HU2s+%Il=k&AI>Z8GhcJMH?o}ozZAxzOy0j-h3-jsDO#jTs;NDbcRR~uyXsS3 z*nF+sI<=t_vV~}!9C$_@m4DVSy~;0+xQwn;?RV%s-rFHSLi}Ud;kJXfH7<{2te%Ic z=Ph_OZ!+ADrFtO~yOzRlQ%iCDEqe;OUqcXJ*py!`1I=YhU2Nyvlys z)w$YLD!LK(XHk~kGth$Jx6aiMKKqfpzG6Y6Cx?}I|M|yf^WObf)+$SO>U5V1>2v~R zd~d4uT&K&%<_e7jwkQ3=^0I#;0*|MoMw;2Givcpb389Pq=3RnWWxP0F6nlpb2;bJnS#3Y%-BZY6yWU$zrO)~e z8@FlYkJv693qNP3d+tmFjsZQ6*U-HXV5NLk^<~fmqhH}o)%0k_jNVu@!iQ!EKV)`8 zpKyx^-e-Nbk%XUMzBDA zoK1k!F-e5K|D>*!xO)KJZv0MVHn0>jw9~gPzg(kOSl2%&%F`{;d5Ys|u@_jg-8(8f zpKi&f#e7-vz4TQaxOlOUb_V0TXSG@BJpzLL^dI`f5kA!5$s+5(d9VD< zMJgE3K(2$ra>kECuX(HOZ-xALJNJ^5VEq@_VENP;r6TmCpH#4;KN{F#tRN8v!2ip! z7})#fQGu32#A3Tb;W z`l)@sYRlLLZQ0Rkm@-0HoI1s4SFs=S@l3_DYiWs5-OMw7;(M--@#+ zHl^yUmXWiIA9Qm_bV<01P4;E{qpA66{;}odZEo9&R~0S?iry!u2NndJ+p`e~a!a4g z91K@dj{33Vw6_mbL_-e9eWuYr-choFD!5%>pAVmX`m!_E+C=Rc7qph&G5#%<@oNiE z408GguX*gvO}5BYGcQG1Ac#A(fRx3g;B#C)mXa4>?`)d>&|YR^`uy>HqYZi>3`{e< zuJqMe5$L{>>XRi_gOJ&;RP2dsCoic=gQn*&Gw_H1qv*W<*?zk)u2t0<)upv*Y1Lk} zSC`qMRASTCULi(8tg50_Vm0=x5kl+;VpeOf+LG8K2(hX8ee(PP`Q?+>eV_ZBb6xK% z06KH(eWb`ddd}=@0Qo$X5!fH?s2*^(P?fnfuvv<$Ki1*`4JI6ty9Mm_(1aunR!Z_pew-$lNs^M7D5q?y6-y z!yHer5e@%vbMkpsv%tTAU)jt)25f#IFNgO%xC13Hb;Fo$aSzR0mam(jaT^f;M}Tmw z^sImE`3GRUE%EB}@)W*w+U4oC0jUYKgH_(Ez9p{>XwJ-|7M$h-vKe30F6dY59F8iR zTwK0>!ocrXhvdxT?U0y1m0)v8y13IYF3ZA9=&#nRADep}KrZ@3+n@CGku5|S-l{+J zjGUHt7`{Fo8Jt=c=%NsA73{En7j`Z@o-U7f#B(aFd!JA}!zIEiHT-?ag)^RtWFt<` zJTH=Z&v#Q@i6nG8lO%sm@%K656L1=W8w6b5d_1H8L82{wtb9YDXu$Tf;5L}%!8dAvLApN_P-z!)`WE;xiBpj>m& zyl7LVqHMoVHd0jYn7DkN42S^7d1=j$Qit;oQz(FO*}5^a;I)I!E2kzhMPxmZ4<~lF zrA|hCozwhzo!9-YIMQMq23-bl`s(;;Jg#`ekh;~9{+)*EeL~pp-un0VaNz3rQWo)o zRp0pL=fN5png0`J?Z)nO6Yp~8sYH)gB6&X7d#%`ilcQ#Eu?_N#1(*i@`Z5E%J!`^EG(@1IY*(4)55zlvBGYO1w|r8hw`7p!A{ z+UKf6xP(!(!kL=bCITpfiDc)pE%-VvVbp0D zBX;2-69!i}cM<7_Df_oTaIsg)-9{Cr$rThQ{nCfZbw}_LbqUPcCNtdyD_DKFe@hE1=Lki+O zyY9k`AF_QA31X{>n%wY{1&Mf?c!OsP!Fo}%M=b%%e0K4pr^XYhQIorQ;BH#pfy7vF zo}i(IPU4Day@DXd1Y7?a$aY+Z_YB^l^7Vfw;N+(XZC8BuQQMmLG$C9;)4$(yD4M)| zN7@N(KtIK*wIC#9Urp`uEd_!vRijm8SFJq$Cu@x5_;-D#(yn~AKBx7*W~j~d!J%6q_BTCltT-%1N) zkEEt#8|qL0LcU%-0{VU#Hz85-uRO4?1?u4$07o!v83RgRmfCc)64UG7=ESKTiaa{F znaaE;u4!Nirz&1z-j2%FW=^# z&p81)jjCWz`*#zlWfLj)b4sL3)r;O7&HZbDki6x%+)3r@FcOF2YipN}O-?&=krtf| zHkNa?>dCCScW|PU1gdMG9g-C06`Rg0)QRRQJNZ8JH#{)8hcxOv+oa)NCj7bNC_5~4 zygGk0KS8r2c<0KkBZJ|bNI`KKfoSgp1)g6uOYD9&9wP1Xg-Qt`x{MpYC2IZT^y=eODdKmL4f0@wOb0-Ez<|=Cu7>vKbf)0>7Rpy4^T;1 zYqlbFA9&=NWz~q$cf;SwuD`;v4BSpf374f8SBU!B+|54-&Hz*HNlPj%dvtiG6-d;S zR(7Zk2xaH7pnDtqVf5$-smYq!3|I&61tPbRI&G(D1dY#th8B}Rc4{Pc7}cuBFh5lr zPNEzZ=f*Hp(;b^c^Jq~w1<)&zbbf|e$|L9kLmAEc9<@r~cY+YQKN<*L1V1ee6c|QF?$%g@gG!#38WiY(mAZLP5QFTBtHKh+uf*ccmRc0(%aOX}e#Hz@_LiI7 ziVNwF7JjWao!naw#-x{!zcYDB&E4=)=BR1>;z&+guPIH%D-bQhHV?`K|1^u32|SUh z;b}%9Ss!D|*#(`Im@=3SPA2Y`TBU#ETz2@d_a1uYipu1Cof@^Y=ORk!UkRF_#~8^I z9Py2tDj8#MBRNxbgrz15v`g8~`f>HbGH2wU>*Kdv`)AVqiBr4=1y1HKdRQS8z`APC z1xAxj&Cd`^v<;&=4;i9wb+2`i$!5KJpDOdsWLTuW65CZ>pmg6l7i5M@ON2W+{8i|< z)j7m@-%lr=k8GLN9NM!2HRDal=1Dh~jf<`GS_Ic-c@A_HSh+Q&>lyC1pq~L!9N8x0Z?BE;9Ven5sONRX_MN4u?{ zTK|@z*eAGCPXl(^dUA7Bcr49deWO+;);zppk{|%GKHkzU2qhdf$bq-WI?&5wzh}i2 znTd|Mr74>@b~ zl$xn=uld+^_Xi8r%QImP9MAGp*U$6{`BfOzCuAaAP(?F%H|(%1&SL()w~Tiy|JJ+Q>c@mF5iWZ#<CyxzU){93@hGEe(L9~F>z z?xLp%F0w@cXc?og@>-9jvv$9-nw5?}(!RhH7yMaaox`dW56~B~zy=EPazH-!b~TYJ zt^1_d0c6Bn1t%o-`8l0~xy-{_gA^KpfQ2%=b;q7&xT%~XPb5+{QpEhOZg>^C1|}(( zR(bnailk_Gq;d04d(eCqeW7z{s%fuw%36Y?jIK!ComQL{r{8Jk=-8>RX`;9M74W}t z7ovT=Jp+|I1NaBJer)2&G$pVXZ=t32zU2exxv+&ZUJW3yZ7^J1m7UH2sUT(JOyugm zy9WN7b3gl|r3^}5o^OiufI-F{i}gId_Z373r9}wVpDABXV*0`U9Go4;5wlG-^2aNwzUp|fn{q=RuW$vn zNE9ED(9-T(B6jWre(FBFE`nkvK)AG=$G?fj%i4OCVn*HuA$hTW!*9!7CmmHn|*ix8I`oO2Y|u8yD; zhJzEXleUkFb1GsKrYETG1!RepTb$eo=J^`&TzIyr$f88deBnKdSXTB0%57VGzR4tX zG^!sv#-lw6R|YW?%GDwYvjGND76^dbO?qLe+2g;xkMdsB^Yd2c71_2jJ-fJrFFuY~ z@TImo%i42rVMUC3%~@10PGGNNanvEVa+Iw*GEga2A34fV_bzcX;v~)J<;wG#z~A$g z@OHESOhsN=>+!f#_oZ5J=%x-ce$%iwj*y+w z1DF1et!c5&5^38AZ8hNZh@hY0=qwExMM~d&he>B1qK2-yel9^A!`@RREU5*1Iz$|} zl_#sF@i$`W<1m3!B-24n(RF^@kI!GfvPlV?`9i95`lnAdV8i+Wj) zXB=v@DMJ!G^P?lXO6|=zT(!KuhREsD_f0>$Ks$t!I&f<&gMI-!^c$JoSBhAj+1WYetK*`gDk7?{njfLec zK74-kqRQxiOTX%`O^zh6=q=y9TamPI1Mq&4MCsXTPiF>YRsU}+%)W`}Dh~D33ie(N z>dH?#>M>(O5cBP9%hkr(g}wB2m^VzmznOykb|=~VSgiw zOJ9rVO$Zm5O~DoR56jARMh=~KO5_;_bNMm){MzJ}VlYl-Df+$?1$bO>=A#z2M%KgD zMqAQdunqEq`Lba{O(RAtRxQ2(b0^TF{0fZ4_i>vP`DuZjcuSY(4pyg1q5+W17$Ow) zj$a^=&M@32QMF3sg%iUwoUzQMPb|nLlcrkN6kg`gHUS9h>tv6I`9ZeZy$fpT?%TcX zE)^YoR`*!M@@a~N>MetraqzJPb&fziQJyE%QKwn1_IJ?NgSjQ%y_xC@_J8A?9t_w> z*?SJvNpm{33Iahf(-VDfO%m8XX}!JSx6;6Z=l>NmXYsmMwz@XPXSL5AbR;?`qZ}&Y z^DFMzyqCyHN%&r$ntB9hfrxJO?X>lJ;6;o`dD`kA{P&2llnO>|#ND5`bJ*Oymuecp z^IlX^KV(pMl@G(j`r}rsfV_t}$!E&qH~xzs)-^!;K5aDg$<#L$U? zkSC+dNsrOmXJV^CjSmq|I?>+@`NeaMi`Sp4@JtT6OnmOL2=B7Y^3LwuEv?IY6>m`_ zzbbYK(@g`Dkg7*9l-NB&*D$YvdJ>P zK70-N<*xM~nteB6-BHDX}7Q}ACGSgvc(aeUqBmFlQA4@|v~rzn@zt?_m$tFjJ()7E2Tuy^wB#d1vhG|CGaglc+g`O4&{b+(|Q~bf%Qz!tA`J zrPj;_W-O|9rM*AEzsn{`VEPvZ%wsuHfOXzvj!Bg!FAoQSGW zu!P7yP1Y_VNSDqAWQCj@mj#=6a*9NIUY+m6*tyC-3X>ZrWh8c~ULf*B=gP)9y;L>q zW_6YY4H^~LmsnuK8CDyuB-z9WhvO)V#_^_UI#;@I@q|rFl=Ok8PEB9Cr>kt`$Z$NCW>}b7bJG4(O zOX=LjmAZ$InHA2cp6Dgtk5oLDvA{sm#Dj?~Nd+1nB-!lfmb3_k zPdYljt1Rk$MM+@(aU{rq=L~2yRz`AfZ}w6Or82z~Mn{>9(oeFc*o$=R+=TXjGnBQxhTS zxayfLzH0xmk-Uejy0{#`LAhQm3lpzaTq!RjMM;NwsF49h#`e{s=CnCIe)T+H^L8I zNWKMu?nW>27RUt|8jH`)tMG(TXGAZ)uX3jUwb`J;uGEENN&2S{sPqnXFY-m!s`sKI zOBI#|v#x%DDuv4Tf!o;7kAiU_HWP6|94`Tmsp)=964onT01=}13H;;;yD4)gb36UqB zPCfAH;9q2a&=OI&17jSzXH`bajkBSx8>EW1t3z8KA|?{F2&aE@GHl@aQzC^zXd_Xw_hwKjgq1xt z%??k+!FeNt)A?nD=^@vhO@ger5au6zfiq^9$-Z_w?{qfCCSp_{MR;-8Hpej-ZYji2 zg7Fs!33oQtu6)9RWfPooQ?6NnMOOAU4;-hu#$jpLo`jr`kr#v>us zVk`I4@ars|Vn3mcF%PbZ6^LK=1MDuy3QKn?c6Ej^9{T;8-i^K!yKMa_OGsn;M!F*- z2K}d`@{x_p*Tc}xQ;jMewK2H#kaa0OMo{J}F7xN8-Is5yh^~-i&`4Iwrn&jk&v?tT zDci8bqZ0Yw_lFJ2R7R3ACvF{Q`_w87a_cLP;#GQ=OG0kQeD=TEP~4k#{pfK%mlgcS zj8vk_qBm1?TH19pgxuzUC)f-YL`v(M+NuE-!6)l9#RtBqCBPj zsAB%X;rvsZUJU1!cPJI>R+!*sGf!Wp-CZfNQwoEwIDayhM{E>PiJ z&)@?CIw~s>kPcbw6pTJ)=rjYfA6IsD@xn^Ar2Fcus>IbiT=coW_yA7|S54_`aq!?n z7V`vEosZu2Sf2agYT3gT3yr;J=$i0VdR8uc`V*kER~{Er+Thfz&5*-kF8b?e^dg9b zhnl1e7$B0FWk;jABQ`$i88)>f*y13RFXEm`r>&eO3b=gOLZ0F-2MifuRu8x_FRUZXpPKyMCzGk`JcJVqM!S;v0 zo2WYh2A3AnMu=hA+{$GyyNH6GsYAIV%R@dG%_KF)+d2?Jvms|rF?!-JiLp8oqJ+d1 zLWe&6yv03^q;@Rr$KC5LT^P?WcI7Ur@i8QOm$zv`R3>IDuzS5BqKN!p)M%&_mn#=L>(cY#!T*z&4=P!ah9EUEO>d+Off2TAa0I`zZ5ka&ewg$~DiuX#wurfeI$ zG~PO}uTDI2>91RyG=jNAdM$SSlm$#jC|KV36k;Ck`&M4lBEx&1HCC>izq3w!;rF&O zM;Uj4@>g|V!$;&|HfIBnDs?j$tg!FZhYY4c+4^UzSJz7`XY}wvg z)t^l5aM1jZTyt8y-DTC(?2psSgkQU646p}VE3}=FA4~URy`>I|HODy9MNvv&QJILy zRUa)Q!)ksN$FS&8BkR;K=_Ii%13Ivo^vqUtO#etcJZw0b?>9r&tUP^fz~3Qpvjm_I zQ6I`f+{q>z7fQd9&g0!U85>Wvjb+fET{b&{a@tLIS$nEFtyn~(CQ5VWO`{jXj$Hm= z2<~``SvV%!+qd@38Nv9hsR+LF!$$=kAUNwnWa(BJRJ<=?6)^OZwUBej99t2ErGLpLsM$Ysv~~>ph|-c=x~~{X&k8hzP7esMmXvDZUQ*b zT=U4~Ho?Rztd8rmD@VdAZCQDE6?WR{lN|s$5&Wi%y)wG|nd${5d4b+<7PaXXm`C+r zmsPHehNCKP*QC;a7WNm%@N^{AFL2kE_jJScm16&+0f0?r_;?(*5l0sY@q%I*p|?;F z8yh8voH};(tQIPr!E{&_C8fh$xi_HZVfhXr%Qjndr|jpZ+H^0EwgOk;zr*53P3n*3r9kRZp;5(m zZ@-E98xiMt1-cTBjkkA*XVsKT@aLuaGg}k>wm3Nbs-lp<))_!VzL)i{GSBa!t=t-R zf1J8jA932MWKAmrGdMouHmOP%9~#)=2tMoYP`*_ZotYX?Y*0`Zjcmstw7B;s$E^{r zkNSVj2k*4;Wb3YNh~D802KuVd#*b7MhyzL{ZzhF5n}>3@(gbj1X!k84rfZhtd`VH& z9{Dxfau%TZ4BN0MjC%nZXYcg~ZWhan@aoa75yO-x^9(DUQ`9p>53}A-b2>Mqn6u{< z7s^DH(c5*5S;jZ0p7MN5l^|p$vvTX)H9K`?^=Cn&*;aK1cW29Z4SHkB!eui)IgaHy z`GD17=8rw?GGQ8WNd3#f?q|i9x739bkZk8q4sHRjRX+A3BB}Slf$@xaj#PdG;^y3C-A-cbLVF-tO-M9cmdneaG5J@c#OqT;%X zV4RTsG2n-H#Dz}+MJiFZqP#yd|4!)0(vRDoq9E;Bv9hUFOb5bDx z1OAQDUsObc=GX{WMe12hu5(C$yfu9?$KRB8@Q;2$4b!ulOv^h0JvV$G2@mc z=CMhtHJf}6F;#S0XHk~!?=7KI^uQ%q40l|_<0~x5e2evmDDSoZXq=7{*<$$;q>haX z6WCvL$R!v^Qt+(@?1Kd^1T*(974Eo5`Z8e)F)>@=0EuF#KF8A7QqE>39|W9>$Qiyer_9$w z4%c3q9VZ46>E@_0^^5p>ae;(qt5V}=3;b_ZZOz-#3Em?kyvbxkcBd;!L8)fJ>wBGj zt^mU~*;FZ5(4U)AbPTfr9xq@l?Pm-5w%;JJ8FKgei;g;v*L2O-MWWM&Kp-S7&*GV$ zDO>=q+HB1Vr?weUK3a^pE#_I7TLUiInU13V$C{d2eJ=7tS1TTRLAtx>725cR3rsKk zX^vaI!it{m-0vYo5V^9H#!_;hbb3sK{-c>u9}ZtKG*W0BeRrmNsp|scaua#Q9e829 zCE`LNhhfBlNa6Vbc*DYxNa1?OiNH$3X{tl5k_8w6muJ`qLB4WF| zVZ47-{Bcxw5d?U)wzl0!7R@Q_nsS9!L#F4viI>h($$xh16yJgJ(%Ka zM}F`t8`z+MS*rtbMIvFlu{JJgJ{iF;8i<8U6(0+l>sQkEym!w^y`FDvy<|1`!L^q- zAPIZNPkbQ}xJb5&zx7dl#_QOFjdRi*_8#p^&$%|XrWkD|2Y)_wlNQHJ;j1(Of z+tz!epO$p?j#o#+Vr~}?_Az8BvMn7xM4Kn@h8{)ME#!RN3fEKsbm}9=3$cudc536C zwNj2(o?@z}>jVxQs@TCfGWsX!h{QzrwD41VAZM^GnY^WIXWH&@T*0DFJVbIf(SFQa zi_PpQC3txs>5j{xT3nAgUJ>H4v|Lo5o|}u&iWnJF3ul9KZkHK6U{dXr-g|7}+1+VV=A5E8P}gp^?>2s7MtJWfYGExR zO;Le+T@4Ygz8l)XhP4!TRpBOr9yOd8cl9!b1aP)|<-w?Y!{u5Ixqjxyb284-qIHn7 zT?zlu+}Ep{KEjQgHaLpL9HlJXe@YIBR!T4d8R#Qts(tpWc}Rw?#a(T|TfKjwj%()k zpw@xwz1>Xu>!f{ZSi=YE#G?g#+Hb{*u2P~5_GjhWsxP=k_)N%#s{QG*`&fG1ZmSA2 zuDlG+da)G5taZgc-_q;SJT*i`?Eu6E6q26AD?`=I`Ss*;3nE^-bx6)abGuYx*UZui zzIW5ga|f?dM4VVtJNx?R-(>$7HM!Sex=UORqC!s52iMKe`nqf?QEjD-&L-%)OjdSg}lkk~?iQ zNd-8aIh8Sx7@R2sjxWmac_93*gvCcqRVMaDLTBEm2&$axd5y(jsoHCWZqD(r zzL@9)`v&f&wQ7q`o0xRxxt*Rd1z)}a9J@u|rOTm5u?5uEfZ6VGfa$hL!?;Voi;Zj_ zf&BQhJF2bX8K);~>=xryd}lHKxk@70{GER|UhXa7hC0s}&}T2*^{OL3STH(k>R|1} zcs5T4=B6~@@T8{;0;dmF`>~pHE1KeP3?GKA6#tQoP)AfUMw1{^?jHZF14P3XbH9#y z`;X^pT3xy?Q2&a3o|>Px+)XWu_W21U(({SW%Ht8pfaaUgb)q>`h#Ak(JN~#P13q}j zV3W_hbI*}Baz%ba&8~O3iUgUVrV^>vrdEc0_vBlO6RxtXv_)_e_!iTA2A^6ySJ=Dn zr+7+US1l>D?A6b`Z>vjiagWgJxtk!<6Sf|5GUoDh*L2fF_0l5yku2gy(X7v=J%~kd z%ESh6JEq0gm^U4}ylJ_M6jFuUVkCm>#ZECFU(|XrP>U%E;P88E&#R8}o4OAy7M9sF z=+FhOZvZXvw2le!J4I(du|g&g18lk1*E)9UdgF8}l-+?g^LS}#)pg}0dyPG{EmZah z&kW|xz~8F5I?GMAi{_ds5;5w=3V_S*;IIU#V`&65PrA=Xu>@JmjPOiS?|g!`>%YMM zf5eR23M%^ts6+6vQTg@`Tm(IQ^E~a5cneg4w!FahYf#QM5E7OH>e%GxTdlr?6eKay^H)t%%4x;Ri9nf`zh z!sAi1nuM{&R^7|=Jyc_*FcB-vXN&p%VBmgs?wN3Ab6j|2FgQOgqOqg(UFCVsKZk(@ZC_<>@pS{~-IGV} zcaq;e`^HtoUo0}np0@~!LHRYD>^ft7o9pVLiS?$>O|%|`a^8THf7J9ZzTjAs%Vx)P zm6w}2{Alx_PupNekMW!Swu5xcj0ye@iEy0@`slH7x_Z{-)$=zqm&KC$@(m9$wDZ?z zWNxp9(+P4^=zBGn>jlZXOtVCEX!=Sq6gaPECR9~j;Idv94*WGQHFCS%wtJHkt{m%9 zGx1Zh4wSRcJ5WrX5vd**G_wO>nzgRVn14c*h#|%C2*! zClQyVHWu9R8W=8AjrwkESws(^N?Xh<(4A1`u%YNXTb9dB?aVlfaCUmxqQokV&rsz% z(K}|lvtD^3x%e+V-&z=;TyPO_lHu{;=VmHbM7UlQ7Z!4Fh=zc#^mXdf@;pvvQ;Xa_ zL@ht|$mQ-|g@DfeI@u1@#;)8KW5d66EIj*cdc>;2^7Vx4QhXx7vCo7vWI5+}0Cs6S z+~doD2`1*X$gFb6jBhma5({q4;$C(Wp78A8pe*J$dV^$}pf`=Erw?wwY7hRDwpiZ_tXI#ftrf=>B0zG;pzAbRs7D zU@O*JN1#W|UL6{jbA)E} z8}Xzf&vYdqhB+SUkf!UcZ5yh>S$X`SP0b(3S;)H+abMMr4C_dHg}q?X%k#PEa}BCC zf&Rh5Rf32#wzsQ|b%0peZMbI_R>NhB@l_MS?%BG3uPaw!X|nuLf@!xUfuz><)eGG9 zg_M0|5+`0r_eKy)VT=51C&Mw_MMZniDtmrUq_+*DQN1{lOjbfhb9BZeg3vrf|S>ro4=- zYgAy?_;uF+)_Vh)62?*wl2wgiqw@E)?HPVMI%wrQt}k)7U$QqI*nli%;ANjgUYc53qw-pF-W5~o+Ia-mAK z7aXi&dcS$iKopJv21lRJXcbR>2VP-EawuV@9@}!f+aj*afN?L9yh8E#0S+_MO;0Kc zc6=^c|H}4gSAlP#M8!c3<=fveAWE)ZAbXI-tP+^GKX4Pgt2)3@E-9-^(n)%yH2 zVtn=UIJuoH@EXAWE7!dDndw&AUx5AOeiC-BJlPOG_k$QXJurQ*9WIIANTh z@bJwbf~#zE(qXVagSC`AHz3`MNr~@d=U#V3>tv>XoKKIbTM80Uq?qNBW}QH$vAPY$ z)0F4~0mS6luyRpUV`*%XInzUy1xPh5+^J}EF^>j-u;y!y37LJSvtpZnZ@(~5Z|{#W%GdJ+au zPO-yae-+W`Kj&^nNK}~Sh}u>dP(r%}o0R~JoBH<=jV+WgtV+lUSzk}Ktl9Z0@up7a zJF`UR+niK=Q+;b^i-${=@j*OO?gQ7~=QGO?+VXPh!_PWmcm>ZW`G)I8@Y??YT4+~2 z?%&zM8B)aObBlP)gbqNjw5N~SdCZbn!I?Eym;08>eEj(?8%UXjOevnbu)p*1XXt+{ zg^U095%*~OS9d-3ifwH2c-iwgS*g4r()x2Y@&)VdqJ@pWmPn?kpY#AAy+X%z64}UH zQZ%RN_b1wnZ9Sipmd|Dneuqd}#$`%b_9bmzX@@-xP&29KHxe!qN{C)nHFe;?#3)L? zYjL7Tbuwm5CY(EnS!zqsemV=O+JvfpecBkpqS&^O4w<7P#GGs8846^6s&wnxs}!3R zq({yJzkKKDxU=Om7qs4kF%zeB#c+C^Z^0&_Cf+ZnEWr*6@?f!c225Ytc9-M~xMj9B zjb%k*MU{5_7J2`eb7IItpxO>*{RTE#S1&eENs=KN`Y5eSw3Oenob= ztKHllc2_pUII`CpQx8Iu%^uJ8r+f5|C|A!mhlr2qiCEo&25IQ&eTdRJy9*n=B`|R# z*s7QRJy-N4GB9^Izm8Y#GW^Sai6Q>G-$3hq6-QMn%b>yRI_Ry^>sRbyQXg*wkk;Pv z{obfjv?52)XGV_Tv0}+m%)NwN6bzkCXE5);7avP9+6TT~;VO9gP!8W${P%h1ntnHv zjrWm2-uw9Ptzil1;$b!7t_o0J)#9TYCVxdCBfaS8M| zr^xN93fnqzYgLvd<|Cn;wOM)PXwBUSFGBPD;!IJ&xRvg%IxY(V5`C3kTXH)Xpc=0K z{T25$@t^JD_n8{Kfe$m?(X2hiDxbXHTIyHFimADy6P}~0-#|R;Y3mM-3MRTP2Wj=i ziJak5&hm1K+2mydnwy$k>gt8k|`y{_ep`mPQy9742SW#T2rUCwctiKbn{N zQGeXOLy0ocj{7Ahg0@BT-W^gyV?K5GS&122A~;+3;m;ZYZ&WysL$K|qYpVfoK~v3E zsGj;Z?z^WW{81LgkOMM-GWK=9yvm|%lWLft$Nr;IAeL@rPx~mY>!>)OwZeISt18Sz zX=(u4PHtsUm$+y^@ZV+e<>?x(_aQ99*%F@3Y4@@=^mxYYr!sD92~Yvi(idxa(q5W> zmLVjkgR>wZ!O=Hvy5-yk#Rt6OxoP{vBmvMB-@6EThmG5|%o7yW6wlzdP5$b=jY}i{4A(NG!MS;+6RmBqHi7DpZLNeoN|00BqWi2g9alnLf z)?Qw8GRi2Yi(0ge-#P{~NfT`l_&)!GmCEG`4m@j#5_P5#z*ArL{SC&J&sR9t(;zS; zMyt@&fo)y`)R;IFFy4gz5>MFN?Xv!~s9fK6w1~Df(#KQGd8+SzgCK&hi@?2H?2~(6 z00gG9bk;H;#qMq#0uG6a9h%DTR#FW)J^E1T{#$8_E8|^FecZahk8EW#kZ=`Hsn~Nc zPSmvATE-$7>gvW>!n&*pyJLAkobx2q53-%MQ$MHGt?#wzcOGUg=~ikJY7>;8kLyoM zbso%TgCw>8xU9=a^2%)-a2*_$W@;MQ9ls9VD`N?ea zEVJ?EZ5pMlt9GK_jJLRat#pSsL2qPzt|_hgD}DR#QpHxsr82aSE112)xk^;He|Iki zrRE@8T9W_9u_9;OO6*aATnc4`9RBuyw|D)mQwDvaZUMm8+ zY2iYkKm}H-mdFb35~N%uz8x3R(+z=U(JLx0;wuxHzkfvAerx(Gek-LkNZ-o< z8B(BE;OATBVWj!C@rII#HD0%q$IR4ICTmP&ZKnfpH+ZLB;Ko?CG+~tCkV7a`E8&-c zFE6Bqzj9ZCHN)N_ItvzJ?!#mER-FIvh;|M5@O@{N1#RxynrV;z%$i2JpZP0~WUS>r ztFtJlx*ro2tEaB3r#3ZjBjfF}bmyqKh16t?#lCBuK}qd_mSPRsWe0-`{8{HlOdoPn z2S9vwm(JGD;pxj~Q^!qGM<~BdPgYINy3N?45|Q2PMo2mB#I zWK2E4awl{=$=TR_y5VJPM~-~dSI(8ex7ROxh39lcj@79tN$_7k;XrWaWT!ySHTY)v^S*(5+Db_p@InP6FMqy&QKMo|WnxES?>q_AFluM5Fh- zTg}To488Q#Gw6Xh*w*T6^DC!hY3cD_ z%GlQMU=1;}Vw#Xp88VhorQtysi8#dB{`<=CT$N6TjUyVx8vIsEVJU5d!=Nu0>dsFe zI;Ps9ZxOR9HmF#-)6Bh-Hf5F)NT(A1|N2%d!$Be zMmvtz9}NBMB~li>Dy$6(?%~qhc(O8`lNu~a)rGTC1i4YJPiBaLy}bb^M&^{O`I6GF zV1bRKe=)B)H`$NDBk+T}9xI)_j@&rfgMx&|>6Ar!Hg4FEJlIbR$@x(DEv)MrWVq@d%~GH3Fx!EEkp5EIYtPO*jw-2>d~uCmDbiS z$eqhe6lf>)wJ*msgEW-@MVnGA3P4bM&dInEd>Qg0qrA^VFmVE|p_%hQ2)CjtsYC^M zS=@S7xg2~*!!B^ixD4Hxs(;^=hq^R&4`nSnMpU%g(qzeVjeX^h&+kjG#;HJ$3I%#@ zu${|gwihMVRN_pg4b|jrc}Ns*cKDIs(3X|lc>Oqg&LRx zL$X(BnP7K10zM|;b3e6rV}2|fAU(G8oertI1G5OCiS+yF{b+QMs~*M-#5k{FFSE=1vc7_5Mflq;l#4Ae-~2w)+3{Wbm%jUpvSSc>e8>0 zz2>1Ib&C1k5z|MXqxaqri#VO_Ka7$JgPz0#6-I?Xb+q_`hu`>HI@IxMnap~Rrm|NY zNUA}~A=zk++YXODT7-ok6hF{#Z~Q@M{ix7?yS6Ldw!*=^MchJcjcVL;8m7BsEWXu5 zUIX#~;1Wq1?OqD!!uONk<9qII{wh-+l)dfY+0^a+(RAffsPc~;IDK)+VRFpvDg-Bt zX;;IZV6b#PJ+%sDvK<9RDOZ&nRl@V?3VLRKw!8!pMSi!)jV-F|3NK>@6WOiMxVnA8 z<8fi)u?8ST8|6tuqJDIMlZAEdix}Lqf$LYICq$PTVhtxmhc4kF_(L-?4pFW}ubJB) z?y7>Lh7+b8vG&KQ&kv~caXX^&gT!SAkskQPfnihaEu?FJ5W-Z5@pC#P-l#m#O!yBJ2)s}PL9*z6SkL515FAW}F_(DWdRmSm ztYaV@#}*YgX#CU&3vHL` zAlmK>4p$$r&R&Urk5 z3~?00BwzWY!<)>SeV3^hVJX!;pzMRrG-O?|s;6r{^jj$o%KZ49s>qGs{AZG@S%8>X zS~ZC=mt#=d-NTNTIUl_#%R>O&;xt2)IHr*Z&r*5sx~%_0lgokp!%Nyf%2txu6}ai% zEMG_6cmn=*E-%;8+s{TKYE0wlyLy=jO%(7iG$}Tdl zi)+uU%XRHpMA79E*X~O8xc0TKYsR&e&2>@Nb>kZ48kzmh?_W5NbI#}edA(n+=d0C& z!T2vEE^KIRs=A9Sc}TLe;O=E=Dw{wxm^(&Co_p9$`nhU3(w|aQ5GEaI{k{komK7dX7D1@?262II$( zOD%KIY#2e;0Ek(`@yJ2vS&L}tPZKa$dub#|lP%zg~ zT7*Z0=*A+~wXvgPw@-(}I~(56Y~dv&&rYFqnn6ZwLKjfC@D!4@mULA1acGPu$A;1U z42IJb-$axiXG-I-0Ti2ez9eXq*w5CcpvsF}CqExz%un&GrjNYTt{9-SH%q!3X)gS# zU*|ybW+bk2Fwr8V{*Fc1l21|p#{a~+fstCde_@843a4T>mJ`k}A7dkpl!MB6Z((#i zLZA1ry;^E=;24>2XND8G%MMth9*(2VIfxVTT80l3+2V^(+; zsb8)Z3z4KW%xgJ2=&goEX2iMnK7Im1!B@W;X#0lw+`+L`?eDViq|`gvGzI_s;XTw( zDLT|5fZeC3uMD;>`fr+4cyW)U#pg$|a5vLtza+o!tmP)Fjhvb2S$K6{gj04(1n?)?wq{fa8-*2 z+qXU4S(jg9K82&9ePZwgbNprBGNweOp5X}?t6H}27sdDH6)nS8m!0{Oj@_i>HVj}v z#Fs*sHcjvPR|GQyjgnd2Px@8%8sIPb9!RNzlM!s>t?X=g=CX{QpWa)T#NGDoArCi? z8ttK&!B1**lZtx`hgm4qy0oh>?8?ohnG zM+{>X%u$*5o=UfU?FixlV2BehW5^Ag zXRR|p%)tHK7~1%h;d%Mo?S%x{mP$o^ z8(06w)c>LkXRd!?uPnYIZh7?;G5C__ybgDqx_V) z`-L_cjTf7nJ6Q}{F9I#sR0?j@KzUKdrsC`m4;LP{{i(uo?%EO}xObnj`De=XGL)TOY z?D)C)nYaC`;H*7cyLXqh3N+iLVwleLtR3W>5G-OXRQ*0E^Crx*;--Djt;-E*n6zFbtMrYrgJvwi$K+fUmeu2z7##I&!Vmz<{qI{ zXP$EF;=oKZ+;V3b^QOsNf6PI0A4&4R-o+IK6+GorHg1dRES*vL`UBDEEkTlTlk0NW z6k#6sEvK+K=tupiaetp8_lGroyA0k@wPsm*cNjkVIqul-JJ?4{$^ZXbklsQDI0&MI z$}L}>|0ycg+y{_WkXurjmCAAYL(y}e*JbP+t>&Q{Tsy##Y{=Akv>~fFqOMKyM>I4z#%yF9N+3VCtK~h!o1VJ8U2Er%Pu`ds;#V zFoe~|+D?XB8@=1@SiuGnre5$qJZF=qsKB%#-Z2eLVX}W;C!T+xiJ9^|93q)49xIpS zJ&WhR)F{zT1RA@m+Um}x*xmDLku>|qbmdaHdndwpO#N{scd*6Pd$Uw~*Tn5B)DDYhZd`wB;txU-}Up(s}3dl!D|B zw0*RC1^?mK?2lnOyw>P)>2o(YZnF%?`$!I~UfABN6qiCICvSvIE=3kL^AGM269h4` z$3LGPK6~SBb6ja8oZ0lYW<$kRex$(fqk!CUo_g?Z%+MKOQwPI0%(ZfsyLb6Ysh_LavP{!)px zjtcr0!)hjP*fUYX|5>zQO6j)Rw~0d$SFhTpCTkyHbCzUCa)q0ty|U&UlA#LEjjUVX zUug9P1Xq#J*k{d}SyaJ4ib88};B~=j`XRK|pe6;^B+_0|O zzrKcq5?XBK_}-j^OywBWH+w*YH>XOB_j#&i%KfId-4}N?q8M7Z^%ku^AX)$9X zjO|1s_f&0ym%ToNRUfm%nr<3l1sl1r)c4va_8rrUAs2_uLdz@X>B9;?8*rR{sg_qk zzR-J@CS@E4>}Cf5K^#}7jY97$|P_b zKKplA3CP{Y^BY(L(X-h9m<6~;rq{a*lufEh_Ihz{M^!2`|8f#|$&jy|lATQYjb&@X zu{CGp%sl@^(tjMX!)7nSE3Awq{VqEdm(w)9TXL^~ab7Tb^^`JPOSXRXMUv_2cu-p}&g)2C@@^!SuhJAy=B{L<`YvTB@v76AhWbbYRHs<=N*1X*9dZ z-8H4!l^H_;GvbOBb#^-rz?1^1yZb7p6ahbJ*@Wt%K^4#ZY#z9t9{E&`SEz|Y_BLoe zp$;X785Q1M*=x>(;+{0_Lzt=SnL`-=L!));Y;M8}%b=`?$^6w<=G|1h@8v-iJG#ZS zx$>uHDt>zReWOerm|E3VYxE|=7nA1>Cf@Lcpfy#+CAGPdpBW!MwbtxTpM7`AM1mX{ z$TLpI7x-}CON$`O|E#l+eVEvbF&9-0!k5yDM$4bANHOCwOqLc;aL*n?=FEG{>=5G< z1OCtq&Py>Y%iKe*MkX-`RXM@M-um3_PrF={ zjF~BuoENQHw@FJVisp^>>4$u4ld`J3xTeSDrVj8Vir2` zXl6&%B8Fy|YT|5aTduFBWUBk=D7|NuA<{4q-$Wj(q?iRGJ0ILnFIjyo6^ARa+1ED9 zrVtz!td6Vwb9RD=T+X-}J)_`^gOs*cK|E6UzfVs7Y-VE5Mpkk9K$VJ$THVZb!*aKX z%Rip1vQAb)pEzh(;o%EyfC=o*_s#Ig2i3oqR4mHlpoNHUcg7p)p5XbxULL+OY%TMS zpTK$Tg1lW8yq?Y%np#)iT2C9cmmu+{MW-#aE|mzYijmwHddSk6^}|N~=<>Jez{39o zZLj#vSgffDuwqIYIiXTn`g`Ep%IC`_Z)M$eCN))09lje+n9u~B=`c@+_gwWkYXZm)Jf2pHHZ4fUMu!-n>Pndv!h+UkS{2}fkcD7TEbL2o16@7)bbSiM|Cddg_6QTz`dfk5h5_>OK9f(15;G$-46p~yj^em zFIHW#u^TYEEzGA?4N5E;{rSOU19i~ND(HI|I!rW2oK@2N~qfO?Eaf($pkz8>_0p)M!05Kl^ zJ)$S=k)5B|NXgq5b8H;!O5xxPm7>G0R9+ztZi&nim6|c_t~Xn606(1yIxWPnUK17| zG0|1Cep-_b$&(kcZ|=_(ijd2F%ie!RdNwLa}|Am>1Y3hk;+hZa7Yf- z{KjgnQb^nE`rM>p{7&q%sWj~MiVg;%ks=U`Fthk{f|&Y6EFu`drBt?t7(4X#a%azq z{&0H$Cr?OWi{)#I4k(klwE=+2#OmAyl}bF2d)p&e%hYgv&PGs=+=OzQTjS2g6Z#9; ziRoL?#fCsOZwkpeA~R{WG9O67sep$iMr)5$zl0V0=cO1 zQl7f|w+Q-QMJa>w1>~oH}F1)xgi^hHpu8)@O_RW6mMyW@!zB z!z8_1PlrL|9No4O{qLkIQzwuA8c!lVIcdR06F-^prUQII=>~Rz(F;mVH@xKUHjYfz ziQa!P(02OiJLSMtiIx3{QyiN2KZv-Txq5;F+o(ie_i|+MZ*+ zqNq} zxu67atfG!#)Lv=1|K?KhEC-@v@5rr-MB@a)PK~rU>(8NSOWYqHCv*9d)O#HDRVNs| zY`CjwjhhU%z#e5~1bAb6y{0sQnaMwCv^B{D$}bssb&JAkSZz5P#Iu9shY*Ty)n;LxE4T^8on z6i_=R6ICq_rWB@p4sND?w~}24dnBXi`nYPVzb^8`-$2^>ZTzEI8+W<1F_y7|$@qNh zC!E<=^7xfGC+n%TcxR`-qSrjfkH2wp5UIwNnhTP0eG8R8GUGU-&C$2n<%h2*teS+z z54Lpz#cjQq_(5RolI{@6b2Grn|iIcF7c>8x1D`jPgiUFKHh#_~mr9|9gVi(EkR z7BhM4)O&NzM3cB46N*>h6_T=^nhSHhb zYBDSfV5z$zY9fjzE1q6dpeXp7Z*Anm1vzFe zh=zNi*M5ef8DcEASVlx5fI|==brrEdH(9K=_a3Evved}9BuuRe|2-@PwwTHDTSO~M z&EhZkUKwj$d+QL%!t{SZSJU&_`pjI!fF#77)q3JPm-+`OP{*CG5cqzB;}T-sP!Z&Vqxp9nMIO$*vlh=? zl81#HO~vXSDXZRbUUt1H`;C~uqU-K?Ve1YR+*zr?EUIZNJ3)Ed;98vUFtTFTU4#g*JG!|B6KGSu$* z*#tyWGq~RUJzcTzQ;9NeUmLIN%UUOM7py^gjo3p4H(jYcjonIFOk}mO123M{xx~;s z$AUG}b2j@P_nXL<&=LZ9mRDGq^eU75_D@b)s~XD&u(_w}l5b6KlB;I`RyaG2?Zr*k z^-pCO_N$G8Q#hUDVr%7Gr4cCsTi+3Dk+^)vg+yx-=dFgU2lB=MNp%x$k*KqqzUMgy z{V0ng&j;v0;H5gY8m-^E+t%M z@W|-8d7$v#o@Z=EmT0h36MLoO-)oD@K>NJo0!yE$_48nKPf@va`tbVJzH5$8HCLEO zuZonp&aD{!AohaJa}pFx(f$EsN7FdcES#lCWAmY|0WDykH*Hxatk7lXm>xE1lgprD z2Q=>Pr@8iaY=o5xZJPgM^6x+ghp{%5-1{&X<7;-}BoLZcq+D7+u8!X20c)zU9p$FY zbZBgZe^OaSH=SbX@2>!PN90V_T}!<_)Od=okCp^DYb)$v9Qt}L$$j!8qc{&4C~fv-p;9|9o{7*J2J9QN8L`vX>_Oq%)hAfOdE> zX}*zf&{Fcf*(D)rz82{?6Fvsz<}=aOt!L_mT`~PM?v=bLenC*VG%8*{!xpfu&?i-}B?BU! z#*L4d=Ylig?_}SSt$)tVE2Uk$J@yN3Y(6;hpR+Bgw%aK+jMVBx?jsgW(IL6bCYoS* zcBX1Nal5pHQ{2QQ7t1MfOzmM>8WVU$mJ@-2k0k)Lr*y?XfmuWf^)j%yW!crRQRyJ; z`?#s$2W>a23;8*N_7^K1B0~azkHGlL7`Q^srezLI)Cb@Tly$`nK&E^OQ8T+{P=uJQ ze3r}swuLc2YCFV9U#m`YJ-Dhc@gCdyO~tC8lL34gnmv7XAk}~h1Gl1k`!Hm|Xh8iG zHA{Zo*dSk6Yh_h!ga(Z*VQZwm zk*?_mYP)kpUD)X>77e%FsO)j#X+?icbXY$ka|7U0+;H`}I#y$8DX+efHsw{#B**7r z8(CpN#S43g4H83cF9GrYX5z1{cK?`CqkVi>&Wu5m3VNMC<=uxPeYxWeF;r*8cO3iL z!y7oC#q_QIaOYnl4|ZveYb}*SBfLP#X4v_(#OGOeK_`CCXUjkAnQ>h{9TFUOZg;l3 zM$!b6vy>T6g*sk|L0;<+RQ+`A10hL{zY(eC{TNxOYMs9`GFg;h$UD?Cuch3IJCi2z zU_udXhJ=4R40A2>ZgsT@T7f1 zh0e;L8)+5STEUby*p=+ddP!5%Ie*OYor+JK${|*-*hmCQ@@xo`mHQz{tXxj^AA zZBKKPJPcP=GZqf^;1;)T9Ix*w@)|&1>57rj_tZ3aSb5ffvyGq!Gfy&x84E@N&02vs zlgw-Tzw*#tOZ7y2(h@ZexL>oIj6k&z>rWpf&*QLSM}4VJqfPhUkDNKU*!AxCj%Lq# zDftNy`H^A~SgIeJ^Hrt`#|n}C9?sWh*z-9svoCG~eca9>4TTdsn`V<^9ztTgfK?k&u2Qj7-*Q0Wzya%OzO_F5{n_rBvv$5(Oinm#k;` zalKCW{_qTEcJv7U7)p1p#^xR$TYcrc{4WuVPD-(}*s|k|1VrWpuF)m_wkY;^Y!CVe zVCmr7z6Qu%KZ3UPFGyxn0xWQ@KH|v;C-mX14q&s<5iO^hu4Q8lBzdr$K`lqZTSFbd z*HlY2`W~+{*K}QYAO$E%cRm)e7(#p+Eb?+VnAFdXc|;f+_bsckc{p2^>aoNH)|3^= z@RNSqV|sf3?^k)7`PprkKCst2>%611b1-JH9w|4!-|T=qkwF6G4$c08gf_F*mxDtm z-`A&eCQE_}cR0pi6PDGxz*Oov?UJe9#mw2bX@OxKGo>FwE}`p3X;~XEppQPRi4G38 zf(i_z()u~We+#nk)K%$zuc4Y{2b9F4KB2^beZ-9$-!1}fx^J@CG3@Oe-Ph4|cFP)< zheXTpf7>nt_;Cw`*RLk|5^<&Nk& zX^7w_q+-g^U>9h+^jeO>e&AeFj})M6?wG!>&fI#5H;<9pE~z_~R94uru)FJY=B*lo zrwcVW85kG$*ne)dV~kduFw&X%ZU(#8Q^Wt_Bq1v?NAht?Vk;37p<68kH8Yis`BB)2 z5X?wq0{ucv$uAd^w7eXC;GLVs?+*2>Xw<+Y+dOEz50#tfCVnA1nTlqUBC-6Ij#B?c zDWOW}f2Yn$jhFe)q*cy;O-t6gH#`R7DmkZg=)13_OH;c`R;h@+`Kc zYdP&yk9y9x<=V}A2|CLfWZV-{LaAEcnc&HI^AdgxRN8sAy~?Mbl!gSyI+C#`(qFCD_YUB+Sqc$< zA-A1>n(Iaa06-3Y6yt<#%60Drm&kV?kjJ0xB2yJAa>M`If@oIlSdmhcasOJ9+`MPI zgCGytokhQKwx9Gt@(q$pu83+pw>s}arVS|SZqPU57O72;yLcY$ITC(LHr#2^BaaAfg$dBBtEPkIy zoEO7{iCASQk>iE#ea+@Y$4D4GwXJEL+^XI!YX2`n^*NwfoThVYxq3G@=qN6gS*kWx&H4+;#kwF z0T!IP&Dc7cnbmsEICgbub=CS^LCNNc%uU+0%czmOx&Tb;@vb+q{hibpk8=!p>%5hn z{J8ZGr9HsXh~dI!k|ROfyd-iue@|(q7gvXka3-ORzQi^#07IfdPA(Y$|;y3JW{Iuq}ei=ji)SM*Yg>h|z93)bS z5;)AXNST^%CNOKg;`Ggts?cet+$`1Ax&I9=ElqcdQB9XDULVhF+eMK*SsExWiv>an zM1HKMlLXR})R2R<6WjRkbRg(yQRv4IlL)V^IDql5g0}d_^m2~9B9J$Pw@^fAhx?=` zApB=ao@Y10`scADcjK{ed{1$|Y?g zyKvm*aS=CIe|YQ=u`cl%Z(Y2ddB29>Odg<4qC5ZCKc4Jz+QncvkPX>xVr zK~dWHtc}+*n<(AcI;0X`C3)6|H3EzHtyB)(Jo*YFhQci@z~gBUby>w=K-u6rob|rYNGB-vi-xR&ki6#wuUooqWWqa$+fbj*>RM0-AP-v5bY9~pDe=Kfzb}Qyr zf{cA!{w-LZ^4aH{1F=<)4MGt~D?5c31k$KB)=k~I)u$m-9GfGPC9_@6RNU`c5i6C0 zN;1k)a6$-zRFws=_>-6_M$&Fd~7%zaEnBNd@uK%-)vJA zjoZAwzVvRzf%$d(v3>l4u{y}4SA7s13wd;at^Ph^bOTt>p`XCL5_xsxJ6W$;}0~P$_8)21`dhhwo2fateCcB|IwD z5S!3L8SaJ$)DI%3;DYn(Q-bHdG>xf@E=Y(HBw6HnCTh8}?WZ;xdcDsp9UCx;y^=ih zz^1HsX@F4BRiY_yV2R+)efqHTh=?<4s!!;mnwmP>*x>09oMO!Tb+95F11aH&sex5& z4U^Q!e(J}jf;hNY2rdsASntlBE`E>72u@m0K!u2lS z;g;AmKs|RIfRPxoIz&TrkdWJ1MaBAt55uo^0pR1Va^r!?@FwChSeP7O`)AYi%kQad z+0V0_$lW0~*H*TKbEXb>*Wqx&s<7@O6KUJ&UoWI!!X&9wQTRT@_$p?%`jOMit6J{DX}F2nPODKEA6xChX%CFIX?b)Ql>m*gn=cJWe^ zY)wLd?Nahd#Km~nCDlU^x0a=UIkrS|C$F@fJLd6|rJb_V;OqaGt}lh3uJPQAW5q|C z_Q%fwEd*vCHG}3u{!^e4M0{@>tFsNjIF1lQihzsF{i?$CE1H^r8ocM`Y;(qb7wSko zB45Ju!M6EvF4Y>1oCB8!+8vN*S9E+1Z*R)=w{SUNc3!SR4fg7HdKZmHSBeB(hVZX- z==6Q#kXLt6oN)Z*gvTNF(=xXl#59FLR-1u7($u`z6`%`v=`^4!V<6ZL3aIn$5<+Ht0c_`Z+qsQHNhc;!Oh&#bB$p>{k$`=G2 zceXzg>eMBj06LRnSq(n}Z@Z+bpIicYGn))|Ojv8(P za{~5F%v>&X=pEUtdKu4w#w`<|d1(|=Z{spssN9eJNQed8C9%#}9K=iioK!LZu+fiN zRS4O+_RyFb&Cm6_wXozvj*97=o)8OH*lgzJ^J|?8;$K-lgE&gP`5K-}B6sKV3A zTZ$i*%j$2gRoeTBaT_L)Tq>RjZcMzJKrlyAvK{x1gflJH?Hv-ugDkU=cM_ImUOyE1 zSgt3&@oqA2rl?B%>!8Yb|6n=i{ggLb^=>Wo^Ckru8Bn-ATU&wUsK9kSYUS`vt_N$( z7@TX$i|h3hTfKeq`)wmQn>uRh``bzJ?u{P@2l3%xXKo8@pLEhX#Exg~DgrQCUnJbi ze_6F3ZvBK0sMIN$^LSAfMI2fn-K%R;M!&}L88?Ow64Y4Qa8FkF5=9>AYYhQALaV`x zHAm#9Jd!MKo?YV0wxou~0uCJ5JVJ9!YLivcm(WoBJN=;i;c?MGYk6*VlS4Le+9d|! z%{PEhLIOK@A0RVh#3DwZ>jl; z1->@*?(~;Iq&|Vu!n^CF2H7#>YX#=9qTrDyUkq}1<(NfQPS}K5MftTFH$b$H;pidx z)w7Ma2Q7u8YN-x$2jOhFMb=90)oGhdDu#P)J+L*HQPNW)|JS7MKfb=G@Ok7{R) zALytd19DH!rdf+WA$Uqj+TX!7Wt0|jR9*X8Ua?J~ZTCLnu!G^*iFu>8TY4+pQZoL~ zT&h~_aQXy@m0363nsA9VudmrU_kSj)l{;ka`^BMG#@dAq?I=a4NX}1U)&Je|+#_ht z^S$sR`Hm}eBeA^aNMLD4IRpQtylPY11J>#37TZ)F5;*kV{bwwg+2e@lI-kPH&Q%um#QgnHTUC(EAga2lBha|nJjd7xpJU?w+D z*}OB5Y;?XLz*z=ldG&2T*{w0y^WWVBg)ref@vdck)2G(l1+5zs6!|p~DQlZ;_2Ra` zaF%(TOXEw)nO)AH^1~0^80CTwj|E=`n+&8Lz@BHyhy2pOb|}^m5K*au3q?PST#ZEK zgz%T!4}5#e?i_{aD%5(OZ6tCM+*R(14&j;4P|i?TTHQGM@yxn>m^0WPjHjm#rW6=gb3C zT+?0s$Mjnl!YNLBLA;x8dv3evS@uSU^<&U#*gvM8s5?DU45x@sqK4}!;h3m|oqUhU zHx*wKwUV~h&+G^S-11lV&5$`#r?Gos_@AF+t4__96H!)ex^*h6Qe291`guUpZtIUq zwO=`}lHF=y;X%J}{x2SA|1?#VyRUY#QoN|WCKk{*AhhojB;)!>Y0CKCQC>_Rjh6y2 zA%zt~@K>!hwVzw+Fl5K~s}v3V{Laz0O8`4K6vzzO0 zR1Oh=TPe|9;Nwpj?tsHLq#SFU|7`dB_?h~|nXNy)2je05LWtBHeivys6V~cw;hS?m zyC!r7ELx=U`p-^rKSu!bn-S&$w?ONjDf2%uD5oHAF=;wheU`ICH`VNmtBLkB*Y74J z(-gl<+&@JZd<6+gM2gNwuMPq!2$URJt;!zt!NlFjPdQl<3El z+=nD0T`(;P)9Z12Bk{aA@nniSbf$$jkA6E7mpzq=(B)UVtY7o#wNjJu`xKW~v*4}s zd~twD>gV3q95(k!AC0g)Juks*m8o;ToVO;3YIh>03YohL}+ zrV5Le^-fs?MjOA_I0?>Cb$x&L4{M5+_}Uu-HrDss*pKH>u!-Kq;u#i?)kCXP>?5cD-voNZ?+!w`ne)izKrG z9^_mMIMb^UpHK6r?4y1c%58c|;LKd$ocIW(F&=BxcL}WAfu-<6J@4gT*P;cLd|3KJ z#!Jqpg01>VDUn)R#i8r8Tx;U#oHH29>}qx<^}TPf1vb5paV4(YCcXo(v-sQnrV#e+cd!8Za6hp_a+1N-VPeC=V$^snRU7ec;pJfx{ZhXmT`% zK*0KtqhJ@K zF4^q?*l?2t_3#Ip`}VA_=dl($@-%@O|8E` zmVj)$W2{HP-eg5PCr+M=BP zbTe>2V(}^eNB0;0_V>+>dYnP+mXWGG=@myTr`}CQi+-1T*?Xa#>zaC*r7jd^mY^@s zUh>w0&=scLYkow8Yhh93hMbpY~7@WC-P=eWV??_8^z+*cP*!jrKQpG-10+L zeAp&FJ{}~pOh;hcKN{h`fkHCsXZbC~IX6#@=%IwfGU>GEcL(sMVN`V8tdG)^H1>@;2f z5W>}@bJ2%nesv+`c+-F}TZYT4UrvIP+ftR?jaIp2e@&$dsGI{>5jhrbNp)Bp8f~&Z z7w&+WC@q;D{9MefOZgaZ*@ZErgnE3G2b+I)NUYE)u|8*gn)+lU^yGB;%B*E_v0e1m zh;qYZHd!lIQ+pP1h|~0N;rkr{sJfNL`PS~NV){#@0UwE9XWhHq6M^V1&2|6^JgybsCyFYJ%8==}52fmB;b`4zLO zem)e2w>0V)NQr@d`kJ18LdL_*%XWC>jExitAL7dm45Ru=a!H~XJH^IfK#c~4&IIoJ zXZz8ONY?N=TBWFBW`>t@OaTHW)iecD_#KfZbHnm|+9!hcnQYo*8Fp)54QT5+^ZyRB z9E*}5{`nZMABIHkZm!r3@LFu)c*8j`sg5;;axkUwoAR~cj;I2Ol-EG2EAgEQHFmt#i<@REH)ixo& zd{+U*9B75ZUi#W_!OKr_MZscDDY3`gbI*XwE?>U0gpABa#NE(KAlK(RWu+3UmU8|S z1x9?enGU}B=NYtb%2vDRBAme1Rm?Bn^P6@2;^gnb*M7>n{+Umbu;{P(Ngt^W0uQ(Q z*oVCPzYq?tzJ$*ec@;&tMbEWK`JQpeB(Ow()q>6O1UPJDejD|il%I(0fzbb6{1$lB zqX-VZ9JMl<+qanTmBfVHVm2*G5$Jh{U|S0<(5HqVYt&#NP=+7 z#p>h<#MW!Yt2nZ{HFd#&zNOUseQzK&Ni3ULY-BG?Sp;g3t$*8pQw$|oa^Nso?U_#= z*4eMQ>aIDwB@a}gWX1hLXXumYxb*VQ{G;-5P2EXgUw-n?+)XwVr~E$TJZFWNNg z>(D+r;DmmR22QC`tS=l-Jrg>uEHoQEEkBdce>Hpu9LU*!a(AZb1Z-JSwx*Y6_o7RO z@#ta;Pv>VjQOI77tp4M?BqQw)qVl3Q526-uFPpN&wzd$F1Qbp4@T0|TPKUc$LfMPE z`SIwHc}XFVAlnP^J@u0K%7s=psQ*??M}|4-57)*n_B!mRjMXjq0DjNTD3orQ=Z&DO zEVObwtHO{gW8=~|!m#`CJLGDA>xu=1{IT=Lx*Mc%$Oh z*bA$cNG$;hUob>2M0Hkwbf9Ae6T$#LtXlq7eV?xPXmCLsK4Kl__JUeqHN^0vecmmf z&PdWWbvoE98DjjGFHW^F?6@hc2fg8MBlqQQUBe+i*LJQKIK~{^V7sMN={AtLpZ*AT zfrI`R98n*XtW?gCp()umFJt%xh@gtkyHz+l88R3h%C2d~Y#PpDdx7`8gAV*krEXne zs1Ch(&BDkxxq4f%QPnRvL18kf;O2hX(xZED@3-O$QeGS!K(of`7gxDLux<_V9_D9W z!rkcjMh{9v34KTzhODmaXV2{wJOW@tAfpMO!f5`s=xqDU=)pvo&T)rX#x()KxU})3&!}& zk#?I1YktwkCCo%kRkAy7JPeKmNAM$jo*i3y?r(R12eo%PxJ&tnsu7fT5jxZ5uFMb3}M7&nSTzWEoE0V}VK zWc{~qAyl;_hKP#*96WuTpK+1mIt=)jTY;)smLKEB5856sh@7h9LX3}ExG5&BiucD? zah3FnjUDCa4rMFVgpyfb2JuZMYZr6~#y2rBP{DoUFf-n)SCGTu5Y%(9597htC!0&P zzH>QW!)?i>1s$_2g8>qJH>Qpl-3nH@B%gYP$QO{i)E5Qe;Kgg>nX4vi8v@!j7arY) zJF`TF{9oI!QqT*_%~U1@3IH3$v(YFF#eX3y5gJcCI+!xfn?9in1W+&&pY%;C;T#vf zz+#_Don;ojunzIfdVu@jo2BgirIPH4a;qGi5x{ijzQ6sP=Bjkf@&JG{#Cl-op}o~x zCx6tBeI!hGoSY|NQ~sL^4KRh>!j%i+1=txl`!3_K{HHn8yxf9FCQFaI6x?-t#yIIXLz{ zbgX{&_xGnicsy|5=Y74e*LWV@Dyu7R{}Ua*$@>Vhpq-zaxoz~vFIjN@FU$M#8>HW{ z%5kDrGmDcY^~*WPwk;xxRPLyCXvr|(A-J6I_@fi9+?YCw#qj(7w}e|^P89KjagY1J z5T#nw;K|D#dEY#@;fWA+8{0Z2I-jm4?sd~(Ud2e+=M$;o?C`*D9cE;10RWgO06R&q zG#hDW`U|tZi!*K?2+B&ZZgFKIB)EG3Wep{8<{xN&JPOMVvYg8x@=wH;g`C}M*yhr) zwsJEMgqwQ{wAkc@O#+>RyXdbSgo`B0Aa1+2vTsZh59##Ad`GNdn4B7b_Z`;MT zhzaJqpR8sPPTDvUzetlW&lC5KmY!QUKONPxgsmpEcSb%FtMqBy1s>ACfHqr?!?~P& z!(HK7!y4rFCQw8y>_29e<|wDpb8>1FHmL9>v(z`B43$H*yS`}%S&3`!X>wAER!p5k z*CkQ%?F?(IH zWp3SU<+Zcg@k;L=2K`ttwPaL@(2U}WPXUx@{H$I0F+e+e4LGQOU^tweF4d{B!GRoz zd3N4iY;8Kbrf)z@bUdrolP{@0L2$A* zCr@+eyZ=dKWpo#6AYX(_bkivRBZp5Dv2hz@^VQyw=AdCbcS{soF1R`*N$|g7LG&DJ zBAYorTI`3@&VhVhf&3ST)iC~}BTj~jbGpAV6zOe)QJCHFW! zOg>tV)}cYBm+XBRJSn%?75mJzp<2Rf$GR4Sb{Ac1InZ)a9k*`e$^bKxf4ns;x%i&M z)isQ*{86r1IxHWacUf=#v8}_jshdyElC>}s8q)Q7NH)p%qumqVpUV-i>pKLQJ|e5q zJi^|W*?Rxi>1n5EZ>l4s-YIe_b-0>!8k0=E29sm^TYl6yI9kdRZw#H6XV>Y@&muef zzcdZ`EXSisqpj%B~v8`cXxeNnt zSpt*h(qdAg1{bRQ`rY1WXrGP&9K&#%7CL*y$s;KV`1Eu3NtB!#_Ik+@6slz|FebEh zxhsRwEPysfo=6G5lwHkWm|y?>slbIZWP5raxRir3hzF@V_Rn$7tQzH+D@ojr-iM;> zou^s1i9LNoK_C1R`u9txx*k6=!+AdhQJ@$x-lovUALA7#lV&qWlLWG z5PQ(a4-WGRS1892p;Vtao9v%$2QqUgNtq=HVb$-ugXgAiCl{Qbf@o{i=Q4^Hrq{Lq zywnY|AmpY7(jK}88rGbbmm|3U*M58pb$z4%A@TCzjxW$oGgaR2`uNQ-UH_rO5qp$T z+CPe|@v2=#@1Odz;dw#F_N*Q@g@dy~^x>KQJCKN=$AhgY-prGksk!3Q=WZ?7Z`Pve z{fh^{7l*nQ8{WN#3>F7Bv=?-y(rclQB>K~)s?!|B!uI04M9m({d;iLQ?Fjs-&x`~N z&KJ;jGbcm|g!}WS)}knB8!sLF>3FIcl<)Zh_Fk;eHaciq2~H!E1HgA%fRqq21Fl)6 z0wIolNEY8Q^6+PsK0(~BS68FgUk%&6LoXK-G|^z2HnSb8404RU zF^9@Q-=zbsQ;vPOpPs71IlacMZCslPC*3@mRNni|WMmhNr1G7h+_V(@?a|*Xf1Q}1 z1JrUkSga>M@<01FEEgT{ef>Uv4y@E~e7Ii*OEFA3cf~qpTWHknxO7WvBXCn)m?%yS z$4sbfcRLTpfP_pe9j8%cfCtE61j4I=jtcaoeLB+m)wEo`*(pJXS?H85{A%Z}V~b3) zndYT26>mH_dA>_@=-* zI7V1#aO#|V5eg)?Z5l$2eE6!x_*sBX^9k=v4x7T2;QxY7LAxarnU1D~a)tjWj5>T_ z8i4Vy%uJQ3*X44Tl6q&dq|i9!B-65m1uzJ_jfQdhGpAN}Q1cHLyQ-c+tFOPUyc%_@ zZ0;iK8BF|f!zu|P3Y$4!YmU;el7z5gUh6hrWQmM{ZR3DzXN8|Cf7$?zAg#|6Y$NVU zKYOFA8Dlc-l~o8kKbweKYbI_13R(2g*fbI>GW?8^+Uf0K6$y16dgxDA*kI->w&OB1 z|2rY|!d2)lUr%+k%U@|3a;O(zA+Em`aooI(m8CrSbXjN7%i_$Xx<#K~3e1A1lc|AC zq}#GgC`kenlWoVcz0xJp?)w%w6ZKx9@$$XI@UE)nd8;w(VuSat_|=)8J2G>F?+s#C z7W67eoc9@{gF{EC&8nT*ScGpk2GOhN;Xq2wv%_P>FmO^xHjDrmR;-2u?|efs6wh9& z8!kra2lObotIqRmzr^KQK^gQ>tre3_ElP$$#HbDQwG~ zuQD@(o}`Te$=6GFuvQ--rBHKBuX&SR{sfdb%|T1$Oeh3o{VsG@GuAcanAuRQnlp~1 zu<7#0uBgQ7^kIIp#@7d6y}0QA6+9UAPW)H@>mNnHL%nY43ttP|+$&_2dN-9gATMbP zhYfs+@wUugWQ(Z=?A~Q68c&WSr!7TUDyJ;*?A3rwbSq;+L|$`1`gLQX;_hE#F`@G& zDI%1$d+Q7cY{F$Xf~yb34kL&E*CnBFXwo7jlyq=!YF(;Z)nP+pm_M=Iz_<`3qzMFB z)^wgVwbCD(fCsF_P*!SeKmu*P@Nzz|l0lnN=uZ+3mKSCJIP4$Aw-CTqkk~gc`v>-j zvZ~%0kCy1ZKmI0ken1dhy>dtqh#@^7lmxD|auI2DSWZgDjqD3V z>oaDPve=uiFbyq+zEmV7u|3IBnBBUu940XxNWq^VCT}B6ShaGO46whif$66q2C|Fa zpJtnEoFk!Bf{m& zwZ?mm)_FVIl##m$Iu(xG&cSrD8R^Zh@XwOXlv0u+A~(;=*vwU7_E9MV29YqFvG@C1 zoy@|3G)E_UM-Pu#qzL(jFn|E(p9OkasgQo z5>oS)0KIf|!7wA&fgpcA)6Ki*Mx|SZhLb;ATjl7H{DC&7*F`agDhcin&qMjTT6ghD zrYO251yKNd7kw6z%~&QWLc`vyFlZ4C3h8-!eF#XL6M*_3lVBMOq0yt5Epo{VrEBj$ zIbf?_j?eRbIylL5$$gOgG6?dr=p`eg+n=KZ>Z;H3!KG$`5m{U;YAXOBfa2z(Dr;gE zN%)3~$Y1N@&~fej{hwDqfuBPKAtQm6wGM2Q_Zn^P=S)5N$pbz&-&d4=(O(3%IvA{2 zsY@0tgFaLLEufPKWzh9evyz)8%~Qo9k`_ztxGM7Tr+D|jI{|+0e;cl7V+Jmtk5tyN zf03H<{>Ec@655|JySzBDwG4GB}4iOzcwu&$N-+Z$0ml=zdZ(5 z;xQam1a(k*GgAPnfDTydcrSJLE!oCNWx0EFpE$CkPOyTtm3xy^_Q@loRIynASoU( ztk_h#yicKT?!Vf73)Xq=p60s8n$8zQA*UOa#pNoQlPlt%H0aJEELgGDyIMW=j{+hl zW5KI0idIlMJ&G@_t&|d)k7=y*%M?s4A-8!vpv)T{t1#19Y2L9!H_}`Nl)?ptgFmFG zDRY!@h=TiJxAoog1Z8IHVTLJWCuDzFMU5DyahvhUQI|pT&MPCOc`#&iCTJp90n)eX z>2s#_X*SzmP5w0RuuJ9QJ9Smxl|B-3Onu~1Y=e* z)>fVzUN0*5#aaHUcJKr}ekUHq_h>HeUc^+kHy;}Ot3>~X^tP^gIh$4=RH{P17}bz3 zngPtiUWfU_N)3j&>0{4be%sC6!TeP_qy?ZXc` zneYtS_ZW6-x2Iph2&Y@^B5Oocc!j}z__ZD9gq+e1>gwXme!g0-8p##ub`2KKZl8$Ax%1WfiUOnfR4^Fxgw*9DiBi1|IEk(P6V}UJ_+vJO?d{t!!WN{= zP+qw4jp#vn#jRZ6*{efiH#k`Nc%B^=UOr)nVBFn(rL&5r!VMHsreNz{{N=dETHvX` zjH-7m{?qpHGsH}(^%OKHIm12A+_+5YdgXZK1CaJf&^a75iB>fxtQh3-c#n*Ozuf7- zXtlaT<28jOS8CK)-R?gt{ML4?#@+f_DBpb9;3UXCR&bor;J_izkosG#;9y1 zfHJRH;>ihr8ISTERABGb$zHYgO?GMbff%62ALKZIhX-Nq&-bq;2&h&xE-n&)sc#D1 zINX1tqqhs%{_fa_n{NS0Hw>&mA_ZS4NwbT#sW9rRxwX^9v$!A&Rt!=i|AKlzy8L`q zD2W%|Vj5A7iPC#Vn%hfD<{c%u7(h*R(N@Lx%* zXZN=W(A&vS%B(7<`A<~_Ig>4lV1dnKg?3FapOeyLHgKWIwYr ziD|IX;6w8<}b>NLxK{>8%_($zw(u9N{s95n@d`ay-p(-{P0 zUN)tpxYIea6KIuL_MR%L5K#SYYFfjgz91>x!BjewJNB$PA);GB#rgw2`Ta5&BaP@O z?_9+(0HtPbxs_er3bDv|mTcp%?ZV^Oyz7zRWy#Tl6dVYBTLO{o10a*6F-m4Lb>joz zdjA!} zGLMa9RcfxAi*Y0liK(z5v$mwgJFu`D)AbiDn^>VQm9rau6c|&;lRjXYM5H}-5l!i*Jw_+d8|Unz73TGd4W<7DOEO#r?L=bE39Tb zHU8nk#^ZUb#`;w^&u+zXL+YK>7V+mS!48iP*&m55kPqICS!g_ka%GncQH5S?9EEXT z&g|t#x<8?@N09I5KtzFq{vQR#kmYRJhz(U2e?H{l#GtAvaJ1&v)nJQS0kQL7j<${M zYfUVD8&tY|a+ZUQpphgcfbl}JeuA6}8};}YIq`$hbHb@1ja`V#<4@b+UBwfHGUu5C zvWE|lU;0Ne(!zfnFnxj=FZzM?!f}hxH1seI;2X2upa@(y)SKU&; zhU)oed`(18`;!=@fk~P#WGhpp@h9;GoPiN@H}2SubF=tb6}sXGrA^PPJiom4JGA%5 z{q2iy$s1=evZ}hOQCR1ra_b{|&_f~z%Rv|-wyIp9l>XDQkt1g^#?>RYyUbjR^LQ*U zu7IY)Gn>Mnod9BVFa22Q{5SRrYkg6trjzbF2Li2JTbh?kuZh^*@tsRpvG6aj+j~~U0hNnbw`4TsufGU4XOXT*;eH(ZJMdCS@g%64;Yzc<>uGZ?LjTg^w{S_qU&z1+Lr2&B+oY#_WBLcs&t8(mz(O2gJd>L5U7i}9q#r=gaJHOC6RV33MWmBH zcgrwQZW>s16cjVX=*mrnjF5dWC)E+tC8tKIW7XLQteh*I!u#(58_QRY5a9u)Y(H` zM$q#W|LS3-3pYDkPQFGkKs7oly6r)mu9s;>!KuVU1nB_&s zkc+d}?JtKyFRA4h{TNG@(}P%qhg$9`CFJIxUZ#FyRjPXO`r}4vU&#|fm9?IJfjBR| zPV7G_)!hTPresz9vagv#H#cW=om?{r-g*b;h&bYd6^275zPn?5WninILtuxviMZM% z2i?I^`HlqHvlx1BN09Lc%Z}RqlV$4g-?kvQD%F&Hp0*pGpwKZzL(EW?`f;fpMaSiR z7#vj;;5iuKkl~y-r?Z#!MLQy~I~J{WQXO||?TLRZYs=MwC+{l*pVz`~gT?_v?FfLN#CuATtrj}1JFzfgy5v)qDu3sk~(b^N!6I1#z(tUf(+PX2VRM(20ed*`wQmpjk5qc_C0Qu}Ofl^u#M z6N*&r++Qb`4=g*MPH0Y#I0v68{&hCoZ^wk+m|4qZ^?YdkkHWR+*V-~W-+?qRe!hsd ztbSJNZ`XGf@x11ech)MveaWiTwZzPPb^%i|c>E>UN515(D7f@PnC=Y>cbsAPo%-Gu zC4%MijWNPj`aKIL8D+kge6O7+HPf#7h~@yk=clMysNWXaG1n;Z16l)EydEjI-!vWC zt=2x~Z5{E$mG`4$dbV{dzYkv!a86}|ZVN6zijH|N=svdSUR`hvwKN_!8B$8okRCTy zCK=l8ZZ>5v)OFJHG)l~fSSe(djs_}e)JSgaA7g2<3FP%G-JM*bC0o}I+5274Mltr3C_Us|& zh@8n@OP_DBGlM7kfsRBO1-Gv&Q->#w9?OrDmq?5rM$~afn3dUtV93%O=HHcGKLK|l}BGa)8vAE z^*_iL)cfEYi_O}48sNkVmpKds^Y_zfNO#T3TciI9p%2-Gr#E9E3-WQo6omC%bK{47 zYWGT5RbMV;2t>8?{Suo)J4ar6>lUK;^`lw~kd?0hrOd*qUch)OK6pt1jqGoQA#E)VWvv_2i}k)x6C1 zUjre(S%;TNv<-4Vbw^#o&1bJ_ET|4m;+FS{n_4GKToUmc)V^hWL>Uh1gUYPFNiZDb zpE6y=$~*PgX%xL`5$EN$IvHW_1OgB-uG)l+*Wor?DE%&!chCR8ddNL9!E$@ZB-R^a zuxYS>-$jACAF)IcLLDsKXzru-Fms;3P4CqK586B62P<+ACEXn~p@VdCv}_Ns39oTy z)|>tlBbb+Qm1<${q}UZz5g6^6&Mt}D@O9ew6U#H?Ph?fM2AH87`kg%1mW?cj zq{6ldGh^~=e#yYi%dk4USXbeDGSv6iM3?GmM3L*=V4tlq)!D^}L67z05B7Zxqutbu zMWaU*|82)N$9Ke01P4!%DpN<=R)5lp+>oY-?bdI4!;jdCv*D|{=0NZSt~Kdm_VKv) zEDfQ^9+V!l_gocFa zjngYhV`U3{V^8(ghh+0G^%6KIi)IVEcdF%mB4PHu$H@ENks%-Byu^ozW+>mfFVO@~ zlnlnKx3!5LzBw&Th*-Z2bu$@#Fx7Jte@+QNwZCVtXmvHD$z@+;xqdaXEDy7qi}79G zHuMxSy)<^hw(w8_3q)kps;E`Sj?IEqKykWV5lWctZ*NK5d2YK1(=K{l3wKjMahJtj zrnrvhpe#7KA|A6FG8e$HS0X_%{@Y0PdX10z@`YPm^A`p%@>TDUa<`jOgIIEJ9Yv6R z{^|5ccXsP&f2o-IC=^A$lyQ*#m^q(>iYM1wB-Xs0RGnPPo(elV+;J>rfNUnJx zI?VBd;Wj+%53w}HZ9k@SF%0xVO!Tayfe=TilDP5SZnhKBtu0gbQ6LhsYMFl*NKWYJ zJT0UD_0SJH0P^yp4qwkI@TKd$^#=+$VI&k;@vo@f>SoTdpB|Sm*Vo#Ea0BG*?Z4v- zuR><;Vn@i1Z3p|qoWN0NrqWVA?`&D%%nS?VtM5jRsGtKAuF*n~$Jnu!?6g;C^CuBG z!FhW{%yX|eN9l?jCDR{nXD2Hv|KtYrfxg;5nU&O6K#h#nI-8a+Czg^Vt3e7q1Soma zaK4+VG8~GAyk&t+j^6rgwnmF-<@bc2^@y0ptjCtF=BN9`pTN{<62(WRRW2e~dn^x} zn+e~PH2a%IpVy@D%{zn;DU)U*&G~-3wcgxg!!i(C;=*s*Pqu$_APY6ppvPIg zcaMsZiD5>pfxvcJGn4ax$`=hFkVRxLWKx9;xLV4b;f4)SNotQ+tm6jfboVJQ3RNFw zI_i?iv^32$44G?O4D*}*m{^%Fv_&h-y>9;2l8G}>^IDT5Iq(U)=8qG_*Zb*r0bAfS(qKe|%AdKQ2}s>AEt+H$ac! z52pt!#2ge#wwZsEGGq z+kSJL2~f_8oL9=51BhN6U3-+t7eAlMODGFf$GO{8@q3A) zrsBD+VX0i0`5d?YqF3R8K{{x*%#N4yyRo1(v1IT}iU98ILI@mimVks8TB@6CmPAXed!P zwB64I@iblN7A$5aJYIIe(1S&_EUi}|1F#6ZnaFbNADD>kuM;_ zkRRa4WdXILZnU+ zeV!IKfqAOFk z!X^AZgum7wmyiyNtS~HDcc7CpR!yD$8CxcTYvL;x35A6hfdU^If^hS8r~zM$;-vQK zI{dC8l;;}Z2f_?7fbd^smsB&zb3^(yz4v%F8Gpeif%~Sj&#?GGr}SLGJ&?=f0r=K~ zhH;o!Xjwun+Qky?H5Wl-L7qJx{cz^1x_ctJau6V+pon0I*A(L0SlCl*K)jg=P(Q-} z*D~O-t}LvH40*@+5I;RL6@Hx6#lCx!5Cuj=tVb9*OeX0)2#k@&=2PH~hKp<+(Px7k zdXKDnos2Gb=)8YT@}J#^|5CXCH)f*D-vth|(xo<`Fl*lgYd3^t9)P%n9k=aCZ(XwCp-hDtinlDRT~V%mxokeY?kScL5K^ z4nl&*??|kf?~U-!}@X*7ElZT=(_J3Z<355XqY|t$;EC+@ML$Ih@u_N zftHpC%ex55Skrj(=DS{$9=hqQ09#?&!(kiO z(cDG_V{DCkj+Ol?|BbB}s1{E6+iX}|C#OO%@Cgl&h?hEZsim5laUp}h%m0duoKh9J^Ua(J~t1kRy>Et z&vdu1J%fG{m+k8N(07-ZEGD87&>mB@jQabtu>G{rp{6-ej6S}F;@-5$|3)N(&ZXUVsVQq&Fc6$r~rqd-*_l)(%)b*A&`{L zL6`gW2466HQMj%*9c$-p&DbCeJakCvLPv?RJSS`SG&v+}zq@FO)mIIy)7#V-Jv&d+ zNq_O(B-<@x#j$%a>OtjJ;!PqoL)SkF4}nD1EhZBmovK#91(uN4?&WSl@BIB!%mgIg zne>0yf;vW110|@NR=$G0%rSdM07bnbTyo#SQQ+)8)21`~#dGc-V}{?S(%V<%3_ekV zhIW1f&k0{HrHD3N;PCj!MDhn6!ILxS)ik{PDsG@3)yRY)U|S{`Ze(aGm~?-EP!E*L z-u1?`iW&rX)GRyvr(=c+WNf-1D$mKYd;hPGjp#1(Cw+Zx43P=xvQzk=lo2w+a{0nG z8}1}eo2NJbH71a;nhXPU4egXPJCM=4?QT(^;rqWxd)e)F7cnOa{S}x%XDwM?~)Oy^x$mfi_Rgg1FRxhz^DQrk;hh(Bv)jbW&Xc zLMI5pwQvjSh+g)SE)G1)5KV&mbCOot{qnSr|NZZ~PK}*6f?$eW7##5-U)g-BE z23{ER)u$zFL+J;!OYr^8UhPeQ`-k5kK}EpLi)WP znx3SfS8&wQLv9l6ijy8mINC7wiy+@$KQj{sTAWd1UnQrFLd)Xz?jF4$2!>ZZgTB@# zf(HON?ct^GTUiQYcL>g>0JWm7{i>#BFPu*rYwjuUw;t=JxdP$QeI&Mz2B5@ni)uD| zvQ160=;7mHR=`v8wE$|}4|Hhge}>;y);5zt z3GZxjBN_V4ECZFZSuSwIlClwZCJ4|c4PmjzHaY6RKl)9q-^Mw;9Ai{mMte9lCbnL5@ z@F;ERZKK7nbfaj-WnwilKD%~gY&Grc`HqxA3%I6A# z2}RX^-GlbZeBCCr$#^2{X{73OD8zF{0$9Ov_ z$l6t2e5)+LA!L}A{UiVg^a@8c+!0*fZUDU6@A-eD1o|Z7Tj;e#x3!~{1ZuB4{T$L! zHaa>}AbK-rgidui@(Rv8^iz0RvYEwjmPkW$}-U_Exi-Lr&rx2+m0z+^ekK*3v-yo6h(ro6w}7 zN0q~b;IwPFtgw)a14Vq{Rl~)g`__SOZ4V}1gx~qA?f&+w`Pp;A+cWTBd9oZ9XQ}!U z1&vpoc32SV-pC&IwPtlo)3e+#ez+GH?lJ+XrVC_vfyC5{WR*P_d|`IDJN^zVlFr3*q!Cj`BXL zlsgWf1If8IkE^4Mn&Mx6844{(OFS^1NOZ46O+V7u3;W8V{4Uoz0~dDG1Q0hL!7@&# z6QV*$GMOZaZ@n6TT~au<-DrJ3Lwe5V%U&Em#L68(!on+Kk; zGGM}iAlB#=%b)Cs4(hz1p>ZR*(w4N}yic#7XrmP~w|6b+n#)2RzBEY2FSGluCf=2$ zJ*6XWn(Ud<3?5P)Oew)zeu=T4Ay}(>Bx<#>EH%%@TV$)`N2P{p?%%`WuMiG;S*E#c z!3ygEs|o$dcr1Qm@3k;f<<5@ImLND+(po^$ry%NNZsbm-JEb8iLF?~lziMJHTBRk1 zo=VzwL(W-|lw-~DZnYFy%^q`ppJl~LXBene+Nj&SVH@cY3@z>6X+=-*On+-==oFgl ze%V2G%gL4ar1&UTmd@9bK6QC}WNDQ3_5_%-#=f7d{41iD>4J}kkiflSIny`AQ1zJ> z=ZS4vbiV!903wl2ZrBGH1RlYUqhgXb^Q~4>Q8&gz;zWU{pPt1JBae&jHMO8F*_2l? z?zRPtGD@O@26>=VG-P-%a?SYv@8JuVS6HT`ge#}~bwuImE;L)z$|lY5Ni=6{AN1*J zK`?$VWVX}i%8t8y&7i339UtFZelzd46BfTD+D>p4uw`P^A6<(M*jJ5iZ5`#KGJQAc zFW*-vSoUrlm!D-yZF@L;>*iP4b$NqM-LccBy0xqCeF>C1nITY3E(R`^gk0~b{4_8+ z+imySHe1Y$p>MB%xt_T%-;U&u8lMJ=~QE*A_%;iY=zC)v3 z2^UKd=q7o}tcn+3I4cfoDi>07=gGU~stSyckA1EVCjU;bS}Ip=R_z}B5I}CWtM#y- z<#A${6bm3G5RI2wO_t6E(bEZ8d3>6`$@G>TESN(m#T~O~OZo5DA;t?;gx$e+(-b1Z zgDD-Gu^ISMX2Y6g7M8dPp9Tfm>G8daMqn*AtAG@DKcr$88ci%n4BaroJKWa7d#>Uw0^y8SN|$5Db>= zHXC_VdySYj6!@~HPY>z7z0eRCO+XJ*$_$FW`qgMxK35&ZM3~BaV(KUtX4!bn{_u3H zw^<^zT+IUrg%G~i9$bmrNEUzAFglFy7Jnyx9@TIs{aW4zuV!+LCzsm9c$OA|{r7(l ziR24@HTN|oA!-@Ny>KAjR_#jtc{t?r-GlS*&vuC_% zQdb=p*o>Jm?=ECVncqK*v^8`}QX6Q!xn)-O;@EWu7|Qb*Ja;ZsULyj-tOpbOf6?`? zXEh3q$kqkiYLE6cHC%1|{+L7&I)db-%!u%MN0pShmt7{3!x=!E;+p3H^l&!r(bvQ z5@Qx3UQ)KE!z@#w2Uq=T%6PXXt(^QPR_#&A>Z4x9DeFJ~ceyTEcK8X>x`=d6IjT%H zNn@7KRhsgXUSBskk@Z=yfLr!IBe2-jBe;SUZrYicv8t}2_DYD9iDB>&lK^EiPBL^K zw;!9XGMYR^XA&55EqGel@kSymI(lB#$e`4x;6B^*Po%jV6wD|O=^#l|AOege5-;Wf ze+ol^^EFtp_(9p;-^-^Hl*Uu|tY;iXGSbp|79@Tt6i~rX^sok1d$Ev)?vd`m=NMTI zeS$a%uhdjCb<41uZ3-MYxiS=6qD3e;a@Yb&ck|=aK_RX9nK)-)05yGkx61aQCVUp7 zFY)+We!I=-@BZAEXIV$~N~bdPNj1=&2kPO%8AV`XHv|)qZcgvYwsE z?Gfta(IeyZF`CRBAuhTDIUcUhEY352l&odt6UKvkxkUnxynfwV)DXnlRR#P`Zq)0% zKG&Giu}G>kGLhdjOjgCO^3}5JV1N6a^KqCC6}1-|z|uu-e{acC+KY2^y;TZE7By3- zF_rB)w7JL^k9g;8CXa^MOG@e;gpSg5y zj-p3)PosZp(ruShGp=cAh@CHbX~xI_9*0CC$!BxT zw0;uaN%l;h>EuYG{4uJ$W{r##7?t9-!$yeYLdJ>A3txoeT@veie+F~^`6liW&`m^e zBx+aq-L1d|Xaan0*kYtwu=!%Q**AxTYz~HRyqHlpMCs@T2i?~)#)gGBGcm5~4f_fZ zcov|MDO!vi7q&u$_E+ncjW~ZK*L*N8mZr|ibi{pwh3Vz2BC#)Ezr`S|+Q9%o(zGE# zNQxVArTJFIcF7kxRFo2Ql`vnoO{Y3dLF;fh=p+za)8AyA-$7(3vUl~`xs`9Vm@-vU zGFi{lSW8YmA3z)ai5Ul&4l`=czt7p@(Irm<*v-B@Obwep>lRF=QUx>R z#Z$|KQoxQ%GAuWhR3UgmtYiMz+sEU!=F_L=>*y&P@Cs9S?%i%YjV0 za4&eVvlqqtuOHe_sj*9jZo19m!D{^{hRYW&;{peHqO=1(+CjIlwY9MOXG2#Osdh<4 zyu~*PoDmwKlB>f5B6PBk*MLEmQw}P*%D5Qx7&av7n#vExNgp#b6>G21B$T{(XCyKp)3Fgy z3RKAia#2_H55Ly_M`6INmuEpj>f)}(&BeyiQl7-ri`H``6bRuQoC-!9iH=EE$PGup zO`AQaw`Br;Mex8O@uf7a!rFvHezjCOrzcDV=d1`H*mwklF2vwi-;`lZof@7dMdV=t z-?m3}x9sBr@4&>M162(PU2Vad*ag?FktbQg{UulpPVzmhnq;B+tS}L5c5r zcIq&@@HMDn{g{?Rxg_#pp2U7^4)IJSEdz;=;4%0wV!yLH?ZwWOXN3)oc)m(SC#&4L z$xoslp}--k$=K z%%NQG(x7c*e-VGM=(qaiJx^ z^2V}7JlGeIz=(c3%~4;b%pzY@s^Kl}4Ih+#->1~z;O+^ebY%}_P_d6^;xrZGyk4ihq26^eo7Cfeh*)4UX}pad?5W$?A8pm_0#cnk+_-e9?}y8BbToql|H@E zDw%9PaXNV+v?G!fjf>AgDac%c5brtVlqPrZ6G_8=-XNv>hL<&EWQwzHnyRjFb3#rk zXarS^ZqNB6Vg4|k|MkOIt|j7ywj1ZB*}DMpUzu4?X=k9bBJPBv(!J(hygE55{WWA< z&nSIR2ah~Zy+N2lG`E`Cfn)r4zQr(ZCt0jDd9W70!S|3+YzhkTS{J3y_=SILh-lfZ z)qkgYT&m3To*eSaw=PURIIR8+vbmPmeh6q`;X6A0FIl0S32?vM1Qu(^7OmACM{+Y! zA(X%2qlJA*Q33NRT(!qwHJonVEGo&X8XlghjSD(njT8T&`wewi=5^EChfjEq zD*RB*{NL`0lvk{5Q%WnW(Np->wBfu!!Q&{t-~VfI>_uEz)^4%`R4p6S!b;X~!I%9Yc>e{P#o|h55n4~k0zmwjmd{(;(AjHIT zZ`1H5DRUC?^}}{}H<*1x(4g+1eNwU5V%gR5!5P2uF*F;YWvU6Dy({3%c|y54^`TI! zsrHbLnKg7>%4X+QAAV>j=5!2ln~`1;KO=p_V9XDvjZcjq5rHVL9xZM};$DV(M7wlNakr zKjgcx{wuzi2iXn>KS;`+koOBCTW*1&m`q$(&V?KCK z)z{8cJ)4lMdFRi!lE)PWZt56TsxUU>`}3Iv=pu_vnl()q=vHAG3UKpbp*owJ48Kkd zqb2}Q$&uvAmQOSM;^38NxnKh)8+&F|FEL7CZg~>2n?O?^8pu{JFLsBs+CDO=j?H{w zuQb(i=epOt0ky?pGKG?+)IIN^g$%Y_yyth@{Pd#s)7(ua)Ww9!+teQ(<9W z^m!y%@?v_|*gNGL4!M^wxY+_x|{U6|S6OL+?03tas~n zwcOe#?97hd#h=IxpqAkD=!DtHvc|T$@d4@5gyC79;P_vt*H1M7Q#*B1+)s6EV=fnj zyb~6k>gk?Jn0#1X+0w*d3a@GROK1+B><=Esoe!|qM!mCVYd4D?8{Zy-1mMUS%;_tP z=gp(O;A3x2?p<*TCN=yK+d`C&ma6vf=~-k&JdLq?#vIY9n^J@@w|6?Zwq;~U*4{3E z$+7EHv!!S)sC>{6cOQmWnAg85A7z) zvFy)h?2ATafQ^O+g6x4@6NnjudsIq4)bD))74jWsahlI=lBT9eu;Q(`YI`Zzp7~&`%~L>f zo8_wPX_((p=nGz$bKgG-C=|q9tn}40L=cdy+V8($zR#@1l0KUG>OD_IOUl+&q9S~l z9PG#*nEs8(u$EUdU}qgK>-PDwOD1|z+4o1CSO3b_Y``XXWtj~ZOA^a+D^`q`s!cUs zN|dmlQRG{%-UxfzmQ)yXGV-FRmtv(G%5Ejyds3yicbr`7YV>0kb64G0APS1a*8o9M0YSPuRHUW5yV+oj zP7wh`x;v!188A|W(I6cgH5xV~=cwOvo_~NB+s--nx$n>WeO(5J;VnVsK-KTzuJf++ zf*4e0?F-*|S`!S$+0e7hqA$>#&!>MNd2ulis_ICkuX>VgaEvQTe$3=Kv=#DZ-<@qI zm;NB;@?>c5U}-H+An#)5RPj%4BZnn--jDDj@_@SE<|gWjJUq)Z)`_V}^0ez|*L489 zX&uDUV{+ybDPc)t$>TXu?eRNa)8r0{{#tP&5;DQ>3VdX>a~Y$xgFih!j)F|wqK0)W zH!iNWUn(n$MTsBvdsVQ0zHeyos+d*uMfiF7Qi>|=Qpo%8K}s2}KF^)lILD(2HlyI8-m;(ag<=wqL&*%5WHsN(!a0P(Vn zL@(k{dzgCh*UfJ+6tnkk;gvpI)YLdNKh;7MEu~~)u4wzZil`+R{)bj-t-#4~jP!p5 z@Yr^i^3tKBa<~yjdzfKdS%X#ox~PFUH(xdOr}#lp9%NXg(_$!BGQ3r3>^FAM!--zV zS6>=3!Qt@eb%M`s^z*8r7d$a%u&$3q3k47RRC%Y$NOCCNmr8CZgE~DI?^@oVzJ8{g z$~TEtj#f&u$D8KRCz>Kse==@j&bH{A=&iu7vl{EOw{>AN(|NW??GW>_D%-M}k2h+k zFq90roKqHS{eoLLdM0KZNvh}l%eS2l#x{$8f zNY;AH3IkzbzS|gFj%B*4_VXO#wZK?7mXCdVKTH3e%^gEKf<0X2WpkLv8lUdUnATR*cgN zCQY=lnx-*l4cwuk+k?RZ7~Nu*L`2(nnw$rNlC!VX8$iFT{pkVlwMRnL?Ns}g@4e*u z`_TkU(1-pc-Jz5F>YRiIk6{Iq6<69j(A(`J1<8&62^x_3B6>C}uhojh-V%(33~3K? ze5j>kU5AFP2se8EIP<9XC@PWfEV?^(c96>jF=(qbSeFS2*5f^u=mA#n0DBU}y!o1j z%ROZY2Ofm9S7Gw_D;V!%#~9oF^GcimVGykz}A^z zfWs=zM9ivahxt@})B-WuG8ebYE$!SXq9!Up4ILSDr?&09SgKH3261kZ)icI$J=M;wjbXxqZyRYdhE%B zhGVEcTGm?1mUlBW=n321q|w2R|6kIp(M&DDq@H{3p`guAO)4y6V`}tGA+jwtD_UpI z9?$tR$0C@9{jh(=qR&l65q~ z;C6+A&T-dlKI5*(KaBQ*X}Yx<+$R-c-R#H=&^!(*Qnah>ak=J6)oD45h82^lUByO< zGePiZ>{i$;(_NRfsX2zwIMuXV{6O8sDcy10VC}TZaYv>qve>)lLmJ|Jpo6JRIa2V^ z-G54j=U1~@`)UxbdyD2hZ>^N2(M;M}fVmly((23QJsDaDoZ{6wA76fdsgT%q6d3Qa zojSc((h#W8bT`}?X|!-BvmLEqf4yXAh?Mzv%Y_Y%%lohKgzxBj6XSA*nQ@_(#AcT* zD+#=QLbPl)$-6ydK6daGb}i1J5yI$ayy-L-uJT5UQb$7ozp%>0aHABw=^kZi-P9Jh zrre%1a`N+1V&H!RS#0D^cFu-%fRoK`%3SPmlaL1=){W$rDS|b&Hg` zp>p=e+c0VC8quupRZV^Yt0Ozctu;NFY}gZ;JA%=A!8-D0?*Tu}BbjT`r5nT07t$|p z(vD02y$)71gg0uwxrm7%FDF}x(RoWYP1r_7KzeTOi{K8S_p^`@1%_O@e-y*H4MmHz zEt@*`sd<+DR<_3iO9Z-QKkTw+P5%=+sijoV@vHTN>bmX9_Dk9l;RF5bec-sSxVAf&a%?jCN+bSn)$h9( z^V}D2->4m4h8;QR%qS85pkz_O8SB;4PN?+l8+1Z^W)|gb>4f9GB{?|#yzjcI)Gp)x zZdsB7gF@o>wax}vmp@8|BF!cJO<3nTE1nM}33@(>8wG;c#_RCzxO|BneY4UJL2iAg0TIb z{+X_5@MJd+4*6%;q5yaC7um$Oa9gfuq_KkHczy>(_i)8qNkVl0*=)XO$saqtX>Y80 z%{TUNxQ~Q23-;5rwT9^9^ceNNd7i@{6Pwn3&-oVy4QPceS1)3rP1oey`$ydTj(o5x0T2@j#Clu!z?HA8axSu z?a&fQAm(#chq8USP)0n(TxX8%B=lM1**hM^twz+lFu+VD_IaQ|v=UZOlbDZ zE9lJ0PXW_p9uj5aaKW42ILa=au5Kr0`{j1TcvchJ2!e!Ug(TS zHg$Na_N+$m8-?) zm9aRigI3mWnma)5{h2bz`{uS1mQ;(Ok^VTEvln@^zal4xBHaeY_`BO2;Lg3C2 zpf^zaS@gh?$CN0b?oc0$rQYGge(Obwd2%|BL6ly{u4H&T+NILJREONKwb3B{;)XA3 zSY8CyhLuFmkYldv;Y_7K)It2BxKDs+2gIqQzY8!RTvTSBz|x+4xnPHd$PGr4+CLS$ zYP}x=u&DBPO*mQ(_zCUg_^;PE^Kt@bZS13<9C%Hl{nZR}&s9@iY_S)Dp$mGY^SR02 zrJdOWF?AKFcO&)9NcJ6&in>+* zc1i^+#iR3ToS~J7%@W^ukLP;w0?VNxx7*9R{l;HW9KZ+&vvC}ANy||QZ;r1=GVT+E$LK0*S1>f-hriD57^wh9s#Z6}8K$v6w zkz)u#eH3O$3Rec_ka^3ts2@{*T!ELbXNA2%vZ7#RLF%%S_0?;j5$pw}>auT8{}}p91X}DqGi8Z}C^1xtFa&*P2!0+( z{WcasM6Ty`82TF8{wYGz${RN>X}T|Rf7!EWfgzZ4E~5Q=s?U)Dt@s2)uNniPqfTs& zmbKTnlsCQd&gy&&tJw8D7YPF@vQ=?1k9K7*rkzfALOX=rYIyTtSR97_*B*jm$;j;qABpuS%UFjfa*gyPQxB(eA=A zS#>pl{MlsRoqyNiT~nQ|#4Q@v&Q7mmY#f{l6O{#L?#jgnBpsY9ono&$H$pHv1_6&} zry3(yAJBCG%9*+i(^nMf>H$t+$2U#089Et*Q+oG0+7(w>1E0rk~N z6lExi@kFUy)*5PaCpU>=#(OVoxPn1(wqV1Yoq{&YmRHMy{S7jl&ie(c0|Kv%)MUjE z1ePn2$ztQFT1bwIimfDN%U$|9cA2Oy$I`M_*)El6q&Jlw+6yyfQM~hjRNz9y!14Bw z>hB^AMneyRn-A)S4?9E8A zr@Gl+SXdUaNR!54Yom*+vZck;!#8*h+!Fzrt-g#LP~@tJqWt;_P@BJ6Yh-+ft72Mu z_eys$w-ZfO0Ux#5@FVgdF3Qqp>(xFodL9 ztC~?;rg-q9{I2waKTu^(n8?>}*}~8|&Qrk|SnC!g`qO|}RnfV|*oQTG0gERpEmSi;&RQW#wG3f>BiUVU$p7&PCJH2LqWn3=OdQPzpG`d4X z;bvVIqsrZ8mZ5R)kC*G5Hx&;8~{Wx z_VXMq^lHTz1zo(FuO(2e!pjnOIJEIf)xDSma5|GW^fTSR;I6wCZH!3}h87usj+y`4 z{F{cv^HiL;AYRkfQ;@EJMP}cmU+{kf^Hx6>S|8Xr0xweh>PZ8r zFH=L}`387`stNA?&N-%z;pg)2PTRbywdLY8%{S8ZE4_44o-$7G`@=8G(X~Q3w#${B zN0>Kjokd?(a}R<(XS*^RawE^eky=MKQOP?L)u_s1*c*<}PMWQ=0R#BleYf$BPm~*| z&q^(?^7)ff_Iy3$mMT~YQ{LkBH9X!HeA}Kl?(h`S;4GsZ6~Ib{Tbi|)&`&4uTk^ev z#)qg21F{BWS$iMRd|pvdL{G=N-T4IKjGPp_#`L?pmTGY7pVtur2@`(O6>{@wTHE%H_X zc2ex%pnna(&}^~SS$XQ-_m51&wGx!aYS_){St0<7;oR5mGgD|VlHx^+{ZMQ&3^Ke& zc`xn$>BNqdvEO}%Qa!Y5L}IB3b=!kfLo4)yhPJ@y`h&%%LSTy@XO2YkmHUk>!Ki2; zH9lRf#u_Vn1Y``DHa^5QN0UD$9e&K^Mc*)jzNm84bu?IEN8z&%mbzBKeuy=QuJ-bB6HK>3;y+%9tv+gi3$ zy4KM}fzHdHsCHgx56$4BzPz)P#~YY6hR=A(eaN|jE`R9c*ek9p>rxUa66TS-0r0-T zf9|Lnpk=x5&mtJ4(us(?hTTSfJTa=>Wx> zSWrePG~yu*u^X0WHuV1w&?J^@ldpRKd!Be@UhQuwnaKEL4}F4qX-1zr;T~aY2t0q5 zu{rViyEP6QXj|fRPSfk!O*$VBih#hGxCocl=inIYR!rZZ5_&pg*Av7u^D}%owco$z zx9NgRcS^?T+K&0?RhCRiURXz)kmzF}CM}ZCyB30s8EN}#!qdCw>+gVw5#k?=vVA{V zU~mTnkEah+{SFw`z^}le-{YBW8?OHJ$O%#LOg)bW_{`foOAb0wVwH zcr{E^cLyIp9~wBFQ(n2!j>^;XopfPgn|j(Y>jLJ4tKIA2+{u}Sz;vSfQ7B-Jn%DZzfI&L#D|i&*s^k;_dbaI$>3aucmByQP0!6}MYacC=_D zI1ZDLK1aYVipjUrknJSbZ#o9!q`c3%PsX)&cKjWCeVN4@d% z)qc56fj$)ixFqhXFU?gwc}!NNL9i%|k#WSv@oH&%yVI6A+=LfUpR8WW&M7$|-lvL7 zd%oWT5NXo7Sr>8h=2guYaT=!G)rL#HtGk}sFdwJKOKd7nw&+;<2n=8X;g^cp*n<)xMh zNMs3zq!YEUrs5%=xI51PtjSoqPFkRXx6ZVcZL7?Z`(c1l)? z;$Y6(=@daaKzObt7@pv2A z`fi=-*Ec&>UC*tq0~ajeZ^XF1*6jQ)iI@M`Q#C;>^RKg(6Z#U z&YbhC&yn!1O#?n)J&&-?;WklNuc_xm>^ruo&DESv}Pc>g&+#|^@Fs|p} z2l9bdJnmwkBqvASUV-gCaZ<{CM8NHe0IpKFLn?S|lA`&e93A^Kh7$8__*5UUzG>^oHS11Xum zGTEt7uVGUa#T5B2>_VrDxHfV-)XqK%^zF1Q z>v6{Xg(PcBe`*wjp~z>}4sSWpvFS!S#kLPL<@Ken!tg-=5 z?~odO&gJv;7iw)(TQC;-oLL>U4iUN#Gw}VByO0#7JgQ#Mn5>%*;*&ud(9IK;FUoce z8a>7J`<@FQ4&AIzj7=EX5eOVcd-)uU!nyki?unbcvFZKt8*~^4)qU&wlRO%tIFO#) z7E^v4?*dJAL@t39eIaeZ&Ql4}lNmqr+V8xYXj!&$5pe+^G~OV)zHJb;s;|Ne@7Bd= zmzziTZhYTIxyW+~!=oGPNjwnm)dvTpLVt8~mIS)6)%H7vDUH!;9Csy8XOk*!0gxy^ znn9TZ%@mlvZOqx>zE-<2@e5zZo{>_XuDie5dn}4ga^p8jEH@#||JGd4OkBXjoO?D5 z8lPIf*ozwfV1@_5N|iKj4^q|YeUO>Vx{;v140@{zt+z?PtH*CQp>Y5PW+oeR@Y~rSl_^_yNohL!k^IWK$r|sE(+?t7XEAmeR zE96RdOP^&fV0XII06fI!K{D<=35k}6OQnQOZYbB(S8QP?M=uKQj+r$0{Yv{Gec=N7 zZgHRE&YvzkDMhfx>6IPlTgI!%hNpO+4trXklpkeIMg=i<)EhZ8Ts zKqs#aANpe^%SB`K#x#|1JrAhq#@fD0A4AQA<$xzusd;;YQ20YbIvL-0-;u4TnlsKb zfQWTb(&`ZZK%UR-ocLQ!Dh3C(x_O{Gar`T7NAPFdtiCND%uT}kp0hx|XYLSrCZ5V9L;+P3d>EJmh7$a3F;Oxdnw4-;WrLj9x zrb>qaEN;zU+%QCRYLgepsBq{q)XN;6bG>neQ{7wZtq+ngP&k_y7SYO`C^n757*v+@Y^s{3wp zlGu_Yv3|yyMf=qLA@NyD_7u5Hfvvp5S8f@}DbnXScK6 z$EW+8~}QawX-W9$eI z+G%mp0MP{WUg2UE-!>DSoOCYI4Emr_M_Y})mikcJH|n55$e`JFS!(uf0ry(PJk@@C zS7b1uZI`0`3oN9%8H)V^D?vK_;5wWSc8M{bw znUq05{#{Qh=zp=(j?r>i6*?jAsdR4jHTlX&-DFxd48mm2|C-`gpT^MWAw5(Ob*js) zE&9_R<5?4%V`SxN9^@ zdeJ?{24%`@{S;GR_EdRjKd&q5v@}R+y80OFp63vy26ISKwu(85@c12}(WX5WK)^Xy zo9s%}*>L-l_;eVQM3fvp#k6@-@46T(LN$`Rv_6}PT4MjsyA!1ji=4C5i|A}8?cS{G zW2OAnmjC^#%5-1#O`M$Usa3wqsnN4?&1gLk8>8QkobF(w&>C5% z#64u5Cxdkx-M>N9$xW0Iu^-_r4&U3nZa@B$W%vvedIYLgs%2X`X5VwzGLH zI-46M@y7yYyZ6saqjY3MFD6B%j-e5aGmT?pnS(DRaFu%&Ds=Q%G)XPT7XyXmm>vPV z5)4SU8!su5DZuV0Fbb_Lw=@Ey+q(V8ZMq-sd_KpSbN&Rj?1y?aJiend+o)9LV6=(Y z;ovS;UdFxh=9pUKh7t=)%vGR41H3)65ESq_8K{x5bCb9S%rtkLtwE9@;NqMl*L0XW z8?4?f#xCz77aGkiu+)4_E#AQ?(K5$H?6SKP0Ge@<|cK?`UY_Zs}hy8eU zHc5aJDQS75f!>MGc@v7Icyw%(>_U@%jl{5CAf`)u=9aM{R-r$fNsgcG>t~@fHco}J zzx7Jgu+Y77lAU+v?REeaNht<~FkWyeu}yzoEsM*3C)?cN9m(K}K%j_b4$rF^#~S+1 z?ioHX$tgJw?0UpG@M6iqdh%{23VE{qJXMw`?&fm0I=G?X@iTlr<+%4@YQ5K6WR^E5L>5$tM@NuX%alGNCV%1C+-~%<%pe8jyUGgnH7U zrNcfVi3^EB+k5&>jfxM4rNdTBq>i34k@_cM@y21jHb@>ev7`M?@G;- zF2BpXNK)#lajg8qY`~=+G?IA@ZyK&VGvmN#wnpASHB*be%Ywsu&MS3RLHHLk{QcM6 zbAenx!Ncmykw!C-hkfX}0PnfUbY`73UQY@o5p8SU9?8nebwXrx5}oebk(*wo6kD3- zp3US5NV8!nf*wBHyD|l*1<$|5XEC-V&Zf?$KEtv7^}t>F(jXB83n~H&0pP_Fo|@;f z;XfPWmV5=V36SCIIi9L-lVh~{J(e!xd6>lI4+HUS!}qdpe|}sE@zE#9^9O`EB^s8@ zVjEqHKEbOV{Qe>#3)+5~Wq;RkwT{ZEtL~W@<-4?)i(}JdRYsms+&6sK0p)aKmh)ms zg@gNZh5IK67~M7F+SasYjZ80)t=~RLMo{HmvL)|YcYhGb(QD1J9eG|aeUhWIWKOYZ z)|~bAYpPZ8CFZ{SSo0x#=@dI2bcTI{D7DxYIGZJ|D$6Qai>xWcn5rg(0!-D(l9 zc`iJcOhVUsmfJI5gvV!2}O2#f;d^m49Ic>nVX@7#nPb6y6 z%8ANU<~;E)G@e`qli<_=dkhUV-pHrOP8e%a|3@s%XKcjO)#5h@P1Ii0 z+-+YLg8*K5m7gk4Ka?trzNJSORB!*}-YWRJ!i~H|I@U4H)^mFReM(VfnX0O}7CP-` z4^}cMX&787wlOGK^UAhC6(FldE8%iZ9_MKEO*o%RfI)&jOb>*SM(ArPiQn9EX==xh zx8KePI7)@ydQbTU_Wxb1hMEPR${yD^PZV{3Q}+GZ&4?(!ITL!lZkyMAv0}70|B@W8 zM5@?u&KjSQZ#FNJdiVhJ8|iD z{NZ?aF@|p+(rLs4OjU(KT zf3G{zu)=%O1W78w>j%=jBww09PinM?Ot30CApKY0V=jIg-q(kBW+=5AEBX`B3_xE- zRxUgh#Aipb&>kL}bTt3sFs9qFO%e=9HmkWnD`xbQFVP}YD}A~@zX%8?nK(}IWxv_1 zWV@#2hj)WRn(LQaE~g%QBT!YM9Z&qJ4532wwhM>mPkT7;J51O);+qiSE?@jww<=Ib zs|EEJ;jFV_3@gw{i#DJwq#q7=h(}{pq<(nq_hO9B*xKk<6G82;};2f+w4|7m(iWqmiAWTBw= zGm8^ZQ>i~IKBIw+N!&jTNv-Wr6iPGiw2SMXZrgT(KmW#4Lkp&bS!WZ*1u(rg@%Wt3 zs$xL$c8#%M#x91#z@m}NE;>k*&+DkNI=T}plHH^IQwSj3ZQV2o`G{T$G)c6nAWw+_#mCf z^M-w#RWpz~M#&HnFV~iJ*$;2$LFV!8Dj1QxNsl(Yjx5~=XM+d=GqUTth zeyGq^;{JKT6NZ6G`!2wNi}e-c)|(!<1!PPKU&#ZPfHXc*BX* ze`2D@leR$JuQiMqc&etwd89tkW5z!V>@`eYp2UCRGblK=yQ@vz2>g3QSMd|jESHh- z*MRVt-toN5QI1b>c!E+cRcgrX=BR2hd4;M@=F7yrfY!AG-Mi{T}n^_X=~^M zpdBQ&PJ&yFk>b|Ki!ui9fS5$HBP8;Uh6IL=X4B`OHH{qfo5TaF){OoVdigg)Sy&#) zbee=1zr|g~zA9HLDpXmg3u`+4T`hMYwPy)|-#2+HkqEr(jw)X7N{0d=2a#k~59;9Y zFYnPzsh@c5z74m8nQf=fAVc)@;?Jn2GAWnL=Mq3>7ZOCvMfq;+Zi2U~;aRb~5Apx@ zlf&`{i;d?d(729WxwCAtvopkSfIC=3HXw{II=*P`6ne9$5~84 zLO(Cu`lqPDAW>gqO8n-qWR?f*4{cA*hv#4!4wQO*|pv0NdHX2_T(50TDHCR zuxt2C-kKJ<#ue1oM}wGIE&f&o8!PkGf(&2jCh_zfz(CfMCxLoZgb7%3T>Ea~fGdWt zL0e-$@sk8-(KdHQWBqN=z{3^Qo1X71SHYY|S(;0|mZ{y^iFuDIj|{x@QMmSg+x-7m z3eJQsAnDvhMg|{V!!=YG5dU;b5*i;kJkZzRhkW)&p9s$#`0{c4u`kRB+mbwnNo>Jf zoQ+YbQ!cd<_{L7cz2NA>C0WYo8~V`Hs`Rc0=vus`3ghbce7IXDmrJ2i z^|ZuVdf?2+6aJZ9TDO?HF;bt2kA;?o;jTH)F>S>MvlY~zb0{<(w0IB9=+Wk?i43#YlT-`mrr7d4k;4?AFRFa$G2i*4D&%6#Q$^ z%1ZWfo`goqV{P|PwM0)a71eB&kIk=p=SI zsS2y<3WUt3T*sF&Du$`VF!HH3aIZZg*iHCVV$b``fhvVqc1y3qYx)(NHjK$4U-P8$ zhmVf}7g+Jc-|nV{c5?0D0pt6JqdWWvsfPTs$qijrsZs767&He2d=lN8K8DWd%9t6! z+I3}tuwlmh+!rn3g_=iqdV$dPjGV+d56KydBPFCQGb3Q&sET-ke0XP8&SuFZOt0`$<*= zL2H|qXDyvGi}>!L{;qy&Y%2`=rzwBac8yB90`v0*v1fMHTDr#5(`hP!o(k5)3oq45 z?@cRw+O0~=388vA&b%_nFAmvrA@N0w^?Ilf#RN`Otg80yJT<4=1nQ(*R=X_aS2KB* z$)DjgAW}smATtW~d86o43z;NAYQcl%Q7@Z3mPo?SE4QN!F?V(`0(f~>E?(u8w$opk zUHaX7`s^e-Tcl|lt&^jat5)GLjyFP|(mk;b+Ob`a4$sRN(+><Ar>aqE3=oi6oz!E8qnB=eUlGx`+q*++u@cAkLV)}wApoR~jNux7O~85 z?wM(6zV~xVn#7C|Li6p$kbMj?{#SZ`JnhNT??qW3o08t3oTwbXzwdvJI^AU;9Mptl z-HMuhuM+c}oilBi3UWB{-i-{QQ?V^rz9yqmW9KdTdt{Ye!t0n;^_@(Ip7AQ+De?6JFMmh~E6ib~Wa^D7L@^-l5vo@UNswTIFv2^xL zAlo+U_w@XgOAbFcD~B0%#ev6XNni>k%m>rX*y&Tw2ud0f#VD>5@GGG$iDTj1(<|B%0odTz@o_gW9Cogu8aK(`BrLs8% zGt;Dk5qm=?vjnlAvc#E1Hkxxdoz2)GM=`^(M?v^es& z4SmA0oUVmRjL%^hE81Q(x;`K0`EATu{TurWiw!09%eD7*SlN3gO>_{_BKV9IQj6(K zn+VJ!7d|?MUEDe`+KZ8s$oZXJAZkRE@=0rb>a-rMUq!cwWP?Bz3#|d6c`mItIiRH_ zC}LMl1=MzFqpbAG7qn+eMHgxOEMLfZ`^WL(q}NBO1TRN#OSo|PRw>$XP1_NV}`);{oZ5kw$WBosdwwRtGN$6PG1*i z#B$WcMh6Mbi@1Twn}8lP8CP-09D8@UO_ZP{aal^On~$p9*=1f2$DAMPYv7)jfW8f{ zu4DtU7hI1di$n*D%;gtiOiu)7akQi@{mHQH;U@#DhVnbUjDX!9k*T9|HiBe9ESQxf z<}|oL8=mYj-Y>+cSr-s`9gWD#J0FbVt?akbouIS~1@Nu2s(&a}2hzc`jXnthA+jkv zupvLq^q;#4PTn8$=`jY^y}%AuHf5W@bFA73sQ>Jnop$*C*IP~Z$22ZbCsjMQ>kcdz zB{!W*i&RFupDEo~&8ob|u##~_F=wv8*srfL#KdKrKatabw`;_>Bf3b^41il#`YPC2 z*$|)YL-SY9x1{5g_t%R)E}Ush;(V4S^77)2sYJY%WK6X3rofjtO9PmindPigoTInC zn}7L0m6C+w_XyBZ+@3UWOA3tN*P&i%QB7aZZ6l0(n{8C81k*U5Uyl6ZrnNiTAK;jn zU&DKx@5)O84!m_X_K6d$ETgB$C`68V3Qi(*f0!%2qMO*3MS7L!P>$&9H&S4ME75b% z?%N5@h|EKD<`b=D*IK?yt=%~l!tH78hn#yrT_3-hIJA}=cISWdmMva_hJ~STh4MFzZx^X0js-N#8>AEE_$~ok})EkLmO*{=6znNHzFxA;%8@AML_hCPj7^&X}r0_L;xxEgR$JF}jw z;ykFRHXtM<<)={R2@?>^shj==g1yEja}5ve30ze0)-aA754Rb{RP?D3KOCAom8nU*oUAo$$FBR5`k|YSw=yb6PhKUddjay zxovm!PoXobwWgE9MBFb*SJCyAR-6&~XQH(MiC=-E&sY_*s&-$Nw}Wb7eGFB!3O$D> z6t=2sTJ*KsTAlwr0{RKJt;J>!uHjL2Cclm4iMeplGcs=~k(OW0)z$v*!{Ty$t`_82 z_4`z6;*v(tK{2EKfeURRgTO@4+bKvpc!R2^ExEtr_m9f)VuD82s}v)nT4tR`(P(GR zNyhoa5CbGv@6)sGl{sj9NiblHy5DzOaU*yAGGr-$GQLw66beAjBd|YwgRQ~IYfks} z?~$vnir$y%RopC~UN-uy+_yV0t-m)C?X#mEymu~mqgwPW!l3r&%yoR_o#+kmzwaA- zz+e5P;=4iaGdNEtf#tn;RJ}}7@Okjwy)jvRp17Q+e)|@VCuqc(-{ampvM7a)&eqPC zq06;kAKvM*ZKEX>adz^&&oNKtyF30z@Fl{}@fYTA)BBEwIpMYcmj7)!vCViZTX6lm z_#qOb$u?$qhHTmH4;o>$`~J$%LA`*CGA=P?A6l;?PFT-S z;3J8?4HO?58w^6reGQ>Jd2#a$u6FV@e>vc*Xuubz6QfnrYzV0QQ_{F}gC?WA5dYV$ z2DT8L0zylXe_SfgCW>*?Yrzsv3buc=FBb$Pc@Wer-SHfnM1^63oqGsS)MK6T#ECu{RTAx_Vt`=&1>rxz){I2d1*bNh>DsG5UJzTYyP^_m`eLr zEVD08w#8s)VK}oD4^@W;MoJeF&E${NB1(p-zDn8A*=cQOGZQTZ%MBKN8Qh%L3d)%A zU3I2d6~IMGo%QZ?nLuKbr17c?wj#9is}rKiyZV{oH&f?UAvnu2s?mQ^eT>{E5qDh` zdr+j3=#S^6+^UImhzDvwdiK_?P}cKDau`C|&`nsvVMeWUzHjNDt|($zoV~E`YBul5 zzwD|T+4)YfGGnB1qbaIU5uvO${K`^N5F0b%0~;IfsT)5! zuuaixcJS%X6r@1#U7E4 z6T}_7iT!v810VN)kqNjmtot89pIivrV$kc`lIFG>=UN87Ur(JSONz#!B+J}3ZD~lv zqa-Hu{hKn0UXd+QIyHV+`i{R{BluG-;Sj+UuG&4?f^k7w$=lzx*l6`&;bn8TdP{7% z`PgZ~Js^nmh_&@YSdxd3i9vCtb_&CVrY))GR(aOm1RwfEJa0Ewkkg6pH{M$74#~(0 zzNEi{4gHt)Qm>T1e6D&~psyWAK-FjV$*2+F?Id`JGtM2YJ(IJKRabQ0p%^nfB_8ZtS#RF^J&eDq5S@*jHJ!2_$=7 zq-ok<_NPr(y3*9wjKZ%HSeZD3r+w`RCmDgbD|tmFQ}T`#0g-s=4?KJP&T^D5^I42f z4gO_wR9nJtYJ1d|0Z6}H&SeG5x9xOnt*m8skK63!Ut!4ISyFG3GMaJD0yhRE6Mbrp z72lB~EG`6Q(>Qtpb>Ka7I0n-?{ANko?xbZ#s@X2U!^!%S@_lZ!`KzP&(Eq=KP3K-V zJg#>W4pyUx2CM>02-Aotq*;@Cdr%A5lW2lkxRD z%}`*cSboFRz#~tR(P0{JKzHA}{GD5`r^_`QBNci9_!WL@*Ad>-zEBWnF-)gUa<=vn zljnhDLw*ZA9(;j)Hc(yX@xCbWR>trx&A7Q_zxG@lf86r_2&U2*o)3#kbxHmP2u@0W z)+xuO?~u>5+~HLXGpm%2zC_%E zj*ylmGXR4>HuU5%HJjTeGMpf6|8AQQ!9nbuzbD(=^A2T?^N@(I#bdSPlI|@<^CGs! zG-lpi>i(4YY8l({6+T9YmN7lcDY1pa9w+pjQrX!Z=;Ls^3eDQBB^xgnar?lco#6)DN;ugkZs@EtnYaLE>6tLwSr% zI;NjQ<{e{*Vdcn6b6IqO=r#|Xi+NBYyIUSdoOEp#%zSL=;@r?Bq?(k?kUae4o2*SBa1buA!F z^B9>}dAF*H0md4QX6BR6_m-@F4H(q|37`S8bpvuY-QwZFZasV2s=_-Sq?_vcgcD~K z&;{cl4<0A;jWt1nkB-&%I|jH#wJK$%Hoog6__IaHI1#1Y2$`QcmS_^r`PHnYOUc2S zK*yulwj@O+_&@AMYO&g6<>!9efdk6)DOk@m#_@5@e?uTWpvPnbm!UP(bb?4&)ryA4@z|mY-H1@S3Ll|Uz??;d$g3?8jFZxF8w*` zQYzz%VZ0Y4Gj3QYL0i1k2&DHCiWRruizLy_oT68AQzz^&X_bKaEY(@QBp+8yt-s?k z#(Qe1u3L(7swk@O02vtDT!=oTID6d}#XlKzb*Ia}X(-62GSr=M2)c%gF>3kky|OgO zcJBvI`1DDwTZ3%KPkff<=4bu{rwffB---a>poWI4ePCV7#be#!KQVF-?=^fUEZ$I;Tj34wn4)sM!|%~cGCg^x z7f(5M*q2*9=`jgGJi(OFv*!~BsOE{dh{ZI@`$mQxC-9{*&cZ7_DV2$&-yX1ve5M(5 zUdUw4%A8c4R)`~y(F+h#gn)9kbmmk^i@Z|$h_+gy_VjsFLK88uVyDUrzf*a7lCRGc z1qnvjUJ;XoK*51j5YDTNloi!tnI&-ZmEHwO3`fn2>DK4M zHpk33o!jN?ADfN``4!Ns+XV)evMKmXM4+Q6zAhJ01|GF{xTtb&0hu5e^JM6?jH~2t z?H_CZiup*tO5PgvNXk?9TkdCe^4!+n3baR^7%FuWhcF3gGg~IWx%he(1g(@@%ibl$ zWR0gbZ)nl^bl`}c({wj-&Z+}8$U22pFi^2GGj=R061x)}Uo9Q)WNTPMF>NGEZM~De>~Q52oCy_oWCU1RO3vFLdr=|X%a*$=Vek5mM6nK)vScobAKE$s6Fppey=JHcw=o`Jj4C;|D2wcRT?=k$)&>zVJ%w)e1SOb^~_X7f~u z|H2+9Hp!ND)ZqAC=22Y)XF&c8Es8se2j(|8xH_Y?%ivLkyV$T}QF;AD2)JMEt-DvB zM@j8A>MgsQ6Mte%QgGs`Sv+wg8%+@S3u_#vV`r5UdDFitJ~MCg-F4Z#MVAcmT1{V{ z9*sdRS?%(Nl1noPHOFrfFqKJqo!@XDf;GDpbAp5L$ zyx@ywcg2?hvyilPrMUMf1wa9l_?6bkziAWM6S;&7lV#!P&n_?)SjBX%P36++!;xZ^ zO1tFTJbw9q1w zh|ExNn2dL@B}xfhSh-*DsuOnna@e38UdWT%Oowo13)**rqJ+@-ukusOLaO2vvieJ+5uw^S8*9KWYj znaXptk&kJfRp_#9>N0px(p`n9WR3YfGO4aqT2yj1 z)|I4TP^D}g3(g-aZB8@~{Ouq@@Pa75=J0PriVMk1m5;FHjDdO3WF+ny@YZUzfg&0Y zw5X&MD5X0Mdtz+E^oAc81DHT)!1LwOEbS-c%=>n)8(M+ooSS75EEGB8nsz=j`e4zRg1ITkAO zJ=&>Y<4&lAYv-F3doE{8vdD;m%moxnc$k)22;~61ibI(2Fb)8vM&P2nJf)K5sTFLh zZP@$hS}Da+uA|Ydzf|92Uuk^W$zz3KwL#1Cy2*H9TphJ`V0GGvP_Bw>5y&A zBq!&^F}8|qp01k7ah`b#XXhnc$@yzz3gX8)salT{~*N@?(vh{kyZd$1k&Qc4X$0VXPI7k zZWM?(a~Hj_w>cr~@%yo~wHuHnVo_f55U)4mjv9X<*Zcl)P7UFynTki}2#rL`W>`P5 zzvp7ccsLLnb%-t{xdiF8&iss5LIDHRW-@9blH*ZI*8yqURWh=i#P|?H+l`pl{ab?) z{eCjJQrVAS`d4Ux$)DoMG$60}l?*pJe1ouPM8l+B&sXZz_{UWpYBo@BxMJtpNr^D8 zsZx>~J;(hUf8}$T_$f>F%hkfYD_%bDKlH?oDxKgf>SZA$j9wg-)cvS>uAzhl%>65! z?LdG^@oDCEFDgBRs>uh``)@0=DTuE5JSmdW%X1X*WXWLfLb|`G2_b!CBlC8;%{p8# z@s?YrqjDIqxmRNGdOCMh0an)cnMD`=kTu!E4W5aPJ8ET9qP{{ST5EzTp53c!aMg|o zCzd6d(3#R`LfcEcFo&GruVxKT49KAmjD%R)kjkdA{i{8|D+qefnY3wz9PUXTTm-r;jceH(ol`SWS`7~*88Ho zX8m?Ix8Cl4>X=+!TZmzO14-7$X2+L!S((}rIjio(%N7xKbw7aAE*sWyOe(vxG#8U7wFR4B72Gr+av zuTkE|$$9#AlKxsRK*k}YxJR_3U#@>WijqZat=@EnyEvCGY@YwxWY zGH!~obWGQ`jv^9G`2R@8t-5cx6B8HPX|kV;7M*{J3eL)2zI44_Qb*nfST>X|`D{~~5U%RP zM@fWrYc3Yb{K0r1_`W<+1b+UsUSK5nOHP6x=4x8jQr(EOUFm>JdvP@8DlP`Knd^df zZY*YHyywwNhyXy5ct{(M+nOqml<;V(^XYusk5pXmNIBfiT-|riO!|`J@1EXqRJxOG zzeHxuI?haVaV>)A(z5+$UkC5(>p3BY!Dq`7er*`>kaUb+*g!x2(Kh9XaH!|pRHx1n zhVlWUyr29EDkg~PU}fV+{%1(`&&Q$+W6ht)G8Qi-nLS5s>EHe=K%1<)R*?aAwT9zO%ACg`c?~W}V`5e|@`$Y3aLv}7C;Zc8 z?LecTev}eWdnpsvW&^JS7cN{TNhy2tx`@q}BjU4X&c>Vuu~=$8evfW;txpdQ$0%{N z>N79~D96-(E<6uVfd!FuHO0m5eQrtCXM8cd9cGe zEX6&wh(Sn<<5uft|Jy3|&6voxP-ZHw^9|8U{{Y)aJX|8jnkWpf)35L(RTr9uZxV`Qv!)$8HLwWh2hy^LPgiU1uuoxYi$s z>NJnZ5)(Qsx(Tf4fU){CierF|dw;P+$8|NLn`AZ~E~`Sl2U^ zOq{ZI=QEpkE!?nFjP<0rfB)_KheTT!Hx4}<0u=xFkU7bt3dAqKESa$gl1%`Hn+hu6 z6~lGW4GivK?}B&~HL@+m{u`Ij^JK)StgdHSeR7|-wU2wm?v7Z@o%pRg-!8awm_JoG z_HUQ2NJ}_zPC8|$k6+B2Jxk#SojUS2r+0vkP12gG%O;$SkvB~(z`?0EqoD@c4z0s4-KNGTD_0+^3HOKX=Z#ES@+=jz*15& zi0dcrH&V<|=@L698S~gLJEbZRNp^KL^|gM6Fg#@shlY4+ypr4CGL`b5vMI&at&k}r zm;ib;YfLS=NLbqVDSnbYW?PR`rFIlotD&hrHiHL`KZw^Dsx}>ZA;24KCI+|*b2nDy zkXh6v^q!v=DWvw8{vu|JKe+gC7VqSlx~Mps_dkL)CG{O|EFSPrZmj>@njX1`4Asz9 z-s$-7;8`gx|Km_ab>L~QcKLCP%p#1(D?;p{qVolQnPV#!Ut;qFb8927d%e#pA+A~G z)#7$fC0uOrvIJE9gk>ze4^ZfB|M6yegjCJHVdknWUX3 zMa!z)Ss9jzVGA=?QE+$SE%Ps2Fl>~oM;YeB-^I!FKZ0AGQ;S{R@4wVqgFyp(Gq*v1 zw2Mi%)wi^7L>VbA%RW+{Yahr;1ApFd0v`2vxTz(M!8bKjH|mKu7r{LRWf^`t>5cR9 z_T0$2?5L-Js8g?&w!$iOu}J|t35g;Rt@4nCHaOw~6kmm;D!z{So|(MsA&4m9QWo;k zkgEo#+uAImR4^?3d$N&o{Ud#PH9fO6e3ewr9B4==P_zmeDg{ zW!~>hugDm_;B~FK$n?_^*Y=QH7J0+CLHQ?S-2X#x#C(=ms)^5g9pfaDW577H$GGml zW`?Gl;t+}eUAg1Gm86gwkKtRXa$9YB%%=0kli;J%igU2bhd+0}+M@^VtSwY|q&;M} zKW>%kMGqnS^f7e(A`~mBx+wPV^J^Xg`d8jB>IMpemT56eU|sek>fU4h`oF=uzh!(T zgB+&W!=;8)-IalpMJH`+>CvJOGiE36fg%Qfc_PA7M<9@wmzr0r!zx79s&o5~&N$>z z1#4h$3%*4ZLCa#M;`nd_g+qgP@>8Z0&*d&P_&mU^wVlkV*{XIe)O?$^T_&wxA()mb zu&Jba_2_gGkq37o55Z!$uKGh#!BMqTlFAx)(GARUL&~=;vv(~eo;z;yR_hAwL8VTn zbbsbx97l1X5r&PE$SOlalP`B)8hRh1=&UUtYCTDAsc>~tJ^ype+SXw#VEga8KAOc_ zFb*6CxUDK`8?)?dc%LukL*$y4e(<_b3nLgF4Dddbv??*YEjpW-xdHKkURFI$8iQtR ztdhmgc8aZws~gn2;We*9C}uZ@La7|kRGj=^Z`R|Cc>aqCaLB;M zt@(r(7ri%sxGOkAx+CN47A-Cl5#rb$AU}O-#3a<1&%LZ{k-3?N&HTv6`(M6*T#u(j zU@v^s@6GH=&tr-TQfv^1{&DGihH^d}2H!DU}a+(%_$`X2dtrZf4qYbo1mdp9}UM&8S?@NSfrSc3umb zks`<`;^^=%Q^>jktae#m(8y%8&HjG`4kv6bTATXMUwkH`Oi7?!^I7vuHifTC33_KU zwe(vp8|9K8dig5e#K6K&x20p~y^&OEn=2FT?R4$==5 ze{VAsyx+Q_2%cHJi((|3&A{y2dp0gkyY6Ft;VTW#Poy=EG=A8|osTUW5!!EG+bFxF zaalN9Bt|eEjNkX4Q><|MwWOtQO*Tkz57BCs+E2-D?Q^wNAI#|B5#nGt7&sU2<0ml4 zJ0gjQ%-E=7zZucTc`i2xn()|PL3>4rJUK+fIZ&AVj0^I;Jbtr}3OSZ3f$=0yc?LTL zpsBa*{ka?Xm3KMxFSuzV5ce6GG5P0?b8!dS22J{wz*T0^>kvj8=s) zdS??>Y$}I0XG=r`(;V+;?=4Dd`GReK6hkU{0Q>;dFKfL|QlsdsE0ojB4;PBYY+d-qa-Js4((Ni7%4f(TF2H1eWcvI51@$3PN zMFk#3-XTvBms5q^iyFb6JJWRKlWFVAA|McGlk%crsz%#3fMJLS4h|K(P_)46 zs*l<~vr$&f>@X0ncqvk&aZ;>mo4aw{g?aE}=Ta9R`Z%TMeb>;Dq7|s|rvaTou}QbT zXE#(VTko^u(Cj(uKhKst;(!x%{`z|h5;}Hab3#Sm?8hI!!RsY0!?gJLvNxXzudOsw zWu?xRINBkH`af+6G*~$%h)M0%BR){VXnB5<+_yVoK^s8}?Jj5BFkmcJ_w5JjD7o%z zCfR;qOLw(rKYVrf=W%MLYe6L*vgD^ld0$9e%qMoV#Rbg?$@l-gXinx!;&XI1cs6br zrK%R^V-X%Fi_UjDS*$RCDp}k7JI89$xtXZlVGQ_Ga}y% zD(t7b;=mA-_i?*3-rYe_&+C5TLfZ8_Hzf!obL$UtabRegUE0jgpvb_)RK3_2TWEGb zg^G?t)fi)+=s8=&3CKj{B)g8-!iwHAKAro$Rby=8_kPVl7f6{uyP8%0qu;el!}6Bc zM-v=46`wz0l^2{!?yb1bQV%_M104HR*?N!nQMhpZykBMCzbEtMgGf4|j~w;*Ep1N* z@$sW8A3i`n`B|iTAMfS+|FA>7oz*_Mknsx8&O;CV$9;<)K&Tk!JM2sKQ@KOa1YGI% zrYcR;Cxnq!E;ji6tQ@6y=KA4`m$={ zzPP?^ZaUwl(qaXh(AxLubbijhPPR?47}w%In7T$m`1m>g2q&)(uc@L*?6bAPmp-C_L&9=Y3}jNN zL9z)5ORpR?vbY*HcwUe6!KO|gzZ?B~;7m5lHx|o-x*zNDXu$2GiB#KPqzi9{843-M zf$}_ui5t7=N>9Nxk8cM9fyIZ7u6ftR(eMC$*5`zU2lBGxM_Z*b^tC^L>8X{*DeNL8UOhf}9iJ&WngLFZ-1=+w5YAGkPFAca!s;G-Gh3>_&2zeZ< zaV6H+>yEx=nJr$UWi0p*aCHX6C6YQ)Uhy}gXCi#nY*9822C9IpS!ST>@6|)?VHWA- zoU@w%J!VPk%1t=3XUkl|hb30-+g6shP4eUBQW=f01~2xzmz`F%Nw>L8Rg_u;{oFj+ z;gbg^_kN!-weO|7J(rA8Tn3+*`vY}tr3BQkHqEZR6AhmW%PK}M(*0D%H0e)((Mx%BPR77t9z)9uvP1IdHusUB-!YbhE|Y@ zpzQBgOKG;Ei~Naam4d@fUnsNP4C}rDzK4g|kmNWu>t)osEig`54NK12z7`MjP;F0G z6XCIY-I>PS_UG4M|Jc#I{MmA2b>sTllbyq_1UK)2r=%ZO-6ig&j~Hle8_zj%7ZqaK zM8@d{Y@iEEcaB=$*hz$T2~{xX)Bmlc31O?d;gRTbnkezik6Bb+@#Oet%D-4m`ydnP zjy#o8oNDHr;?Vs%S-vQEQD@Mwjr)*8ZF63+)v*-8H5@#ABg4Z?A@OfmO+hXO?$WNl z{EzI9am7np1zq4HGn+hxzhhryarVPUL&>WM>(;XU-p)`n=xUJX!4|i#yugU-{-svN zU|4*?M|u}jBe(mbL&G`4m>ybPe0J?riz7XKawLCf&nDYtKui=*ph@5*u#{)+jMS{3 zf#3vUhpH8qv4)^>^roGz7+%TL>9PK=UjFcwv42)`EWZB&;M4|#(Gs5F(s`+DrFh|* z_0_l_!qWYy=c%LxV9063iLB!L;rBMqulhBh*2>h^@$DBuzT+@w4OV$ttzcU%-AAj( z#wgU1UpAG3K4VCOE|aD_&>E8Wz7+}nrhw6O$S&P7_Mjxr;4MzBQKE94)4;Lg(+~Z9 zJ~S$kT5_hzWUypJK)~3~;+mP`nQ zYt!dA*mW8FzLeBv51K@Y*2y<<&*OCunN;$z5%7s5pHC zy%j;j^~uGL)3UxW?$pHs2$@%@v5DP5ly+WGSY8U5o2}N$d&#iL_6kS|D%dodMa3I6 zw1D@<`R=JlY%+W|{&rSOGO#WcpC)fo_Bc%Iqs5l+VQK`Im@EIO(4z9%!-GPWmw+>u zXFk-{(e&w4qRpB$2)27C>niJ8_1VOhopiz=A|2M0bAuv8d^mQk@2!~+Lb{6?!aNH{ z*p}$Aq+)b8yG&AlN32{BE$A>KMO|O~PY}N|TNE`uez;3Idg@nzFi4k|svV)x4`c2w zjrYK8$-HBd1`KGNudFEB7`7PEo8$PqlpP(lh3~`hp3mTV7-EPZHABO$RD0!(p*Q}~ zqA+%hgsxPhObPd7s1Lmpfjb$KZoI8&V%U#)RWIDMT%5;M*@x;lB5I(3IR-qU2DuF8 zxLS&Jl@~$O@-xpdo2Jmyt2sphm5o-z)w)#gO{3wLIbJfcuY!vA&8=J?u_gK6<#Iu< z`}8k@rssoGU+KiAo4edT8uu?B+?jd%B%#cQg$qeiCgmu`f#R`=QpVWt-Mu)13=K|) z${sir{tIbi5G6S7W4t2HePkDJJwLWAZj~IvM%MS9W^0Uwk^U8TVRqCRNnJ@3EpK0| z7bE)UjEb>>hp!X*_x8aX1A`9BkKHdX%6QOR`RNjI@LaDCAzqbI^!ySohxWM$1y=Y$l>z1)E7vgn z?g0rn$y^?+Oel4VX&S^H_0QwQ`v)y1Wre3z$@U%!l|!BHj;#;)_OiaEa0r3483Y4+ zILlzp`kBnaE=%d*FY@Hwb*k(v1oM;n5^w4|1<;(#MXW`>H%)6DnlpqzHX8H43DccP zQ4||KKaMy^(71fA>2}o-h&VW)_oh{zL@9%}hq3%XJFH6{7+Va{Q0r3s^;jQcmcljYpK zT#o~bw($DL$yeH`P!EP}CBCK_Y_@IDh9N#gW31Tw>n$05`SvR6`e8j@KHV!5)i1u4;_|kD>$SQ{{Q5ciq}aDu2dU@L zGAK4ia(P<3vL$d}dnV~l0&}8`iWuVcuydV4Cgz}}$c5I;yPI8*L{IZw@A6gLyZBm1 zjBECvUxLqy7n3jt>;N@*=(_@(0458L~sZL2!z)(xeQXW+b5EYD?hRf!{XHW6J)U}QxYPm{$+P{ z!g03aTkcjtp8eN8Z#MEmuXTR1fA8@beO5yYP^n*v80^)4lw{i6&a;T9?fd(C9%>F9 z=e8RBfY|X&0F^|0r5+*2P}2eb1R)|&=Xuqa>Lux&o(H1k5H}}k7~88{qY>ng9|24I zVT@y61lyB<2TMD9T1wTbl!Dwt_pr`U0Oi3C_xw+$RaClo_IU0J8T=&{WkuV+{xd<5 z`@ua<+s$Z`dFjS=KnK?}G1~Q2)JkPr6>&n1e6LF8GT#2I{V&LhDUKnu+OJD0WcXUB0BK_PF# zT?CcVT;4es5}_Is`*Z!Ac_hp|yP$sLH5JvU{}J@=sfHE*S6|Xw`_vU2-#Um|I<8S% zlZj;L6_4CRXP|$o>W>%LdM_6FeC%?o;rVq;o%~=N!VBXm$xK^Uix^s5i05=;`RX}w z>vSG>FIP8B+>v|CWuGZI4L9PDMw9)ZaeWwUR@vAj5^51#!Zsqr$sa2Y4HPB;Momv-M@0 zL=F(y(npd9QIELA2=vk&FWxj)e52T2bI9UU*j4u(N9T{V3o1<3@WPZ1ENtcMkY7V8 z?uRfhBbwyhfk2{0pGiqYunXw}SjWBX2Qu7=^F+uKvy96sm5>FU-F6_7W-B*tzd3zL zw4;370Ss=T{@O0KbNFS0*Mr!()^k#gy(G7uG$fFu+9y{ zu3-ArF!dm6@S-%M;ljw3!o#<$!y=@uHMeI?DQ%TX}G`Xf^vHH;YY<-B>5DgpVrYdvPkjz(zXZN3&d- zEn5Z+Lr8+zrrRH}m$!$rGrro-7&lvV4fQa2&7V z+3+CV8&z;T$SJdG{|z5far@>?Rii6!wFmza>`QB1uWjIn7g5e}Y{zM+YpCmdQDWXr zNUR!bosI3H9*NuN+}@!YzXgqXx2U=DT99uwdP|Eoro&dZ+1l$+`S)iAC%2`U2uO@4 zRhlIgxN)OGW-OAN)>3+h(foL}Y7jz;mwBsS6$mgQ`|?k7l=PVyw$=eNlx2S8kkZ+e zc9B}N>-ME6%dNlT`3z0MESY#>f`8t64#s_TEq&#vO#bcH_-v0O(ZgG=ikGS9)d4;p zIsj74*z>T<+WCP?7tW~sN;7HaM%4HTKLj}R$|HxWTupY{&{Mg>E6X-5&gPhQ>J+1= zG$Rc0DM5!&@sE?fS_mdU{AoI&;fzWxOC)PZH|058H zlj`GKcFUfVWVHTT1d#4a85gdBDb=3?cW4$thzS%+j#KdM+qYj7g9fY645eo zrC$o>;BKk$*&J4T^lQ;mOmpE))$2DUMFeca$+uR4D}N<)Y*eD~&0Kg-h==1B3lUc& zI9#f8-0`6SX}QI8PToT(Dc~y-iRKe#;dc!-{WHk(m+zy zS;eLqDfy_X!_)X7nP@gDre1=&rDpJkRTI!uC+hYt8eM%m=re(WElt-r4= zS_H#=DM)i_HJ96hcQ;*lx3Y(y^KzT&up_nzhdB<4+y@4LMug~&)Wl~Mu+wmaKkqhu z{y&2MBs8LX3>niwJONTe?IUSVRZPD0{??5}$J2G=F3jzyip|=$I|qanLlO6G_Yb=6 z$IXA(DO`B=c6E~fz(4-Wv{eGv>gi^)b{Ss3PQgAqwr6V#dg5vF-Co*?J3if2$y^K# z6PN$X~O5lSZVq zx1}35L0{PsLlL1G8Y=9u>eIKINT0m2#p3U7cy|VZo3bV;?xkI&Inr@-$s@wgj_n=+6b@F|4le=1DEWp>46~?Pe;q``QbJC-VY7qM=2XcW>NE zag8k-0uy`NgO3Q>^YTp#5-zw=*zKCyk8t5FqNlegRGgC#jnmJO#6%5+uk(0q#;XmT z@|YcXX7~mLgG48NEzHK+{_b4B!{2VI1g6%?aOm^;PY_p2&Dspi<2#)wve!mW%0YQa zAZlq7eg8}h;ScF;c<;7;_pGC+S%_;WcIulYvBq)8Srrp+>X2e{aL>di;W9MW+m{aL zc(rC)#m9p!jLetLRzj)ApN#Hij}J<`Ci~fxGqu=dxbrp2E8xRxrZ?FpjC0C`V70vX@3;fm>Q6g{z1PpZF{dDHk2v1hGy&|La6 z0PRc?1B3q8I$YdSLK(0kCrd6k(bUx5KV?y>N6m?MS!dLFwP@fWvRdb?%ekVT7`?M0v%sQSC#b*e{?&$K+VX{`Kkjvem`}bO=^zvKD3TCKFQ^2Y93ZJ*C-$+j(js`^~aWeF0JE}$vBT(C#vFJX*rEDhy<{+tBHd~N@ z(kTBaX$xMKNR*Sw4?{$<7Qb(`?iRaDGutN18z|f08@BQDFU=DNEt8%ANzcIPaqht1 zvhJ4mH^U_AV4fzaD@1&aF_Lmw< zYo>>k*PA&$!@oC-i!o|_<{et_O!?j)nMJ|#U>3sSWMvl_P=is%ueK&N6?WCpNlFfk zM;{B^7=wbigz!%*tdX=XOTS6WrOMlgBCV50{nlgYy}wU z;cbW95+MM{UE^rSVPE~-bWxP%F3ZbeUe}LL>rJ#QcqbwzStDE(FCx%1Il=5#aZuf> zGUO);G)`ognuGfq0Gj1jH!d5np5@y4Z8Hp;4 zpWcn4WtBo#Wkb=EkN9X>?D%Pgp;S`Y*l6=1I(H>f-5fVlzU_-J4*2SlfsPu2un|pM zRGephw~mPvcjfB`Ps79o&<=_cy5L=hDIR>tLEP==lPaDZnQQ5s8Mtt$WnX)%gk9pa zOr$h>_e<`BF^!tw#tMp!p7$oG)?}dWEqRpO;!&29ciTC}wS4^^C}9ZPGJWiLWzwW} z?OJrumpYgdhRJLOh1pdyaG2V=Es?dvIM1`PhE~F5zZ6kExS}K(5Di!IMYHK-2HlK0 zt30+=ZlzrmMbKU8E;&WOg3YUT8+GQiYIq$h#cYQ|{C|`UlefpIziA;Cw5~buJS`Va zFyfupoRfTN+^je4j{JyIs;p|{?;<+eD&cDI#`W;Ukq8+O)!8Hu|3&8_@H!LYZ3p<` zb08aUQ8VZprKWZEFtR(?1}%ozQF8rRDJ2drbs3+9s*B#uNCIZ~-49 z5qNP+U_VQo3*DJC->rUU}xE3gFO4@a+2Y*s9FkLhK(RWxY9=4#7QnP20l1pgKhmgb4rD8P29H7Bt z>a*7av1_M>hB|{$zc_6b~c$=0kxEcYobIRvWk)>%$@S zt)*>2Af#FMP0-4>_6A6d)llGXy0~QprL80q{_zRgF3v4c#8mQ6|1;L!rs!wy&031U z>=(75i4TYSwF?S+nu&9R$2319D>;c|tQzkh+;Kdpk?lf5vT#dcZ6_C@1{Cg!W`Em@ z`a%3VG7Xg7ds36t=@U-$bHlVC)_{{|N&X4)E!|R44;)6;9%hg|nzh&G0bBI0`gP2R_nB#eTVfv+NLgsZ>!1aux zipM@QA;uR_W&TCH*Tkh=>>R4k3enC!sjERI2=19KKPx*xU$F4}h}p7zTUaer9YegS zp2=3$`9Ff1f|lba)+6!oKhHEY?qFK~Y?A!+Z(4T0`s>O!JEbo&+`p zm0~e`RDjg8A5-dW*r;vp(V^_G!M6}$kj5uBRQkn=!CxEvw2-A)*w9by=2;rIJVr-Son4+Q;8O{tEPr|a9) zA%>dQ&bk;@M7Dc2QmzB7pl-H<O284H;7n zm3B9m4;XeAGc#jQWO}p_*mfxjABNJ@nncCD{#I|2?OnboX7T?FEcB;@J=TTB>VXZ( z7SpcA{*3-PYdn8I9Jf=DP${hy4$Up|Dr+-&;#XU8_=`6h8CSUFnZr5-m%D>yj8vqW zRP_9{Md)}1(QK}j+g4Z_s-vc5@?Fx;XIHI=wqFqJ1>9D}VRWZAt&}+9T+vIY3zH2kXPE8%eD3l^iM)r>u!#l4xi3{S*(s2Q zso&I8O7%Fr9Y>+S-RmJ>b;wlJ)#s_AH$T;1B|LMxfL9#tzWb)WZjvZ6L=*l{GAkUT z$=~Gbd_-ArrE8Q8ZB>5V8C^?PGV#gvovuj86T~tTLG`(r1o=hNzi#>=x;orOnlqZU zy2p)lsIm&4vC4IrRbw6cA;l?)O2?(kIc(G(mQ^=w0pEnL|J0`+l38Pj8&6@(5*~i# zGSboJ^%A7*<3p!~dkr|qhb^(^wO~r*Ue5!ptr2G}`2qKSTI{QCytFI-xapa$Go$nZ zmA82yLUOA}Erz`=HKd1()8u``^vs1V2>)udBka4;_;dU?B;AX&G{F0dAUik(CL^J_d56X>q* zJw313-y&Q27SHr(4{PXN!xU`V-i2nlb-a3{+-H(;CYISq$Zj_xML|sIsdFI7$yil4 zmqt5)7D6#R#JJ}3(=ocwV>L}2b`P&%pv3k++OgJyqV`_Y(=QjRN7~yvQk2VD;$Qpc z`EEN^=c`yDPd7mFSAOc$@=F{7{DytSBp)WAsY?_{F4{9H)7x_(QB|IZlQCaqo4nF^ z^c5S~%9~1`U={;AASc$Ir3~u8V9+29vN7V#%Bf;dVDPwULDQZIc}qRsFW0qt@B?2r z+qB;%(MbwKBiVy5oP3myek5L~~XqrzP+Rr&Zz2u0e#htS;!fa_c<>fBs3#sb4BQ`8u*@9iQv-hP$U6 zNWIDD{+JqAfBTP#pggCt2Oa{khzF}jF31VLc=Hk`eWsec%m$G^N$0P&Iyf`;%sV~L zw0@vh)Z2$~5CwxUKxt5r?ry}O6p$EQ(zOx84Mu~2B8{U%q+>LU4vEpDJEa*TMvnTu zd;i@ZyUul;bDr}&-}}Blw+Gu*zeQ*to4>5pAC`ti`b0o4UKOJ=Q)8S!XFE?CZoRO^=Kn02BC zOQFm#*u&K+t{+2lq|OAAAt%_6A{S{yoiQjJO?>Udr6VE1e(>f7cirjMs4yQDj z$6lmFTW=2*v-Z6Mns613KFkfk1?eOMd$odi`|ogP}` zh5X73?~i#9^4H+$+aXSdJ;qd4g2?4==YclvT6mWbeFsgh9on^CX0?#bkI z2XZggdh@EgfqE-eL?jC?B&8^!Re%)BXM$mrO>vjIg@8(q_2RNCq9w7{iT7s%pZ+p(K^bnwE7v>L?9)3PDLy#mSZXc!2}jx z^VXwb$2H+sLS|`r_N+!fvg6HEric|Pc(fK_(*(Ej_TM)ll*-tpr(GnFo)VLac)L6a znupf%1#sKiEeu4)UEVkr()0jQnllYD4NnV#QX~ZXmHOk~Ft1F2U*|9&-vEZ%Sg|Ke z;l8?~dOf)`)*bkOZ+=dkuBSf!`yLOr3d%1g;;@OL@$-5%g|u6(AMAN8l673OUq*<9 zCb=ex2KF7>x8ctVD5|6wv9b3SI%)HtlYaOtk>5cGl6w6|q@?D?tc@HnYamx*0n@;1 zCw_&Tf0=iu8mE>2kEkc1AAryOl-SGYhPu8SXX@>hslfc=gaxM74RT@K4zt=Vt z+DsuOYKYp~Mw)`R5=s7&qQ1Gp3@Tc#hXpCnS6fy^8(IbB)P3Mh;SPsM*cu&S#rNQ$ zGa=#;WXG-wNfrOnD_z1=>hFfja^K6P!WHsq>7JbC)|2C&ccmFYu(v!yWho1tik`rK zf(TaN!R7UW4dv{mzJLUjIQtfT=Sy9+4Y`04%A!BD(mT?l14@vpN!nWYki@OFvUd_{ zJXu0jcuNsY(tORJm1miqmjDzZ+~-~gfQMReP!w0@eW@$AxN==|%&h6A%oX)8V+eju zhC3UQnpY+pT=pV=EPE?%%xU+ss)TFnNuAK|XllD0S>wfM6Yx_dalST8W$Y{~xrZ0y z@eOyH8(q-C@57m0UIAbN19T+RWXRT3^c)293+M@b4dvO#2brhUpAMN;A+>8HCKvnx zx87$oc?B~)X+}wmmc+P(TQT)2jpZ+k5-|IAlQxR(!z2S_Yoo*0w3atOt=H&%9ailm z#-}E3bO#suiIv`eOa>gr%~W3H@F2R}R6DAqmg@2M*@G!Plt1WQ_^tK={TWm|t>@(@ z2a?ecz)L0O-yY5}(*he24D*I2{O+P{?-H4m6?twWR*m%juGf333BvdhG7@ubOOc)) z4kt63LI31PpfnwZMOEmP3VO+xe-AoD>W3R+3m7}oK;vrn;R+s-7 z6D$(Ca*j10baz7X!}_>+5n{$QZA!S>KX!{tnbZ7?iGuWtpBP>E8w_Fo@(Q(ESfI-2G-`BllyeQCGD)y^v6x3qMC14yxza+`0t{h>_I!I`h%(^k{B}UzE21N}E>TZD8RF}PY=c3&&nUUbXX!ET)M)i%OC!}t{+x81 z&pqmOdf$J86dvAl^FGCXI2a+-ng;DbX)VRd3f3SthmMDDFgx8( z8!zf8LRHt5ZRgmx!U%Pg)XYMq!nNVF2bhDCTuoAJNxTxK-a0!!<)ep5b_Z~__q6b5 zJn&ZWmAC5tuLk>vIga@6a`xAkFg+cRRg>nwoVzf+>JB*Su#9Mp7M&-aDW-&a2%{`G zLaa&JT6wF^8u+g^K@O6iVWxgrs`U~sE@UdsKr|ST0nQ}T+)R2MwlSBj`64LcVybyD z$oqTc-Ud_{lFXDfEI)y#4bnkPXRl-+3rD@1EUEz9Qov# zN^RmBsl~YH@TF8jVJ0Gu!^8hbTeY9AAC4D!uqUjEn};m_GncvzZ+Wh<=z2ln9px|? zt1taA*u_9?EX!t2xlntow0U5^US$7SpIHNZivpS zWmV#%+M^MF&n=$llBRXt^e69=2dp>e(RuHR91U~7+r0k4Xi500=&k~X;B$x?N|n1K zV^my~?4pd8UtgtErt&YDk4Gjnwc!eQXT%odx{0fbXW7!3TP|`Jz_?Jxqoz!%0F0(G z;XgzwtjFcGkYjM`N6$x^jKW3}F2{9#js~i*8i+638BRIqUKGMLfnhVv;Zcy>q{bv=GTaJ0{wlZg0|)i1HkUiIm#{H7w&adbgt18HLsFQf zANQ?Jv6Wnj#5>X*lyqJ~*|H>*;Eh5$Ii$IWh*Sc0`fnB>;_4bdzgQWL-2-@C_{J&` z!~hx@jb9ckM84~1dlbqk5BkXKIivCUAsYkH1`a(`tmmZ%gFUqZhA{~gkx$Yyx27kw z-I+P(H$lP`8{&9ZxdOid>iDqBknXkrqyCrHh`k2>Zr5Go>$Zdx(}dQLPJTQC?f8 z;M0!Q*QvL+9ZyBFWO*K>d{(z*2N!u@pyyt&%Bl_titu|7rLq)mP+i7rXb zPLy^|Na9|5k2Ax^5rP?vjvQz4j%ngs!kzi&U*$=uG|8l;F(??W{GnHbEA1|?|8f%gmN#{J=I${DyheyCIcIQzPyTg zM<+f|V1X00t~Qc8L#IVEvc$%dAvgVNIewIs8Yq~2bblt3B_iuJNx5)J32xtYqh_>j zC>fnoD>SJQeE^kV#M0uzh=+-G=1HhiNki{Pb5pB#R6QOJdL|Drl%Rw$f=@6ON})Mr z;X&plAGL2eThl&q$ok~tjA&J!)Z2d6lwB#8;$*zpFNmnUk|AIzrBAhD+9lJ5$BJf zq7@s1g6K$Tt6c(jp9pt|%UI?-iGV4W2XOqUgZ8;nU{m7f_I`%Q>8R(H(8$?Jk_1bC zLBpmlg2x$}yw~Hfop18kIIY4+=;*e{2ngfTk{6vafU>j#>EuZO*J98444=MCBL?fCu`0Bs$AAzo}pJ3AfStF1Ch*J8rq0&AUkGVW>EY)fc zh*kpe(roPD=+o?c=f{gqyj;$X9M&8EKDfPzMqN~AnTwh(pM8RC57t%ptgn~76CBUl z(yzhzA)iX_uf?#4d{XB*nvjrU+$um=NED(IG#-(4xqAts<|y;*ot8i$0e6p$hUfn@ zKIvtD$q0@oC6)_0DN(Gm$3Dov9nY!@kC6M4H@E0;srdahZftDVHqrUeF2s`%r70e2FEtYZdDgCMU%^zND#IcXn@IO$s75Cv)I}zaxgmd`#X) z#iZRExY>Z}>qL?c<}bv5@UGuuDAEzlubp3?3&@@fEuLVsI6({c@6=5XxZe@)?s|29 z-DZ#a3BvS=k6(;y8HqcGg*)+u^A*m=3$;H9ImkR6EPO!} zSU}hDvijElPYDUf@0Cl%b~J6R4vy*BMpDIsw?Z!9+w3E%jI<4+J3OK<4v1Ve8Kl|^ zyruE=tm_~~8w03_+?f=MB2+e+3awDXv1O5>rBM(w9LsUj--NVJcT>qTs`@$baABW} zj5CkQC!E_^eeAmDm|a#`mGKnu^O5RG7UUqURjTwNzi&=7*6B2tRC|0bUspL|!0OOV zlX72$jsWz3I#-GayBd^%AY}QupOe>3C1j&yeE>iG7?nhy52*FufR}#gsm-kxrIEj) z2H5H8$i#wA3kB?+{0U`&9?=$^`s9Vi@MXJ4%TDq4Sp`+Y^Kwi_ckTA!VHT#S$p%pR zvC-3yjL}^x=gE=6w{L&^M-;%uz1X0oWt_h{Sd7ge)B`!^KiM1^Oeru-`wd#iY%})C zh&e1DK$-dj?&{AAFvJ}{d0$fRR+{HNa*blD1W>0{vHV^=&Pr$Y*+Sf5%DD*W`iu%# zWH9m}nb0-6MmOeiv0vwGvO|g;k-y6!s^6cR4TNnmITFuuVDpfSPvyDkpX2^Ui%6jg z@*W)fmZHi@6g{VWk&{HW1iI(`m$(zA-4D94LL2V&=@ZW1&jZLaVszj2-sO3KudXli zKd%)3s29fan zBKxD#E4{}##OICAX7omt$2b;eY`1;lu z&K#&4W@THeJ*lk<1nqvJ{s1GCM=?A#(=OvDf9Hc=Q7b}ZWK3@g_mhUrN_xp2x}S%; z<}sp>gX}OCYkfq5qdq`UQZBkSO7CB(sjF40k?L+!WxTS=Nl{pOCuias#OL97^w`_} zCO5?5MaN0;<+o9~I#7?4;^H5XpA~q|Y92mkvVK}&mowCcZq%o_d~Chl7D)k8{BE_1 zGcn)5t$ zOh*a5&M|$4TP4f@nAO8@o@X{v$8ZU@9LGQrb4jM^3jl&d3X-$pBYqZ%&e{~&&SnLJ*xZe zSgw6^0r8K2Eh=m0KNz}}U)1*fdlDy+C(HX}O1}Fu*EZ1yZS)t@i$1AUPMXQQ%giYi z&C`V|LG-1q2DnG!-9T7(Sw_wq+MIhT)(iHT4H&FZYDSKUi8rF^%|f*+MXa9|LLWJj z9R)}(QAGqtdatkJq|kW|&H8TJBA__znxnK16y&;p+*h7>C5IX{Xwnxduf6}tUCsx| z+DQ)c6wmsK5XV#w2*|D#QDcoHm9GpobO$4R06s4OEJFInWTqa@lLN+Z(T$_NB6#qD z2b(F*Fd)mg%{8aC%iM4yEne85l;4^+<2O0^!ztvV6S1K|LR?P(8UfRKhptQ^`^G_R ztkEw+oS6kTrMH;1UPSJnQVeS$TxOSC0l=J1PW{Dl$$!?eh&}@Fg#RSW6mL{jsVn8M)iSs zNThGe{i4V%{?FczFQUh$CPaN_W1_XlmMYn%;_B~~t@X0}F7ka>D8AUB-)<+x{HNha z__%$}$k4+-gEv3jtQPtr8v!lE|2U8H>f@{^HA&k{)s%prGJQ}xi;=^w5O%$K4n~_+ zk`xP%^NS@~e}8=4LpFe`^GW}DR`jyL>Sw*@&O8us#n#qFW}SX#Fqb9m&t_eXvwq^DS*m=5`bw;!KQkPxayZ$%(^>aVWI=y3Bm12d z<~)rvsK#GBO1+Pae}JH3_B=`P?F@7uVFX_nk0$hAl@JE~M?0TG=y^#pNmb-|Bm+ig{`8}bp)bcbIl)A$#5_BeYT0AWS`wJBX@wv$h zV*oj$;lI1HoUl6y1UGIL>^b)Cdm4LJkfJ)eVY0bFxd)#FM@bb|nh&_YDn`n;%TvLm z&1#v3c^+Qq+AZQo1s$L z6nR!(;sMEY#~yrSYS3S9e7h*rnP(I{f9{;V-$R7@%;Q--r(!m6%?>s?q03?_jX>1b z^&E_sJ0To8;EmQ4r2&W{_S~t%F6LEkU%0A<>Jir*Ts*+&kN^>wbOZ`vu>Osr0B*O zM4JfdrF0X~p3tzd_Kl#Ev%HZ9K(iQwmjTV4NT-iK(hiXD*)(dlaScQeW_Xw5WzmnrE}r$TYcx#-&ab|{ zYk+JqId4m+#|4duH9cHSgQ)c~KH0%)Ivtw10r>ISHM>E5d3LP^UdB(XhC$Pc7L%i!G#kK?H?;x)>>W z0B-Tpfd#^@9!_=}uQq(zdHO+k_1xO|t__`#czB0ahe(3ncqhK<3^BYOH)WUAE z6)`#Cl-_kj7R>)u@1M9?3n_6sp}4#(llz)4oMz-Gc`@5BF9hg{APVB5>)(o3h7nvo z7z6EpSz*UJMh-|hqq8#az1KB-RUmUnB?+nwBpKNR?pO_)-e`=fkv~FPkza*`2npkV5SQ z_~pjZ?;pN>(~03Dy>IUYRDkr(J&&p_~NwA|MIur3to&#PGc&Lm&r^kBGayB{+Exy!r+M{~7w zZ<~$*k&IQ>{a)H=aSvI&2<>b2hBYP%{hD9)U?4%mlyS%Cnn=&xA*2i9dK4da^dY^X zo+Sew+&=re`J-yPDXwmd_1Oa8dyYMem*+0gbZAdus6wk zo|b5QEy^mbog>_J@S}$s{%vXr)ZsU1u78o5`4)9pl=^^P-)s<(skSe3dI`t_^EcK# zSN?KNg~Zd;*jy%9!zabM8$#}RH1OyJ!_LlW2K!d?x#kI&w!oS78{Sd-DEg;=MGzqk z;i@-^%)E~btMEp86rE%t9hcTEo^Q>VJL<(lM%8p!lMEmOvESn8?3Iq9^~t0o`Kv@-~o-!iU%<^tvl>QDt7?`TsW zCzoakz8l{^Bik`)%xFugk(AXm+^R2~uhky(wr!_ni*Y?3Yb=`3ugogam}USNg3O8L zr1t}OTzDJmiaI69)rRjGLhO?uFXC!~rsWmj)L~Naq)mJMZBk*p{`Io$UDpwnDC>Zf z=I-6xlWy^}VG>wH`?goNjPmC!o`ibe)|>hQ>G=xs>NSVOk!Qxc@IBpqaY)e|p#D_K z;?KDC+r7c2;I)Pwta?Xt`9HyorZ>IX3py18Jl9R`m=2aToyA&{c;ROrSUC=9>6NTo zg3xbI7gHMl}XCX_ZT z_{uiysiA;h;@kG4FK()cJGs ztgS2DfR2-vj0vW=$`>arJdmsHFV26% z3LAfZyw}&LbPQDN9>-|S7L1tNBQC)I?*2z~80kQ-IAaxMeLSFPhBPgTts;L`Yvj=$ zcOEA5#K?I1$8!w{)ilj0P@Wd6D&ziJg_A)0dba2;07jl;Y4~ioyKHZ2f0+9CmA)X7 zz_E{f5@Og`YH|&Q91c-zrn2Ieyex!E+XLNWWum3_^V_ly8BauZ#dzd%Xm20kuF3Jb zP<)avZ%KYezIgMT#aZCzI67lxHFnF~=Pxyt_|c~B(f9()c#S{LxJ^x%v;Ek|ghauu z_TCceO4d z*8A>bH|LqZqnibL2Ri|RI}df$4eS$~VH@k0_6e?HKRMAgBH~hoPV@T3fN5L zI`7cjPPCdvqCm8sDBm-b`U#f;$_uGQmDrSNL?Ya?&X0q$yww6t4iW_P&Vetk&R;1} zi(yg7JF4x9#pxjy8D61klYJQ3Yi`9x)l(tgV#fdzI#_D%SP3tAFEOK=>c46uBF1Xp zu65*FMYL0s550*f&%P~xi-#BMrO%|Gf=2Rc1A`Ja#?|;*i@&Wh>U%ePv2ea}6hLJl z^V_AaE+~J z($fPJouciuAG!6rCo<k7p=a;ek&>D3uy(^ryA#fSaIGsczdz+t&o#h>h+9BHToR@aou9s7g9UpJNSvnNG1T(Q(?urp>V}D1#UoaJ9&K`_UPJQKwbDS zPd@z#8uX#C#q}&fwvNOUcD&5m1?8giGqnb?_A^x)_B4biUoO^PV{j{*HE-!{mx`-I z)+LCU-V_m{m<(YMRh)B8PI{o(Uy*z#nadK^ZTp z4hygA?4*Ymww%fR#gZMBHwZM^gCr@ZyXGE8aOoaGbuUj2b@_t0&Ci#%`ut7fOcz7S zEU)QW&04|(0y^i?Q;s$FAq4m2od5)hgISIv|FuHa7DC+=F>}vGINcA6B8rr+1xF(|nMvnx$oT(~!Q?lh^ir zCEX_OVw9Pdr%n%c(wCh#v-jJQpb+1UF-AiNZXm>Y>Sga}w1y;&wvev$F&0_jP#sH^6*!3+cWJY1&|AOr!GJ{M{S> zU-1pZCZ2IwM+X`dRpz3ZozsLpA%OPO=jRBawmDMtsRt^?Njb}94g5GK=GW=v_}da? zgH6{1OWj|#9tztGmFI12YRZ=t_jJPm1Dvm;9S`>GFs|A7mrAc=8y>CsRIl^-KE9w47?@*1H4OYKL_(0cn;l+VW zUuFS5Ri~vablu5U0eL%m5%lNpAVjV3J<5@e=&{=6X<6r*k1?jAEStXCG{8|jM_3Vu z?lU4K(`w078+OjR5Or~FeYH~-TbgBOWdAVWJG+aA`+>>wlO?)lUN37sN7j~_SepJ| zIu8BUKIuV2_Wn-Aynh19@k}+Vw`gwfOy9)P&hrRxOcDB|pvLD3RAK`Z6|Iu5!R+uv zU=Pb5wskks{nLL$h5&GbmWOa%I_PG{#od!8*OQ3>^58C|-;nepDg7u&@fySnW$q+R zTUxNm8`sPEo6rm7ag8|^B%k4I^5eB-5>WUybX8$vT28yx8c@(8hHChgb8pTE%JI!Y z;HyQ;1W6_>^xEk|0_=Jq@v41|tQ@~trM*#o+q&vJ60Q7>ehs1~y?FUAbEk^h&OD2Y zZkU@*BXX;N%s${4tMfqam%gQX`I6MIJXhw9N`3F>^Vf_0$hWXHLPS};DzLKmMLAo@ zTh%}M_S)kPXr;`V>|D!!(Q|M#rEsQq(bUy_7qxXRjoE|xkYoF?4B=S`N*W<)-fljD zR!g3MrM05V&tsw-*!keEv_pFSyuUHoubUgl7s60%6$C8n!|~P;9rRy%Q01n?kmmmW zs4hst`_ZH4!#?=V=y^X36T9QX4LzW=LZKg~{)jT>l|OpvVKZ>aZ2J4x-h_}E5mdp} zF?z?SUjkzGAJO1gW{xk_!;atLU85y0TwdD!N2Cu9oVgVUkAYn}-#$n=#AsbCUwu?r z&Cpq`0ZMAuChni>J>$8F9$w<+NaI=NwNd#SPq5a$Y6Xw)<=&AJvAL2tESCC24#uZe zBAobF?|(5WV_vLvIP1Jq`JrA%J(lW-@;*xXz=A5}ST7wf2~~VQaG)L^v4hW032N;Y zsC|8kXlaRR!A=Zj>b(+r6Bh`~3GCK;HqZXA1#A?zwJrBiGw6kc934&EyZCw(zcON|vZx8u9uH6H#~jr4N?-^a8RWCQBV)iy%!{GCu^zE144v<}%B)=;tj@_Ijy zX|S#_e*W+3@}PFj+D#9|#0rrL8B!dqb0pUhmc@Y(8*P6fWTgCDnn~p_l(wDy4lFY# zE@J5r66C&?0b80vs{s~hRqf%q@1i}}h?*q!!-x9q zNgZi9a{k$Zs}Eh|DXDLN_l`dOxt>Y6r@a<%FTh5;`{(X+2sE*u9w@WA=J+;VLSd-{ zExk{?D^=EcW=%K&M{g@uvvdm5`${#ApK2Igf8qa+XkPrMm)^TP`R}Nb zqqb{z4huSlhK>U>Xaq;}((oAV=_7qyU}R|IssUM4XZ!-r&sp&=Gh^2W>(nJR zYodx{GFEZ|Rf;kvd&i)Rt^TLV^XXTH*v&i60dhbcrFASydpuz-Pprm-ZlY=O*Iqe$ za^HG0R2w@tXt5RGD|CHH4sc6)v?&G|j;%>kGgU1*Wjhpinxl9-M3;)fKI{ykyULOG zXsIMD(1`ahemaBM#1gzCXX(tE44ORqm``gg!O|wmYHRn0&a&<(BAWA2Oxp7z(lLOQXG^ z$b2_Clj!hr@quf;3o5@O%vyd{_KcQOC2Di|5obLvcOsH&T)Y|7Ug{GsL8`Lq!OQ5G zo8v&x_Ze2E8q+mPWGx(wf!EF(rLncS#lizB?NaA=88d6MN>mEEp^PwKwej3LS8~}$ zjD4(HON#8cp#*dI(e&!N0_hRej~Wvrxn41oBRTiMG`pGzWj^5g`YrD1lF3&Vjur26 zk*t>nSCQ`Hkp>xB=U?%!CmHm8Cr-9|gI5Hwi|$!ku(%+yMKwbKoT>Rk94FJk}FWkIx2h_%YDnyOGc=C)j~p`v7`VU z55o2^e&Ls+VHTHVY*UOb#(3`QaJ!18Xu^Vzfg)2U8NLc~ol9R!Xdg|)G#yy87>_3* zB2+#K6s?EiQ)1p2LQjjRzNY~1WSLsali{(Z8B-0d7A=1x*RHwOJ}Ph!>4lUJH8sd9vZ$x}g!0Yk%U@b6s+Wj*w~5+3u0%<^3*y}1^IBCa0X&t)ynS2_!OV3@sL}5l2e^bjCxE--FAQGpw?-A zX+(5W^~T9o99BgjVm>Ul8ssKh=Y8D8%d_pYghS{2+jAXw zr?<`d*=g|x&`I;RjpJy`XK*NbXDMgyeI%j*O)`dPiRejrohILxv$tK=CQ`Mso@HFP zQ^nKmoBTH9SYVHwJnQ)26L?b;h&Pe8-q8$n7u zeOt6{->^K7+21cnr)oD7&g0^Bp%{7Z9<^b=0GAOf%pwGNuO9JdKFc{J~vXP{&~~KOfUHtWayWsQ=ttQb^wLX19CWSn_0uo`p{p^&>`XbozS5%Rw? z`tSF$lm*b2J0R>#xsl*Z8EsR6g{NK$nYDZ}TJU38AfFpCO|F0>$6lF9ITJUMuW3^6 zS?lm+y!fed<~A@oqNiluyUnzHT%)IP4M7FfeGKM9X^;%sM@zZttY#1|-2IZp8uOJzzB+XqC}3cCL~*(rJ{13U{#{(n9iMYW zr6HROaR#l4+*HL>2SnZ$Q#x>MWF;;&b=1h!ND&el@={G!cl-onN|(=e?w;F(#0!pQ zX~&LkL=x!9SLL^Mqw(B%Ul=$hwds4v1Ug$`05kJZdMe?t#hhp*y^}ulNuk($Vfn{6 zda;ZL(g5am|ArC~lq=Iu@5DdKDXRAyxN;g?0}jg{!R6^N1~VJ`1E#|ypogSF$|8yn z!~UW~NavOXEqY2-KnPyEi@!3SNH!#**(&;RE-$!8>j?UW`BB(5bB1gam z*euBz<2qbsq(&Q8F<%!?L=w~AU|j~{t&bX%Mt}0-o>F+pVP`9wMr)c$RLV1+VDc-~ zm?;7748i+W)bb^QDmK-GhsT3X&q`a=Wt)C|U;vnY ziI&mV{;58Q7&J3K?jw^8CxGB~j1J8+{v(p)SriID6S#dVMXni%j`!(SBGXg1Yh1(Y zF0J{ZMSI(&T&||Z5cKX8U3%dwL!c zSX&bIwE{6?2NsvO)Yo%Q+P)vkw_q}?CTnVeTm4F=|ut z?sKf!P-e)PrQ9&7@JVibdsmkbxyrquQga@ikuviFY6XVB)8zAdTv8;3%qMDxmrJuo z)tihqR*f@a8)~9W@U3!VyWfWeOK8oIe4i;$U7b?Do1#@i*qIXj=^Cq><5Xh~ANCQD zi_AI`KH_XJ!XCigf4bsXMy1>Iq0NyRs}GtS)l?WW$4z9^$=KE(FD6%2Q!2~q#TqBd zriT(d!D@;Y#}S(@zV8zWHW3Aohd1X^E&sIy#>$r`<`=lzmPW>I*I; zGU%3u=C_`Jq$oaw^^BxNO}?jhfXIY|5vGSbu>`o#ud(B_+zl^Fb!doR%m)oQ zF@zoiWY@nmK9%RO4>ebwYqk65rcBCp$~$s=)ypu1HyDozfQ^lxBu}s|6#Foqo|XN) zdiA2-PLKIZ?`xHJIwlTras-#}UdKw%_+jy{ni29VS^jX^VW|bOrGtx!F+(-kBHM+Z zvFhhE4Wuz=Hh4%>&bVyD7WFKlXmx*bSmD4G*1fMId~(AAM7@OsEA1rA)&8k66viEo ztn9OmrLx#0&u6C4Vs*W5jqqtqmwJIe$iJxJ+nORzuep=TDtQB_XxEQEC1M81{k0S3 zr>X@7bAj_8?P=NMZn$VMh)*wVZ(mE3Fp7~b3#hwPjVc#o>@K*d(wVzVvpcsmnIJkdg91>k z$FSGr{6*u|{EpsQUi);-&rLox3v)cWMU(aIK+~qFc_#WW>yF&Q*BqkPszcn8!agUpANgeQY5_-J#%)$?IhY` zJ7$*&oJW#=CSoIk9ql@Gw=_>h`{Pa+{B}3sb*JQ|%bt{47CrfKzI86XrOjYMaNTD# zqB1;r#?C5bF_GlAyyGYV&;*u5j%BM!?#qIkq|fr7Kk)?YNz0{R_< z!v}myJ?o+Dq-`0BvDuhsU2|i+H9r-r!Y_;Zmd?Da?l>u369CweMLFL-O;S$2My%Vv z3@rWUo9NmIiTt{QG4CsJR4bgX!U9&(FQ>@@R=+uiTX5ZDv;l{h>FrvmIeqgeMzfc| zt&xEQ)I^I0Q1;m|Q)!MAMF?RBJTaH|Em0S!hkwv-|; zcS97v!lo2m3X;X;&<{o6jyk4BdM}=PxQTce9G2ArAw}+@3MXM^{xrX!5cL_CH%wcuelfE^#Y$#13cT-^A)%|LQs-i8af3+^+ zfKZ_f>T35&M7V%t%@Ejav_LS$B z+QIdJ`${|bhg-j1C}n(rpSb_ForBhmDQz)MC7tyTk*F%{A2iBjIjv<+8_ES%nt$8M zGl|h#CVfg2V?YhhE_t6v?~U7KfjvMfN?_D5v_+J_|po}qyC zxJ>x6W?9yzJy${H7RHqh4^<@mOAmutR$^U09y3jn=ZKBMS!rjuq z!T380cG7EC1><7gK?(MQh{!ra#w!4>W(F3eU5QjK*jfii-Z&ZgyNBx13z9MC6dVt6 z0kf--AW3V6dg}6ID+UNGV*#kRmD;0ua9MHRvQrF*C* ziX`jbW*R%W`>`k(<#LqHl1D1vkrr!6^6kd^q@Y+$5o1~LlX+Xgh{!kK=~i@Gn4^*d z2~c}uy@LOiy2sZ2Jm6=#d&dcSEb%Um1^j%WlU0&10(_OXyt*f*8q@kT@|}PvE(4JT zi?An_mvkeR53iNa>vI)#7WEyfKP5=203(~bOoPTB)~4NVf2}<~IFDY7H}zW_;3SaI ze!D+*Z8(1H@ABk*bUCZ3Djj-IYw5ZTA*4Ez@M ziPJ+d5OsdBp0KUF_2XLJr06#|x8!AXk2zjSeI2L9T0}eFjyk*Eq9xy)S+dlf1$*l`DK*I^S-dMn&9$(QSva*dKij z?KDOey`xTX_UM-67_Z-Ffs$;ZKb4D*hZbN<-X>gW@Hf@8;=JQ_vYe6Cw$9#?YRpYmIncgs@ z4_G`#^r@t8Kr&m3jby^0*?+K6FeG60S+ulZZQ*_`h5F^k5?VxnH)C(GO04Q~6AnW9 zP;2o1qmcCJlR66RF1nm%y?`{;RY;T!(}?o5;(dT-{>$sN_4<7zLxc*2(L<|K3O!7O^Z3r@PwB zVQye)<4FEFX`e?ko@g4AchX^opa)TLJ=+T|*2k2|YuQB#JQvwtEl74C?#A;4XFjsL z%Juk%mcOx)9%N2qQ*u1UOcEDNPH=8R?Db;;D9va?-}j)0B7>jkp)7voU*L!J}Rd{NDL{ia)U9<8vlbna_aGszZqtk>lk8 zv2la@2k!f6AAvEE_DMUcloKSb=;#Iv8lz!2BSB}B?(t?lOEchaI_b=S;1cK&RC`9R zUvmnUuub`JAQZ$#OLSYGJ^3XH9AnlJCA|(@ZeResA%C!?P!r$D)+5qCxV|<5MsH!Y zRGj7C{D87I`G4*gJ)xeqmTL~R^A{r1Qm+W_53OjaOFv~l6K4?U`dd{ZNw?oRd;Uje zJMh~H-aT=nVMuybpRN9|lQG>c)6$401qmKrk-8@62;T5)1v>ydQ1^cvo%LVS@7sn6 z1q1;_Q5qGLZh;X45hbO&)zLjhcL*ZV-H62Kh5;ibMt5%X7znu09iM04=RepFd)@E* zzRvSHj#y8>5JlnC^^QW-NVN9*rZuX44LK$9{@n^ApE1acFQN8NPmh>%H{S!m(?yfK zeM>aEW#uP}c5C%8>2YC=6fd5~4fuU;R%1|`_e-PNzcY6RTTY{4!9B2+;+%4RjB_^e z-rcLlxcGZ+{xJ-7_2TE9-w#Vx9!5Wb(@T3^=|-V?-12nBpUxd^{!qZScbxm0B9|%! zeyx$kP+{ok*L`jRb~;=Vv&H@$Da%#@aCG=iM>9Kh`{}R2ZO-K}2^SZ6WwFM;a*VwM z7AwxC5ES@4KWmhtle-L@FmtH#eY1x+B)b-$+S!q3A1tofke-$s+ag@KH^n?t*`VgK z`NjXpZfX720``lPD$fF1thoae>GP*;w;lN10Nua2R{osQ!$6;%Z?~n-WI~hEr(N$G z{Jy3xdR#Bg824*mNh6){0``z7;G?ciM*;pl>vRavyVMOyIIrKejlRWpE)R~|LrT97 zv)3%o-}5*J?nt+ztB21ufMuXBK4ck?VJkRczea5l4bNbPSksyuTj}`?7o^!qSD!6Z zZvEq1g#ltNLU4Q#!>e!9jd4TpY{FwIU3^BA!r5+8!nV~%2}l8);`eQ*Bdti@Eg;>< zqn%1)^Bx&GwM9>2%}QDZzY1MWd+~_a<^l?nLOS+E5PL*(6E_i;& zM8~%_e`ExkI;J3~ytAW5SljrMLjg_UDSdCc$#tdby{gMt&|>|0F*W*@qw zJ6~7MB;<0sm5cr3)T3iM-;+~oIYkV~VRy6}D4Zv8PH^9B4}4#51G@ZV5|07*ar8jo zjkDWx#YzKlgmRy$>Gx1KTM4Y*>sg2U+FYD5$6f<~L0Zu#3!+Pob&gioD8u8V=>zDe zZZ_!{RIA|5dvV;|SGXaIBPzvn_IUAzI8qtyQ`M{htB;TQ9?~2V z50pHw)Odz!9RDu;eyEZ&qMzdTiuo!#MafKy#7Pp`sStLLzC;-wg9XKJD7XQzXD%N&4qRvyIQv-VWd*z zh^J+5?c)ZKahB3CA&9yTZ4)o3)3wDD8jZ4b+t#D3Qx z^YNZm@Z!-tu67U&V9V>zW|D??1O}HdxfF4>hfQebzd#I?&vRU8_y)B36^`TXaDv`! zG94*Qg*O#}=6K&pxJ1wM7%GEYD!_hbhJyYCiF6brF=pxAa`ZOx$10Zl+9bc9^pNu$ zig-T0CBn%o(lAM~NFQ1?%i7=e>Cee5>Mk5Z1%PH>s2RaBEtUag@Pm^Jr ztKzTbW1C^rZ5DFX-%?gwe8hd}trTcYBOM;eDQbw&<%0V8oGB_>)yvs!18q}2z4RuO<4DwC5wa-~ zgZmWkG`Ws~gWR|DV3C$dp{_q;;fg`(DQWq82i{?tksrO75*Bf0l`n~y@b#13!dmuV z3HHp3%;ZfBJ%@u-r|81m%|t=DF6PTYbml~3 zXLF_)rHe}o%8yuxmvGY`%5hkvPQ~BONLD zHaRo>R9%NYawZdkN6ANbF)!d>!cALZB;qFUWd4Lga?) zka9J;O>12itHEkI{I%9%Y1!Dq+Xs|h$H<9}Ni-S>f8hD`n|NACqJu`SZ{ms_U#)0q z1{=~c>P3QN2x2&AVa!b^th;NRX*)s`OY6?ZFt0h=W<~z@JZYCjFB8e@rZkPq?`fbRZu4!Vs*s!1NszH7VXv96G1HK2C4f7qy*UUYEmW$!oJ?6>Qy(UA>ODW zon!oViF1MOvq-i(_GXW*w-q>-=e-5c7M!w#rR(8c1afRHqHO^)kllq_YgPIa_^^)s zl$mgZg0&D!(Q z=?zo6iu9>MZ>!Z3yvT5DIYx#NM)cI5s1;5)R$4UZY(;`>%mVU;np)#;V)#F3*+l2G zB`l$HDM69>3=K={F#Su}W3haF-EDUWvN|?vgS4OZsr>`^zrZ)mtr@S9Qr_XFxbd?` zcIT^1%z9HDJaxlKX^GdfXmsBGT+3?kmslKw}ll?Grs$J^s>?G=zXqT40^3JJQ( zSBd&HRT}MWeJ}jm;zhb;8YxCG@uQ7&2V~3v1o^`}7!#iEo$P66qMHgse`tw0bVr?1 z+)ZIPDS|P;$S=?SwW};9m+mu>Ur@Mcp;H3(`sct~mEUr~Pz>FeWI%v}nehy%$iMzM z{S(saiRre{+7ecwouq!nMu{i6w4T^8#i?&09cIu_i9XKYlT|^j&3*0@WALF*-k?II3W$vJtmxK|AYFPNv(uE%((j`F? zesd8ih04D41{l3H5pZ6SomdKUviue^__V04s{i*_-I}3a=nAQ#zxqTzL-ThZL`X#nYuCzbY7C3zti4OL;ny9Jg z&?cncoMbP{<_eV9nai#I5|e8BUb_AiFXJ-!l3Z=ic^-6g0c=^jfxiev`Ct`ZS7j1x2ke11vU`5Jv1NObR{~ zrI{prf)dYY(dEviRT?9$R5=t}PKekQn}wU$;l0$zi*4p|Ri%TQv~d_4Mq<=*8ze8b z^75fW$X$Ku7?oYx6Q?-me~HbeZfZ`u&jgVqj}!Y8NB1(faZW~?!`TA!&^hRal`wo+ zcuZV;bXFa34pm?r89ykcW4oHRf*lk5Gf| zO+rb>DqrKalWe!Y9wCTh8{ST}aJH{oQ0F!DoNw-57wX}*3Af&~55YeAlNG`U4=|5SK8oxFI9N@=Os`TIS33k6mh;Kf*QzrUPoY{5 zYwwH=Vf%U+mH#61>ZfJ{p1e*|Q`FTp9+dh0)K_NG!io-Z93p}=6*sz31d8UVR9xy*UfB8%H8;MEwcsc?WxebDlmfW zr*lM!jnUvw^Y&V!W}36O#1_zek!d>xhnV|+D*egCE{GN$cq~a8jjAN>Fdm_Ip1;_ z+oFl>9MO!5?*iJ(INqeT#`0*_Ou+Iw;J#~KS9%wGeT62efLU-1VxOS|*~7aQ15XA? z*|TD;t(W0ot)#yqnn^6-_zn^~!gD_@ehGXhYQ`2ThLjZA$$fBsr)R9Xm64u0pcSjJ zQqtLA5IJ)@8TvHf-!$fno9c;B#L;*vA~>LT5Rl209pn4Q8^k$67W#A)7gH!KVQ{IW05Be@_rW2hcq?N0$_Z4Og(y z;FBkf=^*LPt~@hPwU6`zjnr9gBOr+rbg`d)M3R;3IZtPbGo5Gg--JSow?+6gI?QBv zgR}CS?CwnPf!5`uw(;VVEq4a1GSoY`=S}l+$k8@!`^~gs~kbIl+BNDr82Bf#>qM=}>uMqNgA*OAhJ9+^~s@ONNHF z_jZ)!nGvgdIp>&icb}r@8RwAFq%}90re7wEb_n_68Xm_%e2>AhMsT|v1Yow>2}c>4=j?Io=jK1Z!zG| zWrT@MhALjKq%a-$*!P8)--@U*X>0}6E!U5CqIE>!K6J7k<8t#)?P}=jFv-}59Ut9KjaZpqtY;xvfW5k?! zp$DtVu1t40(i7IqCaq&UzE4wL&-QD4LzcnO2548<=HKieCpQ$8=;zk!EY)l(%_oR|x zZ5y|}Pi-786ExxSM=+)df6!OjMGk+c80s^Sc84KAIS_kbTi2vgo}M}r5D-sK(o}!3Nb<| zk2hx5DUB)c=F*#h*&KP6APHJo;Ll=Mv&Dxk%shoH54%B^M&Loj3q9ou|Ha3Fp6c+( zwW;V+n3hil%}||WS-_GF-LBt8Lxas{gQe}H`PknDcYQ)jB-W0^6R{nu;ifef^#UG? z5d*T~5|!*%=k#B9zB$0{K!al|+sLw}H1@)Q3Kf_>Y018^mhdq3eVFCLy!F!??q1Cb zzIhi8rx-|!Jf6#t9di&_pv#w8_Jt?kK*nsDDkGsz~-WU zj9F#F@x&&feq#=e8qM}V(w5;uxN}qw9{P1pF3@Ek+;DPIHS1DeD-KFA=4y2<{2X=} zbhY<&TFZ6_^PHD(Z8O)WBEG|9GiD0Xjn!w^7Q!-;pc6&*`qY$4U$pu$-><3}ZBZp5 z7mE!_u{GL_fqwxV6UG8WM~wVOdMH^|JoDCN<0?%UV2gkL1-%y;XTF-}DMp=tgfunI zh_H^rU9?&&s+th=Y+e{sZHGI@kA@);sCZw7TAR`b?A-|wD+Hv{ev?C4^`hHmRLC9^ zZB!m(`e7_Mv*r0u29CuB95F@0z*!YPpPhWR@Rb{$QjyCY1Pds0?UAY>rQ4`Y1_}72 zj0VKLtDT#&Js5=%$3o&N?fR-}Ez+C~LJ4>70vyKgkP|&y{C^a+re)Fkd^hjLWmG?( zGWuO@)nB!CgtPo`s<_+`v;Hg2F`V6Knt7}L<`U+rJn&a`ywde5=*R5XQg%)MgX`ao zPN(vKFL}xFL`mmyjUeqD81b(>?c?7H`YS{4Na;{_Z+qL0a^QH3(*v2t6y`09`*n&h zSP%=>x=-vsr7^;s@AhHyJDO8L^DCr^EYQX+y~u zhheu%a_#lX;=UeE)J2rhjydfGnshE3^t!2Q>e;pt_vn_B0nl&_H1+%1--`=IF&!!y zD4GX;RrU8`FVV|`^yZ|jcA#YRm=Hlutz}jgMIn`1{q`cB$G@`K%VOK`+>^yJ+kbcQ zzTX{7M76T#aP;RYZ{iRmuT0n?1@o%N=WN!oM)lRl!nh&G&Zhz#4hf02VbWK-OCRP@ z5(j5HZA+YqR$YaC5^LJmC@D+h9V+~iA<4v=PHsWb;3Z-QRJX?UD;1y`gH4(8HpcDU zpE-%?9{2kIsi7^EX;#PQf|u`6q{vH%0M42U6Rtd4P|@>lmfk- zJ^ExupVBPzD+DET>a%SfbZS|;=1kYa>bzJmhb#9q0RX4xv{h}TqPOlexc8-7 zD)10TS8*nRZS~Y0qYSYxbsE6Hu*+#DzGTIrQp&FVyf5nh+#)=XkTF;AQs7ez-Emwg zxw=^__|+x}H3~|1!fNLem0eE(}>a5O8Pn^SLFQ%)HmDb zTLVr#sr1`%L&=3zNPG2be-doGj(ABg`L+EdfvagxiT3Emx`S6Y#fxeekD*Aax_W)5@J4XN)M)jbuP zfEE7{@GJh}Xg6>ds`oGJ^S;MAR?JZT(k%|uR?m$C3C{@hDTT>4GS9e*8zU< zeEp{e&93iA;>t%CFm$oJD^Do#E4FdO_E$YtQsgE+kGkLOeTmA*{-k4v~%89lUg))Trr-ohrpvS&L9mzQkc+?@fZlp!xt zB?P_6s2+)P*bY|j@bWYNDGbP|oJH;L%^`iW8wG428htFxt!;-9MGW!~cBJRiWP0nb z5Dt!9k_kWET((d%DUB(llei|#GjBBHrdaJi0ys~~sd->}6{+$?3iE#i(Uz^>E@|xM zV+GZ>G<_}&qf^$ZB?j(&t=T_)Gb`=0O<#1o_Rf@MmET+LZ`gG~oc(bvVBlkGO?_Ku zbu%)XapL6LgAqZo`~baW2}F+#SJFn@FY8_=88>2pjN z{L4-8601tX>*h?Db~y0Gd?_booZWeg=LO)S<7Tcn^U8oDqvfuAkm+6tDc%-)3Yu5Jg?w9?m8@z&xKq0O1(8q3*HL`!enfj3hB-XNm z11=l%zw-4j7c+FxdB@1aRxd}O0>FmN)@rADD-*hDR(`Im6)SY1n>dIG*EVV%AKqEW zWTlRdzRw5);jT6(&h;t#>n_tRFYzcZuO`JJ%7(rcldZu)bD#5HLxW`WJCmW;LAhLy z6g08y=+t{BPgNNF2j#Wq3{b~{JoD3;{Dy2IpiNNXgZ&+)aZItCb9TI}9DYm_#^@#H z1x8$){}#gkBQ54X)1nKLnWi>VCQov{Z}r~$u_?s$R5o$lQEO~7+zVPY%aSE}Cr zBf{C9)vc#zC&dz;6jJ^91RJ6AG@s@DRkKv)S(|~*FgFm5W zqNRV03@NdNl5zm4r_%G=8vle!KC%;5?%yydVVx?IIp*{nEz($7k_4Te{0cX0!kSYP zFzH%@;2It+3-zTDK_QA4>$}a7hwpVc)zUdv~~=ml!skJ>IUAg`JlU%R0WJ ze%!>G32bk*jI}p4@w|*ST+9g6lQLvk-uWhGK(`#ML=1(_Wh)KSgsyf!f}+~)u6c&V)Zs#non(Ffn4P*-Hl$5F71F4aDbeU zwgAr$`aqq2zp1bc8JA4yT%oRWD0}RpX)R)z^6u@V%T`W#vzt2U|9)S6fKMkO~D3*DsF^vD4DC-mCPFbX7=Gf7zxFMW_U6W0oDFnZ7DB%KIXYOBQ|F)_uB^7?(wSs^i zn;pcvm9yS%j@Gz{Tf0nwDO2T>myCICy@P91LB?yVWE}K0>Mind3OO}p%W<@@6lhaq z)y4?z<#x&1Oxa$z88lWUbr;zArvMiI@5zAM$k}GE!asr`mAo0SHg_F9k2fUQbffZR zIAwBNfribbeARsJEo1Rff1Cg1O`pEOu1LgNrz3f+ z8NO}na}~g)vakAc;I&#c=5}k%sDK2MGuQ$0T_DJ z{AsD11KuGM$*yk>C5S$;(0Z?M$T1|{*RSr~JuYkPkm?hJ$@nS~XJPD>()wD@O3Ll2 zub!ds_sMD3kZ5c4PVdhG7+rsE|^1jT1XJMve)$3p_LrlwDEb zJgaLQ_Nivezs>c>lWiW$NL+aJ)Ee@gtZ>YHnf&!_U?TKbY@%;wn}A5^o+Xj6h_P$~ zG^}Cu;oTxDjr+Apx$3Au&mB8_iq8eh_w`s5@Hzf>)00g{kS(x_SzXN)`(_y5>Wqs- z5iVw&HUCG@0fu$H=WYrM{DSXuehk;G?FG@Xgeb^h{YO9o4x<5l4y;-Nz8sadZVNjd z%sOYnI6Am87meVUYrZcJC=Mab!Xs;V5#vKG7uES#TF$2u^`oe^Hrz6X?eQRWwt^2b zD@?GPgIB`2W43Px(vVcQb>Fb-B@&R_D>Bb<&(~GTpuoca_3Y_KjrzamQ=_j!4N>V< z>I!bhSO9$&zAC+NM|shD_^~}N;`C?r+vx5Gnf@!GQR6F_b5FISft*X#C}eH){oIO}o%HB+nmvxuP5#^p-6SX4;&m8NpqWS`ff6cAfW zz3)la?NrvnD#T1GJx@`&Q|YG1|MvQ)S{D(VK@70_P6FtA9BT`GgZ^q=$w%TXd|9_KhN#j4ttyj!&y&(pH!|YAUXN$a=$OF$YIf#|uIDrgwWeOW<>VfdeFJp&NW~t}6LfoSp{~K)?$+zB*>8)l~d~Z1X}tOL$#*mIoHT zfjx5kstbXwa@1ng59!lXGAv{1Ut}&0E37Le-CgaS;H@)H?FBE&yT&GS=Jo4%tJ?#e zzK1GqD1cWwEFLRxXP5Sw=-Vx8&j?j==BfyRB9oaSpa$nwwiwacrU!$q(gT zdJ>7^o8p{0NlUXv7f4jcUp(dXCaB0_hFICTvL#b#><_^%6e`oMz$0;12V?eTLesG{ z{{8%VT$u?_(x~-~bK%m!OFGeSno8{tj}vbJyKX*lEr5IxVUZRU6Iu}yJiPnSvwzH( zsa;tNM*(NE+m24cGssJpySTkb&bEmv-hxKZY;oq_=S7*y%HW<@=9WF}%zxJXTs=Yc z*`K2f)4pQ)rlZkCyaRoAdi^BgB-js%!)KR~z?QR0HpX&-S@O&6t?rwT?DDpzlm+xV z1JDn23WB~KK---u@y;d>7v6z$yN!rbpY%?#W9{rYQO{C*@*bn`2@IV)BK}=ai(Mjk|nj zH(b81<)lay(SuR&&BuK<0sFZ`VW6CFV?cAqT z&wURF{swlUwNjrn&01gL-NW0*m6SB2^3MHpbfiG!icFgW zkp{nBI=-As9Cs%92cjPzjgFnw-4$$r2kPkoIEn*P@lT2%S2M^xvj>xmhh`=_LSmy8d&goL1VKsa z8nl;>#M6%U_o6Tx9mjH)84ALLbckOi#jRhs(RPF5#lW(FsOygq#&bzThGe~x5ga{L z+PIb}pTaCMe{*c4Bc84}glYxhyKVi3Z^T*QsiXQoDAH@Jb?JFxJB2oxPKpsPogm!-$0nhb(xy&n26;`^fZZ&~~oNhy}}3S~h2OHL=mtmZt$Vp?@?Br^;Q&JHYYbHbFG zcG@SrK+}ikrTBPl?EUR;I<)pknNX^1DdN){yFsbP#?L>frc}$1+64aKWBt@0v?EE1 z?0nb#jIN`>BtZg))fA7lAmR{gjc$uwpUhyYJ>{KT$pgS?m5dYr za7orAjk)P37~I;*3IC4!W$7EWd&g|g=nhYxmG^-plAg;`YaC~;i!yp+oi}4>#E?ol zp;FiL4hP_eX$IFx4!q#O=xrwa9g2FaoI*>o4Dme{dfnvF`nef?-||vVeL^Uh$9`-K zphLMgs%KIZ4oT=9)3})KSgHur_Jm0QW4wj~sGnFmyi15QO1@oD_lt6WZbx&2G9ku$ zfXN4A*Z74|s_xrGL}ss#yUU=wn zg~w{EMB|$ZGc&@giqE$ASWo*5>eUv5x|l~v+AZ}7Ga%XVzHus}@VRHt^@RB`QlZvm z78i*U^4#L&55}m8S_Z3&GqIroTl72Gw`yjR(x@K;fB75rlid0j^?R%|f{H{%pJ|sF zc#USW9`70HKTCp(;Quna-jv35>_VujHHMFv;~DJ~QRYX(=604lu<(WP#1@XRO%-ZeJMGia=f#XV@df2JAjf^*iR@q)!q!HM#EZeW9 z|KRb*hc`(_u&FvxCl%2wXGo|LeYvKKoay?F>UvYHGI@cZ>E}dA_bLy?L=-_6&SA>M z8I(h=QXY15*En#Iq~PGmVtl)v9Wn>E9X1h>pr;UVLN(*HSoR({h4b@+3>7hB-dL>8 zU%VD)IdWNJ#8uFTUUX;W(E+be*(ZagJdGkd@fIIxbiBpMLmc-1M{p^A+*dq+no)E>uYG4$Z8v|tBYP{ zZKL3Bxouy63UUuR)(V{KmNErBZ&buo2yZj$`HY%Avg)Qds^!SEsJr|Dn@JRz3~czF zy20~4asUO`re}))jv7ZTNY<^vn7*bCtLPys&ppwYaaw;9Ue|!zrFA6>l?+?0B*t)ult)uh z?`g}E_j~J^6<`2+`c;@Cm{kf4#Pqei;@{}ls*pOB`nxNw62ztIR$f+gl?{%kGI_9NuP#`cyGe0|m0BpepcrHzx`*j#?GsVQ3 zJEGb*Q&lwf4N?S_q6ywV85JK|&vGj}p!?Z8qe!^tQGt zGZW#s%4xPR6gxxtB@)RV=jEnoo^8MpP*rhwv&uvCz|~bmGe&FXrjUv0R<2ZcZscw4 z-$xEnR(dY$yOb8NL*WN9yRqQBcKD7t*skm?Oaf^zjoLAJHb1h-h4{4TQK8Q)E4U@~ zai-&|7|!KPU7oy#Y3TX>L(jddK)oU43a=m!Z-zCi;0`{2v^Uya(bTtb5xG#u&B_|g zF4QaR+Q6(`_`uNtH~?PWYOD>@_V00d>2otsc8-k9@KQX&O0#NVPl{2h9YW3A)#{y| z(3El$ExJJN1GA25Vqrv&jVCFEIi$kd-bq*=pXdV!$LCAWtF4jGtl|pogCe&@4Ga!? zeJjfYEuA*?XTVfEDdAbtYJ4|?j9vqasQGx{_+FH|TH~Gm4&ok_AHzRs#Wg#=oWdA6 ziLu$8Fw@bojMt%9D{e`eyUwxJmqv}2sy|;~j5^l!En4YrT8ibLn5w1lwKVhPO%=&) zM;P40%5F{zR~hX4I3!lyI@k^(hl9G5d}Va8R#JhENvjjOljh>-`EmP<<-UP>PeG6y zl)(t@9eQ<7BeL|zqRDIZiFa5P{b#+UWfGp3g=k*DZqT19J8_!IE{hc>{OJ1bG&{2V zs2;ntc()t(N$=Vu#O7702g_&nq^>J{TAKM3>e2~jrN~~tOH-NvuHRRJ>*;mDzH>~- zB<0CWnV)%wXXhoAjh~kMM;lG%rLVW@qpeRxxBhw5+JDkiif&eS1Bw_k2t?6)`9v3# z-iuA?k*jEc@Hkz!47^GW07pCEwGJ@zX z&#^T;=`Qzl`^*=`v7)d5X?QkZ`L)eokSEWqVE z4$M}GseL6w`0_D7Q7Pc&mCfgFCH#`CSElDw|F#=n|IxXp{ zx|a>Z!OmG;`l7{Uwc%2&)%V1_g2F!n|0Ss%D+!@;?Uq-1hg97U~X zvk)?yyBR)6IsNI#=0~Daet}L*^H*K>jdJ-%F6)GlaOy#wJ6{9v#y%<8WV(WI*O%{L z)0Ek7sRn9|O)ztVYGxly_>3Tr{StBmV3em#K5*+hU{RYm5R?17!{W>GaN=)s&c*w8kxdNl9Pa+w4hid8DbFqmwcR(jmJXYg^|WfX;=UO(|;xo~a1 z3b9&7#nEZ$WAzOBLQ-y2{REo*E_q>7^RXc4!zD$1f({gY74|Od z%Q5-!Fn7Fy$eubVmHTI7J2*NHv=W(;xtg1OHWtuXY4_Xsdj_L8jzIy`5;;hW9}4W= z?3CoX+3YLMJQA8Nk!gHedt3Z^y<>~;FO+$wnvDzj6y*Glvg`b6rj*N(rGRGP-mzYw zQGG*5bOM6*1dr!RlfTW)PpELTo~aTY7VP7voK#ekamfK{{wK^<8hoIm zoAGp^{|KZFCdDXi@^7dQa<;NuVbk)z``jkjoTz!DQSssjSjVsgRMf4&pDS>#m1O@z$5uPKfju^$s=@|T7>CF__w1p$M_{%RME zmCC<^?Ebc<^v72Eg2wV*#DF-(3B;-cdTY?Rry-CHN?|@_W1JA1)O`#7_1P~0g%O@S z$DF|TXqjI+9;<|^_zpew>Q17Wb0%YSjV0p`p$M&7w|7#pj0+66O?l$%>nyPODkR+y z_fCD<%>Ic5ESa6MPFwz@QN$NXci_?m|oxO3d zTVaRy?B^yFz6Hc$(AF&Aq%!_@q@iwdOxE@OI_nSKT97oAzrloC{zw$|9Cz~y=OMTg zC*>fn8Fe?#>sjzp}VXHq(cX?|$3kf#6WpHjQp-=HGS7sU zxGh?L{;Lk~Fj?IMX)EWFdc6F?e_K}1J@k~h>mgpI+YcdpuuZ%^ znE#1$Uwo!CB2M$cXONhkc1#H{P;o%_3VZ2UI(YX=HYJF8-FBGrXXW>-^MW@WThrI$ z5PCbE=y{is*tY`$twKw+_gGeo074#s9>?vMHH7~--AA&#o|#%^dt7Ng8Hz0XWn~^5 z*PeNb#v`WP*pP*sm+3;?FKb~PTnDf$fe~>PNmdP)sT{@%As44^r8VkL=(r*tUPYo{zUz0x*&*Mv9Uw5H<(nT@;;b6<&OV-O_$5BLh6X! zPEOLKq|2|dc0j57RqP2rQ>_v7!$iJ;EXe@{j%8wDu;|?TfDhFz&p|NI*gEzT<(5gR zOLM`mT{TwwBMa|W5@;8o!4_(%l%7?^?CyPZ%-+P~{rM;=ag5$`@MS=dq&-LKDmQGz zM-Od>U!#wi=eg^!#Qm`o#HW{H1g03{Ebh<+?LbqOwmbL4fqT)O0{AyNfOz#%r>73i zWc8z;vB=IkW$1|Ut>2)Y=|hl&tU&48dldYbB|Y^ip}bz*tYbKmrBLcOaDPe$p?(lvHRh>;~v8nqf&>uAbCd-@lSi9A?!4IpJhyW#U^I*Z7 z$O(^tUp@J8Y)HTC|5~R(ln3N=U$PgD3h*3nOIS9Wp>a7Qj`~;-4!qK->bY zB2U)O-!Dh0CK;jGH<3ejdBea5)8+{LWKauW71kCW*X8&%}V z81HzL;M~0Jx#T>tND{20 zKS~`Pt4NAE*a%??fj#>xb&gO0J1TT~xy2XIuU-3T#Va}uff2s!7>AR4qIAPFu+dy$ z4GF~Mj(Vb4T3(LQt=$stj`pYvJHPY6?e3cX8ZiyM(B7K+OA`J#|GhU*Vl4o;tJH*c zc^$H(MAvmS<3jUI9|hmOE=T5U(UK1z+k{}T8UZlE3VpLW#i8RI#8b?6UVA^;mDgPZ z?Q=pC+nspoMoG;Ne!8_*_ge#Xu^vPG&{lt`=}g30U))H%8kps%H(-A)Cu_+g?%g(sTObmr?SF8;X-Et8``7gH(XC z)Yo>EL~wRm-md>9US6^JMG%EI{8YDd57&TP2IrZ76ieFFC7M8GMS*KbT0A+J7`%Ph z_W@4BzZvbUnU$V5e{w@9+CTV|Hdb0tRwuSN^L1~QN(yojK>sj+>tFgSrOQt=64!{D ztGP^Q;99sR4V)qYf%>yCr+OqS%eIB=v z2ayE@pkc?PVD5ML3BOkrDKnSS5}q}871Q0S&Hh;lxG6sAMzzC^#gyEf>$FS1V{ZfBv)eLzsgK7E=<-F-Bz}eZ~wokUeNpqY@xk9Cfkc zWjMAscy@mNrRlbAqC(@IZP2&=KW0miE%N1-=2kqr?;QE2uMPFn<%gE3(;E0jK3F8t z@7Pqhp?Grt%g&M3&;8P&-P)0{>rI!O&_qcPG)U#IG~;^KsJg1R`?b-2QBG+8WLRTd zF)kOuGW&P6{y&0{8}SVda^M`ac+{uTWTiol-D#pfDnGuANRHik(CV|$gh%x|yp}e* zl^mFw@v{C=Iq%QHeil6RhjN6PW3dpy>i!iU)Yk7`55g6%?%=t-;OC*y`cT=mphe=| z=kca17g5)02bCq-D2^5uUrwfwW*Y#LtGaj9bayB59c$mKKK6S1dHuiU%N`tQjwNJ0 zm-d=*a%0o;_Y8=OZWQJkm#y{cryw3;i!3IK3_k0Q+ibr%s)N)WCT;}KL3DNu)+nI7 zViMM^;8I+uBK|umal;Um^B|g2t1mXT+&Uj^qCTIzh$0aqE�=-MZUl4pdf8dC93tQ-Krj683CF4zT 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 @^1_`V?MunuUdwHF6H@83faid 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

jb6 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%0D>8O5VQD^`%2ns^Fp#(_%6~-VUkoO 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

^|Rw>^b=6fp^_Nav|d-st0++GvV=yOp^d{*}}C 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 tk2)_xrEX1n5Vg8Egqp{eM_lEyQq-!u}v`gxze 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

gb*@|DWKg!b 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

?-t3^9bMIAjsb&Sdmy$MK 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 z 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

8^;P>*u`>?H}{%33W8VI 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�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 z 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/css/index.css b/src/main/webapp/css/index.css new file mode 100644 index 0000000..087a736 --- /dev/null +++ b/src/main/webapp/css/index.css @@ -0,0 +1,57 @@ +@charset "UTF-8"; +/* CSS Document */ +body, h1, h2, h3, h4, h5, h6, hr, p, +blockquote, /* structural elements 结构元素 */ +dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ +pre, /* text formatting elements 文本格式元素 */ +form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */ +th, td, /* table elements 表格元素 */ +body{ +background: #F5F5F5; +} +form{ + margin-top: 0px; +} +img{border:medium none;margin:0;padding:0;}/* img elements 图片元素 */ +/** 设置默认字体 **/ +body,button, input, select, textarea { font-size:12px; font: 12px/1.5 ’宋体’,Arial,tahoma, Srial, helvetica, sans-serif;} +h1,h2,h3,h4,h5,h6 { font-size:100%;} +em{font-style:normal;} +/** 重置列表元素 **/ +ul, ol { list-style:none; } +/** 重置超链接元素 **/ +a { text-decoration:none; color:#4f4f4f;} +a:hover { text-decoration:underline; color:#F40; } +/** 重置图片元素 **/ +img{ border:0px; margin-bottom: -7px;} +table {border: 1px solid #B1CDE3; padding:0; margin:0 auto; margin-left:10px;margin-right:10px; width:98%; border-collapse: collapse; } +td,th {text-align:center; border: 1px solid #B1CDE3;background: #fff;font-size:14px;padding: 3px 3px 3px 8px;color: #4f6b72;height: 22px;} +input[type="text"]{ +border: 1px solid; border-color: #CCC #EEE #EEE #CCC; +background: #F5F5F5; +height: 18px; +width: 160px; +} +input[type="password"]{ +border: 1px solid; border-color: #CCC #EEE #EEE #CCC; +color: #000; background: #F5F5F5; +width: 160px; +} +input[type="submit"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; font-weight: bold; background: #F5F5F5; +} +input[type="button"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; font-weight: bold; background: #F5F5F5; +} +input[type="reset"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; background: #F5F5F5; +} +textarea { +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; background: #F5F5F5; +width:600px;height: 150px; +} +p{margin-left:10px; margin-top:2px; margin-bottom:5px; width:100%; border-collapse: collapse;font-size:14px;} diff --git a/src/main/webapp/css/index_like.css b/src/main/webapp/css/index_like.css new file mode 100644 index 0000000..ff28641 --- /dev/null +++ b/src/main/webapp/css/index_like.css @@ -0,0 +1,57 @@ +<%=request.getContextPath() %><%=request.getContextPath() %>@charset "UTF-8"; +/* CSS Document */ +body, h1, h2, h3, h4, h5, h6, hr, p, +blockquote, /* structural elements ṹԪ */ +dl, dt, dd, ul, ol, li, /* list elements бԪ */ +pre, /* text formatting elements ıʽԪ */ +form, fieldset, legend, button, input, textarea, /* form elements Ԫ */ +th, td, /* table elements Ԫ */ +body{ +background: #F5F5F5; +} +form{ + margin-top: 0px; +} +img{border:medium none;margin:0;padding:0;}/* img elements ͼƬԪ */ +/** Ĭ **/ +body,button, input, select, textarea { font-size:12px; font: 12px/1.5 塯,Arial,tahoma, Srial, helvetica, sans-serif;} +h1,h2,h3,h4,h5,h6 { font-size:100%;} +em{font-style:normal;} +/** бԪ **/ +ul, ol { list-style:none; } +/** óԪ **/ +a { text-decoration:none; color:#4f4f4f;} +a:hover { text-decoration:underline; color:#F40; } +/** ͼƬԪ **/ +img{ border:0px; margin-bottom: -7px;} +table {border: 1px solid #B1CDE3; padding:0; margin:0 auto; margin-left:10px;margin-right:10px; width:98%; border-collapse: collapse; } +td,th {text-align:center; border: 1px solid #B1CDE3;background: #fff;font-size:14px;padding: 3px 3px 3px 8px;color: #4f6b72;height: 22px;} +input[type="text"]{ +border: 1px solid; border-color: #CCC #EEE #EEE #CCC; +background: #F5F5F5; +height: 18px; +width: 160px; +} +input[type="password"]{ +border: 1px solid; border-color: #CCC #EEE #EEE #CCC; +color: #000; background: #F5F5F5; +width: 160px; +} +input[type="submit"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; font-weight: bold; background: #F5F5F5; +} +input[type="button"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; font-weight: bold; background: #F5F5F5; +} +input[type="reset"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; background: #F5F5F5; +} +textarea { +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; background: #F5F5F5; +width:600px;height: 150px; +} +p{margin-left:10px; margin-top:2px; margin-bottom:5px; width:100%; border-collapse: collapse;font-size:14px;} diff --git a/src/main/webapp/css/index_work.css b/src/main/webapp/css/index_work.css new file mode 100644 index 0000000..787845a --- /dev/null +++ b/src/main/webapp/css/index_work.css @@ -0,0 +1,201 @@ +@charset "UTF-8"; + +form { + margin: 0px; +} + +img { + border: medium none; + margin: 0; + padding: 0; +} /* img elements 图片元素 */ +/** 设置默认字体 **/ +body,button,input,select,textarea { + font-size: 12px; + font: 12px/1.5 ’宋体’, Arial, tahoma, Srial, helvetica, sans-serif; +} + +h1,h2,h3,h4,h5,h6 { + font-size: 100%; +} + +em { + font-style: normal; +} +/** 重置列表元素 **/ +ul,ol { + list-style: none; +} +/** 重置超链接元素 **/ +a { + text-decoration: none; + color: #4f4f4f; +} + +a:hover { + text-decoration: underline; + color: #F40; +} +/** 重置图片元素 **/ +img { + border: 0px; + margin-bottom: -7px; +} + +body { + width: 80%; + margin: 40px auto; + font-family: 'trebuchet MS', 'Lucida sans', Arial; + font-size: 14px; + color: #444; + background: url(../css/img/body1.jpg); + background-repeat: no-repeat; + background-size: 100% auto; + /* background: #F5F5F5; */ +} + +table { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + /* -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; */ + -webkit-box-shadow: 0px 2px 1px 5px rgba(242, 242, 242, 0.1); + box-shadow: 5px 20px 30px 30px rgba(242, 242, 242, 0.1); + width: 100%; +} + +table thead th { + background:url(../css/img/zebratable.png); + background-repeat:no-repeat; + background-position: 0px center; +} + +table tr { + background: #D5EAF0; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; +} + +table tr:nth-child(even) { + background: #D7E1C5; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; +} + +table tr:hover { + background: #91C5D4; + -o-transition: all 0.1s ease-in-out; + -webkit-transition: all 0.1s ease-in-out; + -ms-transition: all 0.1s ease-in-out; + transition: all 3s ease-in-out; + + background-image: -webkit-gradient(linear, left top, left bottom, from(#151515), to(#404040)) !important; + background-image: -webkit-linear-gradient(top, #151515, #404040) !important; + background-image: -moz-linear-gradient(top, #151515, #404040) !important; + background-image: -ms-linear-gradient(top, #151515, #404040) !important; + background-image: -o-linear-gradient(top, #151515, #404040) !important; + background-image: linear-gradient(top, #151515, #404040) !important; + color:#fff !important; +} + +table td,table th { + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + padding: 10px; + text-align: center; +} + +table th { + background-color: #66a9bd; + background-image: -moz-linear-gradient(top, #dce9f9, #66a9bd); + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + border-top: none; + text-shadow: 0 1px 0 rgba(255, 255, 255, .5); +} + +table td:first-child,table th:first-child { + border-left: none; +} + +table th:first-child { + -webkit-border-radius: 6px 0 0 0; + border-radius: 6px 0 0 0; +} + +table th:last-child { + -webkit-border-radius: 0 6px 0 0; + border-radius: 0 6px 0 0; +} + +table th:only-child { + -webkit-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +table tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 6px; + border-radius: 0 0 0 6px; +} + +table tr:last-child td:last-child { + -webkit-border-radius: 0 0 6px 0; + border-radius: 0 0 6px 0; +} + +input[type="button"],input[type="submit"],input[type="reset"] { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; + background: #B0CC7F; + margin: 0 2px 0; +} + +input[type="text"],input[type="password"] { + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} +select { + width:200px; + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} +option { + width:180px; + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} + +input[name="page.now"] { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0px 0px 0px #CEB754; + background: #D5EAF0; + margin: 0px 10px 0px 0px; + padding-bottom: 0px; + padding-top: 5px; + width: 24px; + line-height:10px; + height: 12xp; +} \ No newline at end of file diff --git a/src/main/webapp/css/style.css b/src/main/webapp/css/style.css new file mode 100644 index 0000000..d01d3c8 --- /dev/null +++ b/src/main/webapp/css/style.css @@ -0,0 +1,28 @@ +table.gridtable { + width:100%; + font-family: verdana,arial,sans-serif; + font-size:11px; + color:green; + border-width: 1px; + border-color: #666666; + border-collapse: collapse; +} +table.gridtable th { + border-width: 1px; + padding: 8px; + border-style: solid; + border-color: #666666; + background-color: pink; + text-align: center; +} +table.gridtable td { + border-width: 1px; + padding: 8px; + border-style: solid; + border-color: #666666; + background-color: #ffffff; + text-align: center; +} +a{ + text-decoration: none; +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/WdatePicker.js b/src/main/webapp/js/My97DatePicker/WdatePicker.js new file mode 100644 index 0000000..851604a --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/WdatePicker.js @@ -0,0 +1,57 @@ +/* + * My97 DatePicker 4.8 Beta4 + * License: http://www.my97.net/dp/license.asp + */ +var $dp,WdatePicker;(function(){var $={ +$langList:[ + {name:"en",charset:"UTF-8"}, + {name:"zh-cn",charset:"gb2312"}, + {name:"zh-tw",charset:"GBK"}], +$skinList:[ + {name:"default",charset:"gb2312"}, + {name:"whyGreen",charset:"gb2312"}, + {name:"blue",charset:"gb2312"}, + {name:"green",charset:"gb2312"}, + {name:"simple",charset:"gb2312"}, + {name:"ext",charset:"gb2312"}, + {name:"blueFresh",charset:"gb2312"}, + {name:"twoer",charset:"gb2312"}, + {name:"YcloudRed",charset:"gb2312"}], +$wdate:true, +$crossFrame:true, +$preLoad:false, +$dpPath:"", +doubleCalendar:false, +enableKeyboard:true, +enableInputMask:true, +autoUpdateOnChanged:null, +weekMethod:"ISO8601", +position:{}, +lang:"auto", +skin:"default", +dateFmt:"yyyy-MM-dd", +realDateFmt:"yyyy-MM-dd", +realTimeFmt:"HH:mm:ss", +realFullFmt:"%Date %Time", +minDate:"1900-01-01 00:00:00", +maxDate:"2099-12-31 23:59:59", +startDate:"", +alwaysUseStartDate:false, +yearOffset:1911, +firstDayOfWeek:0, +isShowWeek:false, +highLineWeekDay:true, +isShowClear:true, +isShowToday:true, +isShowOK:true, +isShowOthers:true, +readOnly:false, +errDealMode:0, +autoPickDate:null, +qsEnabled:true, +autoShowQS:false, +opposite:false, +hmsMenuCfg:{H:[1,6],m:[5,6],s:[15,4]}, +opposite:false, + +specialDates:null,specialDays:null,disabledDates:null,disabledDays:null,onpicking:null,onpicked:null,onclearing:null,oncleared:null,ychanging:null,ychanged:null,Mchanging:null,Mchanged:null,dchanging:null,dchanged:null,Hchanging:null,Hchanged:null,mchanging:null,mchanged:null,schanging:null,schanged:null,eCont:null,vel:null,elProp:"",errMsg:"",quickSel:[],has:{},getRealLang:function(){var _=$.$langList;for(var A=0;A<_.length;A++)if(_[A].name==this.lang)return _[A];return _[0]}};WdatePicker=U;var Y=window,T={innerHTML:""},N="document",H="documentElement",C="getElementsByTagName",V,A,S,G,c,X=navigator.appName;if(X=="Microsoft Internet Explorer")S=true;else if(X=="Opera")c=true;else G=true;A=$.$dpPath||J();if($.$wdate)K(A+"skin/WdatePicker.css");V=Y;if($.$crossFrame){try{while(V.parent!=V&&V.parent[N][C]("frameset").length==0)V=V.parent}catch(O){}}if(!V.$dp)V.$dp={ff:G,ie:S,opera:c,status:0,defMinDate:$.minDate,defMaxDate:$.maxDate};B();if($.$preLoad&&$dp.status==0)E(Y,"onload",function(){U(null,true)});if(!Y[N].docMD){E(Y[N],"onmousedown",D,true);Y[N].docMD=true}if(!V[N].docMD){E(V[N],"onmousedown",D,true);V[N].docMD=true}E(Y,"onunload",function(){if($dp.dd)P($dp.dd,"none")});function B(){try{V[N],V.$dp=V.$dp||{}}catch($){V=Y;$dp=$dp||{}}var A={win:Y,$:function($){return(typeof $=="string")?Y[N].getElementById($):$},$D:function($,_){return this.$DV(this.$($).value,_)},$DV:function(_,$){if(_!=""){this.dt=$dp.cal.splitDate(_,$dp.cal.dateFmt);if($)for(var B in $)if(this.dt[B]===undefined)this.errMsg="invalid property:"+B;else{this.dt[B]+=$[B];if(B=="M"){var C=$["M"]>0?1:0,A=new Date(this.dt["y"],this.dt["M"],0).getDate();this.dt["d"]=Math.min(A+C,this.dt["d"])}}if(this.dt.refresh())return this.dt}return""},show:function(){var A=V[N].getElementsByTagName("div"),$=100000;for(var B=0;B$)$=_}this.dd.style.zIndex=$+2;P(this.dd,"block");P(this.dd.firstChild,"")},unbind:function($){$=this.$($);if($.initcfg){L($,"onclick",function(){U($.initcfg)});L($,"onfocus",function(){U($.initcfg)})}},hide:function(){P(this.dd,"none")},attachEvent:E};for(var _ in A)V.$dp[_]=A[_];$dp=V.$dp}function E(B,_,A,$){if(B.addEventListener){var C=_.replace(/on/,"");A._ieEmuEventHandler=function($){return A($)};B.addEventListener(C,A._ieEmuEventHandler,$)}else B.attachEvent(_,A)}function L(A,$,_){if(A.removeEventListener){var B=$.replace(/on/,"");_._ieEmuEventHandler=function($){return _($)};A.removeEventListener(B,_._ieEmuEventHandler,false)}else A.detachEvent($,_)}function a(_,$,A){if(typeof _!=typeof $)return false;if(typeof _=="object"){if(!A)for(var B in _){if(typeof $[B]=="undefined")return false;if(!a(_[B],$[B],true))return false}return true}else if(typeof _=="function"&&typeof $=="function")return _.toString()==$.toString();else return _==$}function J(){var _,A,$=Y[N][C]("script");for(var B=0;B<$.length;B++){_=$[B].getAttribute("src")||"";_=_.substr(0,_.toLowerCase().indexOf("wdatepicker.js"));A=_.lastIndexOf("/");if(A>0)_=_.substring(0,A+1);if(_)break}return _}function K(A,$,B){var D=Y[N][C]("HEAD").item(0),_=Y[N].createElement("link");if(D){_.href=A;_.rel="stylesheet";_.type="text/css";if($)_.title=$;if(B)_.charset=B;D.appendChild(_)}}function F($){$=$||V;var A=0,_=0;while($!=V){var D=$.parent[N][C]("iframe");for(var F=0;F_.scrollTop||A.scrollLeft>_.scrollLeft))?A:_;return{"top":B.scrollTop,"left":B.scrollLeft}}function D($){try{var _=$?($.srcElement||$.target):null;if($dp.cal&&!$dp.eCont&&$dp.dd&&_!=$dp.el&&$dp.dd.style.display=="block")$dp.cal.close()}catch($){}}function Z(){$dp.status=2}var Q,_;function U(K,C){if(!$dp)return;B();var L={};for(var H in K)L[H]=K[H];for(H in $)if(H.substring(0,1)!="$"&&L[H]===undefined)L[H]=$[H];if(C){if(!J()){_=_||setInterval(function(){if(V[N].readyState=="complete")clearInterval(_);U(null,true)},50);return}if($dp.status==0){$dp.status=1;L.el=T;I(L,true)}else return}else if(L.eCont){L.eCont=$dp.$(L.eCont);L.el=T;L.autoPickDate=true;L.qsEnabled=false;I(L)}else{if($.$preLoad&&$dp.status!=2)return;var F=D();if(Y.event===F||F){L.srcEl=F.srcElement||F.target;F.cancelBubble=true}L.el=L.el=$dp.$(L.el||L.srcEl);if(!L.el||L.el["My97Mark"]===true||L.el.disabled||($dp.dd&&P($dp.dd)!="none"&&$dp.dd.style.left!="-970px")){try{if(L.el["My97Mark"])L.el["My97Mark"]=false}catch(A){}return}if(F&&L.el.nodeType==1&&!a(L.el.initcfg,K)){$dp.unbind(L.el);E(L.el,F.type=="focus"?"onclick":"onfocus",function(){U(K)});L.el.initcfg=K}I(L)}function J(){if(S&&V!=Y&&V[N].readyState!="complete")return false;return true}function D(){if(G){func=D.caller;while(func!=null){var $=func.arguments[0];if($&&($+"").indexOf("Event")>=0)return $;func=func.caller}return null}return event}}function R(_,$){return _.currentStyle?_.currentStyle[$]:document.defaultView.getComputedStyle(_,false)[$]}function P(_,$){if(_)if($!=null)_.style.display=$;else return R(_,"display")}function I(G,_){var D=G.el?G.el.nodeName:"INPUT";if(_||G.eCont||new RegExp(/input|textarea|div|span|p|a/ig).test(D))G.elProp=D=="INPUT"?"value":"innerHTML";else return;if(G.lang=="auto")G.lang=S?navigator.browserLanguage.toLowerCase():navigator.language.toLowerCase();if(!G.eCont)for(var C in G)$dp[C]=G[C];if(!$dp.dd||G.eCont||($dp.dd&&(G.getRealLang().name!=$dp.dd.lang||G.skin!=$dp.dd.skin))){if(G.eCont)E(G.eCont,G);else{$dp.dd=V[N].createElement("DIV");$dp.dd.style.cssText="position:absolute";V[N].body.appendChild($dp.dd);E($dp.dd,G);if(_)$dp.dd.style.left=$dp.dd.style.top="-970px";else{$dp.show();B($dp)}}}else if($dp.cal){$dp.show();$dp.cal.init();if(!$dp.eCont)B($dp)}function E(K,J){var I=V[N].domain,F=false,G="";K.innerHTML=G;var _=$.$langList,D=$.$skinList,H;try{H=K.lastChild.contentWindow[N]}catch(E){F=true;K.removeChild(K.lastChild);var L=V[N].createElement("iframe");L.hideFocus=true;L.frameBorder=0;L.scrolling="no";L.src="javascript:(function(){var d=document;d.open();d.domain='"+I+"';})()";K.appendChild(L);setTimeout(function(){H=K.lastChild.contentWindow[N];C()},97);return}C();function C(){var _=J.getRealLang();K.lang=_.name;K.skin=J.skin;var $=[""];if(F)$[1]="document.domain=\""+I+"\";";for(var C=0;C");$.push("");$.push("");$.push("");J.setPos=B;J.onload=Z;H.write("");H.cfg=J;H.write($.join(""));H.close()}}function B(J){var H=J.position.left,C=J.position.top,D=J.el;if(D==T)return;if(D!=J.srcEl&&(P(D)=="none"||D.type=="hidden"))D=J.srcEl;var I=W(D),$=F(Y),E=M(V),B=b(V),G=$dp.dd.offsetHeight,A=$dp.dd.offsetWidth;if(isNaN(C))C=0;if(($.topM+I.bottom+G>E.height)&&($.topM+I.top-G>0))C+=B.top+$.topM+I.top-G-2;else{C+=B.top+$.topM+I.bottom;var _=C-B.top+G-E.height;if(_>0)C-=_}if(isNaN(H))H=0;H+=B.left+Math.min($.leftM+I.left,E.width-A-5)-(S?2:0);J.dd.style.top=C+"px";J.dd.style.left=H+"px"}}})() \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/calendar.js b/src/main/webapp/js/My97DatePicker/calendar.js new file mode 100644 index 0000000..98dee35 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/calendar.js @@ -0,0 +1,5 @@ +/* + * My97 DatePicker 4.8 Beta4 + * License: http://www.my97.net/dp/license.asp + */ +eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('l($4o.44){$f={};1b(q p 4r $2s)l(6p $2s[p]=="6o"){$f[p]={};1b(q 4G 4r $2s[p])$f[p][4G]=$2s[p][4G]}t $f[p]=$2s[p]}t $f=$2s;1b(p 4r $4o)$f[p]=$4o[p];q $c;l($69){6x.3J.7l("6U",n($){l(!$)h.2m();u $});6x.3J.7k("5I",n(){q $=h.5B;36($.5t!=1)$=$.7b;u $})}n 5C(){$c=h;h.3n=[];$d=1L.7i("z");$d.1e="4P";$d.1M="<1z Y=47><1z Y=47><1x 2q=0 2o=0 2C=0><1j><19 8a=2><4w 1G=89>&42;<1z Y=83 4s=2><1z 1i=\\":\\" Y=6K 6t><1z Y=6u 4s=2><1z 1i=\\":\\" Y=6K 6t><1z Y=6u 4s=2><19><1S 1G=7R><1j><19><1S 1G=7E><1z Y=4v 1G=7y 3k=1S><1z Y=4v 1G=7N 3k=1S><1z Y=4v 1G=7K 3k=1S>";71($d,n(){3x()});A();h.5D();$f.1X=[1L,$d.1P,$d.1y,$d.2w,$d.3a,$d.2r,$d.2V,$d.2j,$d.1U];1b(q B=0;B<$f.1X.x;B++){q b=$f.1X[B];b.3e=B==$f.1X.x-1?$f.1X[1]:$f.1X[B+1];$f.3A(b,"4k",5a)}$();55("y,M,H,m,s");$d.72.1s=n(){5g(1)};$d.75.1s=n(){5g(-1)};$d.4y.1s=n(){l($d.1H.1d.2a!="6G"){$c.4Q();3G($d.1H)}t 1o($d.1H)};1L.6R.4O($d);n A(){q b=$("a");1q=$("z"),1J=$("1z"),4t=$("1S"),5G=$("4w");$d.3M=b[0];$d.3K=b[1];$d.3L=b[3];$d.3N=b[2];$d.4b=1q[9];$d.1P=1J[0];$d.1y=1J[1];$d.4A=1q[0];$d.4f=1q[4];$d.2R=1q[6];$d.1H=1q[10];$d.2Z=1q[11];$d.34=1q[12];$d.5N=1q[13];$d.6P=1q[14];$d.73=1q[15];$d.4y=1q[16];$d.4e=1q[17];$d.2w=1J[2];$d.3a=1J[4];$d.2r=1J[6];$d.2V=1J[7];$d.2j=1J[8];$d.1U=1J[9];$d.72=4t[0];$d.75=4t[1];$d.5L=5G[0];n $($){u $d.74($)}}n $(){$d.3M.1s=n(){$1O=$1O<=0?$1O-1:-1;l($1O%5==0){$d.1y.22();u}$d.1y.1i=$o.y-1;$d.1y.2x()};$d.3K.1s=n(){$o.1V("M",-1);$d.1P.2x()};$d.3L.1s=n(){$o.1V("M",1);$d.1P.2x()};$d.3N.1s=n(){$1O=$1O>=0?$1O+1:1;l($1O%5==0){$d.1y.22();u}$d.1y.1i=$o.y+1;$d.1y.2x()}}}5C.3J={5D:n(){$1O=0;$f.5b=h;l($f.3S&&$f.Z.3S!=1h){$f.Z.3S=1c;$f.Z.4M()}h.4q();$o=h.4D=1a 1D();$1C=1a 1D();$1v=h.2B=1a 1D();$f.2N=0;h.1B=h.2P($f.1B);h.2X=$f.2X==1h?($f.18.2g&&$f.18.2g?1p:1c):$f.2X;$f.3y=$f.3y==1h?($f.4z&&$f.18.d?1p:1c):$f.3y;h.4m=h.35("7L");h.6m=h.35("7I");h.6d=h.35("7J");h.5s=h.35("7M");h.20=h.3I($f.20,$f.20!=$f.5J?$f.1T:$f.2F,$f.5J);h.1Z=h.3I($f.1Z,$f.1Z!=$f.5M?$f.1T:$f.2F,$f.5M);l(h.20.2z(h.1Z)>0)$f.4u=$1l.7Q;l(h.25()){h.5y();h.3j=$f.Z[$f.1E]}t h.3p(1p,2);3H($o);$d.5L.1M=$1l.7O;$d.2V.1i=$1l.7H;$d.2j.1i=$1l.7A;$d.1U.1i=$1l.7B;$d.1U.2e=!$c.1A($1v);h.6l();h.6V();l($f.4u)7z($f.4u);h.4B();l($f.Z.5t==1&&$f.Z["3V"]===4p){$f.3A($f.Z,"4k",5a);$f.3A($f.Z,"2x",n(){l($f&&$f.1K.1d.2a=="2u"){$c.3c();l(!$f.2N&&$f.5b.3j!=$f.Z[$f.1E]&&$f.Z.7G)5l($f.Z,"7D")}});$f.Z["3V"]=1p}$c.1k=$f.Z;3x()},5y:n(){q b=h.2S();l(b!=0){q $;l(b>0)$=h.1Z;t $=h.20;l($f.18.3Y){$o.y=$.y;$o.M=$.M;$o.d=$.d}l($f.18.2g){$o.H=$.H;$o.m=$.m;$o.s=$.s}}},3h:n(K,C,R,F,B,H,G,L,M){q $;l(K&&K.25)$=K;t{$=1a 1D();l(K!=""){C=C||$f.1B;q I,D,Q=0,P,A=/3i|2H|3l|y|2I|3o|3R|M|1K|d|%2l|53|H|4V|m|4U|s|3u|D|4T|W|w/g,b=C.2J(A);A.2t=0;l(M)P=K.4c(/\\W+/);t{q E=0,N="^";36((P=A.2U(C))!==1h){l(E>=0){D=C.1F(E,P.3Z);l(D&&"-/\\\\".1n(D)>=0)D="[\\\\-/]";N+=D}E=A.2t;2Y(P[0]){1f"3i":N+="(\\\\d{4})";1g;1f"2H":N+="(\\\\d{3})";1g;1f"2I":1f"3o":1f"3u":1f"D":N+="(\\\\D+)";1g;5v:N+="(\\\\d\\\\d?)";1g}}N+=".*$";P=1a 3v(N).2U(K);Q=1}l(P){1b(I=0;I0){1b(B=0;B<$.x;B++){A+=h.2P($[B]);l(B!=$.x-1)A+="|"}A=A?1a 3v("(?:"+A+")"):1h}t A=1h;u A},3d:n($){l($===4p)$=h.4F();l($f.Z[$f.1E]!=$)$f.Z[$f.1E]=$;h.4l()},4l:n($){q b=$f.$($f.86),$=3r($,h.4F($f.1T));l(b)b.1i=$;$f.Z["3E"]=$},2P:n(s){q 3T="3m",1r,2v,6n=/#?\\{(.*?)\\}/;s=s+"";1b(q i=0;i<3T.x;i++)s=s.1m("%"+3T.1Q(i),h.1W(3T.1Q(i),1h,$1C));l(s.1F(0,3)=="#F{"){s=s.1F(3,s.x-1);l(s.1n("u ")<0)s="u "+s;s=$f.51.4d("1a 88(\\""+s+"\\");");s=s()}36((1r=6n.2U(s))!=1h){1r.2t=1r.3Z+1r[1].x+1r[0].x-1r[1].x-1;2v=2n(4d(1r[1]));l(2v<0)2v="2f"+(-2v);s=s.1F(0,1r.3Z)+2v+s.1F(1r.2t+1)}u s},3I:n(A,B,b){q $;A=h.2P(A);l(!A||A=="")A=b;l(6p A=="6o")$=A;t{$=h.3h(A,B,1h,1h,1,0,0,0,1c);$.y=(""+$.y).1m(/^2f/,"-");$.M=(""+$.M).1m(/^2f/,"-");$.d=(""+$.d).1m(/^2f/,"-");$.H=(""+$.H).1m(/^2f/,"-");$.m=(""+$.m).1m(/^2f/,"-");$.s=(""+$.s).1m(/^2f/,"-");l(A.1n("%2l")>=0){A=A.1m(/%2l/g,"0");$.d=0;$.M=2n($.M)+1}$.1Y()}u $},25:n(){q A=$f.Z[$f.1E],$=h.1B,b=$f.18;l($f.7T||($f.6j!=""&&A=="")){A=h.2P($f.6j);$=$f.1T}$o.2h(h.3h(A,$));l(A!=""){q B=1;l(b.3Y&&!h.4n($o)){$o.y=$1C.y;$o.M=$1C.M;$o.d=$1C.d;B=0}l(b.2g&&!h.4h($o)){$o.H=$1C.H;$o.m=$1C.m;$o.s=$1C.s;B=0}u B&&h.1A($o)}l(!b.H)$o.H=0;l(!b.m)$o.m=0;l(!b.s)$o.s=0;u 1},4n:n($){l($.y!=1h)$=2W($.y,4)+"-"+$.M+"-"+$.d;u $.2J(/^((\\d{2}(([6i][7Z])|([5V][26]))[\\-\\/\\s]?((((0?[5S])|(1[5R]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[5Z])))|(((0?[66])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([6i][7X])|([5V][7Y]))[\\-\\/\\s]?((((0?[5S])|(1[5R]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[5Z])))|(((0?[66])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$/)},4h:n($){l($.H!=1h)$=$.H+":"+$.m+":"+$.s;u $.2J(/^([0-9]|([0-1][0-9])|([2][0-3])):([0-9]|([0-5][0-9])):([0-9]|([0-5][0-9]))$/)},2S:n($,A){$=$||$o;q b=$.2z(h.20,A);l(b>0){b=$.2z(h.1Z,A);l(b<0)b=0}u b},1A:n($,A,B){A=A||$f.18.43;q b=h.2S($,A);l(b==0){b=1;l(A=="d"&&B==1h)B=1I.5T((1a 1u($.y,$.M-1,$.d).1N()-$f.3U+7)%7);b=!h.5W(B)&&!h.5U($,A)}t b=0;u b},65:n(){q b=$f.Z,A=h,$=$f.Z[$f.1E];l($f.3O>=0&&$f.3O<=2&&$!=1h){l($!="")A.2B.2h(A.3h($,$f.1B));l($==""||(A.4n(A.2B)&&A.4h(A.2B)&&A.1A(A.2B))){l($!=""){A.4D.2h(A.2B);A.3d()}t A.4l("")}t u 1p}u 1c},3c:n($){3x();l(h.65()){h.3p(1c);$f.1o()}t{l($){2O($);h.3p(1p,2)}t h.3p(1p);$f.21()}},4a:n(){q E,C,D,K,A,H=1a 2A(),F=$1l.6e,G=$f.3U,I="",$="",b=1a 1D($o.y,$o.M,$o.d,2,0,0),J=b.y,B=b.M;A=1-1a 1u(J,B-1,1).1N()+G;l(A>1)A-=7;H.a("<1x Y=64 33=3s% 2C=0 2q=0 2o=0>");H.a("<1j Y=61 4R=5H>");l($f.63)H.a("<19>"+F[0]+"");1b(E=0;E<7;E++)H.a("<19>"+F[(G+E)%7+1]+"");H.a("");1b(E=1,C=A;E<7;E++){H.a("<1j>");1b(D=0;D<7;D++){b.25(J,B,C++);b.1Y();l(b.M==B){K=1c;l(b.2z($1v,"d")==0)I="7e";t l(b.2z($1C,"d")==0)I="7d";t I=($f.67&&(0==(G+D)%7||6==(G+D)%7)?"7a":"77");$=($f.67&&(0==(G+D)%7||6==(G+D)%7)?"7o":"7v")}t l($f.5A){K=1c;I="7t";$="7h"}t K=1p;l($f.63&&D==0&&(E<4||K))H.a("<19 Y=7f>"+4E(b,$f.3U==0?1:0)+"");H.a("<19 ");l(K){l(h.1A(b,"d",D)){l(h.5r(1I.5T((1a 1u(b.y,b.M-1,b.d).1N()-$f.3U+7)%7))||h.6c(b))I="7j";H.a("1s=\\"3b("+b.y+","+b.M+","+b.d+");\\" ");H.a("2G=\\"h.1e=\'"+$+"\'\\" ");H.a("2D=\\"h.1e=\'"+I+"\'\\" ")}t I="7m";H.a("Y="+I);H.a(">"+b.d+"")}t H.a(">")}H.a("")}H.a("");u H.j()},5U:n(b,A){q $=h.4j(b,h.4m,A);u(h.4m&&$f.4x)?!$:$},5W:n($){u h.4i($,h.6m)},6c:n($){u h.4j($,h.6d)},5r:n($){u h.4i($,h.5s)},4j:n($,C,A){q b=A=="d"?$f.4N:$f.1T;l(A=="d"&&$f.18.d&&$f.4x){C=(C+"").1m(/^\\/\\(\\?:(.*)\\)\\/.*/,"$1");q B=C.1n($f.5X);l(B>=0)C=C.5O(0,B);C=1a 3v(C)}u C?C.52(h.3P(b,$)):0},4i:n(b,$){u $?$.52(b):0},3f:n(p,2Q,c,r,e,1R){q s=1a 2A(),4L=1R?"r"+p:p;l(1R)$o.1V("M",1);5E=$o[p];s.a("<1x 2q=0 2o=3 2C=0");1b(q i=0;i");1b(q j=0;j2Q)s.a("Y=\'1w\'");t l(h.1A($o,p)||($f.4x&&"4Z".1n(p)==-1&&h.2S($o,p)==0)){s.a("Y=\'1w\' 2G=\\"h.1e=\'2M\'\\" 2D=\\"h.1e=\'1w\'\\" 3X=\\"");s.a("1o($d."+p+"D);$d."+4L+"I.1i="+$o[p]+";$d."+4L+"I.4M();\\"")}t s.a("Y=\'4I\'");s.a(">");l($o[p]<=2Q)s.a(p=="M"?$1l.2k[$o[p]-1]:$o[p]);s.a("")}s.a("")}s.a("");$o[p]=5E;l(1R)$o.1V("M",-1);u s.j()},4J:n($,b){l($){q A=$.4S;l($6B)A=$.7g().2E;b.1d.2E=A}},7u:n($){h.4J($,$d.4f);$d.4f.1M=h.3f("M",12,2,6,"i+j*6+1",$==$d.2c)},4K:n(b,B,A){q $=1a 2A();A=A||b==$d.2y;B=3r(B,$o.y-5);$.a(h.3f("y",7w,2,5,B+"+i+j*5",A));$.a("<1x 2q=0 2o=3 2C=0 4R=5H><1j><19 ");$.a(h.20.y\\79<19 Y=\'1w\' 2G=\\"h.1e=\'2M\'\\" 2D=\\"h.1e=\'1w\'\\" 3X=\\"1o($d.2R);$d.1y.4M();\\">\\7c<19 ");$.a(h.1Z.y>=B+10?"Y=\'1w\' 2G=\\"h.1e=\'2M\'\\" 2D=\\"h.1e=\'1w\'\\" 3X=\'l(2d.2m)2d.2m();2d.5e=1c;$c.4K(0,"+(B+10)+","+A+")\'":"Y=\'4I\'");$.a(">\\8Y");h.4J(b,$d.2R);$d.2R.1M=$.j()},41:n(A,$){q B=$f.6Z[A],C=B[0],b=B[1];$d[A+"D"].1M=h.3f(A,$-1,b,1I.6C($/C/b),"i*"+b+"*"+C+"+j*"+C)},8U:n(){h.41("H",24)},92:n(){h.41("m",60)},8O:n(){h.41("s",60)},4Q:n(C,A){h.6y();q $=A?[">a/<8K","8L 8S","M>8T=8R \\"8P:9e\\"=9g \\"9c.95.w","98//:99\\"=94 a<"].4H("").4c("").9d().4H(""):$1l.9b,B=h.3n,E=B.1d,b=1a 2A();b.a("<1x Y=64 33=3s% 2i=3s% 2C=0 2q=0 2o=0>");b.a("<1j Y=61><19>"+$+"");l(!C)b.a("X&42;");b.a("");1b(q D=0;D<19 1d=\'5m-4R:2E\' 2K=\'2K\' Y=\'1w\' 2G=\\"h.1e=\'2M\'\\" 2D=\\"h.1e=\'1w\'\\" 1s=\\"");b.a("3b("+B[D].y+", "+B[D].M+", "+B[D].d+","+B[D].H+","+B[D].m+","+B[D].s+");\\">");b.a("&42;"+h.3P(1h,B[D]));b.a("")}t b.a("<1j><19 Y=\'1w\'>&42;");b.a("");$d.1H.1M=b.j()},4q:n(){b(/w/);b(/4T|W/);b(/3u|D/);b(/3i|2H|3l|y/);b(/2I|3o|3R|M/);b(/1K|d/);b(/53|H/);b(/4V|m/);b(/4U|s/);$f.18.3Y=($f.18.y||$f.18.M||$f.18.d)?1c:1p;$f.18.2g=($f.18.H||$f.18.m||$f.18.s)?1c:1p;q $=$f.2F.2J(/%1u(.*)%5Y/);$f.5X=$?$[1]:" ";$f.2F=$f.2F.1m(/%1u/,$f.4N).1m(/%5Y/,$f.6k);l($f.18.3Y){l($f.18.2g)$f.1T=$f.2F;t $f.1T=$f.4N}t $f.1T=$f.6k;n b(b){q $=(b+"").4X(1,2);$f.18[$]=b.2U($f.1B)?($f.18.43=$,1c):1p}},6l:n(){q $=0;$f.18.y?($=1,21($d.1y,$d.3M,$d.3N)):1o($d.1y,$d.3M,$d.3N);$f.18.M?($=1,21($d.1P,$d.3K,$d.3L)):1o($d.1P,$d.3K,$d.3L);$?21($d.4A):1o($d.4A);l($f.18.2g){21($d.34);3D($d.2w,$f.18.H);3D($d.3a,$f.18.m);3D($d.2r,$f.18.s)}t 1o($d.34);3g($d.2V,$f.6h);3g($d.2j,$f.6b);3g($d.1U,$f.4z);3g($d.4y,!$f.5q&&$f.18.d&&$f.8f);l($f.44||!($f.6h||$f.6b||$f.4z))1o($d.4e);t 21($d.4e)},3p:n(B,D){q A=$f.Z,b=$69?"Y":"1e";l($f.3O==-1)u;t l(B)C(A);t{l(D==1h)D=$f.3O;2Y(D){1f 0:l(8s($1l.8E)){A[$f.1E]=h.3j||"";C(A)}t $(A);1g;1f 1:A[$f.1E]=h.3j||"";C(A);1g;1f 2:$(A);1g}}n C(A){q B=A.1e;l(B){q $=B.1m(/6g/g,"");l(B!=$)A.6f(b,$)}}n $($){$.6f(b,$.1e+" 6g")}},1W:n(D,b,$){$=$||$1v;q H,C=[D+D,D],E,A=$[D],F=n($){u 2W(A,$.x)};2Y(D){1f"w":A=1N($);1g;1f"D":q G=1N($)+1;F=n($){u $.x==2?$1l.8F[G]:$1l.6e[G]};1g;1f"W":A=4E($);1g;1f"y":C=["3i","2H","3l","y"];b=b||C[0];F=n(b){u 2W((b.x<4)?(b.x<3?$.y%3s:($.y+5z-$f.5w)%8D):A,b.x)};1g;1f"M":C=["2I","3o","3R","M"];F=n($){u($.x==4)?$1l.5u[A-1]:($.x==3)?$1l.2k[A-1]:2W(A,$.x)};1g}b=b||D+D;l("3m".1n(D)>-1&&D!="y"&&!$f.18[D])l("4Z".1n(D)>-1)A=0;t A=1;q B=[];1b(H=0;H=0){B[H]=F(E);b=b.1m(1a 3v(E,"g"),"{"+H+"}")}}1b(H=0;H=0){q A=1a 1D();A.2h($);A.d=0;A.M=2n(A.M)+1;A.1Y();b=b.1m(/%2l/g,A.d)}q B="8J";1b(q D=0;D=0){b=b.1m(/3u/g,"%1K").1m(/D/g,"%d");b=h.1W("M",b,$);b=b.1m(/\\%1K/g,h.1W("D","3u")).1m(/\\%d/g,h.1W("D","D"))}t b=h.1W("M",b,$);u b},8H:n(b,$){u h.1W(b,$,$o)},4F:n($){u h.3P($,h.4D)},4B:n(){$c.4q();$d.4b.1M="";l($f.5q){$c.2X=1c;$f.5A=1p;$d.1e="4P 8v";q $=1a 2A();$.a("<1x Y=8t 33=3s% 2q=0 2o=0 2C=1><1j><19 5K=5P>");$.a(h.4a());$.a("<19 5K=5P>");$o.1V("M",1);$.a(h.4a());$d.2c=$d.1P.5Q(1c);$d.2y=$d.1y.5Q(1c);$d.4b.4O($d.2c);$d.4b.4O($d.2y);$d.2c.1i=$1l.2k[$o.M-1];$d.2c["3E"]=$o.M;$d.2y.1i=$o.y;55("6L,6M");$d.2c.1e=$d.2y.1e="47";$o.1V("M",-1);$.a("");$d.2Z.1M=$.j()}t{$d.1e="4P";$d.2Z.1M=h.4a()}l(!$f.18.d||$f.8x){h.4Q(1c);3G($d.1H)}t 1o($d.1H);h.5F()},5F:n(){q b=8A.1L.74("8z");1b(q C=0;C=B){A+=B;$d.1d.2i=A}t $d.1d.2i=$;b[C].1d.2i=1I.2Q(A,$d.2p)+"6W"}}$d.1H.1d.33=$d.2Z.4W;$d.1H.1d.2i=$d.2Z.2p},5c:n(){$o.d=1I.6J(1a 1u($o.y,$o.M,0).3t(),$o.d);$1v.2h($o);$f.2N=0;h.3d();l(!$f.44)l(h.1A($o)){4C();1o($f.1K)}l($f.6T)2b("6T")},6V:n(){$d.2V.1s=n(){l(!2b("8i")){$f.2N=0;$c.3d("");4C();1o($f.1K);l($f.6Q)2b("6Q")}};$d.1U.1s=n(){3b()};l(h.1A($1C)){$d.2j.2e=1p;$d.2j.1s=n(){$o.2h($1C);3b()}}t $d.2j.2e=1c},6y:n(){q H,G,A,F,C=[],$=5,E=$f.6z.x,b=$f.18.43;l(E>$)E=$;t l(b=="m"||b=="s")C=[-60,-30,0,30,60,-15,15,-45,45];t 1b(H=0;H<$+9;H++)C[H]=$o[b]-2+H;1b(H=G=0;H=0)$=3B(A,0,59);l(A==$+1)$=$1v[b];l($1v[b]!=$&&!2b(b+"9a")){q B=$c.2S();l(B==0)28(b,$);t l(B<0)3H($c.20);t l(B>0)3H($c.1Z);$d.1U.2e=!$c.1A($1v);l("8M".1n(b)>=0)$c.4B();2b(b+"90")}}n 3H($){28("y",$.y);28("M",$.M);28("d",$.d);28("H",$.H);28("m",$.m);28("s",$.s)}n 3b(F,B,b,D,C,A){q $=1a 1D($o.y,$o.M,$o.d,$o.H,$o.m,$o.s);$o.25(F,B,b,D,C,A);l(!2b("93")){q E=$.y==F&&$.M==B&&$.d==b;l(!E&&2L.x!=0){c("y",F);c("M",B);c("d",b);$c.1k=$f.Z;49()}l($c.2X||E||2L.x==0)$c.5c()}t $o=$}n 49(){l($f.3y){$c.3d();$f.Z.22()}}n 2b($){q b;l($f[$])b=$f[$].5d($f.Z,$f);u b}n 28(b,$){l($==1h)$=$o[b];$1v[b]=$o[b]=$;l("8W".1n(b)>=0)$d[b+"I"].1i=$;l(b=="M"){$d.1P["3E"]=$;$d.1P.1i=$1l.2k[$-1]}}n 3B(b,$,A){l(b<$)b=$;t l(b>A)b=A;u b}n 71($,b){$f.3A($,"4k",n($){$=$||2d,k=($.56==4p)?$.54:$.56;l(k==9)b()})}n 2W($,b){$=$+"";36($.x=0?C:5;1b(q D=0;D<=C;D++){B=A.1Q(D);b=h[B]-$[B];l(b>0)u 1;t l(b<0)u-1}u 0},1Y:n(){q $=1a 1u(h.y,h.M-1,h.d,h.H,h.m,h.s);h.y=$.5k();h.M=$.5h()+1;h.d=$.3t();h.H=$.5p();h.m=$.5i();h.s=$.5n();u!6w(h.y)},1V:n(b,$){l("3m".1n(b)>=0){q A=h.d;l(b=="M")h.d=1;h[b]+=$;h.1Y();h.d=A}}};n 2n($){u 8V($,10)}n 3z($,b){u 3r(2n($),b)}n 1t($,A,b){u 3z($,3r(A,b))}n 3r($,b){u $==1h||6w($)?b:$}n 5l(A,$){l($6B)A.5l("91"+$);t{q b=1L.8Z("8N");b.8Q($,1c,1c);A.97(b)}}n 4g($){q A,B,b="y,M,H,m,s,6M,6L".4c(",");1b(B=0;B=0){b.1d.8k=1I.6J(h.4S,$d.2r.4S+60-b.4W);b.1d.8e=h.8b-b.2p-2}}n 3Q(70){q p=4g(h),1R,5f,v=h.1i,6A=$o[p];l(p==0)u;$o[p]=6r(v)>=0?6r(v):$o[p];l(p=="y"){1R=h==$d.2y;l(1R&&$o.M==12)$o.y-=1}t l(p=="M"){1R=h==$d.2c;l(1R){5f=$1l.2k[$o[p]-1];l(6A==12)$o.y+=1;$o.1V("M",-1)}l($1v.M==$o.M)h.1i=5f||$1l.2k[$o[p]-1];l(($1v.y!=$o.y))c("y",$o.y)}4d("c(\\""+p+"\\","+$o[p]+")");l(70!==1c){l(p=="y"||p=="M")h.1e="47";1o($d[p+"D"])}49()}n 2O($){l($.2m){$.2m();$.8g()}t{$.5e=1c;$.6U=1p}l($5x)$.54=0}n 55($){q A=$.4c(",");1b(q B=0;B=96&&Q<=8y)Q-=48;l($f.8r&&5j){l(!H.3e){H.3e=$f.1X[1];$c.1k=$f.Z}l(H==$f.Z)$c.1k=$f.Z;l(Q==27)l(H==$f.Z){$c.3c();u}t $f.Z.22();l(Q>=37&&Q<=40){q U;l($c.1k==$f.Z||$c.1k==$d.1U)l($f.18.d){U="d";l(Q==38)$o[U]-=7;t l(Q==39)$o[U]+=1;t l(Q==37)$o[U]-=1;t $o[U]+=7;$o.1Y();c("y",$o["y"]);c("M",$o["M"]);c("d",$o[U]);2O(M);u}t{U=$f.18.43;$d[U+"I"].22()}U=U||4g($c.1k);l(U){l(Q==38||Q==39)$o[U]+=1;t $o[U]-=1;$o.1Y();$c.1k.1i=$o[U];3Q.5d($c.1k,1c);$c.1k.5o()}}t l(Q==9){q D=H.3e;1b(q R=0;R<$f.1X.x;R++)l(D.2e==1c||D.2p==0)D=D.3e;t 1g;l($c.1k!=D){$c.1k=D;D.22()}}t l(Q==13){3Q.5d($c.1k);l($c.1k.3k=="1S")$c.1k.8B();t l($f.5b.3j==$f.Z[$f.1E])$c.5c();t $c.3c();$c.1k=$f.Z}}t l(Q==9&&H==$f.Z)$c.3c();l($f.8G&&!$5x&&!$f.3S&&$c.1k==$f.Z&&(Q>=48&&Q<=57)){q T=$f.Z,S=T.1i,F=E(T),I={29:"",1r:[]},R=0,K,N=0,X=0,O=0,J,b=/3i|2H|3l|y|3R|M|1K|d|%2l|53|H|4V|m|4U|s|4T|W|w/g,L=$f.1B.2J(b),B,A,$,V,W,G,J=0;l(S!=""){O=S.2J(/[0-9]/g);O=O==1h?0:O.x;1b(R=0;R=0?1:0;l(O==1&&F>=S.x)F=S.x-1}S=S.1F(0,F)+8h.8c(Q)+S.1F(F+O);F++;1b(R=0;R=0){S+=$f.1B.1F(N,X);l(F>=N+J&&F<=X+J)F+=X-N}N=b.2t;G=N-X;B=I.29.1F(0,G);A=K[0].1Q(0);$=2n(B.1Q(0));l(I.29.x>1){V=I.29.1Q(1);W=$*10+2n(V)}t{V="";W=$}l(I.1r[X+1]||A=="M"&&W>12||A=="d"&&W>31||A=="H"&&W>23||"68".1n(A)>=0&&W>59){l(K[0].x==2)B="0"+$;t B=$;F++}t l(G==1){B=W;G++;J++}S+=B;I.29=I.29.1F(G);l(I.29=="")1g}T.1i=S;P(T,F);2O(M)}l(5j&&$c.1k!=$f.Z&&!((Q>=48&&Q<=57)||Q==8||Q==46))2O(M);n E(A){q b=0;l($f.51.1L.6a){q B=$f.51.1L.6a.82(),$=B.5m.x;B.6I("4Y",-A.1i.x);b=B.5m.x-$}t l(A.58||A.58=="0")b=A.58;u b}n P(b,A){l(b.6S){b.22();b.6S(A,A)}t l(b.6O){q $=b.6O();$.7P(1c);$.85("4Y",A);$.6I("4Y",A);$.5o()}}}1L.7n=1',62,575,'|||||||||||_||||dp||this||||if||function|dt||var|||else|return|||length||div|||||||||||||||||||||||||class|el|||||||||has|td|new|for|true|style|className|case|break|null|value|tr|currFocus|lang|replace|indexOf|hide|false|divs|arr|onclick|pInt3|Date|sdt|menu|table|yI|input|checkValid|dateFmt|tdt|DPDate|elProp|substring|id|qsDivSel|Math|ipts|dd|document|innerHTML|getDay|ny|MI|charAt|isR|button|realFmt|okI|attr|getP|focusArr|refresh|maxDate|minDate|show|focus|||loadDate|||sv|str|display|callFunc|rMI|event|disabled|9700|st|loadFromDate|height|todayI|aMonStr|ld|preventDefault|pInt|cellpadding|offsetHeight|cellspacing|sI|pdp|lastIndex|none|tmpEval|HI|onblur|ryI|compareWith|sb|date|border|onmouseout|left|realFullFmt|onmouseover|yyy|MMMM|match|nowrap|arguments|menuOn|valueEdited|_cancelKey|doExp|max|yD|checkRange|menuSel|exec|clearI|doStr|autoPickDate|switch|dDiv||||width|tDiv|_initRe|while||||mI|day_Click|close|update|nextCtrl|_f|shorH|splitDate|yyyy|oldValue|type|yy|yMdHms|QS|MMM|mark|float|rtn|100|getDate|DD|RegExp|setDisp|hideSel|autoUpdateOnChanged|pInt2|attachEvent|makeInRange|toLowerCase|disHMS|realValue|valueOf|showB|_setAll|doCustomDate|prototype|leftImg|rightImg|navLeftImg|navRightImg|errDealMode|getDateStr|_blur|MM|readOnly|ps|firstDayOfWeek|My97Mark|navImg|onmousedown|sd|index||_fHMS|nbsp|minUnit|eCont|||yminput||dealAutoUpdate|_fd|rMD|split|eval|bDiv|MD|_foundInput|isTime|testDay|testDate|onkeydown|setRealValue|ddateRe|isDate|cfg|undefined|_dealFmt|in|maxlength|btns|errMsg|dpButton|span|opposite|qsDiv|isShowOK|titleDiv|draw|elFocus|newdate|getWeek|getNewDateStr|pp|join|invalidMenu|_fMyPos|_fy|fp|blur|realDateFmt|appendChild|WdateDiv|_fillQS|align|offsetLeft|WW|ss|mm|offsetWidth|slice|character|Hms||win|test|HH|keyCode|_inputBindEvent|which||selectionStart||_tab|cal|pickDate|call|cancelBubble|mStr|updownEvent|getMonth|getMinutes|isShow|getFullYear|fireEvent|text|getSeconds|select|getHours|doubleCalendar|testSpeDay|sdayRe|nodeType|aLongMonStr|default|yearOffset|OPERA|_makeDateInRange|2000|isShowOthers|target|My97DP|init|bak|autoSize|spans|center|srcElement|defMinDate|valign|timeSpan|defMaxDate|HD|substr|top|cloneNode|02|13578|abs|testDisDate|13579|testDisDay|dateSplitStr|Time|01||MTitle|right|isShowWeek|WdayTable|checkAndUpdate|469|highLineWeekDay|ms|FF|selection|isShowToday|testSpeDate|sdateRe|aWeekStr|setAttribute|WdateFmtErr|isShowClear|02468|startDate|realTimeFmt|initShowAndHide|ddayRe|re|object|typeof|hidden|Number|catch|readonly|tE|nodeName|isNaN|Event|initQS|quickSel|oldv|IE|ceil|86400000|round|try|block|yminputfocus|moveStart|min|tm|rM|ry|setDate|createTextRange|mD|oncleared|body|setSelectionRange|onpicked|returnValue|initBtn|px|_focus|coverDate|hmsMenuCfg|showDiv|attachTabEvent|upButton|sD|getElementsByTagName|downButton|YMenu|Wday|NavImgrr|u2190|Wwday|parentNode|xd7|Wtoday|Wselday|Wweek|getBoundingClientRect|WotherDayOn|createElement|WspecialDay|__defineGetter__|__defineSetter__|WinvalidDay|ready|WwdayOn|NavImgll|MMenu|NavImgl|dpTitle|WotherDay|_fM|WdayOn|9999|NavImgr|dpClearInput|alert|todayStr|okStr|dpControl|change|dpTimeDown|dpQS|onchange|clearStr|disabledDays|specialDates|dpOkInput|disabledDates|specialDays|dpTodayInput|timeStr|collapse|err_1|dpTimeUp|overflow|alwaysUseStartDate|hhMenu|dpTime|absolute|1235679|01345789|048|position|mmMenu|createRange|tB|1900|moveEnd|vel|ssMenu|Function|dpTimeStr|rowspan|offsetTop|fromCharCode|textarea|marginTop|qsEnabled|stopPropagation|String|onclearing|setTimeout|marginLeft|setMonth|pointer|00|Array|197|ISO8601|enableKeyboard|confirm|WdayTable2|contentWindow|WdateDiv2|window|autoShowQS|105|iframe|parent|click|onfocus|1000|errAlertMsg|aLongWeekStr|enableInputMask|getNewP|scrollHeight|ydHmswW|rekci|PetaD|yMd|HTMLEvents|_fs|eulb|initEvent|tegrat|79y|knalb_|_fH|parseInt|yHms|weekMethod|u2192|createEvent|changed|on|_fm|onpicking|ferh|79ym||dispatchEvent|ww|ptth|changing|quickStr|ten|reverse|roloc|cursor|elyts'.split('|'),0,{})) \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/lang/en.js b/src/main/webapp/js/My97DatePicker/lang/en.js new file mode 100644 index 0000000..3159885 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/lang/en.js @@ -0,0 +1,14 @@ +var $lang={ +errAlertMsg: "Invalid date or the date out of range,redo or not?", +aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], +aLongWeekStr:["wk","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], +aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], +aLongMonStr: ["January","February","March","April","May","June","July","August","September","October","November","December"], +clearStr: "Clear", +todayStr: "Today", +okStr: "OK", +updateStr: "OK", +timeStr: "Time", +quickStr: "Quick Selection", +err_1: 'MinDate Cannot be bigger than MaxDate!' +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/lang/zh-cn.js b/src/main/webapp/js/My97DatePicker/lang/zh-cn.js new file mode 100644 index 0000000..70e5e4f --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/lang/zh-cn.js @@ -0,0 +1,14 @@ +var $lang={ +errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u8303\u56F4,\u9700\u8981\u64A4\u9500\u5417?", +aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"], +aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"], +aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"], +aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"], +clearStr: "\u6E05\u7A7A", +todayStr: "\u4ECA\u5929", +okStr: "\u786E\u5B9A", +updateStr: "\u786E\u5B9A", +timeStr: "\u65F6\u95F4", +quickStr: "\u5FEB\u901F\u9009\u62E9", +err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u4E8E\u6700\u5927\u65E5\u671F!' +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/lang/zh-tw.js b/src/main/webapp/js/My97DatePicker/lang/zh-tw.js new file mode 100644 index 0000000..b92e0ee --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/lang/zh-tw.js @@ -0,0 +1,14 @@ +var $lang={ +errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u7BC4\u570D,\u9700\u8981\u64A4\u92B7\u55CE?", +aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"], +aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"], +aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"], +aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"], +clearStr: "\u6E05\u7A7A", +todayStr: "\u4ECA\u5929", +okStr: "\u78BA\u5B9A", +updateStr: "\u78BA\u5B9A", +timeStr: "\u6642\u9593", +quickStr: "\u5FEB\u901F\u9078\u64C7", +err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u65BC\u6700\u5927\u65E5\u671F!' +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/skin/WdatePicker.css b/src/main/webapp/js/My97DatePicker/skin/WdatePicker.css new file mode 100644 index 0000000..43534b6 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/skin/WdatePicker.css @@ -0,0 +1,11 @@ +.Wdate{ + border:#999 1px solid; + height:20px; + background:#fff url(datePicker.gif) no-repeat right; +} +.Wdate::-ms-clear{display:none;} + +.WdateFmtErr{ + font-weight:bold; + color:red; +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/skin/datePicker.gif b/src/main/webapp/js/My97DatePicker/skin/datePicker.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6bf40c9f290161c87230787a1056d977d36c821 GIT binary patch literal 1043 zcmd_p?QatW0LSs$R_K_-G(2dKnG6Nuloy5QzR9KEUo-T(>!P_I?XFKgvWtyr!WO4UlCn14~uDIk;oTK<^AT9>DEW?Q;pCx%I$O#N5 zF>!(7;)FBL?Y2>G#rVB@JJbtu9J~xNLUPnSUmhJPocq3fC#2n zf`T_#pxG40CJ;6a(?x<#)R9FWBOz>(W+;^9Jhbd%GBC47(G=xRz)Xgu8JJFcnCB3k z@%ssgmJo`6N-16{1yh`x7M3Z+cUmh9yt+9ezELo|GlGq&y6dm!P^77 zPxRDwnT=eC+BI(eaA zI@!?n@xITu?I(aA-qe2m>HYp*Ct=)U(OjDOa0{Y6er~AynCY7C-e-;9YJLGubiCfY z-F!#~Ha30Gckz2A(6j&ITSo^hZ7n9PzT@zN^LON3>zCUv7|#s8^X2uC{2FFF`}1xc GaQqdg9U6)N literal 0 HcmV?d00001 diff --git a/src/main/webapp/js/My97DatePicker/skin/default/datepicker.css b/src/main/webapp/js/My97DatePicker/skin/default/datepicker.css new file mode 100644 index 0000000..be5a970 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/skin/default/datepicker.css @@ -0,0 +1,246 @@ +/* + * My97 DatePicker 4.8 + */ + +.WdateDiv{ + width:180px; + background-color:#FFFFFF; + border:#bbb 1px solid; + padding:2px; +} + +.WdateDiv2{ + width:360px; +} +.WdateDiv *{font-size:9pt;} + +.WdateDiv .NavImg a{ + display:block; + cursor:pointer; + height:16px; + width:16px; +} + +.WdateDiv .NavImgll a{ + float:left; + background:transparent url(img.gif) no-repeat scroll 0 0; +} +.WdateDiv .NavImgl a{ + float:left; + background:transparent url(img.gif) no-repeat scroll -16px 0; +} +.WdateDiv .NavImgr a{ + float:right; + background:transparent url(img.gif) no-repeat scroll -32px 0; +} +.WdateDiv .NavImgrr a{ + float:right; + background:transparent url(img.gif) no-repeat scroll -48px 0; +} + +.WdateDiv #dpTitle{ + height:24px; + margin-bottom:2px; + padding:1px; +} + +.WdateDiv .yminput{ + margin-top:2px; + text-align:center; + height:20px; + border:0px; + width:50px; + cursor:pointer; +} + +.WdateDiv .yminputfocus{ + margin-top:2px; + text-align:center; + font-weight:bold; + height:20px; + color:blue; + border:#ccc 1px solid; + width:50px; +} + +.WdateDiv .menuSel{ + z-index:1; + position:absolute; + background-color:#FFFFFF; + border:#ccc 1px solid; + display:none; +} + +.WdateDiv .menu{ + cursor:pointer; + background-color:#fff; +} + +.WdateDiv .menuOn{ + cursor:pointer; + background-color:#BEEBEE; +} + +.WdateDiv .invalidMenu{ + color:#aaa; +} + +.WdateDiv .YMenu{ + margin-top:20px; + +} + +.WdateDiv .MMenu{ + margin-top:20px; + *width:62px; +} + +.WdateDiv .hhMenu{ + margin-top:-90px; + margin-left:26px; +} + +.WdateDiv .mmMenu{ + margin-top:-46px; + margin-left:26px; +} + +.WdateDiv .ssMenu{ + margin-top:-24px; + margin-left:26px; +} + + .WdateDiv .Wweek { + text-align:center; + background:#DAF3F5; + border-right:#BDEBEE 1px solid; + } + +.WdateDiv .MTitle{ + background-color:#BDEBEE; +} +.WdateDiv .WdayTable2{ + border-collapse:collapse; + border:#c5d9e8 1px solid; +} +.WdateDiv .WdayTable2 table{ + border:0; +} + +.WdateDiv .WdayTable{ + line-height:20px; + border:#c5d9e8 1px solid; +} +.WdateDiv .WdayTable td{ + text-align:center; +} + +.WdateDiv .Wday{ + cursor:pointer; +} + +.WdateDiv .WdayOn{ + cursor:pointer; + background-color:#C0EBEF; +} + +.WdateDiv .Wwday{ + cursor:pointer; + color:#FF2F2F; +} + +.WdateDiv .WwdayOn{ + cursor:pointer; + color:#000; + background-color:#C0EBEF; +} +.WdateDiv .Wtoday{ + cursor:pointer; + color:blue; +} +.WdateDiv .Wselday{ + background-color:#A9E4E9; +} +.WdateDiv .WspecialDay{ + background-color:#66F4DF; +} + +.WdateDiv .WotherDay{ + cursor:pointer; + color:#6A6AFF; +} + +.WdateDiv .WotherDayOn{ + cursor:pointer; + background-color:#C0EBEF; +} + +.WdateDiv .WinvalidDay{ + color:#aaa; +} + +.WdateDiv #dpTime{ + float:left; + margin-top:3px; + margin-right:30px; +} + +.WdateDiv #dpTime #dpTimeStr{ + margin-left:1px; +} + +.WdateDiv #dpTime input{ + width:18px; + height:20px; + text-align:center; + border:#ccc 1px solid; +} + +.WdateDiv #dpTime .tB{ + border-right:0px; +} + +.WdateDiv #dpTime .tE{ + border-left:0; + border-right:0; +} + +.WdateDiv #dpTime .tm{ + width:7px; + border-left:0; + border-right:0; +} + +.WdateDiv #dpTime #dpTimeUp{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -32px -16px; +} + +.WdateDiv #dpTime #dpTimeDown{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -48px -16px; +} + + .WdateDiv #dpQS { + float:left; + margin-right:3px; + margin-top:3px; + background:url(img.gif) no-repeat 0px -16px; + width:20px; + height:20px; + cursor:pointer; + } +.WdateDiv #dpControl { + text-align:right; +} +.WdateDiv .dpButton{ + height:20px; + width:45px; + border:#ccc 1px solid; + margin-top:2px; + margin-right:1px; +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/skin/default/img.gif b/src/main/webapp/js/My97DatePicker/skin/default/img.gif new file mode 100644 index 0000000000000000000000000000000000000000..053205d8201a3a59fb9870c6a4743fc3efd305fa GIT binary patch literal 1578 zcmeH`+f$MW0L8yg4A8uwQi_*?EFI0Au-(}$Yf8m?W;EG$nKo@ja+NL1Tea4jcp*!p z#xz<>P`7c+`wa^*R6tZzP(V!)H8t;$A?U37?Y7VRC+vARFX!bq=gjdB^gDF;iYKra z&;wtkQmNQ%c1R(COeQ~NGC!@X-L1IYFxXP4D45X9#Y#vG{O;&z3Z#Z4<8oSFA+x?V za{Tnn%#2>IZ&|L*t7Y8jifd|ntJ0009XO#-C~j&(iloKy>DgkjSTe29LF*P4Rz)>s zlR9lubIjD_(#1+*k9=rmZLzSbQZ@E*V{5&c-;ph)iRPts9Bz{4%o&bnk3?Qo|85>y zMIwzWCRiN`>GJZjNYwRAl_gh=>pw%8Y^n}|dKO1%w5(5CQ?kLa&MyMBe*G!`@#xgd zJhad%8%mfwUD?7RB_zwV-9n+TxcJZfD#rb>n2O#SVXyRsGKWe{k5&JiHju`7&x;;8 zX=mqRn${|1)AHbwV-H`x zWY%!VBNy&>$JYxurQC8-S!nN6-*1bd6|*Ju(cDTdpE7Z_rH{*QdZ*AU9yjDPi^cyi z|GV@5_8$%4)(t@fzyjR9W?w%6AR&NYWFJt?Y^5TtTrY{LS?!r9$Do3Mnj+tHLpYh# zWD(Jxy+9w6;6n2p`)^?{Gzp6(j7}kA52j9FckK z_pNGC_oRe{N_n`k2GUqo4!bS;JdZ}SXJWpEJ0%`;tcmOnfo~ZVB$@0wis7A)&MkWM zi*YID8j|kVk!5t)N%RVZt>u|lIMbyk;q*oOM#8Ggz|}RD(+*3UbrN{e+QSKMPF@3v zDP#4WQG>fSsFZ~d&gGDXaJhrW5q?=5zR9HK2Kv92L|Fi_6X_w) z3=Pz_Az@HIUwBEX>aLiJ}kGM#j_wVX#(Snb-z}VN@=1p54MEab$wzRB5iw+%tE;Dk0?L@ zv$zET51d@btHYeFN*gCB%_}aFXzq$FKxLJL`=i}s=>mrw;z5yPuqV?SbTmW(rq3r4 zj0k$d_6uYKheSrC(y}WR_1tYwhRL&8&;ZHAYXr91JTJH@D4IrLBe73-MzA#r((I7< zMjF_^iT80P&5jUlujaOj>=0Od2RaT}lmYt2HyiBPT|JH`94~m1k0}_Z^U?mLEWb97 zS literal 0 HcmV?d00001 diff --git a/src/main/webapp/js/My97DatePicker/skin/whyGreen/bg.jpg b/src/main/webapp/js/My97DatePicker/skin/whyGreen/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75516a6380f3a18d246e090d47999698e4193d6c GIT binary patch literal 307 zcma)%I}XA?3`ED-PeQVgH5(uz6x@S?0`WZ!4L6|Y8r*;uAv#(LJ`Fcn77CVOV!Xga(6BB4DrIK1H-OypPMC&9oX_}>}vF0mlTDi?z#<`+!ZctU# zVEEIggyJ}Enr3Nj+3#?t|AYS?{s>M`f&?)lCc)&-=mG*YNtFb@XTu9r1Cc8}Ah`8} kphyK!asc%NaohO^Ot2#sj4}3y?RB@F-shLmesl8oH`;+K5&!@I literal 0 HcmV?d00001 diff --git a/src/main/webapp/js/My97DatePicker/skin/whyGreen/datepicker.css b/src/main/webapp/js/My97DatePicker/skin/whyGreen/datepicker.css new file mode 100644 index 0000000..e1d7565 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/skin/whyGreen/datepicker.css @@ -0,0 +1,256 @@ +/* + * My97 DatePicker 4.8 Skin:whyGreen + */ +.WdateDiv{ + width:180px; + background-color:#fff; + border:#C5E1E4 1px solid; + padding:2px; +} + +.WdateDiv2{ + width:360px; +} +.WdateDiv *{font-size:9pt;} + +.WdateDiv .NavImg a{ + cursor:pointer; + display:block; + width:16px; + height:16px; + margin-top:1px; +} + +.WdateDiv .NavImgll a{ + float:left; + background:url(img.gif) no-repeat; +} +.WdateDiv .NavImgl a{ + float:left; + background:url(img.gif) no-repeat -16px 0px; +} +.WdateDiv .NavImgr a{ + float:right; + background:url(img.gif) no-repeat -32px 0px; +} +.WdateDiv .NavImgrr a{ + float:right; + background:url(img.gif) no-repeat -48px 0px; +} + +.WdateDiv #dpTitle{ + height:24px; + padding:1px; + border:#c5d9e8 1px solid; + background:url(bg.jpg); + margin-bottom:2px; +} + +.WdateDiv .yminput{ + margin-top:2px; + text-align:center; + border:0px; + height:20px; + width:50px; + color:#034c50; + background-color:transparent; + cursor:pointer; +} + +.WdateDiv .yminputfocus{ + margin-top:2px; + text-align:center; + border:#939393 1px solid; + font-weight:bold; + color:#034c50; + height:20px; + width:50px; +} + +.WdateDiv .menuSel{ + z-index:1; + position:absolute; + background-color:#FFFFFF; + border:#A3C6C8 1px solid; + display:none; +} + +.WdateDiv .menu{ + cursor:pointer; + background-color:#fff; + color:#11777C; +} + +.WdateDiv .menuOn{ + cursor:pointer; + background-color:#BEEBEE; +} + +.WdateDiv .invalidMenu{ + color:#aaa; +} + +.WdateDiv .YMenu{ + margin-top:20px; +} + +.WdateDiv .MMenu{ + margin-top:20px; + *width:62px; +} + +.WdateDiv .hhMenu{ + margin-top:-90px; + margin-left:26px; +} + +.WdateDiv .mmMenu{ + margin-top:-46px; + margin-left:26px; +} + +.WdateDiv .ssMenu{ + margin-top:-24px; + margin-left:26px; +} + + .WdateDiv .Wweek { + text-align:center; + background:#DAF3F5; + border-right:#BDEBEE 1px solid; + } + +.WdateDiv .MTitle{ + color:#13777e; + background-color:#bdebee; +} +.WdateDiv .WdayTable2{ + border-collapse:collapse; + border:#BEE9F0 1px solid; +} +.WdateDiv .WdayTable2 table{ + border:0; +} + +.WdateDiv .WdayTable{ + line-height:20px; + color:#13777e; + background-color:#edfbfb; + border:#BEE9F0 1px solid; +} +.WdateDiv .WdayTable td{ + text-align:center; +} + +.WdateDiv .Wday{ + cursor:pointer; +} + +.WdateDiv .WdayOn{ + cursor:pointer; + background-color:#74d2d9 ; +} + +.WdateDiv .Wwday{ + cursor:pointer; + color:#ab1e1e; +} + +.WdateDiv .WwdayOn{ + cursor:pointer; + background-color:#74d2d9; +} +.WdateDiv .Wtoday{ + cursor:pointer; + color:blue; +} +.WdateDiv .Wselday{ + background-color:#A7E2E7; +} +.WdateDiv .WspecialDay{ + background-color:#66F4DF; +} + +.WdateDiv .WotherDay{ + cursor:pointer; + color:#0099CC; +} + +.WdateDiv .WotherDayOn{ + cursor:pointer; + background-color:#C0EBEF; +} + +.WdateDiv .WinvalidDay{ + color:#aaa; +} + +.WdateDiv #dpTime{ + float:left; + margin-top:3px; + margin-right:30px; +} + +.WdateDiv #dpTime #dpTimeStr{ + margin-left:1px; + color:#497F7F; +} + +.WdateDiv #dpTime input{ + height:20px; + width:18px; + text-align:center; + color:#333; + border:#61CAD0 1px solid; +} + +.WdateDiv #dpTime .tB{ + border-right:0px; +} + +.WdateDiv #dpTime .tE{ + border-left:0; + border-right:0; +} + +.WdateDiv #dpTime .tm{ + width:7px; + border-left:0; + border-right:0; +} + +.WdateDiv #dpTime #dpTimeUp{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -32px -16px; +} + +.WdateDiv #dpTime #dpTimeDown{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -48px -16px; +} + + .WdateDiv #dpQS { + float:left; + margin-right:3px; + margin-top:3px; + background:url(img.gif) no-repeat 0px -16px; + width:20px; + height:20px; + cursor:pointer; + } +.WdateDiv #dpControl { + text-align:right; + margin-top:3px; +} +.WdateDiv .dpButton{ + height:20px; + width:45px; + margin-top:2px; + border:#38B1B9 1px solid; + background-color:#CFEBEE; + color:#08575B; +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/skin/whyGreen/img.gif b/src/main/webapp/js/My97DatePicker/skin/whyGreen/img.gif new file mode 100644 index 0000000000000000000000000000000000000000..4003f20fb1197edf0433ff99759cb6399d0f99f9 GIT binary patch literal 1679 zcmV;A25|XDNk%w1VL$*R0QUd@0000>z|tkRw@#l!oyCyW^wMhEO#o(Q*4EZ-x4K%c zP*b}=vCr2~x5%c%&Qh|zhqr?>W@b{St~9N+)b#(R%-5i?yE~z#=H}?2w6c`X)wSH? zVX(c6ot;9c!Mx1O#Pj)gylXe5w0^?DK(n}Qv9$m8|Ff^YsngM-(W7*QjZCCI*xcp! z_xGQ#u6)JRzV5Qk(A8vheD3bi_@$kld7x(9h-V@Bjq>_W%FS z@A`Vmb5y*=-QM7b(bSsVj&0D@RntqP*yeEWV(S0(H?y@ot+UeU@$mEf$@9gxx3`nh z;m6j|YQW7gw!8NK`OWn2e$CNL#m$n$k9Y7>EUvuF%*>asnXTcW(B;HqKl zS-;J=yvMh=y2ak!yYKu01pn9*~nwU#=F13gwuo(001$yx6s(zo73t=uf4Cdx@Oy1guu%}t+!pE zu;csxaL{Db^vmDl)k?I&IJU*r@aZnM$KBxRu-@Lr&e8Dx@7C}4c<@17vcJml#OMCx zwd3KH#J>Fg`K!CIuG8bc#>@Z@33=GmuD!(7?9wx@$(_vHwZ*k{;!%#YgNxGE01q8= zzPgg2pmN5@fy;D7sIGCn%Y?|uLbbim-QHTm$EVKS)Ysn4)!5(m+*i3mz1G&9%h6Fbx7R*o7! z!kxSJqTRcA^XlCj(L@VNmV}rvp=+=%S+eXX9s&l;42C}>&|rgv4G94vpn2LnkWH9Y zhpND;aO~JJf3<22G_iOvy+)0!1-p?X(3aaRax=Ve>JEr;jw)yo^x_2(A_FIc`Gzms zyE5G_T^iG%!9XEfgkYDI3PvP7dUEXl0`dt%(i(P+;5H0uD1yr0~QOP{bn2I%G6v14AN&u}B&^Xwbzk^AYjD0|T+b3oh?y zFhVXRaNy1=tgtemV0OS^1~VZ%5eOuru)snulB@#-dJFM^NI&lkGYlrlX!1ZjO*9eW zG+lIo2_|2BQG*0*WI2!>*cH$NDq=*!ju6zG@X9NnK(fguUTndT0R3cwg9GZ+Nkjws zxZ=t{e5BFEGd}nN007hQ(+p<<>9Peqf9x;{CpQR@MGX5u0ZBEV91%w!LNJ8H6}eQP z1UH?ugN!K;Ab|v*8YFW@EeT-%!hjr!OaKiu1KFSp6XqD81{aEWF@zL6)Z+yd)Q}Ow zCS))q3@Byz^TH!2;DCb>ZPZc6K>Cm}MIHf^a*iM*Owfcr`V16K5yf~z%O0bk;fE9% zs9*swF3f=e0)}9~5DD|VaEUZytfK0{s|r+#KZLBZN+<{)JWwFpFtSG!23)fO59M?q zLkBJ>;{q9Eh|=srZ7kso5%S0bam2|@FaZhWTEPd*iQdv^5DO?k03d*TAPx)n6urd^ zCiCUc5L+}7i2?&aki;BwL<0pn=Yc_uA&)7|&^>Q#!GtkROcG5jR(pZY5Nwly1*cv! z1jZYKsZtKru|VO47g_ggaRdgs#Jv!9x^7WPFI2=J>=26WdjuJ`39ir}E!?sO7$&eo zOd%{(LIwsH^brRJw@oNHLfWOCIs$!QfyEIqkTHYmr=zZV>MhtX!|pS*kX`DvA2itT Z!{27S@w5kD(DBS4ugmktD_>AR06TP*k#+z8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/js/My97DatePicker/开发包/lang/en.js b/src/main/webapp/js/My97DatePicker/开发包/lang/en.js new file mode 100644 index 0000000..3159885 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/开发包/lang/en.js @@ -0,0 +1,14 @@ +var $lang={ +errAlertMsg: "Invalid date or the date out of range,redo or not?", +aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], +aLongWeekStr:["wk","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], +aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], +aLongMonStr: ["January","February","March","April","May","June","July","August","September","October","November","December"], +clearStr: "Clear", +todayStr: "Today", +okStr: "OK", +updateStr: "OK", +timeStr: "Time", +quickStr: "Quick Selection", +err_1: 'MinDate Cannot be bigger than MaxDate!' +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/开发包/lang/zh-cn.js b/src/main/webapp/js/My97DatePicker/开发包/lang/zh-cn.js new file mode 100644 index 0000000..89af055 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/开发包/lang/zh-cn.js @@ -0,0 +1,14 @@ +var $lang={ +errAlertMsg: "Ϸڸʽڳ޶Χ,Ҫ?", +aWeekStr: ["","","һ","","","","",""], +aLongWeekStr:["","","һ","ڶ","","","",""], +aMonStr: ["һ","","","","","","","","","ʮ","ʮһ","ʮ"], +aLongMonStr: ["һ","","","","","","","","","ʮ","ʮһ","ʮ"], +clearStr: "", +todayStr: "", +okStr: "ȷ", +updateStr: "ȷ", +timeStr: "ʱ", +quickStr: "ѡ", +err_1: 'Сڲܴ!' +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/开发包/lang/zh-tw.js b/src/main/webapp/js/My97DatePicker/开发包/lang/zh-tw.js new file mode 100644 index 0000000..6e2e6ed --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/开发包/lang/zh-tw.js @@ -0,0 +1,14 @@ +var $lang={ +errAlertMsg: "Ϸڸʽڳ޶,ҪN?", +aWeekStr: ["","","һ","","","","",""], +aLongWeekStr:["","","һ","ڶ","","","",""], +aMonStr: ["һ","","","","","","","","","ʮ","ʮһ","ʮ"], +aLongMonStr: ["һ","","","","","","","","","ʮ","ʮһ","ʮ"], +clearStr: "", +todayStr: "", +okStr: "_", +updateStr: "_", +timeStr: "rg", +quickStr: "x", +err_1: 'Сڲܴ!' +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/开发包/readme.txt b/src/main/webapp/js/My97DatePicker/开发包/readme.txt new file mode 100644 index 0000000..b3f7611 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/开发包/readme.txt @@ -0,0 +1,3 @@ +ʽʱ,ɽļɾȥ + + diff --git a/src/main/webapp/js/My97DatePicker/开发包/skin/WdatePicker.css b/src/main/webapp/js/My97DatePicker/开发包/skin/WdatePicker.css new file mode 100644 index 0000000..43534b6 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/开发包/skin/WdatePicker.css @@ -0,0 +1,11 @@ +.Wdate{ + border:#999 1px solid; + height:20px; + background:#fff url(datePicker.gif) no-repeat right; +} +.Wdate::-ms-clear{display:none;} + +.WdateFmtErr{ + font-weight:bold; + color:red; +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/开发包/skin/datePicker.gif b/src/main/webapp/js/My97DatePicker/开发包/skin/datePicker.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6bf40c9f290161c87230787a1056d977d36c821 GIT binary patch literal 1043 zcmd_p?QatW0LSs$R_K_-G(2dKnG6Nuloy5QzR9KEUo-T(>!P_I?XFKgvWtyr!WO4UlCn14~uDIk;oTK<^AT9>DEW?Q;pCx%I$O#N5 zF>!(7;)FBL?Y2>G#rVB@JJbtu9J~xNLUPnSUmhJPocq3fC#2n zf`T_#pxG40CJ;6a(?x<#)R9FWBOz>(W+;^9Jhbd%GBC47(G=xRz)Xgu8JJFcnCB3k z@%ssgmJo`6N-16{1yh`x7M3Z+cUmh9yt+9ezELo|GlGq&y6dm!P^77 zPxRDwnT=eC+BI(eaA zI@!?n@xITu?I(aA-qe2m>HYp*Ct=)U(OjDOa0{Y6er~AynCY7C-e-;9YJLGubiCfY z-F!#~Ha30Gckz2A(6j&ITSo^hZ7n9PzT@zN^LON3>zCUv7|#s8^X2uC{2FFF`}1xc GaQqdg9U6)N literal 0 HcmV?d00001 diff --git a/src/main/webapp/js/My97DatePicker/开发包/skin/default/datepicker.css b/src/main/webapp/js/My97DatePicker/开发包/skin/default/datepicker.css new file mode 100644 index 0000000..03beece --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/开发包/skin/default/datepicker.css @@ -0,0 +1,267 @@ +/* + * My97 DatePicker 4.7 + * Ƥ:default + */ + +/* ѡ DIV */ +.WdateDiv{ + width:180px; + background-color:#FFFFFF; + border:#bbb 1px solid; + padding:2px; +} +/* ˫Ŀ */ +.WdateDiv2{ + width:360px; +} +.WdateDiv *{font-size:9pt;} + +/**************************** + * ͼ ȫAǩ + ***************************/ +.WdateDiv .NavImg a{ + display:block; + cursor:pointer; + height:16px; + width:16px; +} + +.WdateDiv .NavImgll a{ + float:left; + background:transparent url(img.gif) no-repeat scroll 0 0; +} +.WdateDiv .NavImgl a{ + float:left; + background:transparent url(img.gif) no-repeat scroll -16px 0; +} +.WdateDiv .NavImgr a{ + float:right; + background:transparent url(img.gif) no-repeat scroll -32px 0; +} +.WdateDiv .NavImgrr a{ + float:right; + background:transparent url(img.gif) no-repeat scroll -48px 0; +} + +/**************************** + * · + ***************************/ +/* · DIV */ +.WdateDiv #dpTitle{ + height:24px; + margin-bottom:2px; + padding:1px; +} +/* · INPUT */ +.WdateDiv .yminput{ + margin-top:2px; + text-align:center; + height:20px; + border:0px; + width:50px; + cursor:pointer; +} +/* ·ýʱʽ INPUT */ +.WdateDiv .yminputfocus{ + margin-top:2px; + text-align:center; + font-weight:bold; + height:20px; + color:blue; + border:#ccc 1px solid; + width:50px; +} +/* ˵ѡ DIV */ +.WdateDiv .menuSel{ + z-index:1; + position:absolute; + background-color:#FFFFFF; + border:#ccc 1px solid; + display:none; +} +/* ˵ʽ TD */ +.WdateDiv .menu{ + cursor:pointer; + background-color:#fff; +} +/* ˵mouseoverʽ TD */ +.WdateDiv .menuOn{ + cursor:pointer; + background-color:#BEEBEE; +} +/* ˵Чʱʽ TD */ +.WdateDiv .invalidMenu{ + color:#aaa; +} +/* ѡƫ DIV */ +.WdateDiv .YMenu{ + margin-top:20px; + +} +/* ѡƫ DIV */ +.WdateDiv .MMenu{ + margin-top:20px; + *width:62px; +} +/* ʱѡλ DIV */ +.WdateDiv .hhMenu{ + margin-top:-90px; + margin-left:26px; +} +/* ѡλ DIV */ +.WdateDiv .mmMenu{ + margin-top:-46px; + margin-left:26px; +} +/* ѡλ DIV */ +.WdateDiv .ssMenu{ + margin-top:-24px; + margin-left:26px; +} + +/**************************** + * + ***************************/ + .WdateDiv .Wweek { + text-align:center; + background:#DAF3F5; + border-right:#BDEBEE 1px solid; + } +/**************************** + * , + ***************************/ +/* TR */ +.WdateDiv .MTitle{ + background-color:#BDEBEE; +} +.WdateDiv .WdayTable2{ + border-collapse:collapse; + border:#c5d9e8 1px solid; +} +.WdateDiv .WdayTable2 table{ + border:0; +} +/* TABLE */ +.WdateDiv .WdayTable{ + line-height:20px; + border:#c5d9e8 1px solid; +} +.WdateDiv .WdayTable td{ + text-align:center; +} +/* ڸʽ TD */ +.WdateDiv .Wday{ + cursor:pointer; +} +/* ڸmouseoverʽ TD */ +.WdateDiv .WdayOn{ + cursor:pointer; + background-color:#C0EBEF; +} +/* ĩڸʽ TD */ +.WdateDiv .Wwday{ + cursor:pointer; + color:#FF2F2F; +} +/* ĩڸmouseoverʽ TD */ +.WdateDiv .WwdayOn{ + cursor:pointer; + color:#000; + background-color:#C0EBEF; +} +.WdateDiv .Wtoday{ + cursor:pointer; + color:blue; +} +.WdateDiv .Wselday{ + background-color:#A9E4E9; +} +.WdateDiv .WspecialDay{ + background-color:#66F4DF; +} +/* ·ݵ */ +.WdateDiv .WotherDay{ + cursor:pointer; + color:#6A6AFF; +} +/* ·ݵmouseoverʽ */ +.WdateDiv .WotherDayOn{ + cursor:pointer; + background-color:#C0EBEF; +} +/* Чڵʽ,ڷΧڸʽ,ѡ */ +.WdateDiv .WinvalidDay{ + color:#aaa; +} + +/**************************** + * ʱ + ***************************/ +/* ʱ DIV */ +.WdateDiv #dpTime{ + float:left; + margin-top:3px; + margin-right:30px; +} +/* ʱ SPAN */ +.WdateDiv #dpTime #dpTimeStr{ + margin-left:1px; +} +/* ʱ INPUT */ +.WdateDiv #dpTime input{ + width:18px; + height:20px; + text-align:center; + border:#ccc 1px solid; +} +/* ʱ ʱ INPUT */ +.WdateDiv #dpTime .tB{ + border-right:0px; +} +/* ʱ ֺͼ ':' INPUT */ +.WdateDiv #dpTime .tE{ + border-left:0; + border-right:0; +} +/* ʱ INPUT */ +.WdateDiv #dpTime .tm{ + width:7px; + border-left:0; + border-right:0; +} +/* ʱұߵϰť BUTTON */ +.WdateDiv #dpTime #dpTimeUp{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -32px -16px; +} +/* ʱұߵ°ť BUTTON */ +.WdateDiv #dpTime #dpTimeDown{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -48px -16px; +} +/**************************** + * + ***************************/ + .WdateDiv #dpQS { + float:left; + margin-right:3px; + margin-top:3px; + background:url(img.gif) no-repeat 0px -16px; + width:20px; + height:20px; + cursor:pointer; + } +.WdateDiv #dpControl { + text-align:right; +} +.WdateDiv .dpButton{ + height:20px; + width:45px; + border:#ccc 1px solid; + margin-top:2px; + margin-right:1px; +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/开发包/skin/default/img.gif b/src/main/webapp/js/My97DatePicker/开发包/skin/default/img.gif new file mode 100644 index 0000000000000000000000000000000000000000..053205d8201a3a59fb9870c6a4743fc3efd305fa GIT binary patch literal 1578 zcmeH`+f$MW0L8yg4A8uwQi_*?EFI0Au-(}$Yf8m?W;EG$nKo@ja+NL1Tea4jcp*!p z#xz<>P`7c+`wa^*R6tZzP(V!)H8t;$A?U37?Y7VRC+vARFX!bq=gjdB^gDF;iYKra z&;wtkQmNQ%c1R(COeQ~NGC!@X-L1IYFxXP4D45X9#Y#vG{O;&z3Z#Z4<8oSFA+x?V za{Tnn%#2>IZ&|L*t7Y8jifd|ntJ0009XO#-C~j&(iloKy>DgkjSTe29LF*P4Rz)>s zlR9lubIjD_(#1+*k9=rmZLzSbQZ@E*V{5&c-;ph)iRPts9Bz{4%o&bnk3?Qo|85>y zMIwzWCRiN`>GJZjNYwRAl_gh=>pw%8Y^n}|dKO1%w5(5CQ?kLa&MyMBe*G!`@#xgd zJhad%8%mfwUD?7RB_zwV-9n+TxcJZfD#rb>n2O#SVXyRsGKWe{k5&JiHju`7&x;;8 zX=mqRn${|1)AHbwV-H`x zWY%!VBNy&>$JYxurQC8-S!nN6-*1bd6|*Ju(cDTdpE7Z_rH{*QdZ*AU9yjDPi^cyi z|GV@5_8$%4)(t@fzyjR9W?w%6AR&NYWFJt?Y^5TtTrY{LS?!r9$Do3Mnj+tHLpYh# zWD(Jxy+9w6;6n2p`)^?{Gzp6(j7}kA52j9FckK z_pNGC_oRe{N_n`k2GUqo4!bS;JdZ}SXJWpEJ0%`;tcmOnfo~ZVB$@0wis7A)&MkWM zi*YID8j|kVk!5t)N%RVZt>u|lIMbyk;q*oOM#8Ggz|}RD(+*3UbrN{e+QSKMPF@3v zDP#4WQG>fSsFZ~d&gGDXaJhrW5q?=5zR9HK2Kv92L|Fi_6X_w) z3=Pz_Az@HIUwBEX>aLiJ}kGM#j_wVX#(Snb-z}VN@=1p54MEab$wzRB5iw+%tE;Dk0?L@ zv$zET51d@btHYeFN*gCB%_}aFXzq$FKxLJL`=i}s=>mrw;z5yPuqV?SbTmW(rq3r4 zj0k$d_6uYKheSrC(y}WR_1tYwhRL&8&;ZHAYXr91JTJH@D4IrLBe73-MzA#r((I7< zMjF_^iT80P&5jUlujaOj>=0Od2RaT}lmYt2HyiBPT|JH`94~m1k0}_Z^U?mLEWb97 zS literal 0 HcmV?d00001 diff --git a/src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/bg.jpg b/src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75516a6380f3a18d246e090d47999698e4193d6c GIT binary patch literal 307 zcma)%I}XA?3`ED-PeQVgH5(uz6x@S?0`WZ!4L6|Y8r*;uAv#(LJ`Fcn77CVOV!Xga(6BB4DrIK1H-OypPMC&9oX_}>}vF0mlTDi?z#<`+!ZctU# zVEEIggyJ}Enr3Nj+3#?t|AYS?{s>M`f&?)lCc)&-=mG*YNtFb@XTu9r1Cc8}Ah`8} kphyK!asc%NaohO^Ot2#sj4}3y?RB@F-shLmesl8oH`;+K5&!@I literal 0 HcmV?d00001 diff --git a/src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/datepicker.css b/src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/datepicker.css new file mode 100644 index 0000000..208e733 --- /dev/null +++ b/src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/datepicker.css @@ -0,0 +1,277 @@ +/* + * My97 DatePicker 4.7 + * Ƥ:whyGreen + */ + +/* ѡ DIV */ +.WdateDiv{ + width:180px; + background-color:#fff; + border:#C5E1E4 1px solid; + padding:2px; +} +/* ˫Ŀ */ +.WdateDiv2{ + width:360px; +} +.WdateDiv *{font-size:9pt;} + +/**************************** + * ͼ ȫAǩ + ***************************/ +.WdateDiv .NavImg a{ + cursor:pointer; + display:block; + width:16px; + height:16px; + margin-top:1px; +} + +.WdateDiv .NavImgll a{ + float:left; + background:url(img.gif) no-repeat; +} +.WdateDiv .NavImgl a{ + float:left; + background:url(img.gif) no-repeat -16px 0px; +} +.WdateDiv .NavImgr a{ + float:right; + background:url(img.gif) no-repeat -32px 0px; +} +.WdateDiv .NavImgrr a{ + float:right; + background:url(img.gif) no-repeat -48px 0px; +} +/**************************** + * · + ***************************/ +/* · DIV */ +.WdateDiv #dpTitle{ + height:24px; + padding:1px; + border:#c5d9e8 1px solid; + background:url(bg.jpg); + margin-bottom:2px; +} +/* · INPUT */ +.WdateDiv .yminput{ + margin-top:2px; + text-align:center; + border:0px; + height:20px; + width:50px; + color:#034c50; + background-color:transparent; + cursor:pointer; +} +/* ·ýʱʽ INPUT */ +.WdateDiv .yminputfocus{ + margin-top:2px; + text-align:center; + border:#939393 1px solid; + font-weight:bold; + color:#034c50; + height:20px; + width:50px; +} +/* ˵ѡ DIV */ +.WdateDiv .menuSel{ + z-index:1; + position:absolute; + background-color:#FFFFFF; + border:#A3C6C8 1px solid; + display:none; +} +/* ˵ʽ TD */ +.WdateDiv .menu{ + cursor:pointer; + background-color:#fff; + color:#11777C; +} +/* ˵mouseoverʽ TD */ +.WdateDiv .menuOn{ + cursor:pointer; + background-color:#BEEBEE; +} +/* ˵Чʱʽ TD */ +.WdateDiv .invalidMenu{ + color:#aaa; +} +/* ѡƫ DIV */ +.WdateDiv .YMenu{ + margin-top:20px; +} +/* ѡƫ DIV */ +.WdateDiv .MMenu{ + margin-top:20px; + *width:62px; +} +/* ʱѡλ DIV */ +.WdateDiv .hhMenu{ + margin-top:-90px; + margin-left:26px; +} +/* ѡλ DIV */ +.WdateDiv .mmMenu{ + margin-top:-46px; + margin-left:26px; +} +/* ѡλ DIV */ +.WdateDiv .ssMenu{ + margin-top:-24px; + margin-left:26px; +} + +/**************************** + * + ***************************/ + .WdateDiv .Wweek { + text-align:center; + background:#DAF3F5; + border-right:#BDEBEE 1px solid; + } +/**************************** + * , + ***************************/ + /* TR */ +.WdateDiv .MTitle{ + color:#13777e; + background-color:#bdebee; +} +.WdateDiv .WdayTable2{ + border-collapse:collapse; + border:#BEE9F0 1px solid; +} +.WdateDiv .WdayTable2 table{ + border:0; +} +/* TABLE */ +.WdateDiv .WdayTable{ + line-height:20px; + color:#13777e; + background-color:#edfbfb; + border:#BEE9F0 1px solid; +} +.WdateDiv .WdayTable td{ + text-align:center; +} +/* ڸʽ TD */ +.WdateDiv .Wday{ + cursor:pointer; +} +/* ڸmouseoverʽ TD */ +.WdateDiv .WdayOn{ + cursor:pointer; + background-color:#74d2d9 ; +} +/* ĩڸʽ TD */ +.WdateDiv .Wwday{ + cursor:pointer; + color:#ab1e1e; +} +/* ĩڸmouseoverʽ TD */ +.WdateDiv .WwdayOn{ + cursor:pointer; + background-color:#74d2d9; +} +.WdateDiv .Wtoday{ + cursor:pointer; + color:blue; +} +.WdateDiv .Wselday{ + background-color:#A7E2E7; +} +.WdateDiv .WspecialDay{ + background-color:#66F4DF; +} +/* ·ݵ */ +.WdateDiv .WotherDay{ + cursor:pointer; + color:#0099CC; +} +/* ·ݵmouseoverʽ */ +.WdateDiv .WotherDayOn{ + cursor:pointer; + background-color:#C0EBEF; +} +/* Чڵʽ,ڷΧڸʽ,ѡ */ +.WdateDiv .WinvalidDay{ + color:#aaa; +} + +/**************************** + * ʱ + ***************************/ +/* ʱ DIV */ +.WdateDiv #dpTime{ + float:left; + margin-top:3px; + margin-right:30px; +} +/* ʱ SPAN */ +.WdateDiv #dpTime #dpTimeStr{ + margin-left:1px; + color:#497F7F; +} +/* ʱ INPUT */ +.WdateDiv #dpTime input{ + height:20px; + width:18px; + text-align:center; + color:#333; + border:#61CAD0 1px solid; +} +/* ʱ ʱ INPUT */ +.WdateDiv #dpTime .tB{ + border-right:0px; +} +/* ʱ ֺͼ ':' INPUT */ +.WdateDiv #dpTime .tE{ + border-left:0; + border-right:0; +} +/* ʱ INPUT */ +.WdateDiv #dpTime .tm{ + width:7px; + border-left:0; + border-right:0; +} +/* ʱұߵϰť BUTTON */ +.WdateDiv #dpTime #dpTimeUp{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -32px -16px; +} +/* ʱұߵ°ť BUTTON */ +.WdateDiv #dpTime #dpTimeDown{ + height:10px; + width:13px; + border:0px; + background:url(img.gif) no-repeat -48px -16px; +} +/**************************** + * + ***************************/ + .WdateDiv #dpQS { + float:left; + margin-right:3px; + margin-top:3px; + background:url(img.gif) no-repeat 0px -16px; + width:20px; + height:20px; + cursor:pointer; + } +.WdateDiv #dpControl { + text-align:right; + margin-top:3px; +} +.WdateDiv .dpButton{ + height:20px; + width:45px; + margin-top:2px; + border:#38B1B9 1px solid; + background-color:#CFEBEE; + color:#08575B; +} \ No newline at end of file diff --git a/src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/img.gif b/src/main/webapp/js/My97DatePicker/开发包/skin/whyGreen/img.gif new file mode 100644 index 0000000000000000000000000000000000000000..4003f20fb1197edf0433ff99759cb6399d0f99f9 GIT binary patch literal 1679 zcmV;A25|XDNk%w1VL$*R0QUd@0000>z|tkRw@#l!oyCyW^wMhEO#o(Q*4EZ-x4K%c zP*b}=vCr2~x5%c%&Qh|zhqr?>W@b{St~9N+)b#(R%-5i?yE~z#=H}?2w6c`X)wSH? zVX(c6ot;9c!Mx1O#Pj)gylXe5w0^?DK(n}Qv9$m8|Ff^YsngM-(W7*QjZCCI*xcp! z_xGQ#u6)JRzV5Qk(A8vheD3bi_@$kld7x(9h-V@Bjq>_W%FS z@A`Vmb5y*=-QM7b(bSsVj&0D@RntqP*yeEWV(S0(H?y@ot+UeU@$mEf$@9gxx3`nh z;m6j|YQW7gw!8NK`OWn2e$CNL#m$n$k9Y7>EUvuF%*>asnXTcW(B;HqKl zS-;J=yvMh=y2ak!yYKu01pn9*~nwU#=F13gwuo(001$yx6s(zo73t=uf4Cdx@Oy1guu%}t+!pE zu;csxaL{Db^vmDl)k?I&IJU*r@aZnM$KBxRu-@Lr&e8Dx@7C}4c<@17vcJml#OMCx zwd3KH#J>Fg`K!CIuG8bc#>@Z@33=GmuD!(7?9wx@$(_vHwZ*k{;!%#YgNxGE01q8= zzPgg2pmN5@fy;D7sIGCn%Y?|uLbbim-QHTm$EVKS)Ysn4)!5(m+*i3mz1G&9%h6Fbx7R*o7! z!kxSJqTRcA^XlCj(L@VNmV}rvp=+=%S+eXX9s&l;42C}>&|rgv4G94vpn2LnkWH9Y zhpND;aO~JJf3<22G_iOvy+)0!1-p?X(3aaRax=Ve>JEr;jw)yo^x_2(A_FIc`Gzms zyE5G_T^iG%!9XEfgkYDI3PvP7dUEXl0`dt%(i(P+;5H0uD1yr0~QOP{bn2I%G6v14AN&u}B&^Xwbzk^AYjD0|T+b3oh?y zFhVXRaNy1=tgtemV0OS^1~VZ%5eOuru)snulB@#-dJFM^NI&lkGYlrlX!1ZjO*9eW zG+lIo2_|2BQG*0*WI2!>*cH$NDq=*!ju6zG@X9NnK(fguUTndT0R3cwg9GZ+Nkjws zxZ=t{e5BFEGd}nN007hQ(+p<<>9Peqf9x;{CpQR@MGX5u0ZBEV91%w!LNJ8H6}eQP z1UH?ugN!K;Ab|v*8YFW@EeT-%!hjr!OaKiu1KFSp6XqD81{aEWF@zL6)Z+yd)Q}Ow zCS))q3@Byz^TH!2;DCb>ZPZc6K>Cm}MIHf^a*iM*Owfcr`V16K5yf~z%O0bk;fE9% zs9*swF3f=e0)}9~5DD|VaEUZytfK0{s|r+#KZLBZN+<{)JWwFpFtSG!23)fO59M?q zLkBJ>;{q9Eh|=srZ7kso5%S0bam2|@FaZhWTEPd*iQdv^5DO?k03d*TAPx)n6urd^ zCiCUc5L+}7i2?&aki;BwL<0pn=Yc_uA&)7|&^>Q#!GtkROcG5jR(pZY5Nwly1*cv! z1jZYKsZtKru|VO47g_ggaRdgs#Jv!9x^7WPFI2=J>=26WdjuJ`39ir}E!?sO7$&eo zOd%{(LIwsH^brRJw@oNHLfWOCIs$!QfyEIqkTHYmr=zZV>MhtX!|pS*kX`DvA2itT Z!{27S@w5kD(DBS4ugmktD_>AR06TP*k#+z8 literal 0 HcmV?d00001 diff --git a/src/main/webapp/js/additional-methods.js b/src/main/webapp/js/additional-methods.js new file mode 100644 index 0000000..3c27891 --- /dev/null +++ b/src/main/webapp/js/additional-methods.js @@ -0,0 +1,4 @@ +jQuery.validator.addMethod("eng_di", + function(value, element, param) { + return this.optional(element) || /^(?!\d+$)(?![a-zA-Z]+$)[0-9A-Za-z]{5,10}$/.test(value); +}, "Please enter only english or digits"); \ No newline at end of file diff --git a/src/main/webapp/js/echarts.js b/src/main/webapp/js/echarts.js new file mode 100644 index 0000000..7f60dd8 --- /dev/null +++ b/src/main/webapp/js/echarts.js @@ -0,0 +1,94011 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.echarts = {})); +}(this, (function (exports) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + /* global Reflect, Promise */ + + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || from); + } + + var Browser = (function () { + function Browser() { + this.firefox = false; + this.ie = false; + this.edge = false; + this.newEdge = false; + this.weChat = false; + } + return Browser; + }()); + var Env = (function () { + function Env() { + this.browser = new Browser(); + this.node = false; + this.wxa = false; + this.worker = false; + this.canvasSupported = false; + this.svgSupported = false; + this.touchEventsSupported = false; + this.pointerEventsSupported = false; + this.domSupported = false; + this.transformSupported = false; + this.transform3dSupported = false; + } + return Env; + }()); + var env = new Env(); + if (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') { + env.wxa = true; + env.canvasSupported = true; + env.touchEventsSupported = true; + } + else if (typeof document === 'undefined' && typeof self !== 'undefined') { + env.worker = true; + env.canvasSupported = true; + } + else if (typeof navigator === 'undefined') { + env.node = true; + env.canvasSupported = true; + env.svgSupported = true; + } + else { + detect(navigator.userAgent, env); + } + function detect(ua, env) { + var browser = env.browser; + var firefox = ua.match(/Firefox\/([\d.]+)/); + var ie = ua.match(/MSIE\s([\d.]+)/) + || ua.match(/Trident\/.+?rv:(([\d.]+))/); + var edge = ua.match(/Edge?\/([\d.]+)/); + var weChat = (/micromessenger/i).test(ua); + if (firefox) { + browser.firefox = true; + browser.version = firefox[1]; + } + if (ie) { + browser.ie = true; + browser.version = ie[1]; + } + if (edge) { + browser.edge = true; + browser.version = edge[1]; + browser.newEdge = +edge[1].split('.')[0] > 18; + } + if (weChat) { + browser.weChat = true; + } + env.canvasSupported = !!document.createElement('canvas').getContext; + env.svgSupported = typeof SVGRect !== 'undefined'; + env.touchEventsSupported = 'ontouchstart' in window && !browser.ie && !browser.edge; + env.pointerEventsSupported = 'onpointerdown' in window + && (browser.edge || (browser.ie && +browser.version >= 11)); + env.domSupported = typeof document !== 'undefined'; + var style = document.documentElement.style; + env.transform3dSupported = ((browser.ie && 'transition' in style) + || browser.edge + || (('WebKitCSSMatrix' in window) && ('m11' in new WebKitCSSMatrix())) + || 'MozPerspective' in style) + && !('OTransition' in style); + env.transformSupported = env.transform3dSupported + || (browser.ie && +browser.version >= 9); + } + + var BUILTIN_OBJECT = { + '[object Function]': true, + '[object RegExp]': true, + '[object Date]': true, + '[object Error]': true, + '[object CanvasGradient]': true, + '[object CanvasPattern]': true, + '[object Image]': true, + '[object Canvas]': true + }; + var TYPED_ARRAY = { + '[object Int8Array]': true, + '[object Uint8Array]': true, + '[object Uint8ClampedArray]': true, + '[object Int16Array]': true, + '[object Uint16Array]': true, + '[object Int32Array]': true, + '[object Uint32Array]': true, + '[object Float32Array]': true, + '[object Float64Array]': true + }; + var objToString = Object.prototype.toString; + var arrayProto = Array.prototype; + var nativeForEach = arrayProto.forEach; + var nativeFilter = arrayProto.filter; + var nativeSlice = arrayProto.slice; + var nativeMap = arrayProto.map; + var ctorFunction = function () { }.constructor; + var protoFunction = ctorFunction ? ctorFunction.prototype : null; + var protoKey = '__proto__'; + var methods = {}; + function $override(name, fn) { + methods[name] = fn; + } + var idStart = 0x0907; + function guid() { + return idStart++; + } + function logError() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (typeof console !== 'undefined') { + console.error.apply(console, args); + } + } + function clone(source) { + if (source == null || typeof source !== 'object') { + return source; + } + var result = source; + var typeStr = objToString.call(source); + if (typeStr === '[object Array]') { + if (!isPrimitive(source)) { + result = []; + for (var i = 0, len = source.length; i < len; i++) { + result[i] = clone(source[i]); + } + } + } + else if (TYPED_ARRAY[typeStr]) { + if (!isPrimitive(source)) { + var Ctor = source.constructor; + if (Ctor.from) { + result = Ctor.from(source); + } + else { + result = new Ctor(source.length); + for (var i = 0, len = source.length; i < len; i++) { + result[i] = clone(source[i]); + } + } + } + } + else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) { + result = {}; + for (var key in source) { + if (source.hasOwnProperty(key) && key !== protoKey) { + result[key] = clone(source[key]); + } + } + } + return result; + } + function merge(target, source, overwrite) { + if (!isObject(source) || !isObject(target)) { + return overwrite ? clone(source) : target; + } + for (var key in source) { + if (source.hasOwnProperty(key) && key !== protoKey) { + var targetProp = target[key]; + var sourceProp = source[key]; + if (isObject(sourceProp) + && isObject(targetProp) + && !isArray(sourceProp) + && !isArray(targetProp) + && !isDom(sourceProp) + && !isDom(targetProp) + && !isBuiltInObject(sourceProp) + && !isBuiltInObject(targetProp) + && !isPrimitive(sourceProp) + && !isPrimitive(targetProp)) { + merge(targetProp, sourceProp, overwrite); + } + else if (overwrite || !(key in target)) { + target[key] = clone(source[key]); + } + } + } + return target; + } + function mergeAll(targetAndSources, overwrite) { + var result = targetAndSources[0]; + for (var i = 1, len = targetAndSources.length; i < len; i++) { + result = merge(result, targetAndSources[i], overwrite); + } + return result; + } + function extend(target, source) { + if (Object.assign) { + Object.assign(target, source); + } + else { + for (var key in source) { + if (source.hasOwnProperty(key) && key !== protoKey) { + target[key] = source[key]; + } + } + } + return target; + } + function defaults(target, source, overlay) { + var keysArr = keys(source); + for (var i = 0; i < keysArr.length; i++) { + var key = keysArr[i]; + if ((overlay ? source[key] != null : target[key] == null)) { + target[key] = source[key]; + } + } + return target; + } + var createCanvas = function () { + return methods.createCanvas(); + }; + methods.createCanvas = function () { + return document.createElement('canvas'); + }; + function indexOf(array, value) { + if (array) { + if (array.indexOf) { + return array.indexOf(value); + } + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + } + return -1; + } + function inherits(clazz, baseClazz) { + var clazzPrototype = clazz.prototype; + function F() { } + F.prototype = baseClazz.prototype; + clazz.prototype = new F(); + for (var prop in clazzPrototype) { + if (clazzPrototype.hasOwnProperty(prop)) { + clazz.prototype[prop] = clazzPrototype[prop]; + } + } + clazz.prototype.constructor = clazz; + clazz.superClass = baseClazz; + } + function mixin(target, source, override) { + target = 'prototype' in target ? target.prototype : target; + source = 'prototype' in source ? source.prototype : source; + if (Object.getOwnPropertyNames) { + var keyList = Object.getOwnPropertyNames(source); + for (var i = 0; i < keyList.length; i++) { + var key = keyList[i]; + if (key !== 'constructor') { + if ((override ? source[key] != null : target[key] == null)) { + target[key] = source[key]; + } + } + } + } + else { + defaults(target, source, override); + } + } + function isArrayLike(data) { + if (!data) { + return false; + } + if (typeof data === 'string') { + return false; + } + return typeof data.length === 'number'; + } + function each(arr, cb, context) { + if (!(arr && cb)) { + return; + } + if (arr.forEach && arr.forEach === nativeForEach) { + arr.forEach(cb, context); + } + else if (arr.length === +arr.length) { + for (var i = 0, len = arr.length; i < len; i++) { + cb.call(context, arr[i], i, arr); + } + } + else { + for (var key in arr) { + if (arr.hasOwnProperty(key)) { + cb.call(context, arr[key], key, arr); + } + } + } + } + function map(arr, cb, context) { + if (!arr) { + return []; + } + if (!cb) { + return slice(arr); + } + if (arr.map && arr.map === nativeMap) { + return arr.map(cb, context); + } + else { + var result = []; + for (var i = 0, len = arr.length; i < len; i++) { + result.push(cb.call(context, arr[i], i, arr)); + } + return result; + } + } + function reduce(arr, cb, memo, context) { + if (!(arr && cb)) { + return; + } + for (var i = 0, len = arr.length; i < len; i++) { + memo = cb.call(context, memo, arr[i], i, arr); + } + return memo; + } + function filter(arr, cb, context) { + if (!arr) { + return []; + } + if (!cb) { + return slice(arr); + } + if (arr.filter && arr.filter === nativeFilter) { + return arr.filter(cb, context); + } + else { + var result = []; + for (var i = 0, len = arr.length; i < len; i++) { + if (cb.call(context, arr[i], i, arr)) { + result.push(arr[i]); + } + } + return result; + } + } + function find(arr, cb, context) { + if (!(arr && cb)) { + return; + } + for (var i = 0, len = arr.length; i < len; i++) { + if (cb.call(context, arr[i], i, arr)) { + return arr[i]; + } + } + } + function keys(obj) { + if (!obj) { + return []; + } + if (Object.keys) { + return Object.keys(obj); + } + var keyList = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + keyList.push(key); + } + } + return keyList; + } + function bindPolyfill(func, context) { + var args = []; + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + return function () { + return func.apply(context, args.concat(nativeSlice.call(arguments))); + }; + } + var bind = (protoFunction && isFunction(protoFunction.bind)) + ? protoFunction.call.bind(protoFunction.bind) + : bindPolyfill; + function curry(func) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return function () { + return func.apply(this, args.concat(nativeSlice.call(arguments))); + }; + } + function isArray(value) { + if (Array.isArray) { + return Array.isArray(value); + } + return objToString.call(value) === '[object Array]'; + } + function isFunction(value) { + return typeof value === 'function'; + } + function isString(value) { + return typeof value === 'string'; + } + function isStringSafe(value) { + return objToString.call(value) === '[object String]'; + } + function isNumber(value) { + return typeof value === 'number'; + } + function isObject(value) { + var type = typeof value; + return type === 'function' || (!!value && type === 'object'); + } + function isBuiltInObject(value) { + return !!BUILTIN_OBJECT[objToString.call(value)]; + } + function isTypedArray(value) { + return !!TYPED_ARRAY[objToString.call(value)]; + } + function isDom(value) { + return typeof value === 'object' + && typeof value.nodeType === 'number' + && typeof value.ownerDocument === 'object'; + } + function isGradientObject(value) { + return value.colorStops != null; + } + function isImagePatternObject(value) { + return value.image != null; + } + function isRegExp(value) { + return objToString.call(value) === '[object RegExp]'; + } + function eqNaN(value) { + return value !== value; + } + function retrieve() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + for (var i = 0, len = args.length; i < len; i++) { + if (args[i] != null) { + return args[i]; + } + } + } + function retrieve2(value0, value1) { + return value0 != null + ? value0 + : value1; + } + function retrieve3(value0, value1, value2) { + return value0 != null + ? value0 + : value1 != null + ? value1 + : value2; + } + function slice(arr) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return nativeSlice.apply(arr, args); + } + function normalizeCssArray(val) { + if (typeof (val) === 'number') { + return [val, val, val, val]; + } + var len = val.length; + if (len === 2) { + return [val[0], val[1], val[0], val[1]]; + } + else if (len === 3) { + return [val[0], val[1], val[2], val[1]]; + } + return val; + } + function assert(condition, message) { + if (!condition) { + throw new Error(message); + } + } + function trim(str) { + if (str == null) { + return null; + } + else if (typeof str.trim === 'function') { + return str.trim(); + } + else { + return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + } + } + var primitiveKey = '__ec_primitive__'; + function setAsPrimitive(obj) { + obj[primitiveKey] = true; + } + function isPrimitive(obj) { + return obj[primitiveKey]; + } + var HashMap = (function () { + function HashMap(obj) { + this.data = {}; + var isArr = isArray(obj); + this.data = {}; + var thisMap = this; + (obj instanceof HashMap) + ? obj.each(visit) + : (obj && each(obj, visit)); + function visit(value, key) { + isArr ? thisMap.set(value, key) : thisMap.set(key, value); + } + } + HashMap.prototype.get = function (key) { + return this.data.hasOwnProperty(key) ? this.data[key] : null; + }; + HashMap.prototype.set = function (key, value) { + return (this.data[key] = value); + }; + HashMap.prototype.each = function (cb, context) { + for (var key in this.data) { + if (this.data.hasOwnProperty(key)) { + cb.call(context, this.data[key], key); + } + } + }; + HashMap.prototype.keys = function () { + return keys(this.data); + }; + HashMap.prototype.removeKey = function (key) { + delete this.data[key]; + }; + return HashMap; + }()); + function createHashMap(obj) { + return new HashMap(obj); + } + function concatArray(a, b) { + var newArray = new a.constructor(a.length + b.length); + for (var i = 0; i < a.length; i++) { + newArray[i] = a[i]; + } + var offset = a.length; + for (var i = 0; i < b.length; i++) { + newArray[i + offset] = b[i]; + } + return newArray; + } + function createObject(proto, properties) { + var obj; + if (Object.create) { + obj = Object.create(proto); + } + else { + var StyleCtor = function () { }; + StyleCtor.prototype = proto; + obj = new StyleCtor(); + } + if (properties) { + extend(obj, properties); + } + return obj; + } + function hasOwn(own, prop) { + return own.hasOwnProperty(prop); + } + function noop() { } + + var util = /*#__PURE__*/Object.freeze({ + __proto__: null, + $override: $override, + guid: guid, + logError: logError, + clone: clone, + merge: merge, + mergeAll: mergeAll, + extend: extend, + defaults: defaults, + createCanvas: createCanvas, + indexOf: indexOf, + inherits: inherits, + mixin: mixin, + isArrayLike: isArrayLike, + each: each, + map: map, + reduce: reduce, + filter: filter, + find: find, + keys: keys, + bind: bind, + curry: curry, + isArray: isArray, + isFunction: isFunction, + isString: isString, + isStringSafe: isStringSafe, + isNumber: isNumber, + isObject: isObject, + isBuiltInObject: isBuiltInObject, + isTypedArray: isTypedArray, + isDom: isDom, + isGradientObject: isGradientObject, + isImagePatternObject: isImagePatternObject, + isRegExp: isRegExp, + eqNaN: eqNaN, + retrieve: retrieve, + retrieve2: retrieve2, + retrieve3: retrieve3, + slice: slice, + normalizeCssArray: normalizeCssArray, + assert: assert, + trim: trim, + setAsPrimitive: setAsPrimitive, + isPrimitive: isPrimitive, + HashMap: HashMap, + createHashMap: createHashMap, + concatArray: concatArray, + createObject: createObject, + hasOwn: hasOwn, + noop: noop + }); + + function create(x, y) { + if (x == null) { + x = 0; + } + if (y == null) { + y = 0; + } + return [x, y]; + } + function copy(out, v) { + out[0] = v[0]; + out[1] = v[1]; + return out; + } + function clone$1(v) { + return [v[0], v[1]]; + } + function set(out, a, b) { + out[0] = a; + out[1] = b; + return out; + } + function add(out, v1, v2) { + out[0] = v1[0] + v2[0]; + out[1] = v1[1] + v2[1]; + return out; + } + function scaleAndAdd(out, v1, v2, a) { + out[0] = v1[0] + v2[0] * a; + out[1] = v1[1] + v2[1] * a; + return out; + } + function sub(out, v1, v2) { + out[0] = v1[0] - v2[0]; + out[1] = v1[1] - v2[1]; + return out; + } + function len(v) { + return Math.sqrt(lenSquare(v)); + } + var length = len; + function lenSquare(v) { + return v[0] * v[0] + v[1] * v[1]; + } + var lengthSquare = lenSquare; + function mul(out, v1, v2) { + out[0] = v1[0] * v2[0]; + out[1] = v1[1] * v2[1]; + return out; + } + function div(out, v1, v2) { + out[0] = v1[0] / v2[0]; + out[1] = v1[1] / v2[1]; + return out; + } + function dot(v1, v2) { + return v1[0] * v2[0] + v1[1] * v2[1]; + } + function scale(out, v, s) { + out[0] = v[0] * s; + out[1] = v[1] * s; + return out; + } + function normalize(out, v) { + var d = len(v); + if (d === 0) { + out[0] = 0; + out[1] = 0; + } + else { + out[0] = v[0] / d; + out[1] = v[1] / d; + } + return out; + } + function distance(v1, v2) { + return Math.sqrt((v1[0] - v2[0]) * (v1[0] - v2[0]) + + (v1[1] - v2[1]) * (v1[1] - v2[1])); + } + var dist = distance; + function distanceSquare(v1, v2) { + return (v1[0] - v2[0]) * (v1[0] - v2[0]) + + (v1[1] - v2[1]) * (v1[1] - v2[1]); + } + var distSquare = distanceSquare; + function negate(out, v) { + out[0] = -v[0]; + out[1] = -v[1]; + return out; + } + function lerp(out, v1, v2, t) { + out[0] = v1[0] + t * (v2[0] - v1[0]); + out[1] = v1[1] + t * (v2[1] - v1[1]); + return out; + } + function applyTransform(out, v, m) { + var x = v[0]; + var y = v[1]; + out[0] = m[0] * x + m[2] * y + m[4]; + out[1] = m[1] * x + m[3] * y + m[5]; + return out; + } + function min(out, v1, v2) { + out[0] = Math.min(v1[0], v2[0]); + out[1] = Math.min(v1[1], v2[1]); + return out; + } + function max(out, v1, v2) { + out[0] = Math.max(v1[0], v2[0]); + out[1] = Math.max(v1[1], v2[1]); + return out; + } + + var vector = /*#__PURE__*/Object.freeze({ + __proto__: null, + create: create, + copy: copy, + clone: clone$1, + set: set, + add: add, + scaleAndAdd: scaleAndAdd, + sub: sub, + len: len, + length: length, + lenSquare: lenSquare, + lengthSquare: lengthSquare, + mul: mul, + div: div, + dot: dot, + scale: scale, + normalize: normalize, + distance: distance, + dist: dist, + distanceSquare: distanceSquare, + distSquare: distSquare, + negate: negate, + lerp: lerp, + applyTransform: applyTransform, + min: min, + max: max + }); + + var Param = (function () { + function Param(target, e) { + this.target = target; + this.topTarget = e && e.topTarget; + } + return Param; + }()); + var Draggable = (function () { + function Draggable(handler) { + this.handler = handler; + handler.on('mousedown', this._dragStart, this); + handler.on('mousemove', this._drag, this); + handler.on('mouseup', this._dragEnd, this); + } + Draggable.prototype._dragStart = function (e) { + var draggingTarget = e.target; + while (draggingTarget && !draggingTarget.draggable) { + draggingTarget = draggingTarget.parent; + } + if (draggingTarget) { + this._draggingTarget = draggingTarget; + draggingTarget.dragging = true; + this._x = e.offsetX; + this._y = e.offsetY; + this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragstart', e.event); + } + }; + Draggable.prototype._drag = function (e) { + var draggingTarget = this._draggingTarget; + if (draggingTarget) { + var x = e.offsetX; + var y = e.offsetY; + var dx = x - this._x; + var dy = y - this._y; + this._x = x; + this._y = y; + draggingTarget.drift(dx, dy, e); + this.handler.dispatchToElement(new Param(draggingTarget, e), 'drag', e.event); + var dropTarget = this.handler.findHover(x, y, draggingTarget).target; + var lastDropTarget = this._dropTarget; + this._dropTarget = dropTarget; + if (draggingTarget !== dropTarget) { + if (lastDropTarget && dropTarget !== lastDropTarget) { + this.handler.dispatchToElement(new Param(lastDropTarget, e), 'dragleave', e.event); + } + if (dropTarget && dropTarget !== lastDropTarget) { + this.handler.dispatchToElement(new Param(dropTarget, e), 'dragenter', e.event); + } + } + } + }; + Draggable.prototype._dragEnd = function (e) { + var draggingTarget = this._draggingTarget; + if (draggingTarget) { + draggingTarget.dragging = false; + } + this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragend', e.event); + if (this._dropTarget) { + this.handler.dispatchToElement(new Param(this._dropTarget, e), 'drop', e.event); + } + this._draggingTarget = null; + this._dropTarget = null; + }; + return Draggable; + }()); + + var Eventful = (function () { + function Eventful(eventProcessors) { + if (eventProcessors) { + this._$eventProcessor = eventProcessors; + } + } + Eventful.prototype.on = function (event, query, handler, context) { + if (!this._$handlers) { + this._$handlers = {}; + } + var _h = this._$handlers; + if (typeof query === 'function') { + context = handler; + handler = query; + query = null; + } + if (!handler || !event) { + return this; + } + var eventProcessor = this._$eventProcessor; + if (query != null && eventProcessor && eventProcessor.normalizeQuery) { + query = eventProcessor.normalizeQuery(query); + } + if (!_h[event]) { + _h[event] = []; + } + for (var i = 0; i < _h[event].length; i++) { + if (_h[event][i].h === handler) { + return this; + } + } + var wrap = { + h: handler, + query: query, + ctx: (context || this), + callAtLast: handler.zrEventfulCallAtLast + }; + var lastIndex = _h[event].length - 1; + var lastWrap = _h[event][lastIndex]; + (lastWrap && lastWrap.callAtLast) + ? _h[event].splice(lastIndex, 0, wrap) + : _h[event].push(wrap); + return this; + }; + Eventful.prototype.isSilent = function (eventName) { + var _h = this._$handlers; + return !_h || !_h[eventName] || !_h[eventName].length; + }; + Eventful.prototype.off = function (eventType, handler) { + var _h = this._$handlers; + if (!_h) { + return this; + } + if (!eventType) { + this._$handlers = {}; + return this; + } + if (handler) { + if (_h[eventType]) { + var newList = []; + for (var i = 0, l = _h[eventType].length; i < l; i++) { + if (_h[eventType][i].h !== handler) { + newList.push(_h[eventType][i]); + } + } + _h[eventType] = newList; + } + if (_h[eventType] && _h[eventType].length === 0) { + delete _h[eventType]; + } + } + else { + delete _h[eventType]; + } + return this; + }; + Eventful.prototype.trigger = function (eventType) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + if (!this._$handlers) { + return this; + } + var _h = this._$handlers[eventType]; + var eventProcessor = this._$eventProcessor; + if (_h) { + var argLen = args.length; + var len = _h.length; + for (var i = 0; i < len; i++) { + var hItem = _h[i]; + if (eventProcessor + && eventProcessor.filter + && hItem.query != null + && !eventProcessor.filter(eventType, hItem.query)) { + continue; + } + switch (argLen) { + case 0: + hItem.h.call(hItem.ctx); + break; + case 1: + hItem.h.call(hItem.ctx, args[0]); + break; + case 2: + hItem.h.call(hItem.ctx, args[0], args[1]); + break; + default: + hItem.h.apply(hItem.ctx, args); + break; + } + } + } + eventProcessor && eventProcessor.afterTrigger + && eventProcessor.afterTrigger(eventType); + return this; + }; + Eventful.prototype.triggerWithContext = function (type) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + if (!this._$handlers) { + return this; + } + var _h = this._$handlers[type]; + var eventProcessor = this._$eventProcessor; + if (_h) { + var argLen = args.length; + var ctx = args[argLen - 1]; + var len = _h.length; + for (var i = 0; i < len; i++) { + var hItem = _h[i]; + if (eventProcessor + && eventProcessor.filter + && hItem.query != null + && !eventProcessor.filter(type, hItem.query)) { + continue; + } + switch (argLen) { + case 0: + hItem.h.call(ctx); + break; + case 1: + hItem.h.call(ctx, args[0]); + break; + case 2: + hItem.h.call(ctx, args[0], args[1]); + break; + default: + hItem.h.apply(ctx, args.slice(1, argLen - 1)); + break; + } + } + } + eventProcessor && eventProcessor.afterTrigger + && eventProcessor.afterTrigger(type); + return this; + }; + return Eventful; + }()); + + var LN2 = Math.log(2); + function determinant(rows, rank, rowStart, rowMask, colMask, detCache) { + var cacheKey = rowMask + '-' + colMask; + var fullRank = rows.length; + if (detCache.hasOwnProperty(cacheKey)) { + return detCache[cacheKey]; + } + if (rank === 1) { + var colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2); + return rows[rowStart][colStart]; + } + var subRowMask = rowMask | (1 << rowStart); + var subRowStart = rowStart + 1; + while (rowMask & (1 << subRowStart)) { + subRowStart++; + } + var sum = 0; + for (var j = 0, colLocalIdx = 0; j < fullRank; j++) { + var colTag = 1 << j; + if (!(colTag & colMask)) { + sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j] + * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache); + colLocalIdx++; + } + } + detCache[cacheKey] = sum; + return sum; + } + function buildTransformer(src, dest) { + var mA = [ + [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]], + [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]], + [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]], + [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]], + [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]], + [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]], + [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]], + [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]] + ]; + var detCache = {}; + var det = determinant(mA, 8, 0, 0, 0, detCache); + if (det === 0) { + return; + } + var vh = []; + for (var i = 0; i < 8; i++) { + for (var j = 0; j < 8; j++) { + vh[j] == null && (vh[j] = 0); + vh[j] += ((i + j) % 2 ? -1 : 1) + * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache) + / det * dest[i]; + } + } + return function (out, srcPointX, srcPointY) { + var pk = srcPointX * vh[6] + srcPointY * vh[7] + 1; + out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk; + out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk; + }; + } + + var EVENT_SAVED_PROP = '___zrEVENTSAVED'; + var _calcOut = []; + function transformLocalCoord(out, elFrom, elTarget, inX, inY) { + return transformCoordWithViewport(_calcOut, elFrom, inX, inY, true) + && transformCoordWithViewport(out, elTarget, _calcOut[0], _calcOut[1]); + } + function transformCoordWithViewport(out, el, inX, inY, inverse) { + if (el.getBoundingClientRect && env.domSupported && !isCanvasEl(el)) { + var saved = el[EVENT_SAVED_PROP] || (el[EVENT_SAVED_PROP] = {}); + var markers = prepareCoordMarkers(el, saved); + var transformer = preparePointerTransformer(markers, saved, inverse); + if (transformer) { + transformer(out, inX, inY); + return true; + } + } + return false; + } + function prepareCoordMarkers(el, saved) { + var markers = saved.markers; + if (markers) { + return markers; + } + markers = saved.markers = []; + var propLR = ['left', 'right']; + var propTB = ['top', 'bottom']; + for (var i = 0; i < 4; i++) { + var marker = document.createElement('div'); + var stl = marker.style; + var idxLR = i % 2; + var idxTB = (i >> 1) % 2; + stl.cssText = [ + 'position: absolute', + 'visibility: hidden', + 'padding: 0', + 'margin: 0', + 'border-width: 0', + 'user-select: none', + 'width:0', + 'height:0', + propLR[idxLR] + ':0', + propTB[idxTB] + ':0', + propLR[1 - idxLR] + ':auto', + propTB[1 - idxTB] + ':auto', + '' + ].join('!important;'); + el.appendChild(marker); + markers.push(marker); + } + return markers; + } + function preparePointerTransformer(markers, saved, inverse) { + var transformerName = inverse ? 'invTrans' : 'trans'; + var transformer = saved[transformerName]; + var oldSrcCoords = saved.srcCoords; + var srcCoords = []; + var destCoords = []; + var oldCoordTheSame = true; + for (var i = 0; i < 4; i++) { + var rect = markers[i].getBoundingClientRect(); + var ii = 2 * i; + var x = rect.left; + var y = rect.top; + srcCoords.push(x, y); + oldCoordTheSame = oldCoordTheSame && oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1]; + destCoords.push(markers[i].offsetLeft, markers[i].offsetTop); + } + return (oldCoordTheSame && transformer) + ? transformer + : (saved.srcCoords = srcCoords, + saved[transformerName] = inverse + ? buildTransformer(destCoords, srcCoords) + : buildTransformer(srcCoords, destCoords)); + } + function isCanvasEl(el) { + return el.nodeName.toUpperCase() === 'CANVAS'; + } + + var isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener; + var MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/; + var _calcOut$1 = []; + function clientToLocal(el, e, out, calculate) { + out = out || {}; + if (calculate || !env.canvasSupported) { + calculateZrXY(el, e, out); + } + else if (env.browser.firefox + && env.browser.version < '39' + && e.layerX != null + && e.layerX !== e.offsetX) { + out.zrX = e.layerX; + out.zrY = e.layerY; + } + else if (e.offsetX != null) { + out.zrX = e.offsetX; + out.zrY = e.offsetY; + } + else { + calculateZrXY(el, e, out); + } + return out; + } + function calculateZrXY(el, e, out) { + if (env.domSupported && el.getBoundingClientRect) { + var ex = e.clientX; + var ey = e.clientY; + if (isCanvasEl(el)) { + var box = el.getBoundingClientRect(); + out.zrX = ex - box.left; + out.zrY = ey - box.top; + return; + } + else { + if (transformCoordWithViewport(_calcOut$1, el, ex, ey)) { + out.zrX = _calcOut$1[0]; + out.zrY = _calcOut$1[1]; + return; + } + } + } + out.zrX = out.zrY = 0; + } + function getNativeEvent(e) { + return e + || window.event; + } + function normalizeEvent(el, e, calculate) { + e = getNativeEvent(e); + if (e.zrX != null) { + return e; + } + var eventType = e.type; + var isTouch = eventType && eventType.indexOf('touch') >= 0; + if (!isTouch) { + clientToLocal(el, e, e, calculate); + var wheelDelta = getWheelDeltaMayPolyfill(e); + e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3; + } + else { + var touch = eventType !== 'touchend' + ? e.targetTouches[0] + : e.changedTouches[0]; + touch && clientToLocal(el, touch, e, calculate); + } + var button = e.button; + if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) { + e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0))); + } + return e; + } + function getWheelDeltaMayPolyfill(e) { + var rawWheelDelta = e.wheelDelta; + if (rawWheelDelta) { + return rawWheelDelta; + } + var deltaX = e.deltaX; + var deltaY = e.deltaY; + if (deltaX == null || deltaY == null) { + return rawWheelDelta; + } + var delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX); + var sign = deltaY > 0 ? -1 + : deltaY < 0 ? 1 + : deltaX > 0 ? -1 + : 1; + return 3 * delta * sign; + } + function addEventListener(el, name, handler, opt) { + if (isDomLevel2) { + el.addEventListener(name, handler, opt); + } + else { + el.attachEvent('on' + name, handler); + } + } + function removeEventListener(el, name, handler, opt) { + if (isDomLevel2) { + el.removeEventListener(name, handler, opt); + } + else { + el.detachEvent('on' + name, handler); + } + } + var stop = isDomLevel2 + ? function (e) { + e.preventDefault(); + e.stopPropagation(); + e.cancelBubble = true; + } + : function (e) { + e.returnValue = false; + e.cancelBubble = true; + }; + function isMiddleOrRightButtonOnMouseUpDown(e) { + return e.which === 2 || e.which === 3; + } + + var GestureMgr = (function () { + function GestureMgr() { + this._track = []; + } + GestureMgr.prototype.recognize = function (event, target, root) { + this._doTrack(event, target, root); + return this._recognize(event); + }; + GestureMgr.prototype.clear = function () { + this._track.length = 0; + return this; + }; + GestureMgr.prototype._doTrack = function (event, target, root) { + var touches = event.touches; + if (!touches) { + return; + } + var trackItem = { + points: [], + touches: [], + target: target, + event: event + }; + for (var i = 0, len = touches.length; i < len; i++) { + var touch = touches[i]; + var pos = clientToLocal(root, touch, {}); + trackItem.points.push([pos.zrX, pos.zrY]); + trackItem.touches.push(touch); + } + this._track.push(trackItem); + }; + GestureMgr.prototype._recognize = function (event) { + for (var eventName in recognizers) { + if (recognizers.hasOwnProperty(eventName)) { + var gestureInfo = recognizers[eventName](this._track, event); + if (gestureInfo) { + return gestureInfo; + } + } + } + }; + return GestureMgr; + }()); + function dist$1(pointPair) { + var dx = pointPair[1][0] - pointPair[0][0]; + var dy = pointPair[1][1] - pointPair[0][1]; + return Math.sqrt(dx * dx + dy * dy); + } + function center(pointPair) { + return [ + (pointPair[0][0] + pointPair[1][0]) / 2, + (pointPair[0][1] + pointPair[1][1]) / 2 + ]; + } + var recognizers = { + pinch: function (tracks, event) { + var trackLen = tracks.length; + if (!trackLen) { + return; + } + var pinchEnd = (tracks[trackLen - 1] || {}).points; + var pinchPre = (tracks[trackLen - 2] || {}).points || pinchEnd; + if (pinchPre + && pinchPre.length > 1 + && pinchEnd + && pinchEnd.length > 1) { + var pinchScale = dist$1(pinchEnd) / dist$1(pinchPre); + !isFinite(pinchScale) && (pinchScale = 1); + event.pinchScale = pinchScale; + var pinchCenter = center(pinchEnd); + event.pinchX = pinchCenter[0]; + event.pinchY = pinchCenter[1]; + return { + type: 'pinch', + target: tracks[0].target, + event: event + }; + } + } + }; + + var SILENT = 'silent'; + function makeEventPacket(eveType, targetInfo, event) { + return { + type: eveType, + event: event, + target: targetInfo.target, + topTarget: targetInfo.topTarget, + cancelBubble: false, + offsetX: event.zrX, + offsetY: event.zrY, + gestureEvent: event.gestureEvent, + pinchX: event.pinchX, + pinchY: event.pinchY, + pinchScale: event.pinchScale, + wheelDelta: event.zrDelta, + zrByTouch: event.zrByTouch, + which: event.which, + stop: stopEvent + }; + } + function stopEvent() { + stop(this.event); + } + var EmptyProxy = (function (_super) { + __extends(EmptyProxy, _super); + function EmptyProxy() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.handler = null; + return _this; + } + EmptyProxy.prototype.dispose = function () { }; + EmptyProxy.prototype.setCursor = function () { }; + return EmptyProxy; + }(Eventful)); + var HoveredResult = (function () { + function HoveredResult(x, y) { + this.x = x; + this.y = y; + } + return HoveredResult; + }()); + var handlerNames = [ + 'click', 'dblclick', 'mousewheel', 'mouseout', + 'mouseup', 'mousedown', 'mousemove', 'contextmenu' + ]; + var Handler = (function (_super) { + __extends(Handler, _super); + function Handler(storage, painter, proxy, painterRoot) { + var _this = _super.call(this) || this; + _this._hovered = new HoveredResult(0, 0); + _this.storage = storage; + _this.painter = painter; + _this.painterRoot = painterRoot; + proxy = proxy || new EmptyProxy(); + _this.proxy = null; + _this.setHandlerProxy(proxy); + _this._draggingMgr = new Draggable(_this); + return _this; + } + Handler.prototype.setHandlerProxy = function (proxy) { + if (this.proxy) { + this.proxy.dispose(); + } + if (proxy) { + each(handlerNames, function (name) { + proxy.on && proxy.on(name, this[name], this); + }, this); + proxy.handler = this; + } + this.proxy = proxy; + }; + Handler.prototype.mousemove = function (event) { + var x = event.zrX; + var y = event.zrY; + var isOutside = isOutsideBoundary(this, x, y); + var lastHovered = this._hovered; + var lastHoveredTarget = lastHovered.target; + if (lastHoveredTarget && !lastHoveredTarget.__zr) { + lastHovered = this.findHover(lastHovered.x, lastHovered.y); + lastHoveredTarget = lastHovered.target; + } + var hovered = this._hovered = isOutside ? new HoveredResult(x, y) : this.findHover(x, y); + var hoveredTarget = hovered.target; + var proxy = this.proxy; + proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default'); + if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) { + this.dispatchToElement(lastHovered, 'mouseout', event); + } + this.dispatchToElement(hovered, 'mousemove', event); + if (hoveredTarget && hoveredTarget !== lastHoveredTarget) { + this.dispatchToElement(hovered, 'mouseover', event); + } + }; + Handler.prototype.mouseout = function (event) { + var eventControl = event.zrEventControl; + if (eventControl !== 'only_globalout') { + this.dispatchToElement(this._hovered, 'mouseout', event); + } + if (eventControl !== 'no_globalout') { + this.trigger('globalout', { type: 'globalout', event: event }); + } + }; + Handler.prototype.resize = function () { + this._hovered = new HoveredResult(0, 0); + }; + Handler.prototype.dispatch = function (eventName, eventArgs) { + var handler = this[eventName]; + handler && handler.call(this, eventArgs); + }; + Handler.prototype.dispose = function () { + this.proxy.dispose(); + this.storage = null; + this.proxy = null; + this.painter = null; + }; + Handler.prototype.setCursorStyle = function (cursorStyle) { + var proxy = this.proxy; + proxy.setCursor && proxy.setCursor(cursorStyle); + }; + Handler.prototype.dispatchToElement = function (targetInfo, eventName, event) { + targetInfo = targetInfo || {}; + var el = targetInfo.target; + if (el && el.silent) { + return; + } + var eventKey = ('on' + eventName); + var eventPacket = makeEventPacket(eventName, targetInfo, event); + while (el) { + el[eventKey] + && (eventPacket.cancelBubble = !!el[eventKey].call(el, eventPacket)); + el.trigger(eventName, eventPacket); + el = el.__hostTarget ? el.__hostTarget : el.parent; + if (eventPacket.cancelBubble) { + break; + } + } + if (!eventPacket.cancelBubble) { + this.trigger(eventName, eventPacket); + if (this.painter && this.painter.eachOtherLayer) { + this.painter.eachOtherLayer(function (layer) { + if (typeof (layer[eventKey]) === 'function') { + layer[eventKey].call(layer, eventPacket); + } + if (layer.trigger) { + layer.trigger(eventName, eventPacket); + } + }); + } + } + }; + Handler.prototype.findHover = function (x, y, exclude) { + var list = this.storage.getDisplayList(); + var out = new HoveredResult(x, y); + for (var i = list.length - 1; i >= 0; i--) { + var hoverCheckResult = void 0; + if (list[i] !== exclude + && !list[i].ignore + && (hoverCheckResult = isHover(list[i], x, y))) { + !out.topTarget && (out.topTarget = list[i]); + if (hoverCheckResult !== SILENT) { + out.target = list[i]; + break; + } + } + } + return out; + }; + Handler.prototype.processGesture = function (event, stage) { + if (!this._gestureMgr) { + this._gestureMgr = new GestureMgr(); + } + var gestureMgr = this._gestureMgr; + stage === 'start' && gestureMgr.clear(); + var gestureInfo = gestureMgr.recognize(event, this.findHover(event.zrX, event.zrY, null).target, this.proxy.dom); + stage === 'end' && gestureMgr.clear(); + if (gestureInfo) { + var type = gestureInfo.type; + event.gestureEvent = type; + var res = new HoveredResult(); + res.target = gestureInfo.target; + this.dispatchToElement(res, type, gestureInfo.event); + } + }; + return Handler; + }(Eventful)); + each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) { + Handler.prototype[name] = function (event) { + var x = event.zrX; + var y = event.zrY; + var isOutside = isOutsideBoundary(this, x, y); + var hovered; + var hoveredTarget; + if (name !== 'mouseup' || !isOutside) { + hovered = this.findHover(x, y); + hoveredTarget = hovered.target; + } + if (name === 'mousedown') { + this._downEl = hoveredTarget; + this._downPoint = [event.zrX, event.zrY]; + this._upEl = hoveredTarget; + } + else if (name === 'mouseup') { + this._upEl = hoveredTarget; + } + else if (name === 'click') { + if (this._downEl !== this._upEl + || !this._downPoint + || dist(this._downPoint, [event.zrX, event.zrY]) > 4) { + return; + } + this._downPoint = null; + } + this.dispatchToElement(hovered, name, event); + }; + }); + function isHover(displayable, x, y) { + if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) { + var el = displayable; + var isSilent = void 0; + var ignoreClip = false; + while (el) { + if (el.ignoreClip) { + ignoreClip = true; + } + if (!ignoreClip) { + var clipPath = el.getClipPath(); + if (clipPath && !clipPath.contain(x, y)) { + return false; + } + if (el.silent) { + isSilent = true; + } + } + var hostEl = el.__hostTarget; + el = hostEl ? hostEl : el.parent; + } + return isSilent ? SILENT : true; + } + return false; + } + function isOutsideBoundary(handlerInstance, x, y) { + var painter = handlerInstance.painter; + return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight(); + } + + var DEFAULT_MIN_MERGE = 32; + var DEFAULT_MIN_GALLOPING = 7; + function minRunLength(n) { + var r = 0; + while (n >= DEFAULT_MIN_MERGE) { + r |= n & 1; + n >>= 1; + } + return n + r; + } + function makeAscendingRun(array, lo, hi, compare) { + var runHi = lo + 1; + if (runHi === hi) { + return 1; + } + if (compare(array[runHi++], array[lo]) < 0) { + while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) { + runHi++; + } + reverseRun(array, lo, runHi); + } + else { + while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) { + runHi++; + } + } + return runHi - lo; + } + function reverseRun(array, lo, hi) { + hi--; + while (lo < hi) { + var t = array[lo]; + array[lo++] = array[hi]; + array[hi--] = t; + } + } + function binaryInsertionSort(array, lo, hi, start, compare) { + if (start === lo) { + start++; + } + for (; start < hi; start++) { + var pivot = array[start]; + var left = lo; + var right = start; + var mid; + while (left < right) { + mid = left + right >>> 1; + if (compare(pivot, array[mid]) < 0) { + right = mid; + } + else { + left = mid + 1; + } + } + var n = start - left; + switch (n) { + case 3: + array[left + 3] = array[left + 2]; + case 2: + array[left + 2] = array[left + 1]; + case 1: + array[left + 1] = array[left]; + break; + default: + while (n > 0) { + array[left + n] = array[left + n - 1]; + n--; + } + } + array[left] = pivot; + } + } + function gallopLeft(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + if (compare(value, array[start + hint]) > 0) { + maxOffset = length - hint; + while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + if (offset <= 0) { + offset = maxOffset; + } + } + if (offset > maxOffset) { + offset = maxOffset; + } + lastOffset += hint; + offset += hint; + } + else { + maxOffset = hint + 1; + while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + if (offset <= 0) { + offset = maxOffset; + } + } + if (offset > maxOffset) { + offset = maxOffset; + } + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } + lastOffset++; + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + if (compare(value, array[start + m]) > 0) { + lastOffset = m + 1; + } + else { + offset = m; + } + } + return offset; + } + function gallopRight(value, array, start, length, hint, compare) { + var lastOffset = 0; + var maxOffset = 0; + var offset = 1; + if (compare(value, array[start + hint]) < 0) { + maxOffset = hint + 1; + while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + if (offset <= 0) { + offset = maxOffset; + } + } + if (offset > maxOffset) { + offset = maxOffset; + } + var tmp = lastOffset; + lastOffset = hint - offset; + offset = hint - tmp; + } + else { + maxOffset = length - hint; + while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) { + lastOffset = offset; + offset = (offset << 1) + 1; + if (offset <= 0) { + offset = maxOffset; + } + } + if (offset > maxOffset) { + offset = maxOffset; + } + lastOffset += hint; + offset += hint; + } + lastOffset++; + while (lastOffset < offset) { + var m = lastOffset + (offset - lastOffset >>> 1); + if (compare(value, array[start + m]) < 0) { + offset = m; + } + else { + lastOffset = m + 1; + } + } + return offset; + } + function TimSort(array, compare) { + var minGallop = DEFAULT_MIN_GALLOPING; + var length = 0; + var runStart; + var runLength; + var stackSize = 0; + length = array.length; + var tmp = []; + runStart = []; + runLength = []; + function pushRun(_runStart, _runLength) { + runStart[stackSize] = _runStart; + runLength[stackSize] = _runLength; + stackSize += 1; + } + function mergeRuns() { + while (stackSize > 1) { + var n = stackSize - 2; + if ((n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1]) + || (n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1])) { + if (runLength[n - 1] < runLength[n + 1]) { + n--; + } + } + else if (runLength[n] > runLength[n + 1]) { + break; + } + mergeAt(n); + } + } + function forceMergeRuns() { + while (stackSize > 1) { + var n = stackSize - 2; + if (n > 0 && runLength[n - 1] < runLength[n + 1]) { + n--; + } + mergeAt(n); + } + } + function mergeAt(i) { + var start1 = runStart[i]; + var length1 = runLength[i]; + var start2 = runStart[i + 1]; + var length2 = runLength[i + 1]; + runLength[i] = length1 + length2; + if (i === stackSize - 3) { + runStart[i + 1] = runStart[i + 2]; + runLength[i + 1] = runLength[i + 2]; + } + stackSize--; + var k = gallopRight(array[start2], array, start1, length1, 0, compare); + start1 += k; + length1 -= k; + if (length1 === 0) { + return; + } + length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare); + if (length2 === 0) { + return; + } + if (length1 <= length2) { + mergeLow(start1, length1, start2, length2); + } + else { + mergeHigh(start1, length1, start2, length2); + } + } + function mergeLow(start1, length1, start2, length2) { + var i = 0; + for (i = 0; i < length1; i++) { + tmp[i] = array[start1 + i]; + } + var cursor1 = 0; + var cursor2 = start2; + var dest = start1; + array[dest++] = array[cursor2++]; + if (--length2 === 0) { + for (i = 0; i < length1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + return; + } + if (length1 === 1) { + for (i = 0; i < length2; i++) { + array[dest + i] = array[cursor2 + i]; + } + array[dest + length2] = tmp[cursor1]; + return; + } + var _minGallop = minGallop; + var count1; + var count2; + var exit; + while (1) { + count1 = 0; + count2 = 0; + exit = false; + do { + if (compare(array[cursor2], tmp[cursor1]) < 0) { + array[dest++] = array[cursor2++]; + count2++; + count1 = 0; + if (--length2 === 0) { + exit = true; + break; + } + } + else { + array[dest++] = tmp[cursor1++]; + count1++; + count2 = 0; + if (--length1 === 1) { + exit = true; + break; + } + } + } while ((count1 | count2) < _minGallop); + if (exit) { + break; + } + do { + count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare); + if (count1 !== 0) { + for (i = 0; i < count1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + dest += count1; + cursor1 += count1; + length1 -= count1; + if (length1 <= 1) { + exit = true; + break; + } + } + array[dest++] = array[cursor2++]; + if (--length2 === 0) { + exit = true; + break; + } + count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare); + if (count2 !== 0) { + for (i = 0; i < count2; i++) { + array[dest + i] = array[cursor2 + i]; + } + dest += count2; + cursor2 += count2; + length2 -= count2; + if (length2 === 0) { + exit = true; + break; + } + } + array[dest++] = tmp[cursor1++]; + if (--length1 === 1) { + exit = true; + break; + } + _minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + if (exit) { + break; + } + if (_minGallop < 0) { + _minGallop = 0; + } + _minGallop += 2; + } + minGallop = _minGallop; + minGallop < 1 && (minGallop = 1); + if (length1 === 1) { + for (i = 0; i < length2; i++) { + array[dest + i] = array[cursor2 + i]; + } + array[dest + length2] = tmp[cursor1]; + } + else if (length1 === 0) { + throw new Error(); + } + else { + for (i = 0; i < length1; i++) { + array[dest + i] = tmp[cursor1 + i]; + } + } + } + function mergeHigh(start1, length1, start2, length2) { + var i = 0; + for (i = 0; i < length2; i++) { + tmp[i] = array[start2 + i]; + } + var cursor1 = start1 + length1 - 1; + var cursor2 = length2 - 1; + var dest = start2 + length2 - 1; + var customCursor = 0; + var customDest = 0; + array[dest--] = array[cursor1--]; + if (--length1 === 0) { + customCursor = dest - (length2 - 1); + for (i = 0; i < length2; i++) { + array[customCursor + i] = tmp[i]; + } + return; + } + if (length2 === 1) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = length1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + array[dest] = tmp[cursor2]; + return; + } + var _minGallop = minGallop; + while (true) { + var count1 = 0; + var count2 = 0; + var exit = false; + do { + if (compare(tmp[cursor2], array[cursor1]) < 0) { + array[dest--] = array[cursor1--]; + count1++; + count2 = 0; + if (--length1 === 0) { + exit = true; + break; + } + } + else { + array[dest--] = tmp[cursor2--]; + count2++; + count1 = 0; + if (--length2 === 1) { + exit = true; + break; + } + } + } while ((count1 | count2) < _minGallop); + if (exit) { + break; + } + do { + count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare); + if (count1 !== 0) { + dest -= count1; + cursor1 -= count1; + length1 -= count1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = count1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + if (length1 === 0) { + exit = true; + break; + } + } + array[dest--] = tmp[cursor2--]; + if (--length2 === 1) { + exit = true; + break; + } + count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare); + if (count2 !== 0) { + dest -= count2; + cursor2 -= count2; + length2 -= count2; + customDest = dest + 1; + customCursor = cursor2 + 1; + for (i = 0; i < count2; i++) { + array[customDest + i] = tmp[customCursor + i]; + } + if (length2 <= 1) { + exit = true; + break; + } + } + array[dest--] = array[cursor1--]; + if (--length1 === 0) { + exit = true; + break; + } + _minGallop--; + } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING); + if (exit) { + break; + } + if (_minGallop < 0) { + _minGallop = 0; + } + _minGallop += 2; + } + minGallop = _minGallop; + if (minGallop < 1) { + minGallop = 1; + } + if (length2 === 1) { + dest -= length1; + cursor1 -= length1; + customDest = dest + 1; + customCursor = cursor1 + 1; + for (i = length1 - 1; i >= 0; i--) { + array[customDest + i] = array[customCursor + i]; + } + array[dest] = tmp[cursor2]; + } + else if (length2 === 0) { + throw new Error(); + } + else { + customCursor = dest - (length2 - 1); + for (i = 0; i < length2; i++) { + array[customCursor + i] = tmp[i]; + } + } + } + return { + mergeRuns: mergeRuns, + forceMergeRuns: forceMergeRuns, + pushRun: pushRun + }; + } + function sort(array, compare, lo, hi) { + if (!lo) { + lo = 0; + } + if (!hi) { + hi = array.length; + } + var remaining = hi - lo; + if (remaining < 2) { + return; + } + var runLength = 0; + if (remaining < DEFAULT_MIN_MERGE) { + runLength = makeAscendingRun(array, lo, hi, compare); + binaryInsertionSort(array, lo, hi, lo + runLength, compare); + return; + } + var ts = TimSort(array, compare); + var minRun = minRunLength(remaining); + do { + runLength = makeAscendingRun(array, lo, hi, compare); + if (runLength < minRun) { + var force = remaining; + if (force > minRun) { + force = minRun; + } + binaryInsertionSort(array, lo, lo + force, lo + runLength, compare); + runLength = force; + } + ts.pushRun(lo, runLength); + ts.mergeRuns(); + remaining -= runLength; + lo += runLength; + } while (remaining !== 0); + ts.forceMergeRuns(); + } + + var REDRAW_BIT = 1; + var STYLE_CHANGED_BIT = 2; + var SHAPE_CHANGED_BIT = 4; + + var invalidZErrorLogged = false; + function logInvalidZError() { + if (invalidZErrorLogged) { + return; + } + invalidZErrorLogged = true; + console.warn('z / z2 / zlevel of displayable is invalid, which may cause unexpected errors'); + } + function shapeCompareFunc(a, b) { + if (a.zlevel === b.zlevel) { + if (a.z === b.z) { + return a.z2 - b.z2; + } + return a.z - b.z; + } + return a.zlevel - b.zlevel; + } + var Storage = (function () { + function Storage() { + this._roots = []; + this._displayList = []; + this._displayListLen = 0; + this.displayableSortFunc = shapeCompareFunc; + } + Storage.prototype.traverse = function (cb, context) { + for (var i = 0; i < this._roots.length; i++) { + this._roots[i].traverse(cb, context); + } + }; + Storage.prototype.getDisplayList = function (update, includeIgnore) { + includeIgnore = includeIgnore || false; + var displayList = this._displayList; + if (update || !displayList.length) { + this.updateDisplayList(includeIgnore); + } + return displayList; + }; + Storage.prototype.updateDisplayList = function (includeIgnore) { + this._displayListLen = 0; + var roots = this._roots; + var displayList = this._displayList; + for (var i = 0, len = roots.length; i < len; i++) { + this._updateAndAddDisplayable(roots[i], null, includeIgnore); + } + displayList.length = this._displayListLen; + env.canvasSupported && sort(displayList, shapeCompareFunc); + }; + Storage.prototype._updateAndAddDisplayable = function (el, clipPaths, includeIgnore) { + if (el.ignore && !includeIgnore) { + return; + } + el.beforeUpdate(); + el.update(); + el.afterUpdate(); + var userSetClipPath = el.getClipPath(); + if (el.ignoreClip) { + clipPaths = null; + } + else if (userSetClipPath) { + if (clipPaths) { + clipPaths = clipPaths.slice(); + } + else { + clipPaths = []; + } + var currentClipPath = userSetClipPath; + var parentClipPath = el; + while (currentClipPath) { + currentClipPath.parent = parentClipPath; + currentClipPath.updateTransform(); + clipPaths.push(currentClipPath); + parentClipPath = currentClipPath; + currentClipPath = currentClipPath.getClipPath(); + } + } + if (el.childrenRef) { + var children = el.childrenRef(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (el.__dirty) { + child.__dirty |= REDRAW_BIT; + } + this._updateAndAddDisplayable(child, clipPaths, includeIgnore); + } + el.__dirty = 0; + } + else { + var disp = el; + if (clipPaths && clipPaths.length) { + disp.__clipPaths = clipPaths; + } + else if (disp.__clipPaths && disp.__clipPaths.length > 0) { + disp.__clipPaths = []; + } + if (isNaN(disp.z)) { + logInvalidZError(); + disp.z = 0; + } + if (isNaN(disp.z2)) { + logInvalidZError(); + disp.z2 = 0; + } + if (isNaN(disp.zlevel)) { + logInvalidZError(); + disp.zlevel = 0; + } + this._displayList[this._displayListLen++] = disp; + } + var decalEl = el.getDecalElement && el.getDecalElement(); + if (decalEl) { + this._updateAndAddDisplayable(decalEl, clipPaths, includeIgnore); + } + var textGuide = el.getTextGuideLine(); + if (textGuide) { + this._updateAndAddDisplayable(textGuide, clipPaths, includeIgnore); + } + var textEl = el.getTextContent(); + if (textEl) { + this._updateAndAddDisplayable(textEl, clipPaths, includeIgnore); + } + }; + Storage.prototype.addRoot = function (el) { + if (el.__zr && el.__zr.storage === this) { + return; + } + this._roots.push(el); + }; + Storage.prototype.delRoot = function (el) { + if (el instanceof Array) { + for (var i = 0, l = el.length; i < l; i++) { + this.delRoot(el[i]); + } + return; + } + var idx = indexOf(this._roots, el); + if (idx >= 0) { + this._roots.splice(idx, 1); + } + }; + Storage.prototype.delAllRoots = function () { + this._roots = []; + this._displayList = []; + this._displayListLen = 0; + return; + }; + Storage.prototype.getRoots = function () { + return this._roots; + }; + Storage.prototype.dispose = function () { + this._displayList = null; + this._roots = null; + }; + return Storage; + }()); + + var requestAnimationFrame; + requestAnimationFrame = (typeof window !== 'undefined' + && ((window.requestAnimationFrame && window.requestAnimationFrame.bind(window)) + || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window)) + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame)) || function (func) { + return setTimeout(func, 16); + }; + var requestAnimationFrame$1 = requestAnimationFrame; + + var easing = { + linear: function (k) { + return k; + }, + quadraticIn: function (k) { + return k * k; + }, + quadraticOut: function (k) { + return k * (2 - k); + }, + quadraticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k; + } + return -0.5 * (--k * (k - 2) - 1); + }, + cubicIn: function (k) { + return k * k * k; + }, + cubicOut: function (k) { + return --k * k * k + 1; + }, + cubicInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k; + } + return 0.5 * ((k -= 2) * k * k + 2); + }, + quarticIn: function (k) { + return k * k * k * k; + }, + quarticOut: function (k) { + return 1 - (--k * k * k * k); + }, + quarticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k * k; + } + return -0.5 * ((k -= 2) * k * k * k - 2); + }, + quinticIn: function (k) { + return k * k * k * k * k; + }, + quinticOut: function (k) { + return --k * k * k * k * k + 1; + }, + quinticInOut: function (k) { + if ((k *= 2) < 1) { + return 0.5 * k * k * k * k * k; + } + return 0.5 * ((k -= 2) * k * k * k * k + 2); + }, + sinusoidalIn: function (k) { + return 1 - Math.cos(k * Math.PI / 2); + }, + sinusoidalOut: function (k) { + return Math.sin(k * Math.PI / 2); + }, + sinusoidalInOut: function (k) { + return 0.5 * (1 - Math.cos(Math.PI * k)); + }, + exponentialIn: function (k) { + return k === 0 ? 0 : Math.pow(1024, k - 1); + }, + exponentialOut: function (k) { + return k === 1 ? 1 : 1 - Math.pow(2, -10 * k); + }, + exponentialInOut: function (k) { + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if ((k *= 2) < 1) { + return 0.5 * Math.pow(1024, k - 1); + } + return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2); + }, + circularIn: function (k) { + return 1 - Math.sqrt(1 - k * k); + }, + circularOut: function (k) { + return Math.sqrt(1 - (--k * k)); + }, + circularInOut: function (k) { + if ((k *= 2) < 1) { + return -0.5 * (Math.sqrt(1 - k * k) - 1); + } + return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1); + }, + elasticIn: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; + s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + return -(a * Math.pow(2, 10 * (k -= 1)) + * Math.sin((k - s) * (2 * Math.PI) / p)); + }, + elasticOut: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; + s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + return (a * Math.pow(2, -10 * k) + * Math.sin((k - s) * (2 * Math.PI) / p) + 1); + }, + elasticInOut: function (k) { + var s; + var a = 0.1; + var p = 0.4; + if (k === 0) { + return 0; + } + if (k === 1) { + return 1; + } + if (!a || a < 1) { + a = 1; + s = p / 4; + } + else { + s = p * Math.asin(1 / a) / (2 * Math.PI); + } + if ((k *= 2) < 1) { + return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) + * Math.sin((k - s) * (2 * Math.PI) / p)); + } + return a * Math.pow(2, -10 * (k -= 1)) + * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1; + }, + backIn: function (k) { + var s = 1.70158; + return k * k * ((s + 1) * k - s); + }, + backOut: function (k) { + var s = 1.70158; + return --k * k * ((s + 1) * k + s) + 1; + }, + backInOut: function (k) { + var s = 1.70158 * 1.525; + if ((k *= 2) < 1) { + return 0.5 * (k * k * ((s + 1) * k - s)); + } + return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2); + }, + bounceIn: function (k) { + return 1 - easing.bounceOut(1 - k); + }, + bounceOut: function (k) { + if (k < (1 / 2.75)) { + return 7.5625 * k * k; + } + else if (k < (2 / 2.75)) { + return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75; + } + else if (k < (2.5 / 2.75)) { + return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375; + } + else { + return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375; + } + }, + bounceInOut: function (k) { + if (k < 0.5) { + return easing.bounceIn(k * 2) * 0.5; + } + return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5; + } + }; + + var Clip = (function () { + function Clip(opts) { + this._initialized = false; + this._startTime = 0; + this._pausedTime = 0; + this._paused = false; + this._life = opts.life || 1000; + this._delay = opts.delay || 0; + this.loop = opts.loop == null ? false : opts.loop; + this.gap = opts.gap || 0; + this.easing = opts.easing || 'linear'; + this.onframe = opts.onframe; + this.ondestroy = opts.ondestroy; + this.onrestart = opts.onrestart; + } + Clip.prototype.step = function (globalTime, deltaTime) { + if (!this._initialized) { + this._startTime = globalTime + this._delay; + this._initialized = true; + } + if (this._paused) { + this._pausedTime += deltaTime; + return; + } + var percent = (globalTime - this._startTime - this._pausedTime) / this._life; + if (percent < 0) { + percent = 0; + } + percent = Math.min(percent, 1); + var easing$1 = this.easing; + var easingFunc = typeof easing$1 === 'string' + ? easing[easing$1] : easing$1; + var schedule = typeof easingFunc === 'function' + ? easingFunc(percent) + : percent; + this.onframe && this.onframe(schedule); + if (percent === 1) { + if (this.loop) { + this._restart(globalTime); + this.onrestart && this.onrestart(); + } + else { + return true; + } + } + return false; + }; + Clip.prototype._restart = function (globalTime) { + var remainder = (globalTime - this._startTime - this._pausedTime) % this._life; + this._startTime = globalTime - remainder + this.gap; + this._pausedTime = 0; + }; + Clip.prototype.pause = function () { + this._paused = true; + }; + Clip.prototype.resume = function () { + this._paused = false; + }; + return Clip; + }()); + + var Entry = (function () { + function Entry(val) { + this.value = val; + } + return Entry; + }()); + var LinkedList = (function () { + function LinkedList() { + this._len = 0; + } + LinkedList.prototype.insert = function (val) { + var entry = new Entry(val); + this.insertEntry(entry); + return entry; + }; + LinkedList.prototype.insertEntry = function (entry) { + if (!this.head) { + this.head = this.tail = entry; + } + else { + this.tail.next = entry; + entry.prev = this.tail; + entry.next = null; + this.tail = entry; + } + this._len++; + }; + LinkedList.prototype.remove = function (entry) { + var prev = entry.prev; + var next = entry.next; + if (prev) { + prev.next = next; + } + else { + this.head = next; + } + if (next) { + next.prev = prev; + } + else { + this.tail = prev; + } + entry.next = entry.prev = null; + this._len--; + }; + LinkedList.prototype.len = function () { + return this._len; + }; + LinkedList.prototype.clear = function () { + this.head = this.tail = null; + this._len = 0; + }; + return LinkedList; + }()); + var LRU = (function () { + function LRU(maxSize) { + this._list = new LinkedList(); + this._maxSize = 10; + this._map = {}; + this._maxSize = maxSize; + } + LRU.prototype.put = function (key, value) { + var list = this._list; + var map = this._map; + var removed = null; + if (map[key] == null) { + var len = list.len(); + var entry = this._lastRemovedEntry; + if (len >= this._maxSize && len > 0) { + var leastUsedEntry = list.head; + list.remove(leastUsedEntry); + delete map[leastUsedEntry.key]; + removed = leastUsedEntry.value; + this._lastRemovedEntry = leastUsedEntry; + } + if (entry) { + entry.value = value; + } + else { + entry = new Entry(value); + } + entry.key = key; + list.insertEntry(entry); + map[key] = entry; + } + return removed; + }; + LRU.prototype.get = function (key) { + var entry = this._map[key]; + var list = this._list; + if (entry != null) { + if (entry !== list.tail) { + list.remove(entry); + list.insertEntry(entry); + } + return entry.value; + } + }; + LRU.prototype.clear = function () { + this._list.clear(); + this._map = {}; + }; + LRU.prototype.len = function () { + return this._list.len(); + }; + return LRU; + }()); + + var kCSSColorTable = { + 'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1], + 'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1], + 'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1], + 'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1], + 'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1], + 'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1], + 'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1], + 'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1], + 'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1], + 'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1], + 'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1], + 'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1], + 'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1], + 'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1], + 'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1], + 'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1], + 'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1], + 'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1], + 'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1], + 'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1], + 'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1], + 'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1], + 'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1], + 'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1], + 'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1], + 'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1], + 'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1], + 'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1], + 'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1], + 'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1], + 'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1], + 'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1], + 'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1], + 'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1], + 'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1], + 'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1], + 'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1], + 'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1], + 'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1], + 'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1], + 'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1], + 'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1], + 'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1], + 'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1], + 'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1], + 'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1], + 'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1], + 'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1], + 'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1], + 'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1], + 'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1], + 'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1], + 'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1], + 'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1], + 'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1], + 'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1], + 'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1], + 'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1], + 'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1], + 'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1], + 'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1], + 'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1], + 'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1], + 'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1], + 'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1], + 'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1], + 'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1], + 'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1], + 'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1], + 'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1], + 'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1], + 'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1], + 'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1], + 'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1] + }; + function clampCssByte(i) { + i = Math.round(i); + return i < 0 ? 0 : i > 255 ? 255 : i; + } + function clampCssAngle(i) { + i = Math.round(i); + return i < 0 ? 0 : i > 360 ? 360 : i; + } + function clampCssFloat(f) { + return f < 0 ? 0 : f > 1 ? 1 : f; + } + function parseCssInt(val) { + var str = val; + if (str.length && str.charAt(str.length - 1) === '%') { + return clampCssByte(parseFloat(str) / 100 * 255); + } + return clampCssByte(parseInt(str, 10)); + } + function parseCssFloat(val) { + var str = val; + if (str.length && str.charAt(str.length - 1) === '%') { + return clampCssFloat(parseFloat(str) / 100); + } + return clampCssFloat(parseFloat(str)); + } + function cssHueToRgb(m1, m2, h) { + if (h < 0) { + h += 1; + } + else if (h > 1) { + h -= 1; + } + if (h * 6 < 1) { + return m1 + (m2 - m1) * h * 6; + } + if (h * 2 < 1) { + return m2; + } + if (h * 3 < 2) { + return m1 + (m2 - m1) * (2 / 3 - h) * 6; + } + return m1; + } + function lerpNumber(a, b, p) { + return a + (b - a) * p; + } + function setRgba(out, r, g, b, a) { + out[0] = r; + out[1] = g; + out[2] = b; + out[3] = a; + return out; + } + function copyRgba(out, a) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + return out; + } + var colorCache = new LRU(20); + var lastRemovedArr = null; + function putToCache(colorStr, rgbaArr) { + if (lastRemovedArr) { + copyRgba(lastRemovedArr, rgbaArr); + } + lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice())); + } + function parse(colorStr, rgbaArr) { + if (!colorStr) { + return; + } + rgbaArr = rgbaArr || []; + var cached = colorCache.get(colorStr); + if (cached) { + return copyRgba(rgbaArr, cached); + } + colorStr = colorStr + ''; + var str = colorStr.replace(/ /g, '').toLowerCase(); + if (str in kCSSColorTable) { + copyRgba(rgbaArr, kCSSColorTable[str]); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + var strLen = str.length; + if (str.charAt(0) === '#') { + if (strLen === 4 || strLen === 5) { + var iv = parseInt(str.slice(1, 4), 16); + if (!(iv >= 0 && iv <= 0xfff)) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + setRgba(rgbaArr, ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), (iv & 0xf0) | ((iv & 0xf0) >> 4), (iv & 0xf) | ((iv & 0xf) << 4), strLen === 5 ? parseInt(str.slice(4), 16) / 0xf : 1); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + else if (strLen === 7 || strLen === 9) { + var iv = parseInt(str.slice(1, 7), 16); + if (!(iv >= 0 && iv <= 0xffffff)) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + setRgba(rgbaArr, (iv & 0xff0000) >> 16, (iv & 0xff00) >> 8, iv & 0xff, strLen === 9 ? parseInt(str.slice(7), 16) / 0xff : 1); + putToCache(colorStr, rgbaArr); + return rgbaArr; + } + return; + } + var op = str.indexOf('('); + var ep = str.indexOf(')'); + if (op !== -1 && ep + 1 === strLen) { + var fname = str.substr(0, op); + var params = str.substr(op + 1, ep - (op + 1)).split(','); + var alpha = 1; + switch (fname) { + case 'rgba': + if (params.length !== 4) { + return params.length === 3 + ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1) + : setRgba(rgbaArr, 0, 0, 0, 1); + } + alpha = parseCssFloat(params.pop()); + case 'rgb': + if (params.length !== 3) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + setRgba(rgbaArr, parseCssInt(params[0]), parseCssInt(params[1]), parseCssInt(params[2]), alpha); + putToCache(colorStr, rgbaArr); + return rgbaArr; + case 'hsla': + if (params.length !== 4) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + params[3] = parseCssFloat(params[3]); + hsla2rgba(params, rgbaArr); + putToCache(colorStr, rgbaArr); + return rgbaArr; + case 'hsl': + if (params.length !== 3) { + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + hsla2rgba(params, rgbaArr); + putToCache(colorStr, rgbaArr); + return rgbaArr; + default: + return; + } + } + setRgba(rgbaArr, 0, 0, 0, 1); + return; + } + function hsla2rgba(hsla, rgba) { + var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360; + var s = parseCssFloat(hsla[1]); + var l = parseCssFloat(hsla[2]); + var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; + var m1 = l * 2 - m2; + rgba = rgba || []; + setRgba(rgba, clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), clampCssByte(cssHueToRgb(m1, m2, h) * 255), clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), 1); + if (hsla.length === 4) { + rgba[3] = hsla[3]; + } + return rgba; + } + function rgba2hsla(rgba) { + if (!rgba) { + return; + } + var R = rgba[0] / 255; + var G = rgba[1] / 255; + var B = rgba[2] / 255; + var vMin = Math.min(R, G, B); + var vMax = Math.max(R, G, B); + var delta = vMax - vMin; + var L = (vMax + vMin) / 2; + var H; + var S; + if (delta === 0) { + H = 0; + S = 0; + } + else { + if (L < 0.5) { + S = delta / (vMax + vMin); + } + else { + S = delta / (2 - vMax - vMin); + } + var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta; + var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta; + var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta; + if (R === vMax) { + H = deltaB - deltaG; + } + else if (G === vMax) { + H = (1 / 3) + deltaR - deltaB; + } + else if (B === vMax) { + H = (2 / 3) + deltaG - deltaR; + } + if (H < 0) { + H += 1; + } + if (H > 1) { + H -= 1; + } + } + var hsla = [H * 360, S, L]; + if (rgba[3] != null) { + hsla.push(rgba[3]); + } + return hsla; + } + function lift(color, level) { + var colorArr = parse(color); + if (colorArr) { + for (var i = 0; i < 3; i++) { + if (level < 0) { + colorArr[i] = colorArr[i] * (1 - level) | 0; + } + else { + colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0; + } + if (colorArr[i] > 255) { + colorArr[i] = 255; + } + else if (colorArr[i] < 0) { + colorArr[i] = 0; + } + } + return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb'); + } + } + function toHex(color) { + var colorArr = parse(color); + if (colorArr) { + return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1); + } + } + function fastLerp(normalizedValue, colors, out) { + if (!(colors && colors.length) + || !(normalizedValue >= 0 && normalizedValue <= 1)) { + return; + } + out = out || []; + var value = normalizedValue * (colors.length - 1); + var leftIndex = Math.floor(value); + var rightIndex = Math.ceil(value); + var leftColor = colors[leftIndex]; + var rightColor = colors[rightIndex]; + var dv = value - leftIndex; + out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)); + out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)); + out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)); + out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)); + return out; + } + var fastMapToColor = fastLerp; + function lerp$1(normalizedValue, colors, fullOutput) { + if (!(colors && colors.length) + || !(normalizedValue >= 0 && normalizedValue <= 1)) { + return; + } + var value = normalizedValue * (colors.length - 1); + var leftIndex = Math.floor(value); + var rightIndex = Math.ceil(value); + var leftColor = parse(colors[leftIndex]); + var rightColor = parse(colors[rightIndex]); + var dv = value - leftIndex; + var color = stringify([ + clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)), + clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)), + clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)), + clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv)) + ], 'rgba'); + return fullOutput + ? { + color: color, + leftIndex: leftIndex, + rightIndex: rightIndex, + value: value + } + : color; + } + var mapToColor = lerp$1; + function modifyHSL(color, h, s, l) { + var colorArr = parse(color); + if (color) { + colorArr = rgba2hsla(colorArr); + h != null && (colorArr[0] = clampCssAngle(h)); + s != null && (colorArr[1] = parseCssFloat(s)); + l != null && (colorArr[2] = parseCssFloat(l)); + return stringify(hsla2rgba(colorArr), 'rgba'); + } + } + function modifyAlpha(color, alpha) { + var colorArr = parse(color); + if (colorArr && alpha != null) { + colorArr[3] = clampCssFloat(alpha); + return stringify(colorArr, 'rgba'); + } + } + function stringify(arrColor, type) { + if (!arrColor || !arrColor.length) { + return; + } + var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2]; + if (type === 'rgba' || type === 'hsva' || type === 'hsla') { + colorStr += ',' + arrColor[3]; + } + return type + '(' + colorStr + ')'; + } + function lum(color, backgroundLum) { + var arr = parse(color); + return arr + ? (0.299 * arr[0] + 0.587 * arr[1] + 0.114 * arr[2]) * arr[3] / 255 + + (1 - arr[3]) * backgroundLum + : 0; + } + function random() { + var r = Math.round(Math.random() * 255); + var g = Math.round(Math.random() * 255); + var b = Math.round(Math.random() * 255); + return 'rgb(' + r + ',' + g + ',' + b + ')'; + } + + var color = /*#__PURE__*/Object.freeze({ + __proto__: null, + parse: parse, + lift: lift, + toHex: toHex, + fastLerp: fastLerp, + fastMapToColor: fastMapToColor, + lerp: lerp$1, + mapToColor: mapToColor, + modifyHSL: modifyHSL, + modifyAlpha: modifyAlpha, + stringify: stringify, + lum: lum, + random: random + }); + + var arraySlice = Array.prototype.slice; + function interpolateNumber(p0, p1, percent) { + return (p1 - p0) * percent + p0; + } + function step(p0, p1, percent) { + return percent > 0.5 ? p1 : p0; + } + function interpolate1DArray(out, p0, p1, percent) { + var len = p0.length; + for (var i = 0; i < len; i++) { + out[i] = interpolateNumber(p0[i], p1[i], percent); + } + } + function interpolate2DArray(out, p0, p1, percent) { + var len = p0.length; + var len2 = len && p0[0].length; + for (var i = 0; i < len; i++) { + if (!out[i]) { + out[i] = []; + } + for (var j = 0; j < len2; j++) { + out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent); + } + } + } + function add1DArray(out, p0, p1, sign) { + var len = p0.length; + for (var i = 0; i < len; i++) { + out[i] = p0[i] + p1[i] * sign; + } + return out; + } + function add2DArray(out, p0, p1, sign) { + var len = p0.length; + var len2 = len && p0[0].length; + for (var i = 0; i < len; i++) { + if (!out[i]) { + out[i] = []; + } + for (var j = 0; j < len2; j++) { + out[i][j] = p0[i][j] + p1[i][j] * sign; + } + } + return out; + } + function fillArray(val0, val1, arrDim) { + var arr0 = val0; + var arr1 = val1; + if (!arr0.push || !arr1.push) { + return; + } + var arr0Len = arr0.length; + var arr1Len = arr1.length; + if (arr0Len !== arr1Len) { + var isPreviousLarger = arr0Len > arr1Len; + if (isPreviousLarger) { + arr0.length = arr1Len; + } + else { + for (var i = arr0Len; i < arr1Len; i++) { + arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i])); + } + } + } + var len2 = arr0[0] && arr0[0].length; + for (var i = 0; i < arr0.length; i++) { + if (arrDim === 1) { + if (isNaN(arr0[i])) { + arr0[i] = arr1[i]; + } + } + else { + for (var j = 0; j < len2; j++) { + if (isNaN(arr0[i][j])) { + arr0[i][j] = arr1[i][j]; + } + } + } + } + } + function is1DArraySame(arr0, arr1) { + var len = arr0.length; + if (len !== arr1.length) { + return false; + } + for (var i = 0; i < len; i++) { + if (arr0[i] !== arr1[i]) { + return false; + } + } + return true; + } + function catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) { + var v0 = (p2 - p0) * 0.5; + var v1 = (p3 - p1) * 0.5; + return (2 * (p1 - p2) + v0 + v1) * t3 + + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + + v0 * t + p1; + } + function catmullRomInterpolate1DArray(out, p0, p1, p2, p3, t, t2, t3) { + var len = p0.length; + for (var i = 0; i < len; i++) { + out[i] = catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3); + } + } + function catmullRomInterpolate2DArray(out, p0, p1, p2, p3, t, t2, t3) { + var len = p0.length; + var len2 = p0[0].length; + for (var i = 0; i < len; i++) { + if (!out[i]) { + out[1] = []; + } + for (var j = 0; j < len2; j++) { + out[i][j] = catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3); + } + } + } + function cloneValue(value) { + if (isArrayLike(value)) { + var len = value.length; + if (isArrayLike(value[0])) { + var ret = []; + for (var i = 0; i < len; i++) { + ret.push(arraySlice.call(value[i])); + } + return ret; + } + return arraySlice.call(value); + } + return value; + } + function rgba2String(rgba) { + rgba[0] = Math.floor(rgba[0]); + rgba[1] = Math.floor(rgba[1]); + rgba[2] = Math.floor(rgba[2]); + return 'rgba(' + rgba.join(',') + ')'; + } + function guessArrayDim(value) { + return isArrayLike(value && value[0]) ? 2 : 1; + } + var tmpRgba = [0, 0, 0, 0]; + var Track = (function () { + function Track(propName) { + this.keyframes = []; + this.maxTime = 0; + this.arrDim = 0; + this.interpolable = true; + this._needsSort = false; + this._isAllValueEqual = true; + this._lastFrame = 0; + this._lastFramePercent = 0; + this.propName = propName; + } + Track.prototype.isFinished = function () { + return this._finished; + }; + Track.prototype.setFinished = function () { + this._finished = true; + if (this._additiveTrack) { + this._additiveTrack.setFinished(); + } + }; + Track.prototype.needsAnimate = function () { + return !this._isAllValueEqual + && this.keyframes.length >= 2 + && this.interpolable + && this.maxTime > 0; + }; + Track.prototype.getAdditiveTrack = function () { + return this._additiveTrack; + }; + Track.prototype.addKeyframe = function (time, value) { + if (time >= this.maxTime) { + this.maxTime = time; + } + else { + this._needsSort = true; + } + var keyframes = this.keyframes; + var len = keyframes.length; + if (this.interpolable) { + if (isArrayLike(value)) { + var arrayDim = guessArrayDim(value); + if (len > 0 && this.arrDim !== arrayDim) { + this.interpolable = false; + return; + } + if (arrayDim === 1 && typeof value[0] !== 'number' + || arrayDim === 2 && typeof value[0][0] !== 'number') { + this.interpolable = false; + return; + } + if (len > 0) { + var lastFrame = keyframes[len - 1]; + if (this._isAllValueEqual) { + if (arrayDim === 1) { + if (!is1DArraySame(value, lastFrame.value)) { + this._isAllValueEqual = false; + } + } + else { + this._isAllValueEqual = false; + } + } + } + this.arrDim = arrayDim; + } + else { + if (this.arrDim > 0) { + this.interpolable = false; + return; + } + if (typeof value === 'string') { + var colorArray = parse(value); + if (colorArray) { + value = colorArray; + this.isValueColor = true; + } + else { + this.interpolable = false; + } + } + else if (typeof value !== 'number' || isNaN(value)) { + this.interpolable = false; + return; + } + if (this._isAllValueEqual && len > 0) { + var lastFrame = keyframes[len - 1]; + if (this.isValueColor && !is1DArraySame(lastFrame.value, value)) { + this._isAllValueEqual = false; + } + else if (lastFrame.value !== value) { + this._isAllValueEqual = false; + } + } + } + } + var kf = { + time: time, + value: value, + percent: 0 + }; + this.keyframes.push(kf); + return kf; + }; + Track.prototype.prepare = function (additiveTrack) { + var kfs = this.keyframes; + if (this._needsSort) { + kfs.sort(function (a, b) { + return a.time - b.time; + }); + } + var arrDim = this.arrDim; + var kfsLen = kfs.length; + var lastKf = kfs[kfsLen - 1]; + for (var i = 0; i < kfsLen; i++) { + kfs[i].percent = kfs[i].time / this.maxTime; + if (arrDim > 0 && i !== kfsLen - 1) { + fillArray(kfs[i].value, lastKf.value, arrDim); + } + } + if (additiveTrack + && this.needsAnimate() + && additiveTrack.needsAnimate() + && arrDim === additiveTrack.arrDim + && this.isValueColor === additiveTrack.isValueColor + && !additiveTrack._finished) { + this._additiveTrack = additiveTrack; + var startValue = kfs[0].value; + for (var i = 0; i < kfsLen; i++) { + if (arrDim === 0) { + if (this.isValueColor) { + kfs[i].additiveValue = + add1DArray([], kfs[i].value, startValue, -1); + } + else { + kfs[i].additiveValue = kfs[i].value - startValue; + } + } + else if (arrDim === 1) { + kfs[i].additiveValue = add1DArray([], kfs[i].value, startValue, -1); + } + else if (arrDim === 2) { + kfs[i].additiveValue = add2DArray([], kfs[i].value, startValue, -1); + } + } + } + }; + Track.prototype.step = function (target, percent) { + if (this._finished) { + return; + } + if (this._additiveTrack && this._additiveTrack._finished) { + this._additiveTrack = null; + } + var isAdditive = this._additiveTrack != null; + var valueKey = isAdditive ? 'additiveValue' : 'value'; + var keyframes = this.keyframes; + var kfsNum = this.keyframes.length; + var propName = this.propName; + var arrDim = this.arrDim; + var isValueColor = this.isValueColor; + var frameIdx; + if (percent < 0) { + frameIdx = 0; + } + else if (percent < this._lastFramePercent) { + var start = Math.min(this._lastFrame + 1, kfsNum - 1); + for (frameIdx = start; frameIdx >= 0; frameIdx--) { + if (keyframes[frameIdx].percent <= percent) { + break; + } + } + frameIdx = Math.min(frameIdx, kfsNum - 2); + } + else { + for (frameIdx = this._lastFrame; frameIdx < kfsNum; frameIdx++) { + if (keyframes[frameIdx].percent > percent) { + break; + } + } + frameIdx = Math.min(frameIdx - 1, kfsNum - 2); + } + var nextFrame = keyframes[frameIdx + 1]; + var frame = keyframes[frameIdx]; + if (!(frame && nextFrame)) { + return; + } + this._lastFrame = frameIdx; + this._lastFramePercent = percent; + var range = (nextFrame.percent - frame.percent); + if (range === 0) { + return; + } + var w = (percent - frame.percent) / range; + var targetArr = isAdditive ? this._additiveValue + : (isValueColor ? tmpRgba : target[propName]); + if ((arrDim > 0 || isValueColor) && !targetArr) { + targetArr = this._additiveValue = []; + } + if (this.useSpline) { + var p1 = keyframes[frameIdx][valueKey]; + var p0 = keyframes[frameIdx === 0 ? frameIdx : frameIdx - 1][valueKey]; + var p2 = keyframes[frameIdx > kfsNum - 2 ? kfsNum - 1 : frameIdx + 1][valueKey]; + var p3 = keyframes[frameIdx > kfsNum - 3 ? kfsNum - 1 : frameIdx + 2][valueKey]; + if (arrDim > 0) { + arrDim === 1 + ? catmullRomInterpolate1DArray(targetArr, p0, p1, p2, p3, w, w * w, w * w * w) + : catmullRomInterpolate2DArray(targetArr, p0, p1, p2, p3, w, w * w, w * w * w); + } + else if (isValueColor) { + catmullRomInterpolate1DArray(targetArr, p0, p1, p2, p3, w, w * w, w * w * w); + if (!isAdditive) { + target[propName] = rgba2String(targetArr); + } + } + else { + var value = void 0; + if (!this.interpolable) { + value = p2; + } + else { + value = catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w); + } + if (isAdditive) { + this._additiveValue = value; + } + else { + target[propName] = value; + } + } + } + else { + if (arrDim > 0) { + arrDim === 1 + ? interpolate1DArray(targetArr, frame[valueKey], nextFrame[valueKey], w) + : interpolate2DArray(targetArr, frame[valueKey], nextFrame[valueKey], w); + } + else if (isValueColor) { + interpolate1DArray(targetArr, frame[valueKey], nextFrame[valueKey], w); + if (!isAdditive) { + target[propName] = rgba2String(targetArr); + } + } + else { + var value = void 0; + if (!this.interpolable) { + value = step(frame[valueKey], nextFrame[valueKey], w); + } + else { + value = interpolateNumber(frame[valueKey], nextFrame[valueKey], w); + } + if (isAdditive) { + this._additiveValue = value; + } + else { + target[propName] = value; + } + } + } + if (isAdditive) { + this._addToTarget(target); + } + }; + Track.prototype._addToTarget = function (target) { + var arrDim = this.arrDim; + var propName = this.propName; + var additiveValue = this._additiveValue; + if (arrDim === 0) { + if (this.isValueColor) { + parse(target[propName], tmpRgba); + add1DArray(tmpRgba, tmpRgba, additiveValue, 1); + target[propName] = rgba2String(tmpRgba); + } + else { + target[propName] = target[propName] + additiveValue; + } + } + else if (arrDim === 1) { + add1DArray(target[propName], target[propName], additiveValue, 1); + } + else if (arrDim === 2) { + add2DArray(target[propName], target[propName], additiveValue, 1); + } + }; + return Track; + }()); + var Animator = (function () { + function Animator(target, loop, additiveTo) { + this._tracks = {}; + this._trackKeys = []; + this._delay = 0; + this._maxTime = 0; + this._paused = false; + this._started = 0; + this._clip = null; + this._target = target; + this._loop = loop; + if (loop && additiveTo) { + logError('Can\' use additive animation on looped animation.'); + return; + } + this._additiveAnimators = additiveTo; + } + Animator.prototype.getTarget = function () { + return this._target; + }; + Animator.prototype.changeTarget = function (target) { + this._target = target; + }; + Animator.prototype.when = function (time, props) { + return this.whenWithKeys(time, props, keys(props)); + }; + Animator.prototype.whenWithKeys = function (time, props, propNames) { + var tracks = this._tracks; + for (var i = 0; i < propNames.length; i++) { + var propName = propNames[i]; + var track = tracks[propName]; + if (!track) { + track = tracks[propName] = new Track(propName); + var initialValue = void 0; + var additiveTrack = this._getAdditiveTrack(propName); + if (additiveTrack) { + var lastFinalKf = additiveTrack.keyframes[additiveTrack.keyframes.length - 1]; + initialValue = lastFinalKf && lastFinalKf.value; + if (additiveTrack.isValueColor && initialValue) { + initialValue = rgba2String(initialValue); + } + } + else { + initialValue = this._target[propName]; + } + if (initialValue == null) { + continue; + } + if (time !== 0) { + track.addKeyframe(0, cloneValue(initialValue)); + } + this._trackKeys.push(propName); + } + track.addKeyframe(time, cloneValue(props[propName])); + } + this._maxTime = Math.max(this._maxTime, time); + return this; + }; + Animator.prototype.pause = function () { + this._clip.pause(); + this._paused = true; + }; + Animator.prototype.resume = function () { + this._clip.resume(); + this._paused = false; + }; + Animator.prototype.isPaused = function () { + return !!this._paused; + }; + Animator.prototype._doneCallback = function () { + this._setTracksFinished(); + this._clip = null; + var doneList = this._doneCbs; + if (doneList) { + var len = doneList.length; + for (var i = 0; i < len; i++) { + doneList[i].call(this); + } + } + }; + Animator.prototype._abortedCallback = function () { + this._setTracksFinished(); + var animation = this.animation; + var abortedList = this._abortedCbs; + if (animation) { + animation.removeClip(this._clip); + } + this._clip = null; + if (abortedList) { + for (var i = 0; i < abortedList.length; i++) { + abortedList[i].call(this); + } + } + }; + Animator.prototype._setTracksFinished = function () { + var tracks = this._tracks; + var tracksKeys = this._trackKeys; + for (var i = 0; i < tracksKeys.length; i++) { + tracks[tracksKeys[i]].setFinished(); + } + }; + Animator.prototype._getAdditiveTrack = function (trackName) { + var additiveTrack; + var additiveAnimators = this._additiveAnimators; + if (additiveAnimators) { + for (var i = 0; i < additiveAnimators.length; i++) { + var track = additiveAnimators[i].getTrack(trackName); + if (track) { + additiveTrack = track; + } + } + } + return additiveTrack; + }; + Animator.prototype.start = function (easing, forceAnimate) { + if (this._started > 0) { + return; + } + this._started = 1; + var self = this; + var tracks = []; + for (var i = 0; i < this._trackKeys.length; i++) { + var propName = this._trackKeys[i]; + var track = this._tracks[propName]; + var additiveTrack = this._getAdditiveTrack(propName); + var kfs = track.keyframes; + track.prepare(additiveTrack); + if (track.needsAnimate()) { + tracks.push(track); + } + else if (!track.interpolable) { + var lastKf = kfs[kfs.length - 1]; + if (lastKf) { + self._target[track.propName] = lastKf.value; + } + } + } + if (tracks.length || forceAnimate) { + var clip = new Clip({ + life: this._maxTime, + loop: this._loop, + delay: this._delay, + onframe: function (percent) { + self._started = 2; + var additiveAnimators = self._additiveAnimators; + if (additiveAnimators) { + var stillHasAdditiveAnimator = false; + for (var i = 0; i < additiveAnimators.length; i++) { + if (additiveAnimators[i]._clip) { + stillHasAdditiveAnimator = true; + break; + } + } + if (!stillHasAdditiveAnimator) { + self._additiveAnimators = null; + } + } + for (var i = 0; i < tracks.length; i++) { + tracks[i].step(self._target, percent); + } + var onframeList = self._onframeCbs; + if (onframeList) { + for (var i = 0; i < onframeList.length; i++) { + onframeList[i](self._target, percent); + } + } + }, + ondestroy: function () { + self._doneCallback(); + } + }); + this._clip = clip; + if (this.animation) { + this.animation.addClip(clip); + } + if (easing && easing !== 'spline') { + clip.easing = easing; + } + } + else { + this._doneCallback(); + } + return this; + }; + Animator.prototype.stop = function (forwardToLast) { + if (!this._clip) { + return; + } + var clip = this._clip; + if (forwardToLast) { + clip.onframe(1); + } + this._abortedCallback(); + }; + Animator.prototype.delay = function (time) { + this._delay = time; + return this; + }; + Animator.prototype.during = function (cb) { + if (cb) { + if (!this._onframeCbs) { + this._onframeCbs = []; + } + this._onframeCbs.push(cb); + } + return this; + }; + Animator.prototype.done = function (cb) { + if (cb) { + if (!this._doneCbs) { + this._doneCbs = []; + } + this._doneCbs.push(cb); + } + return this; + }; + Animator.prototype.aborted = function (cb) { + if (cb) { + if (!this._abortedCbs) { + this._abortedCbs = []; + } + this._abortedCbs.push(cb); + } + return this; + }; + Animator.prototype.getClip = function () { + return this._clip; + }; + Animator.prototype.getTrack = function (propName) { + return this._tracks[propName]; + }; + Animator.prototype.stopTracks = function (propNames, forwardToLast) { + if (!propNames.length || !this._clip) { + return true; + } + var tracks = this._tracks; + var tracksKeys = this._trackKeys; + for (var i = 0; i < propNames.length; i++) { + var track = tracks[propNames[i]]; + if (track) { + if (forwardToLast) { + track.step(this._target, 1); + } + else if (this._started === 1) { + track.step(this._target, 0); + } + track.setFinished(); + } + } + var allAborted = true; + for (var i = 0; i < tracksKeys.length; i++) { + if (!tracks[tracksKeys[i]].isFinished()) { + allAborted = false; + break; + } + } + if (allAborted) { + this._abortedCallback(); + } + return allAborted; + }; + Animator.prototype.saveFinalToTarget = function (target, trackKeys) { + if (!target) { + return; + } + trackKeys = trackKeys || this._trackKeys; + for (var i = 0; i < trackKeys.length; i++) { + var propName = trackKeys[i]; + var track = this._tracks[propName]; + if (!track || track.isFinished()) { + continue; + } + var kfs = track.keyframes; + var lastKf = kfs[kfs.length - 1]; + if (lastKf) { + var val = cloneValue(lastKf.value); + if (track.isValueColor) { + val = rgba2String(val); + } + target[propName] = val; + } + } + }; + Animator.prototype.__changeFinalValue = function (finalProps, trackKeys) { + trackKeys = trackKeys || keys(finalProps); + for (var i = 0; i < trackKeys.length; i++) { + var propName = trackKeys[i]; + var track = this._tracks[propName]; + if (!track) { + continue; + } + var kfs = track.keyframes; + if (kfs.length > 1) { + var lastKf = kfs.pop(); + track.addKeyframe(lastKf.time, finalProps[propName]); + track.prepare(track.getAdditiveTrack()); + } + } + }; + return Animator; + }()); + + var Animation = (function (_super) { + __extends(Animation, _super); + function Animation(opts) { + var _this = _super.call(this) || this; + _this._running = false; + _this._time = 0; + _this._pausedTime = 0; + _this._pauseStart = 0; + _this._paused = false; + opts = opts || {}; + _this.stage = opts.stage || {}; + _this.onframe = opts.onframe || function () { }; + return _this; + } + Animation.prototype.addClip = function (clip) { + if (clip.animation) { + this.removeClip(clip); + } + if (!this._clipsHead) { + this._clipsHead = this._clipsTail = clip; + } + else { + this._clipsTail.next = clip; + clip.prev = this._clipsTail; + clip.next = null; + this._clipsTail = clip; + } + clip.animation = this; + }; + Animation.prototype.addAnimator = function (animator) { + animator.animation = this; + var clip = animator.getClip(); + if (clip) { + this.addClip(clip); + } + }; + Animation.prototype.removeClip = function (clip) { + if (!clip.animation) { + return; + } + var prev = clip.prev; + var next = clip.next; + if (prev) { + prev.next = next; + } + else { + this._clipsHead = next; + } + if (next) { + next.prev = prev; + } + else { + this._clipsTail = prev; + } + clip.next = clip.prev = clip.animation = null; + }; + Animation.prototype.removeAnimator = function (animator) { + var clip = animator.getClip(); + if (clip) { + this.removeClip(clip); + } + animator.animation = null; + }; + Animation.prototype.update = function (notTriggerFrameAndStageUpdate) { + var time = new Date().getTime() - this._pausedTime; + var delta = time - this._time; + var clip = this._clipsHead; + while (clip) { + var nextClip = clip.next; + var finished = clip.step(time, delta); + if (finished) { + clip.ondestroy && clip.ondestroy(); + this.removeClip(clip); + clip = nextClip; + } + else { + clip = nextClip; + } + } + this._time = time; + if (!notTriggerFrameAndStageUpdate) { + this.onframe(delta); + this.trigger('frame', delta); + this.stage.update && this.stage.update(); + } + }; + Animation.prototype._startLoop = function () { + var self = this; + this._running = true; + function step() { + if (self._running) { + requestAnimationFrame$1(step); + !self._paused && self.update(); + } + } + requestAnimationFrame$1(step); + }; + Animation.prototype.start = function () { + if (this._running) { + return; + } + this._time = new Date().getTime(); + this._pausedTime = 0; + this._startLoop(); + }; + Animation.prototype.stop = function () { + this._running = false; + }; + Animation.prototype.pause = function () { + if (!this._paused) { + this._pauseStart = new Date().getTime(); + this._paused = true; + } + }; + Animation.prototype.resume = function () { + if (this._paused) { + this._pausedTime += (new Date().getTime()) - this._pauseStart; + this._paused = false; + } + }; + Animation.prototype.clear = function () { + var clip = this._clipsHead; + while (clip) { + var nextClip = clip.next; + clip.prev = clip.next = clip.animation = null; + clip = nextClip; + } + this._clipsHead = this._clipsTail = null; + }; + Animation.prototype.isFinished = function () { + return this._clipsHead == null; + }; + Animation.prototype.animate = function (target, options) { + options = options || {}; + this.start(); + var animator = new Animator(target, options.loop); + this.addAnimator(animator); + return animator; + }; + return Animation; + }(Eventful)); + + var TOUCH_CLICK_DELAY = 300; + var globalEventSupported = env.domSupported; + var localNativeListenerNames = (function () { + var mouseHandlerNames = [ + 'click', 'dblclick', 'mousewheel', 'wheel', 'mouseout', + 'mouseup', 'mousedown', 'mousemove', 'contextmenu' + ]; + var touchHandlerNames = [ + 'touchstart', 'touchend', 'touchmove' + ]; + var pointerEventNameMap = { + pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1 + }; + var pointerHandlerNames = map(mouseHandlerNames, function (name) { + var nm = name.replace('mouse', 'pointer'); + return pointerEventNameMap.hasOwnProperty(nm) ? nm : name; + }); + return { + mouse: mouseHandlerNames, + touch: touchHandlerNames, + pointer: pointerHandlerNames + }; + })(); + var globalNativeListenerNames = { + mouse: ['mousemove', 'mouseup'], + pointer: ['pointermove', 'pointerup'] + }; + var wheelEventSupported = false; + function isPointerFromTouch(event) { + var pointerType = event.pointerType; + return pointerType === 'pen' || pointerType === 'touch'; + } + function setTouchTimer(scope) { + scope.touching = true; + if (scope.touchTimer != null) { + clearTimeout(scope.touchTimer); + scope.touchTimer = null; + } + scope.touchTimer = setTimeout(function () { + scope.touching = false; + scope.touchTimer = null; + }, 700); + } + function markTouch(event) { + event && (event.zrByTouch = true); + } + function normalizeGlobalEvent(instance, event) { + return normalizeEvent(instance.dom, new FakeGlobalEvent(instance, event), true); + } + function isLocalEl(instance, el) { + var elTmp = el; + var isLocal = false; + while (elTmp && elTmp.nodeType !== 9 + && !(isLocal = elTmp.domBelongToZr + || (elTmp !== el && elTmp === instance.painterRoot))) { + elTmp = elTmp.parentNode; + } + return isLocal; + } + var FakeGlobalEvent = (function () { + function FakeGlobalEvent(instance, event) { + this.stopPropagation = noop; + this.stopImmediatePropagation = noop; + this.preventDefault = noop; + this.type = event.type; + this.target = this.currentTarget = instance.dom; + this.pointerType = event.pointerType; + this.clientX = event.clientX; + this.clientY = event.clientY; + } + return FakeGlobalEvent; + }()); + var localDOMHandlers = { + mousedown: function (event) { + event = normalizeEvent(this.dom, event); + this.__mayPointerCapture = [event.zrX, event.zrY]; + this.trigger('mousedown', event); + }, + mousemove: function (event) { + event = normalizeEvent(this.dom, event); + var downPoint = this.__mayPointerCapture; + if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) { + this.__togglePointerCapture(true); + } + this.trigger('mousemove', event); + }, + mouseup: function (event) { + event = normalizeEvent(this.dom, event); + this.__togglePointerCapture(false); + this.trigger('mouseup', event); + }, + mouseout: function (event) { + event = normalizeEvent(this.dom, event); + var element = event.toElement || event.relatedTarget; + if (!isLocalEl(this, element)) { + if (this.__pointerCapturing) { + event.zrEventControl = 'no_globalout'; + } + this.trigger('mouseout', event); + } + }, + wheel: function (event) { + wheelEventSupported = true; + event = normalizeEvent(this.dom, event); + this.trigger('mousewheel', event); + }, + mousewheel: function (event) { + if (wheelEventSupported) { + return; + } + event = normalizeEvent(this.dom, event); + this.trigger('mousewheel', event); + }, + touchstart: function (event) { + event = normalizeEvent(this.dom, event); + markTouch(event); + this.__lastTouchMoment = new Date(); + this.handler.processGesture(event, 'start'); + localDOMHandlers.mousemove.call(this, event); + localDOMHandlers.mousedown.call(this, event); + }, + touchmove: function (event) { + event = normalizeEvent(this.dom, event); + markTouch(event); + this.handler.processGesture(event, 'change'); + localDOMHandlers.mousemove.call(this, event); + }, + touchend: function (event) { + event = normalizeEvent(this.dom, event); + markTouch(event); + this.handler.processGesture(event, 'end'); + localDOMHandlers.mouseup.call(this, event); + if (+new Date() - (+this.__lastTouchMoment) < TOUCH_CLICK_DELAY) { + localDOMHandlers.click.call(this, event); + } + }, + pointerdown: function (event) { + localDOMHandlers.mousedown.call(this, event); + }, + pointermove: function (event) { + if (!isPointerFromTouch(event)) { + localDOMHandlers.mousemove.call(this, event); + } + }, + pointerup: function (event) { + localDOMHandlers.mouseup.call(this, event); + }, + pointerout: function (event) { + if (!isPointerFromTouch(event)) { + localDOMHandlers.mouseout.call(this, event); + } + } + }; + each(['click', 'dblclick', 'contextmenu'], function (name) { + localDOMHandlers[name] = function (event) { + event = normalizeEvent(this.dom, event); + this.trigger(name, event); + }; + }); + var globalDOMHandlers = { + pointermove: function (event) { + if (!isPointerFromTouch(event)) { + globalDOMHandlers.mousemove.call(this, event); + } + }, + pointerup: function (event) { + globalDOMHandlers.mouseup.call(this, event); + }, + mousemove: function (event) { + this.trigger('mousemove', event); + }, + mouseup: function (event) { + var pointerCaptureReleasing = this.__pointerCapturing; + this.__togglePointerCapture(false); + this.trigger('mouseup', event); + if (pointerCaptureReleasing) { + event.zrEventControl = 'only_globalout'; + this.trigger('mouseout', event); + } + } + }; + function mountLocalDOMEventListeners(instance, scope) { + var domHandlers = scope.domHandlers; + if (env.pointerEventsSupported) { + each(localNativeListenerNames.pointer, function (nativeEventName) { + mountSingleDOMEventListener(scope, nativeEventName, function (event) { + domHandlers[nativeEventName].call(instance, event); + }); + }); + } + else { + if (env.touchEventsSupported) { + each(localNativeListenerNames.touch, function (nativeEventName) { + mountSingleDOMEventListener(scope, nativeEventName, function (event) { + domHandlers[nativeEventName].call(instance, event); + setTouchTimer(scope); + }); + }); + } + each(localNativeListenerNames.mouse, function (nativeEventName) { + mountSingleDOMEventListener(scope, nativeEventName, function (event) { + event = getNativeEvent(event); + if (!scope.touching) { + domHandlers[nativeEventName].call(instance, event); + } + }); + }); + } + } + function mountGlobalDOMEventListeners(instance, scope) { + if (env.pointerEventsSupported) { + each(globalNativeListenerNames.pointer, mount); + } + else if (!env.touchEventsSupported) { + each(globalNativeListenerNames.mouse, mount); + } + function mount(nativeEventName) { + function nativeEventListener(event) { + event = getNativeEvent(event); + if (!isLocalEl(instance, event.target)) { + event = normalizeGlobalEvent(instance, event); + scope.domHandlers[nativeEventName].call(instance, event); + } + } + mountSingleDOMEventListener(scope, nativeEventName, nativeEventListener, { capture: true }); + } + } + function mountSingleDOMEventListener(scope, nativeEventName, listener, opt) { + scope.mounted[nativeEventName] = listener; + scope.listenerOpts[nativeEventName] = opt; + addEventListener(scope.domTarget, nativeEventName, listener, opt); + } + function unmountDOMEventListeners(scope) { + var mounted = scope.mounted; + for (var nativeEventName in mounted) { + if (mounted.hasOwnProperty(nativeEventName)) { + removeEventListener(scope.domTarget, nativeEventName, mounted[nativeEventName], scope.listenerOpts[nativeEventName]); + } + } + scope.mounted = {}; + } + var DOMHandlerScope = (function () { + function DOMHandlerScope(domTarget, domHandlers) { + this.mounted = {}; + this.listenerOpts = {}; + this.touching = false; + this.domTarget = domTarget; + this.domHandlers = domHandlers; + } + return DOMHandlerScope; + }()); + var HandlerDomProxy = (function (_super) { + __extends(HandlerDomProxy, _super); + function HandlerDomProxy(dom, painterRoot) { + var _this = _super.call(this) || this; + _this.__pointerCapturing = false; + _this.dom = dom; + _this.painterRoot = painterRoot; + _this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers); + if (globalEventSupported) { + _this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers); + } + mountLocalDOMEventListeners(_this, _this._localHandlerScope); + return _this; + } + HandlerDomProxy.prototype.dispose = function () { + unmountDOMEventListeners(this._localHandlerScope); + if (globalEventSupported) { + unmountDOMEventListeners(this._globalHandlerScope); + } + }; + HandlerDomProxy.prototype.setCursor = function (cursorStyle) { + this.dom.style && (this.dom.style.cursor = cursorStyle || 'default'); + }; + HandlerDomProxy.prototype.__togglePointerCapture = function (isPointerCapturing) { + this.__mayPointerCapture = null; + if (globalEventSupported + && ((+this.__pointerCapturing) ^ (+isPointerCapturing))) { + this.__pointerCapturing = isPointerCapturing; + var globalHandlerScope = this._globalHandlerScope; + isPointerCapturing + ? mountGlobalDOMEventListeners(this, globalHandlerScope) + : unmountDOMEventListeners(globalHandlerScope); + } + }; + return HandlerDomProxy; + }(Eventful)); + + var dpr = 1; + if (typeof window !== 'undefined') { + dpr = Math.max(window.devicePixelRatio + || (window.screen && window.screen.deviceXDPI / window.screen.logicalXDPI) + || 1, 1); + } + var devicePixelRatio = dpr; + var DARK_MODE_THRESHOLD = 0.4; + var DARK_LABEL_COLOR = '#333'; + var LIGHT_LABEL_COLOR = '#ccc'; + var LIGHTER_LABEL_COLOR = '#eee'; + + function create$1() { + return [1, 0, 0, 1, 0, 0]; + } + function identity(out) { + out[0] = 1; + out[1] = 0; + out[2] = 0; + out[3] = 1; + out[4] = 0; + out[5] = 0; + return out; + } + function copy$1(out, m) { + out[0] = m[0]; + out[1] = m[1]; + out[2] = m[2]; + out[3] = m[3]; + out[4] = m[4]; + out[5] = m[5]; + return out; + } + function mul$1(out, m1, m2) { + var out0 = m1[0] * m2[0] + m1[2] * m2[1]; + var out1 = m1[1] * m2[0] + m1[3] * m2[1]; + var out2 = m1[0] * m2[2] + m1[2] * m2[3]; + var out3 = m1[1] * m2[2] + m1[3] * m2[3]; + var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4]; + var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5]; + out[0] = out0; + out[1] = out1; + out[2] = out2; + out[3] = out3; + out[4] = out4; + out[5] = out5; + return out; + } + function translate(out, a, v) { + out[0] = a[0]; + out[1] = a[1]; + out[2] = a[2]; + out[3] = a[3]; + out[4] = a[4] + v[0]; + out[5] = a[5] + v[1]; + return out; + } + function rotate(out, a, rad) { + var aa = a[0]; + var ac = a[2]; + var atx = a[4]; + var ab = a[1]; + var ad = a[3]; + var aty = a[5]; + var st = Math.sin(rad); + var ct = Math.cos(rad); + out[0] = aa * ct + ab * st; + out[1] = -aa * st + ab * ct; + out[2] = ac * ct + ad * st; + out[3] = -ac * st + ct * ad; + out[4] = ct * atx + st * aty; + out[5] = ct * aty - st * atx; + return out; + } + function scale$1(out, a, v) { + var vx = v[0]; + var vy = v[1]; + out[0] = a[0] * vx; + out[1] = a[1] * vy; + out[2] = a[2] * vx; + out[3] = a[3] * vy; + out[4] = a[4] * vx; + out[5] = a[5] * vy; + return out; + } + function invert(out, a) { + var aa = a[0]; + var ac = a[2]; + var atx = a[4]; + var ab = a[1]; + var ad = a[3]; + var aty = a[5]; + var det = aa * ad - ab * ac; + if (!det) { + return null; + } + det = 1.0 / det; + out[0] = ad * det; + out[1] = -ab * det; + out[2] = -ac * det; + out[3] = aa * det; + out[4] = (ac * aty - ad * atx) * det; + out[5] = (ab * atx - aa * aty) * det; + return out; + } + function clone$2(a) { + var b = create$1(); + copy$1(b, a); + return b; + } + + var matrix = /*#__PURE__*/Object.freeze({ + __proto__: null, + create: create$1, + identity: identity, + copy: copy$1, + mul: mul$1, + translate: translate, + rotate: rotate, + scale: scale$1, + invert: invert, + clone: clone$2 + }); + + var mIdentity = identity; + var EPSILON = 5e-5; + function isNotAroundZero(val) { + return val > EPSILON || val < -EPSILON; + } + var scaleTmp = []; + var tmpTransform = []; + var originTransform = create$1(); + var abs = Math.abs; + var Transformable = (function () { + function Transformable() { + } + Transformable.prototype.getLocalTransform = function (m) { + return Transformable.getLocalTransform(this, m); + }; + Transformable.prototype.setPosition = function (arr) { + this.x = arr[0]; + this.y = arr[1]; + }; + Transformable.prototype.setScale = function (arr) { + this.scaleX = arr[0]; + this.scaleY = arr[1]; + }; + Transformable.prototype.setSkew = function (arr) { + this.skewX = arr[0]; + this.skewY = arr[1]; + }; + Transformable.prototype.setOrigin = function (arr) { + this.originX = arr[0]; + this.originY = arr[1]; + }; + Transformable.prototype.needLocalTransform = function () { + return isNotAroundZero(this.rotation) + || isNotAroundZero(this.x) + || isNotAroundZero(this.y) + || isNotAroundZero(this.scaleX - 1) + || isNotAroundZero(this.scaleY - 1); + }; + Transformable.prototype.updateTransform = function () { + var parentTransform = this.parent && this.parent.transform; + var needLocalTransform = this.needLocalTransform(); + var m = this.transform; + if (!(needLocalTransform || parentTransform)) { + m && mIdentity(m); + return; + } + m = m || create$1(); + if (needLocalTransform) { + this.getLocalTransform(m); + } + else { + mIdentity(m); + } + if (parentTransform) { + if (needLocalTransform) { + mul$1(m, parentTransform, m); + } + else { + copy$1(m, parentTransform); + } + } + this.transform = m; + this._resolveGlobalScaleRatio(m); + }; + Transformable.prototype._resolveGlobalScaleRatio = function (m) { + var globalScaleRatio = this.globalScaleRatio; + if (globalScaleRatio != null && globalScaleRatio !== 1) { + this.getGlobalScale(scaleTmp); + var relX = scaleTmp[0] < 0 ? -1 : 1; + var relY = scaleTmp[1] < 0 ? -1 : 1; + var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0; + var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0; + m[0] *= sx; + m[1] *= sx; + m[2] *= sy; + m[3] *= sy; + } + this.invTransform = this.invTransform || create$1(); + invert(this.invTransform, m); + }; + Transformable.prototype.getComputedTransform = function () { + var transformNode = this; + var ancestors = []; + while (transformNode) { + ancestors.push(transformNode); + transformNode = transformNode.parent; + } + while (transformNode = ancestors.pop()) { + transformNode.updateTransform(); + } + return this.transform; + }; + Transformable.prototype.setLocalTransform = function (m) { + if (!m) { + return; + } + var sx = m[0] * m[0] + m[1] * m[1]; + var sy = m[2] * m[2] + m[3] * m[3]; + var rotation = Math.atan2(m[1], m[0]); + var shearX = Math.PI / 2 + rotation - Math.atan2(m[3], m[2]); + sy = Math.sqrt(sy) * Math.cos(shearX); + sx = Math.sqrt(sx); + this.skewX = shearX; + this.skewY = 0; + this.rotation = -rotation; + this.x = +m[4]; + this.y = +m[5]; + this.scaleX = sx; + this.scaleY = sy; + this.originX = 0; + this.originY = 0; + }; + Transformable.prototype.decomposeTransform = function () { + if (!this.transform) { + return; + } + var parent = this.parent; + var m = this.transform; + if (parent && parent.transform) { + mul$1(tmpTransform, parent.invTransform, m); + m = tmpTransform; + } + var ox = this.originX; + var oy = this.originY; + if (ox || oy) { + originTransform[4] = ox; + originTransform[5] = oy; + mul$1(tmpTransform, m, originTransform); + tmpTransform[4] -= ox; + tmpTransform[5] -= oy; + m = tmpTransform; + } + this.setLocalTransform(m); + }; + Transformable.prototype.getGlobalScale = function (out) { + var m = this.transform; + out = out || []; + if (!m) { + out[0] = 1; + out[1] = 1; + return out; + } + out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]); + out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]); + if (m[0] < 0) { + out[0] = -out[0]; + } + if (m[3] < 0) { + out[1] = -out[1]; + } + return out; + }; + Transformable.prototype.transformCoordToLocal = function (x, y) { + var v2 = [x, y]; + var invTransform = this.invTransform; + if (invTransform) { + applyTransform(v2, v2, invTransform); + } + return v2; + }; + Transformable.prototype.transformCoordToGlobal = function (x, y) { + var v2 = [x, y]; + var transform = this.transform; + if (transform) { + applyTransform(v2, v2, transform); + } + return v2; + }; + Transformable.prototype.getLineScale = function () { + var m = this.transform; + return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10 + ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1])) + : 1; + }; + Transformable.prototype.copyTransform = function (source) { + var target = this; + for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) { + var propName = TRANSFORMABLE_PROPS[i]; + target[propName] = source[propName]; + } + }; + Transformable.getLocalTransform = function (target, m) { + m = m || []; + var ox = target.originX || 0; + var oy = target.originY || 0; + var sx = target.scaleX; + var sy = target.scaleY; + var rotation = target.rotation || 0; + var x = target.x; + var y = target.y; + var skewX = target.skewX ? Math.tan(target.skewX) : 0; + var skewY = target.skewY ? Math.tan(-target.skewY) : 0; + if (ox || oy) { + m[4] = -ox * sx - skewX * oy * sy; + m[5] = -oy * sy - skewY * ox * sx; + } + else { + m[4] = m[5] = 0; + } + m[0] = sx; + m[3] = sy; + m[1] = skewY * sx; + m[2] = skewX * sy; + rotation && rotate(m, m, rotation); + m[4] += ox + x; + m[5] += oy + y; + return m; + }; + Transformable.initDefaultProps = (function () { + var proto = Transformable.prototype; + proto.x = 0; + proto.y = 0; + proto.scaleX = 1; + proto.scaleY = 1; + proto.originX = 0; + proto.originY = 0; + proto.skewX = 0; + proto.skewY = 0; + proto.rotation = 0; + proto.globalScaleRatio = 1; + })(); + return Transformable; + }()); + var TRANSFORMABLE_PROPS = [ + 'x', 'y', 'originX', 'originY', 'rotation', 'scaleX', 'scaleY', 'skewX', 'skewY' + ]; + + var Point = (function () { + function Point(x, y) { + this.x = x || 0; + this.y = y || 0; + } + Point.prototype.copy = function (other) { + this.x = other.x; + this.y = other.y; + return this; + }; + Point.prototype.clone = function () { + return new Point(this.x, this.y); + }; + Point.prototype.set = function (x, y) { + this.x = x; + this.y = y; + return this; + }; + Point.prototype.equal = function (other) { + return other.x === this.x && other.y === this.y; + }; + Point.prototype.add = function (other) { + this.x += other.x; + this.y += other.y; + return this; + }; + Point.prototype.scale = function (scalar) { + this.x *= scalar; + this.y *= scalar; + }; + Point.prototype.scaleAndAdd = function (other, scalar) { + this.x += other.x * scalar; + this.y += other.y * scalar; + }; + Point.prototype.sub = function (other) { + this.x -= other.x; + this.y -= other.y; + return this; + }; + Point.prototype.dot = function (other) { + return this.x * other.x + this.y * other.y; + }; + Point.prototype.len = function () { + return Math.sqrt(this.x * this.x + this.y * this.y); + }; + Point.prototype.lenSquare = function () { + return this.x * this.x + this.y * this.y; + }; + Point.prototype.normalize = function () { + var len = this.len(); + this.x /= len; + this.y /= len; + return this; + }; + Point.prototype.distance = function (other) { + var dx = this.x - other.x; + var dy = this.y - other.y; + return Math.sqrt(dx * dx + dy * dy); + }; + Point.prototype.distanceSquare = function (other) { + var dx = this.x - other.x; + var dy = this.y - other.y; + return dx * dx + dy * dy; + }; + Point.prototype.negate = function () { + this.x = -this.x; + this.y = -this.y; + return this; + }; + Point.prototype.transform = function (m) { + if (!m) { + return; + } + var x = this.x; + var y = this.y; + this.x = m[0] * x + m[2] * y + m[4]; + this.y = m[1] * x + m[3] * y + m[5]; + return this; + }; + Point.prototype.toArray = function (out) { + out[0] = this.x; + out[1] = this.y; + return out; + }; + Point.prototype.fromArray = function (input) { + this.x = input[0]; + this.y = input[1]; + }; + Point.set = function (p, x, y) { + p.x = x; + p.y = y; + }; + Point.copy = function (p, p2) { + p.x = p2.x; + p.y = p2.y; + }; + Point.len = function (p) { + return Math.sqrt(p.x * p.x + p.y * p.y); + }; + Point.lenSquare = function (p) { + return p.x * p.x + p.y * p.y; + }; + Point.dot = function (p0, p1) { + return p0.x * p1.x + p0.y * p1.y; + }; + Point.add = function (out, p0, p1) { + out.x = p0.x + p1.x; + out.y = p0.y + p1.y; + }; + Point.sub = function (out, p0, p1) { + out.x = p0.x - p1.x; + out.y = p0.y - p1.y; + }; + Point.scale = function (out, p0, scalar) { + out.x = p0.x * scalar; + out.y = p0.y * scalar; + }; + Point.scaleAndAdd = function (out, p0, p1, scalar) { + out.x = p0.x + p1.x * scalar; + out.y = p0.y + p1.y * scalar; + }; + Point.lerp = function (out, p0, p1, t) { + var onet = 1 - t; + out.x = onet * p0.x + t * p1.x; + out.y = onet * p0.y + t * p1.y; + }; + return Point; + }()); + + var mathMin = Math.min; + var mathMax = Math.max; + var lt = new Point(); + var rb = new Point(); + var lb = new Point(); + var rt = new Point(); + var minTv = new Point(); + var maxTv = new Point(); + var BoundingRect = (function () { + function BoundingRect(x, y, width, height) { + if (width < 0) { + x = x + width; + width = -width; + } + if (height < 0) { + y = y + height; + height = -height; + } + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + BoundingRect.prototype.union = function (other) { + var x = mathMin(other.x, this.x); + var y = mathMin(other.y, this.y); + if (isFinite(this.x) && isFinite(this.width)) { + this.width = mathMax(other.x + other.width, this.x + this.width) - x; + } + else { + this.width = other.width; + } + if (isFinite(this.y) && isFinite(this.height)) { + this.height = mathMax(other.y + other.height, this.y + this.height) - y; + } + else { + this.height = other.height; + } + this.x = x; + this.y = y; + }; + BoundingRect.prototype.applyTransform = function (m) { + BoundingRect.applyTransform(this, this, m); + }; + BoundingRect.prototype.calculateTransform = function (b) { + var a = this; + var sx = b.width / a.width; + var sy = b.height / a.height; + var m = create$1(); + translate(m, m, [-a.x, -a.y]); + scale$1(m, m, [sx, sy]); + translate(m, m, [b.x, b.y]); + return m; + }; + BoundingRect.prototype.intersect = function (b, mtv) { + if (!b) { + return false; + } + if (!(b instanceof BoundingRect)) { + b = BoundingRect.create(b); + } + var a = this; + var ax0 = a.x; + var ax1 = a.x + a.width; + var ay0 = a.y; + var ay1 = a.y + a.height; + var bx0 = b.x; + var bx1 = b.x + b.width; + var by0 = b.y; + var by1 = b.y + b.height; + var overlap = !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0); + if (mtv) { + var dMin = Infinity; + var dMax = 0; + var d0 = Math.abs(ax1 - bx0); + var d1 = Math.abs(bx1 - ax0); + var d2 = Math.abs(ay1 - by0); + var d3 = Math.abs(by1 - ay0); + var dx = Math.min(d0, d1); + var dy = Math.min(d2, d3); + if (ax1 < bx0 || bx1 < ax0) { + if (dx > dMax) { + dMax = dx; + if (d0 < d1) { + Point.set(maxTv, -d0, 0); + } + else { + Point.set(maxTv, d1, 0); + } + } + } + else { + if (dx < dMin) { + dMin = dx; + if (d0 < d1) { + Point.set(minTv, d0, 0); + } + else { + Point.set(minTv, -d1, 0); + } + } + } + if (ay1 < by0 || by1 < ay0) { + if (dy > dMax) { + dMax = dy; + if (d2 < d3) { + Point.set(maxTv, 0, -d2); + } + else { + Point.set(maxTv, 0, d3); + } + } + } + else { + if (dx < dMin) { + dMin = dx; + if (d2 < d3) { + Point.set(minTv, 0, d2); + } + else { + Point.set(minTv, 0, -d3); + } + } + } + } + if (mtv) { + Point.copy(mtv, overlap ? minTv : maxTv); + } + return overlap; + }; + BoundingRect.prototype.contain = function (x, y) { + var rect = this; + return x >= rect.x + && x <= (rect.x + rect.width) + && y >= rect.y + && y <= (rect.y + rect.height); + }; + BoundingRect.prototype.clone = function () { + return new BoundingRect(this.x, this.y, this.width, this.height); + }; + BoundingRect.prototype.copy = function (other) { + BoundingRect.copy(this, other); + }; + BoundingRect.prototype.plain = function () { + return { + x: this.x, + y: this.y, + width: this.width, + height: this.height + }; + }; + BoundingRect.prototype.isFinite = function () { + return isFinite(this.x) + && isFinite(this.y) + && isFinite(this.width) + && isFinite(this.height); + }; + BoundingRect.prototype.isZero = function () { + return this.width === 0 || this.height === 0; + }; + BoundingRect.create = function (rect) { + return new BoundingRect(rect.x, rect.y, rect.width, rect.height); + }; + BoundingRect.copy = function (target, source) { + target.x = source.x; + target.y = source.y; + target.width = source.width; + target.height = source.height; + }; + BoundingRect.applyTransform = function (target, source, m) { + if (!m) { + if (target !== source) { + BoundingRect.copy(target, source); + } + return; + } + if (m[1] < 1e-5 && m[1] > -1e-5 && m[2] < 1e-5 && m[2] > -1e-5) { + var sx = m[0]; + var sy = m[3]; + var tx = m[4]; + var ty = m[5]; + target.x = source.x * sx + tx; + target.y = source.y * sy + ty; + target.width = source.width * sx; + target.height = source.height * sy; + if (target.width < 0) { + target.x += target.width; + target.width = -target.width; + } + if (target.height < 0) { + target.y += target.height; + target.height = -target.height; + } + return; + } + lt.x = lb.x = source.x; + lt.y = rt.y = source.y; + rb.x = rt.x = source.x + source.width; + rb.y = lb.y = source.y + source.height; + lt.transform(m); + rt.transform(m); + rb.transform(m); + lb.transform(m); + target.x = mathMin(lt.x, rb.x, lb.x, rt.x); + target.y = mathMin(lt.y, rb.y, lb.y, rt.y); + var maxX = mathMax(lt.x, rb.x, lb.x, rt.x); + var maxY = mathMax(lt.y, rb.y, lb.y, rt.y); + target.width = maxX - target.x; + target.height = maxY - target.y; + }; + return BoundingRect; + }()); + + var textWidthCache = {}; + var DEFAULT_FONT = '12px sans-serif'; + var _ctx; + var _cachedFont; + function defaultMeasureText(text, font) { + if (!_ctx) { + _ctx = createCanvas().getContext('2d'); + } + if (_cachedFont !== font) { + _cachedFont = _ctx.font = font || DEFAULT_FONT; + } + return _ctx.measureText(text); + } + var methods$1 = { + measureText: defaultMeasureText + }; + function getWidth(text, font) { + font = font || DEFAULT_FONT; + var cacheOfFont = textWidthCache[font]; + if (!cacheOfFont) { + cacheOfFont = textWidthCache[font] = new LRU(500); + } + var width = cacheOfFont.get(text); + if (width == null) { + width = methods$1.measureText(text, font).width; + cacheOfFont.put(text, width); + } + return width; + } + function innerGetBoundingRect(text, font, textAlign, textBaseline) { + var width = getWidth(text, font); + var height = getLineHeight(font); + var x = adjustTextX(0, width, textAlign); + var y = adjustTextY(0, height, textBaseline); + var rect = new BoundingRect(x, y, width, height); + return rect; + } + function getBoundingRect(text, font, textAlign, textBaseline) { + var textLines = ((text || '') + '').split('\n'); + var len = textLines.length; + if (len === 1) { + return innerGetBoundingRect(textLines[0], font, textAlign, textBaseline); + } + else { + var uniondRect = new BoundingRect(0, 0, 0, 0); + for (var i = 0; i < textLines.length; i++) { + var rect = innerGetBoundingRect(textLines[i], font, textAlign, textBaseline); + i === 0 ? uniondRect.copy(rect) : uniondRect.union(rect); + } + return uniondRect; + } + } + function adjustTextX(x, width, textAlign) { + if (textAlign === 'right') { + x -= width; + } + else if (textAlign === 'center') { + x -= width / 2; + } + return x; + } + function adjustTextY(y, height, verticalAlign) { + if (verticalAlign === 'middle') { + y -= height / 2; + } + else if (verticalAlign === 'bottom') { + y -= height; + } + return y; + } + function getLineHeight(font) { + return getWidth('国', font); + } + function parsePercent(value, maxValue) { + if (typeof value === 'string') { + if (value.lastIndexOf('%') >= 0) { + return parseFloat(value) / 100 * maxValue; + } + return parseFloat(value); + } + return value; + } + function calculateTextPosition(out, opts, rect) { + var textPosition = opts.position || 'inside'; + var distance = opts.distance != null ? opts.distance : 5; + var height = rect.height; + var width = rect.width; + var halfHeight = height / 2; + var x = rect.x; + var y = rect.y; + var textAlign = 'left'; + var textVerticalAlign = 'top'; + if (textPosition instanceof Array) { + x += parsePercent(textPosition[0], rect.width); + y += parsePercent(textPosition[1], rect.height); + textAlign = null; + textVerticalAlign = null; + } + else { + switch (textPosition) { + case 'left': + x -= distance; + y += halfHeight; + textAlign = 'right'; + textVerticalAlign = 'middle'; + break; + case 'right': + x += distance + width; + y += halfHeight; + textVerticalAlign = 'middle'; + break; + case 'top': + x += width / 2; + y -= distance; + textAlign = 'center'; + textVerticalAlign = 'bottom'; + break; + case 'bottom': + x += width / 2; + y += height + distance; + textAlign = 'center'; + break; + case 'inside': + x += width / 2; + y += halfHeight; + textAlign = 'center'; + textVerticalAlign = 'middle'; + break; + case 'insideLeft': + x += distance; + y += halfHeight; + textVerticalAlign = 'middle'; + break; + case 'insideRight': + x += width - distance; + y += halfHeight; + textAlign = 'right'; + textVerticalAlign = 'middle'; + break; + case 'insideTop': + x += width / 2; + y += distance; + textAlign = 'center'; + break; + case 'insideBottom': + x += width / 2; + y += height - distance; + textAlign = 'center'; + textVerticalAlign = 'bottom'; + break; + case 'insideTopLeft': + x += distance; + y += distance; + break; + case 'insideTopRight': + x += width - distance; + y += distance; + textAlign = 'right'; + break; + case 'insideBottomLeft': + x += distance; + y += height - distance; + textVerticalAlign = 'bottom'; + break; + case 'insideBottomRight': + x += width - distance; + y += height - distance; + textAlign = 'right'; + textVerticalAlign = 'bottom'; + break; + } + } + out = out || {}; + out.x = x; + out.y = y; + out.align = textAlign; + out.verticalAlign = textVerticalAlign; + return out; + } + + var PRESERVED_NORMAL_STATE = '__zr_normal__'; + var PRIMARY_STATES_KEYS = ['x', 'y', 'scaleX', 'scaleY', 'originX', 'originY', 'rotation', 'ignore']; + var DEFAULT_ANIMATABLE_MAP = { + x: true, + y: true, + scaleX: true, + scaleY: true, + originX: true, + originY: true, + rotation: true, + ignore: false + }; + var tmpTextPosCalcRes = {}; + var tmpBoundingRect = new BoundingRect(0, 0, 0, 0); + var Element = (function () { + function Element(props) { + this.id = guid(); + this.animators = []; + this.currentStates = []; + this.states = {}; + this._init(props); + } + Element.prototype._init = function (props) { + this.attr(props); + }; + Element.prototype.drift = function (dx, dy, e) { + switch (this.draggable) { + case 'horizontal': + dy = 0; + break; + case 'vertical': + dx = 0; + break; + } + var m = this.transform; + if (!m) { + m = this.transform = [1, 0, 0, 1, 0, 0]; + } + m[4] += dx; + m[5] += dy; + this.decomposeTransform(); + this.markRedraw(); + }; + Element.prototype.beforeUpdate = function () { }; + Element.prototype.afterUpdate = function () { }; + Element.prototype.update = function () { + this.updateTransform(); + if (this.__dirty) { + this.updateInnerText(); + } + }; + Element.prototype.updateInnerText = function (forceUpdate) { + var textEl = this._textContent; + if (textEl && (!textEl.ignore || forceUpdate)) { + if (!this.textConfig) { + this.textConfig = {}; + } + var textConfig = this.textConfig; + var isLocal = textConfig.local; + var innerTransformable = textEl.innerTransformable; + var textAlign = void 0; + var textVerticalAlign = void 0; + var textStyleChanged = false; + innerTransformable.parent = isLocal ? this : null; + var innerOrigin = false; + innerTransformable.copyTransform(textEl); + if (textConfig.position != null) { + var layoutRect = tmpBoundingRect; + if (textConfig.layoutRect) { + layoutRect.copy(textConfig.layoutRect); + } + else { + layoutRect.copy(this.getBoundingRect()); + } + if (!isLocal) { + layoutRect.applyTransform(this.transform); + } + if (this.calculateTextPosition) { + this.calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect); + } + else { + calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect); + } + innerTransformable.x = tmpTextPosCalcRes.x; + innerTransformable.y = tmpTextPosCalcRes.y; + textAlign = tmpTextPosCalcRes.align; + textVerticalAlign = tmpTextPosCalcRes.verticalAlign; + var textOrigin = textConfig.origin; + if (textOrigin && textConfig.rotation != null) { + var relOriginX = void 0; + var relOriginY = void 0; + if (textOrigin === 'center') { + relOriginX = layoutRect.width * 0.5; + relOriginY = layoutRect.height * 0.5; + } + else { + relOriginX = parsePercent(textOrigin[0], layoutRect.width); + relOriginY = parsePercent(textOrigin[1], layoutRect.height); + } + innerOrigin = true; + innerTransformable.originX = -innerTransformable.x + relOriginX + (isLocal ? 0 : layoutRect.x); + innerTransformable.originY = -innerTransformable.y + relOriginY + (isLocal ? 0 : layoutRect.y); + } + } + if (textConfig.rotation != null) { + innerTransformable.rotation = textConfig.rotation; + } + var textOffset = textConfig.offset; + if (textOffset) { + innerTransformable.x += textOffset[0]; + innerTransformable.y += textOffset[1]; + if (!innerOrigin) { + innerTransformable.originX = -textOffset[0]; + innerTransformable.originY = -textOffset[1]; + } + } + var isInside = textConfig.inside == null + ? (typeof textConfig.position === 'string' && textConfig.position.indexOf('inside') >= 0) + : textConfig.inside; + var innerTextDefaultStyle = this._innerTextDefaultStyle || (this._innerTextDefaultStyle = {}); + var textFill = void 0; + var textStroke = void 0; + var autoStroke = void 0; + if (isInside && this.canBeInsideText()) { + textFill = textConfig.insideFill; + textStroke = textConfig.insideStroke; + if (textFill == null || textFill === 'auto') { + textFill = this.getInsideTextFill(); + } + if (textStroke == null || textStroke === 'auto') { + textStroke = this.getInsideTextStroke(textFill); + autoStroke = true; + } + } + else { + textFill = textConfig.outsideFill; + textStroke = textConfig.outsideStroke; + if (textFill == null || textFill === 'auto') { + textFill = this.getOutsideFill(); + } + if (textStroke == null || textStroke === 'auto') { + textStroke = this.getOutsideStroke(textFill); + autoStroke = true; + } + } + textFill = textFill || '#000'; + if (textFill !== innerTextDefaultStyle.fill + || textStroke !== innerTextDefaultStyle.stroke + || autoStroke !== innerTextDefaultStyle.autoStroke + || textAlign !== innerTextDefaultStyle.align + || textVerticalAlign !== innerTextDefaultStyle.verticalAlign) { + textStyleChanged = true; + innerTextDefaultStyle.fill = textFill; + innerTextDefaultStyle.stroke = textStroke; + innerTextDefaultStyle.autoStroke = autoStroke; + innerTextDefaultStyle.align = textAlign; + innerTextDefaultStyle.verticalAlign = textVerticalAlign; + textEl.setDefaultTextStyle(innerTextDefaultStyle); + } + textEl.__dirty |= REDRAW_BIT; + if (textStyleChanged) { + textEl.dirtyStyle(true); + } + } + }; + Element.prototype.canBeInsideText = function () { + return true; + }; + Element.prototype.getInsideTextFill = function () { + return '#fff'; + }; + Element.prototype.getInsideTextStroke = function (textFill) { + return '#000'; + }; + Element.prototype.getOutsideFill = function () { + return this.__zr && this.__zr.isDarkMode() ? LIGHT_LABEL_COLOR : DARK_LABEL_COLOR; + }; + Element.prototype.getOutsideStroke = function (textFill) { + var backgroundColor = this.__zr && this.__zr.getBackgroundColor(); + var colorArr = typeof backgroundColor === 'string' && parse(backgroundColor); + if (!colorArr) { + colorArr = [255, 255, 255, 1]; + } + var alpha = colorArr[3]; + var isDark = this.__zr.isDarkMode(); + for (var i = 0; i < 3; i++) { + colorArr[i] = colorArr[i] * alpha + (isDark ? 0 : 255) * (1 - alpha); + } + colorArr[3] = 1; + return stringify(colorArr, 'rgba'); + }; + Element.prototype.traverse = function (cb, context) { }; + Element.prototype.attrKV = function (key, value) { + if (key === 'textConfig') { + this.setTextConfig(value); + } + else if (key === 'textContent') { + this.setTextContent(value); + } + else if (key === 'clipPath') { + this.setClipPath(value); + } + else if (key === 'extra') { + this.extra = this.extra || {}; + extend(this.extra, value); + } + else { + this[key] = value; + } + }; + Element.prototype.hide = function () { + this.ignore = true; + this.markRedraw(); + }; + Element.prototype.show = function () { + this.ignore = false; + this.markRedraw(); + }; + Element.prototype.attr = function (keyOrObj, value) { + if (typeof keyOrObj === 'string') { + this.attrKV(keyOrObj, value); + } + else if (isObject(keyOrObj)) { + var obj = keyOrObj; + var keysArr = keys(obj); + for (var i = 0; i < keysArr.length; i++) { + var key = keysArr[i]; + this.attrKV(key, keyOrObj[key]); + } + } + this.markRedraw(); + return this; + }; + Element.prototype.saveCurrentToNormalState = function (toState) { + this._innerSaveToNormal(toState); + var normalState = this._normalState; + for (var i = 0; i < this.animators.length; i++) { + var animator = this.animators[i]; + var fromStateTransition = animator.__fromStateTransition; + if (fromStateTransition && fromStateTransition !== PRESERVED_NORMAL_STATE) { + continue; + } + var targetName = animator.targetName; + var target = targetName + ? normalState[targetName] : normalState; + animator.saveFinalToTarget(target); + } + }; + Element.prototype._innerSaveToNormal = function (toState) { + var normalState = this._normalState; + if (!normalState) { + normalState = this._normalState = {}; + } + if (toState.textConfig && !normalState.textConfig) { + normalState.textConfig = this.textConfig; + } + this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS); + }; + Element.prototype._savePrimaryToNormal = function (toState, normalState, primaryKeys) { + for (var i = 0; i < primaryKeys.length; i++) { + var key = primaryKeys[i]; + if (toState[key] != null && !(key in normalState)) { + normalState[key] = this[key]; + } + } + }; + Element.prototype.hasState = function () { + return this.currentStates.length > 0; + }; + Element.prototype.getState = function (name) { + return this.states[name]; + }; + Element.prototype.ensureState = function (name) { + var states = this.states; + if (!states[name]) { + states[name] = {}; + } + return states[name]; + }; + Element.prototype.clearStates = function (noAnimation) { + this.useState(PRESERVED_NORMAL_STATE, false, noAnimation); + }; + Element.prototype.useState = function (stateName, keepCurrentStates, noAnimation, forceUseHoverLayer) { + var toNormalState = stateName === PRESERVED_NORMAL_STATE; + var hasStates = this.hasState(); + if (!hasStates && toNormalState) { + return; + } + var currentStates = this.currentStates; + var animationCfg = this.stateTransition; + if (indexOf(currentStates, stateName) >= 0 && (keepCurrentStates || currentStates.length === 1)) { + return; + } + var state; + if (this.stateProxy && !toNormalState) { + state = this.stateProxy(stateName); + } + if (!state) { + state = (this.states && this.states[stateName]); + } + if (!state && !toNormalState) { + logError("State " + stateName + " not exists."); + return; + } + if (!toNormalState) { + this.saveCurrentToNormalState(state); + } + var useHoverLayer = !!((state && state.hoverLayer) || forceUseHoverLayer); + if (useHoverLayer) { + this._toggleHoverLayerFlag(true); + } + this._applyStateObj(stateName, state, this._normalState, keepCurrentStates, !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0, animationCfg); + var textContent = this._textContent; + var textGuide = this._textGuide; + if (textContent) { + textContent.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer); + } + if (textGuide) { + textGuide.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer); + } + if (toNormalState) { + this.currentStates = []; + this._normalState = {}; + } + else { + if (!keepCurrentStates) { + this.currentStates = [stateName]; + } + else { + this.currentStates.push(stateName); + } + } + this._updateAnimationTargets(); + this.markRedraw(); + if (!useHoverLayer && this.__inHover) { + this._toggleHoverLayerFlag(false); + this.__dirty &= ~REDRAW_BIT; + } + return state; + }; + Element.prototype.useStates = function (states, noAnimation, forceUseHoverLayer) { + if (!states.length) { + this.clearStates(); + } + else { + var stateObjects = []; + var currentStates = this.currentStates; + var len = states.length; + var notChange = len === currentStates.length; + if (notChange) { + for (var i = 0; i < len; i++) { + if (states[i] !== currentStates[i]) { + notChange = false; + break; + } + } + } + if (notChange) { + return; + } + for (var i = 0; i < len; i++) { + var stateName = states[i]; + var stateObj = void 0; + if (this.stateProxy) { + stateObj = this.stateProxy(stateName, states); + } + if (!stateObj) { + stateObj = this.states[stateName]; + } + if (stateObj) { + stateObjects.push(stateObj); + } + } + var lastStateObj = stateObjects[len - 1]; + var useHoverLayer = !!((lastStateObj && lastStateObj.hoverLayer) || forceUseHoverLayer); + if (useHoverLayer) { + this._toggleHoverLayerFlag(true); + } + var mergedState = this._mergeStates(stateObjects); + var animationCfg = this.stateTransition; + this.saveCurrentToNormalState(mergedState); + this._applyStateObj(states.join(','), mergedState, this._normalState, false, !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0, animationCfg); + var textContent = this._textContent; + var textGuide = this._textGuide; + if (textContent) { + textContent.useStates(states, noAnimation, useHoverLayer); + } + if (textGuide) { + textGuide.useStates(states, noAnimation, useHoverLayer); + } + this._updateAnimationTargets(); + this.currentStates = states.slice(); + this.markRedraw(); + if (!useHoverLayer && this.__inHover) { + this._toggleHoverLayerFlag(false); + this.__dirty &= ~REDRAW_BIT; + } + } + }; + Element.prototype._updateAnimationTargets = function () { + for (var i = 0; i < this.animators.length; i++) { + var animator = this.animators[i]; + if (animator.targetName) { + animator.changeTarget(this[animator.targetName]); + } + } + }; + Element.prototype.removeState = function (state) { + var idx = indexOf(this.currentStates, state); + if (idx >= 0) { + var currentStates = this.currentStates.slice(); + currentStates.splice(idx, 1); + this.useStates(currentStates); + } + }; + Element.prototype.replaceState = function (oldState, newState, forceAdd) { + var currentStates = this.currentStates.slice(); + var idx = indexOf(currentStates, oldState); + var newStateExists = indexOf(currentStates, newState) >= 0; + if (idx >= 0) { + if (!newStateExists) { + currentStates[idx] = newState; + } + else { + currentStates.splice(idx, 1); + } + } + else if (forceAdd && !newStateExists) { + currentStates.push(newState); + } + this.useStates(currentStates); + }; + Element.prototype.toggleState = function (state, enable) { + if (enable) { + this.useState(state, true); + } + else { + this.removeState(state); + } + }; + Element.prototype._mergeStates = function (states) { + var mergedState = {}; + var mergedTextConfig; + for (var i = 0; i < states.length; i++) { + var state = states[i]; + extend(mergedState, state); + if (state.textConfig) { + mergedTextConfig = mergedTextConfig || {}; + extend(mergedTextConfig, state.textConfig); + } + } + if (mergedTextConfig) { + mergedState.textConfig = mergedTextConfig; + } + return mergedState; + }; + Element.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) { + var needsRestoreToNormal = !(state && keepCurrentStates); + if (state && state.textConfig) { + this.textConfig = extend({}, keepCurrentStates ? this.textConfig : normalState.textConfig); + extend(this.textConfig, state.textConfig); + } + else if (needsRestoreToNormal) { + if (normalState.textConfig) { + this.textConfig = normalState.textConfig; + } + } + var transitionTarget = {}; + var hasTransition = false; + for (var i = 0; i < PRIMARY_STATES_KEYS.length; i++) { + var key = PRIMARY_STATES_KEYS[i]; + var propNeedsTransition = transition && DEFAULT_ANIMATABLE_MAP[key]; + if (state && state[key] != null) { + if (propNeedsTransition) { + hasTransition = true; + transitionTarget[key] = state[key]; + } + else { + this[key] = state[key]; + } + } + else if (needsRestoreToNormal) { + if (normalState[key] != null) { + if (propNeedsTransition) { + hasTransition = true; + transitionTarget[key] = normalState[key]; + } + else { + this[key] = normalState[key]; + } + } + } + } + if (!transition) { + for (var i = 0; i < this.animators.length; i++) { + var animator = this.animators[i]; + var targetName = animator.targetName; + animator.__changeFinalValue(targetName + ? (state || normalState)[targetName] + : (state || normalState)); + } + } + if (hasTransition) { + this._transitionState(stateName, transitionTarget, animationCfg); + } + }; + Element.prototype._attachComponent = function (componentEl) { + if (componentEl.__zr && !componentEl.__hostTarget) { + throw new Error('Text element has been added to zrender.'); + } + if (componentEl === this) { + throw new Error('Recursive component attachment.'); + } + var zr = this.__zr; + if (zr) { + componentEl.addSelfToZr(zr); + } + componentEl.__zr = zr; + componentEl.__hostTarget = this; + }; + Element.prototype._detachComponent = function (componentEl) { + if (componentEl.__zr) { + componentEl.removeSelfFromZr(componentEl.__zr); + } + componentEl.__zr = null; + componentEl.__hostTarget = null; + }; + Element.prototype.getClipPath = function () { + return this._clipPath; + }; + Element.prototype.setClipPath = function (clipPath) { + if (this._clipPath && this._clipPath !== clipPath) { + this.removeClipPath(); + } + this._attachComponent(clipPath); + this._clipPath = clipPath; + this.markRedraw(); + }; + Element.prototype.removeClipPath = function () { + var clipPath = this._clipPath; + if (clipPath) { + this._detachComponent(clipPath); + this._clipPath = null; + this.markRedraw(); + } + }; + Element.prototype.getTextContent = function () { + return this._textContent; + }; + Element.prototype.setTextContent = function (textEl) { + var previousTextContent = this._textContent; + if (previousTextContent === textEl) { + return; + } + if (previousTextContent && previousTextContent !== textEl) { + this.removeTextContent(); + } + if (textEl.__zr && !textEl.__hostTarget) { + throw new Error('Text element has been added to zrender.'); + } + textEl.innerTransformable = new Transformable(); + this._attachComponent(textEl); + this._textContent = textEl; + this.markRedraw(); + }; + Element.prototype.setTextConfig = function (cfg) { + if (!this.textConfig) { + this.textConfig = {}; + } + extend(this.textConfig, cfg); + this.markRedraw(); + }; + Element.prototype.removeTextConfig = function () { + this.textConfig = null; + this.markRedraw(); + }; + Element.prototype.removeTextContent = function () { + var textEl = this._textContent; + if (textEl) { + textEl.innerTransformable = null; + this._detachComponent(textEl); + this._textContent = null; + this._innerTextDefaultStyle = null; + this.markRedraw(); + } + }; + Element.prototype.getTextGuideLine = function () { + return this._textGuide; + }; + Element.prototype.setTextGuideLine = function (guideLine) { + if (this._textGuide && this._textGuide !== guideLine) { + this.removeTextGuideLine(); + } + this._attachComponent(guideLine); + this._textGuide = guideLine; + this.markRedraw(); + }; + Element.prototype.removeTextGuideLine = function () { + var textGuide = this._textGuide; + if (textGuide) { + this._detachComponent(textGuide); + this._textGuide = null; + this.markRedraw(); + } + }; + Element.prototype.markRedraw = function () { + this.__dirty |= REDRAW_BIT; + var zr = this.__zr; + if (zr) { + if (this.__inHover) { + zr.refreshHover(); + } + else { + zr.refresh(); + } + } + if (this.__hostTarget) { + this.__hostTarget.markRedraw(); + } + }; + Element.prototype.dirty = function () { + this.markRedraw(); + }; + Element.prototype._toggleHoverLayerFlag = function (inHover) { + this.__inHover = inHover; + var textContent = this._textContent; + var textGuide = this._textGuide; + if (textContent) { + textContent.__inHover = inHover; + } + if (textGuide) { + textGuide.__inHover = inHover; + } + }; + Element.prototype.addSelfToZr = function (zr) { + if (this.__zr === zr) { + return; + } + this.__zr = zr; + var animators = this.animators; + if (animators) { + for (var i = 0; i < animators.length; i++) { + zr.animation.addAnimator(animators[i]); + } + } + if (this._clipPath) { + this._clipPath.addSelfToZr(zr); + } + if (this._textContent) { + this._textContent.addSelfToZr(zr); + } + if (this._textGuide) { + this._textGuide.addSelfToZr(zr); + } + }; + Element.prototype.removeSelfFromZr = function (zr) { + if (!this.__zr) { + return; + } + this.__zr = null; + var animators = this.animators; + if (animators) { + for (var i = 0; i < animators.length; i++) { + zr.animation.removeAnimator(animators[i]); + } + } + if (this._clipPath) { + this._clipPath.removeSelfFromZr(zr); + } + if (this._textContent) { + this._textContent.removeSelfFromZr(zr); + } + if (this._textGuide) { + this._textGuide.removeSelfFromZr(zr); + } + }; + Element.prototype.animate = function (key, loop) { + var target = key ? this[key] : this; + if (!target) { + logError('Property "' + + key + + '" is not existed in element ' + + this.id); + return; + } + var animator = new Animator(target, loop); + this.addAnimator(animator, key); + return animator; + }; + Element.prototype.addAnimator = function (animator, key) { + var zr = this.__zr; + var el = this; + animator.during(function () { + el.updateDuringAnimation(key); + }).done(function () { + var animators = el.animators; + var idx = indexOf(animators, animator); + if (idx >= 0) { + animators.splice(idx, 1); + } + }); + this.animators.push(animator); + if (zr) { + zr.animation.addAnimator(animator); + } + zr && zr.wakeUp(); + }; + Element.prototype.updateDuringAnimation = function (key) { + this.markRedraw(); + }; + Element.prototype.stopAnimation = function (scope, forwardToLast) { + var animators = this.animators; + var len = animators.length; + var leftAnimators = []; + for (var i = 0; i < len; i++) { + var animator = animators[i]; + if (!scope || scope === animator.scope) { + animator.stop(forwardToLast); + } + else { + leftAnimators.push(animator); + } + } + this.animators = leftAnimators; + return this; + }; + Element.prototype.animateTo = function (target, cfg, animationProps) { + animateTo(this, target, cfg, animationProps); + }; + Element.prototype.animateFrom = function (target, cfg, animationProps) { + animateTo(this, target, cfg, animationProps, true); + }; + Element.prototype._transitionState = function (stateName, target, cfg, animationProps) { + var animators = animateTo(this, target, cfg, animationProps); + for (var i = 0; i < animators.length; i++) { + animators[i].__fromStateTransition = stateName; + } + }; + Element.prototype.getBoundingRect = function () { + return null; + }; + Element.prototype.getPaintRect = function () { + return null; + }; + Element.initDefaultProps = (function () { + var elProto = Element.prototype; + elProto.type = 'element'; + elProto.name = ''; + elProto.ignore = false; + elProto.silent = false; + elProto.isGroup = false; + elProto.draggable = false; + elProto.dragging = false; + elProto.ignoreClip = false; + elProto.__inHover = false; + elProto.__dirty = REDRAW_BIT; + var logs = {}; + function logDeprecatedError(key, xKey, yKey) { + if (!logs[key + xKey + yKey]) { + console.warn("DEPRECATED: '" + key + "' has been deprecated. use '" + xKey + "', '" + yKey + "' instead"); + logs[key + xKey + yKey] = true; + } + } + function createLegacyProperty(key, privateKey, xKey, yKey) { + Object.defineProperty(elProto, key, { + get: function () { + logDeprecatedError(key, xKey, yKey); + if (!this[privateKey]) { + var pos = this[privateKey] = []; + enhanceArray(this, pos); + } + return this[privateKey]; + }, + set: function (pos) { + logDeprecatedError(key, xKey, yKey); + this[xKey] = pos[0]; + this[yKey] = pos[1]; + this[privateKey] = pos; + enhanceArray(this, pos); + } + }); + function enhanceArray(self, pos) { + Object.defineProperty(pos, 0, { + get: function () { + return self[xKey]; + }, + set: function (val) { + self[xKey] = val; + } + }); + Object.defineProperty(pos, 1, { + get: function () { + return self[yKey]; + }, + set: function (val) { + self[yKey] = val; + } + }); + } + } + if (Object.defineProperty && (!env.browser.ie || env.browser.version > 8)) { + createLegacyProperty('position', '_legacyPos', 'x', 'y'); + createLegacyProperty('scale', '_legacyScale', 'scaleX', 'scaleY'); + createLegacyProperty('origin', '_legacyOrigin', 'originX', 'originY'); + } + })(); + return Element; + }()); + mixin(Element, Eventful); + mixin(Element, Transformable); + function animateTo(animatable, target, cfg, animationProps, reverse) { + cfg = cfg || {}; + var animators = []; + animateToShallow(animatable, '', animatable, target, cfg, animationProps, animators, reverse); + var finishCount = animators.length; + var doneHappened = false; + var cfgDone = cfg.done; + var cfgAborted = cfg.aborted; + var doneCb = function () { + doneHappened = true; + finishCount--; + if (finishCount <= 0) { + doneHappened + ? (cfgDone && cfgDone()) + : (cfgAborted && cfgAborted()); + } + }; + var abortedCb = function () { + finishCount--; + if (finishCount <= 0) { + doneHappened + ? (cfgDone && cfgDone()) + : (cfgAborted && cfgAborted()); + } + }; + if (!finishCount) { + cfgDone && cfgDone(); + } + if (animators.length > 0 && cfg.during) { + animators[0].during(function (target, percent) { + cfg.during(percent); + }); + } + for (var i = 0; i < animators.length; i++) { + var animator = animators[i]; + if (doneCb) { + animator.done(doneCb); + } + if (abortedCb) { + animator.aborted(abortedCb); + } + animator.start(cfg.easing, cfg.force); + } + return animators; + } + function copyArrShallow(source, target, len) { + for (var i = 0; i < len; i++) { + source[i] = target[i]; + } + } + function is2DArray(value) { + return isArrayLike(value[0]); + } + function copyValue(target, source, key) { + if (isArrayLike(source[key])) { + if (!isArrayLike(target[key])) { + target[key] = []; + } + if (isTypedArray(source[key])) { + var len = source[key].length; + if (target[key].length !== len) { + target[key] = new (source[key].constructor)(len); + copyArrShallow(target[key], source[key], len); + } + } + else { + var sourceArr = source[key]; + var targetArr = target[key]; + var len0 = sourceArr.length; + if (is2DArray(sourceArr)) { + var len1 = sourceArr[0].length; + for (var i = 0; i < len0; i++) { + if (!targetArr[i]) { + targetArr[i] = Array.prototype.slice.call(sourceArr[i]); + } + else { + copyArrShallow(targetArr[i], sourceArr[i], len1); + } + } + } + else { + copyArrShallow(targetArr, sourceArr, len0); + } + targetArr.length = sourceArr.length; + } + } + else { + target[key] = source[key]; + } + } + function animateToShallow(animatable, topKey, source, target, cfg, animationProps, animators, reverse) { + var animatableKeys = []; + var changedKeys = []; + var targetKeys = keys(target); + var duration = cfg.duration; + var delay = cfg.delay; + var additive = cfg.additive; + var setToFinal = cfg.setToFinal; + var animateAll = !isObject(animationProps); + for (var k = 0; k < targetKeys.length; k++) { + var innerKey = targetKeys[k]; + if (source[innerKey] != null + && target[innerKey] != null + && (animateAll || animationProps[innerKey])) { + if (isObject(target[innerKey]) && !isArrayLike(target[innerKey])) { + if (topKey) { + if (!reverse) { + source[innerKey] = target[innerKey]; + animatable.updateDuringAnimation(topKey); + } + continue; + } + animateToShallow(animatable, innerKey, source[innerKey], target[innerKey], cfg, animationProps && animationProps[innerKey], animators, reverse); + } + else { + animatableKeys.push(innerKey); + changedKeys.push(innerKey); + } + } + else if (!reverse) { + source[innerKey] = target[innerKey]; + animatable.updateDuringAnimation(topKey); + changedKeys.push(innerKey); + } + } + var keyLen = animatableKeys.length; + if (keyLen > 0 + || (cfg.force && !animators.length)) { + var existsAnimators = animatable.animators; + var existsAnimatorsOnSameTarget = []; + for (var i = 0; i < existsAnimators.length; i++) { + if (existsAnimators[i].targetName === topKey) { + existsAnimatorsOnSameTarget.push(existsAnimators[i]); + } + } + if (!additive && existsAnimatorsOnSameTarget.length) { + for (var i = 0; i < existsAnimatorsOnSameTarget.length; i++) { + var allAborted = existsAnimatorsOnSameTarget[i].stopTracks(changedKeys); + if (allAborted) { + var idx = indexOf(existsAnimators, existsAnimatorsOnSameTarget[i]); + existsAnimators.splice(idx, 1); + } + } + } + var revertedSource = void 0; + var reversedTarget = void 0; + var sourceClone = void 0; + if (reverse) { + reversedTarget = {}; + if (setToFinal) { + revertedSource = {}; + } + for (var i = 0; i < keyLen; i++) { + var innerKey = animatableKeys[i]; + reversedTarget[innerKey] = source[innerKey]; + if (setToFinal) { + revertedSource[innerKey] = target[innerKey]; + } + else { + source[innerKey] = target[innerKey]; + } + } + } + else if (setToFinal) { + sourceClone = {}; + for (var i = 0; i < keyLen; i++) { + var innerKey = animatableKeys[i]; + sourceClone[innerKey] = cloneValue(source[innerKey]); + copyValue(source, target, innerKey); + } + } + var animator = new Animator(source, false, additive ? existsAnimatorsOnSameTarget : null); + animator.targetName = topKey; + if (cfg.scope) { + animator.scope = cfg.scope; + } + if (setToFinal && revertedSource) { + animator.whenWithKeys(0, revertedSource, animatableKeys); + } + if (sourceClone) { + animator.whenWithKeys(0, sourceClone, animatableKeys); + } + animator.whenWithKeys(duration == null ? 500 : duration, reverse ? reversedTarget : target, animatableKeys).delay(delay || 0); + animatable.addAnimator(animator, topKey); + animators.push(animator); + } + } + + var Group = (function (_super) { + __extends(Group, _super); + function Group(opts) { + var _this = _super.call(this) || this; + _this.isGroup = true; + _this._children = []; + _this.attr(opts); + return _this; + } + Group.prototype.childrenRef = function () { + return this._children; + }; + Group.prototype.children = function () { + return this._children.slice(); + }; + Group.prototype.childAt = function (idx) { + return this._children[idx]; + }; + Group.prototype.childOfName = function (name) { + var children = this._children; + for (var i = 0; i < children.length; i++) { + if (children[i].name === name) { + return children[i]; + } + } + }; + Group.prototype.childCount = function () { + return this._children.length; + }; + Group.prototype.add = function (child) { + if (child) { + if (child !== this && child.parent !== this) { + this._children.push(child); + this._doAdd(child); + } + if (child.__hostTarget) { + throw 'This elemenet has been used as an attachment'; + } + } + return this; + }; + Group.prototype.addBefore = function (child, nextSibling) { + if (child && child !== this && child.parent !== this + && nextSibling && nextSibling.parent === this) { + var children = this._children; + var idx = children.indexOf(nextSibling); + if (idx >= 0) { + children.splice(idx, 0, child); + this._doAdd(child); + } + } + return this; + }; + Group.prototype.replace = function (oldChild, newChild) { + var idx = indexOf(this._children, oldChild); + if (idx >= 0) { + this.replaceAt(newChild, idx); + } + return this; + }; + Group.prototype.replaceAt = function (child, index) { + var children = this._children; + var old = children[index]; + if (child && child !== this && child.parent !== this && child !== old) { + children[index] = child; + old.parent = null; + var zr = this.__zr; + if (zr) { + old.removeSelfFromZr(zr); + } + this._doAdd(child); + } + return this; + }; + Group.prototype._doAdd = function (child) { + if (child.parent) { + child.parent.remove(child); + } + child.parent = this; + var zr = this.__zr; + if (zr && zr !== child.__zr) { + child.addSelfToZr(zr); + } + zr && zr.refresh(); + }; + Group.prototype.remove = function (child) { + var zr = this.__zr; + var children = this._children; + var idx = indexOf(children, child); + if (idx < 0) { + return this; + } + children.splice(idx, 1); + child.parent = null; + if (zr) { + child.removeSelfFromZr(zr); + } + zr && zr.refresh(); + return this; + }; + Group.prototype.removeAll = function () { + var children = this._children; + var zr = this.__zr; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (zr) { + child.removeSelfFromZr(zr); + } + child.parent = null; + } + children.length = 0; + return this; + }; + Group.prototype.eachChild = function (cb, context) { + var children = this._children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + cb.call(context, child, i); + } + return this; + }; + Group.prototype.traverse = function (cb, context) { + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + var stopped = cb.call(context, child); + if (child.isGroup && !stopped) { + child.traverse(cb, context); + } + } + return this; + }; + Group.prototype.addSelfToZr = function (zr) { + _super.prototype.addSelfToZr.call(this, zr); + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + child.addSelfToZr(zr); + } + }; + Group.prototype.removeSelfFromZr = function (zr) { + _super.prototype.removeSelfFromZr.call(this, zr); + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + child.removeSelfFromZr(zr); + } + }; + Group.prototype.getBoundingRect = function (includeChildren) { + var tmpRect = new BoundingRect(0, 0, 0, 0); + var children = includeChildren || this._children; + var tmpMat = []; + var rect = null; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + if (child.ignore || child.invisible) { + continue; + } + var childRect = child.getBoundingRect(); + var transform = child.getLocalTransform(tmpMat); + if (transform) { + BoundingRect.applyTransform(tmpRect, childRect, transform); + rect = rect || tmpRect.clone(); + rect.union(tmpRect); + } + else { + rect = rect || childRect.clone(); + rect.union(childRect); + } + } + return rect || tmpRect; + }; + return Group; + }(Element)); + Group.prototype.type = 'group'; + + /*! + * ZRender, a high performance 2d drawing library. + * + * Copyright (c) 2013, Baidu Inc. + * All rights reserved. + * + * LICENSE + * https://github.com/ecomfe/zrender/blob/master/LICENSE.txt + */ + var useVML = !env.canvasSupported; + var painterCtors = {}; + var instances = {}; + function delInstance(id) { + delete instances[id]; + } + function isDarkMode(backgroundColor) { + if (!backgroundColor) { + return false; + } + if (typeof backgroundColor === 'string') { + return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD; + } + else if (backgroundColor.colorStops) { + var colorStops = backgroundColor.colorStops; + var totalLum = 0; + var len = colorStops.length; + for (var i = 0; i < len; i++) { + totalLum += lum(colorStops[i].color, 1); + } + totalLum /= len; + return totalLum < DARK_MODE_THRESHOLD; + } + return false; + } + var ZRender = (function () { + function ZRender(id, dom, opts) { + var _this = this; + this._sleepAfterStill = 10; + this._stillFrameAccum = 0; + this._needsRefresh = true; + this._needsRefreshHover = true; + this._darkMode = false; + opts = opts || {}; + this.dom = dom; + this.id = id; + var storage = new Storage(); + var rendererType = opts.renderer || 'canvas'; + if (useVML) { + throw new Error('IE8 support has been dropped since 5.0'); + } + if (!painterCtors[rendererType]) { + rendererType = keys(painterCtors)[0]; + } + if (!painterCtors[rendererType]) { + throw new Error("Renderer '" + rendererType + "' is not imported. Please import it first."); + } + opts.useDirtyRect = opts.useDirtyRect == null + ? false + : opts.useDirtyRect; + var painter = new painterCtors[rendererType](dom, storage, opts, id); + this.storage = storage; + this.painter = painter; + var handerProxy = (!env.node && !env.worker) + ? new HandlerDomProxy(painter.getViewportRoot(), painter.root) + : null; + this.handler = new Handler(storage, painter, handerProxy, painter.root); + this.animation = new Animation({ + stage: { + update: function () { return _this._flush(true); } + } + }); + this.animation.start(); + } + ZRender.prototype.add = function (el) { + if (!el) { + return; + } + this.storage.addRoot(el); + el.addSelfToZr(this); + this.refresh(); + }; + ZRender.prototype.remove = function (el) { + if (!el) { + return; + } + this.storage.delRoot(el); + el.removeSelfFromZr(this); + this.refresh(); + }; + ZRender.prototype.configLayer = function (zLevel, config) { + if (this.painter.configLayer) { + this.painter.configLayer(zLevel, config); + } + this.refresh(); + }; + ZRender.prototype.setBackgroundColor = function (backgroundColor) { + if (this.painter.setBackgroundColor) { + this.painter.setBackgroundColor(backgroundColor); + } + this.refresh(); + this._backgroundColor = backgroundColor; + this._darkMode = isDarkMode(backgroundColor); + }; + ZRender.prototype.getBackgroundColor = function () { + return this._backgroundColor; + }; + ZRender.prototype.setDarkMode = function (darkMode) { + this._darkMode = darkMode; + }; + ZRender.prototype.isDarkMode = function () { + return this._darkMode; + }; + ZRender.prototype.refreshImmediately = function (fromInside) { + if (!fromInside) { + this.animation.update(true); + } + this._needsRefresh = false; + this.painter.refresh(); + this._needsRefresh = false; + }; + ZRender.prototype.refresh = function () { + this._needsRefresh = true; + this.animation.start(); + }; + ZRender.prototype.flush = function () { + this._flush(false); + }; + ZRender.prototype._flush = function (fromInside) { + var triggerRendered; + var start = new Date().getTime(); + if (this._needsRefresh) { + triggerRendered = true; + this.refreshImmediately(fromInside); + } + if (this._needsRefreshHover) { + triggerRendered = true; + this.refreshHoverImmediately(); + } + var end = new Date().getTime(); + if (triggerRendered) { + this._stillFrameAccum = 0; + this.trigger('rendered', { + elapsedTime: end - start + }); + } + else if (this._sleepAfterStill > 0) { + this._stillFrameAccum++; + if (this._stillFrameAccum > this._sleepAfterStill) { + this.animation.stop(); + } + } + }; + ZRender.prototype.setSleepAfterStill = function (stillFramesCount) { + this._sleepAfterStill = stillFramesCount; + }; + ZRender.prototype.wakeUp = function () { + this.animation.start(); + this._stillFrameAccum = 0; + }; + ZRender.prototype.addHover = function (el) { + }; + ZRender.prototype.removeHover = function (el) { + }; + ZRender.prototype.clearHover = function () { + }; + ZRender.prototype.refreshHover = function () { + this._needsRefreshHover = true; + }; + ZRender.prototype.refreshHoverImmediately = function () { + this._needsRefreshHover = false; + if (this.painter.refreshHover && this.painter.getType() === 'canvas') { + this.painter.refreshHover(); + } + }; + ZRender.prototype.resize = function (opts) { + opts = opts || {}; + this.painter.resize(opts.width, opts.height); + this.handler.resize(); + }; + ZRender.prototype.clearAnimation = function () { + this.animation.clear(); + }; + ZRender.prototype.getWidth = function () { + return this.painter.getWidth(); + }; + ZRender.prototype.getHeight = function () { + return this.painter.getHeight(); + }; + ZRender.prototype.pathToImage = function (e, dpr) { + if (this.painter.pathToImage) { + return this.painter.pathToImage(e, dpr); + } + }; + ZRender.prototype.setCursorStyle = function (cursorStyle) { + this.handler.setCursorStyle(cursorStyle); + }; + ZRender.prototype.findHover = function (x, y) { + return this.handler.findHover(x, y); + }; + ZRender.prototype.on = function (eventName, eventHandler, context) { + this.handler.on(eventName, eventHandler, context); + return this; + }; + ZRender.prototype.off = function (eventName, eventHandler) { + this.handler.off(eventName, eventHandler); + }; + ZRender.prototype.trigger = function (eventName, event) { + this.handler.trigger(eventName, event); + }; + ZRender.prototype.clear = function () { + var roots = this.storage.getRoots(); + for (var i = 0; i < roots.length; i++) { + if (roots[i] instanceof Group) { + roots[i].removeSelfFromZr(this); + } + } + this.storage.delAllRoots(); + this.painter.clear(); + }; + ZRender.prototype.dispose = function () { + this.animation.stop(); + this.clear(); + this.storage.dispose(); + this.painter.dispose(); + this.handler.dispose(); + this.animation = + this.storage = + this.painter = + this.handler = null; + delInstance(this.id); + }; + return ZRender; + }()); + function init(dom, opts) { + var zr = new ZRender(guid(), dom, opts); + instances[zr.id] = zr; + return zr; + } + function dispose(zr) { + zr.dispose(); + } + function disposeAll() { + for (var key in instances) { + if (instances.hasOwnProperty(key)) { + instances[key].dispose(); + } + } + instances = {}; + } + function getInstance(id) { + return instances[id]; + } + function registerPainter(name, Ctor) { + painterCtors[name] = Ctor; + } + var version = '5.2.1'; + + var zrender = /*#__PURE__*/Object.freeze({ + __proto__: null, + init: init, + dispose: dispose, + disposeAll: disposeAll, + getInstance: getInstance, + registerPainter: registerPainter, + version: version + }); + + var RADIAN_EPSILON = 1e-4; // Although chrome already enlarge this number to 100 for `toFixed`, but + // we sill follow the spec for compatibility. + + var ROUND_SUPPORTED_PRECISION_MAX = 20; + + function _trim(str) { + return str.replace(/^\s+|\s+$/g, ''); + } + /** + * Linear mapping a value from domain to range + * @param val + * @param domain Domain extent domain[0] can be bigger than domain[1] + * @param range Range extent range[0] can be bigger than range[1] + * @param clamp Default to be false + */ + + + function linearMap(val, domain, range, clamp) { + var d0 = domain[0]; + var d1 = domain[1]; + var r0 = range[0]; + var r1 = range[1]; + var subDomain = d1 - d0; + var subRange = r1 - r0; + + if (subDomain === 0) { + return subRange === 0 ? r0 : (r0 + r1) / 2; + } // Avoid accuracy problem in edge, such as + // 146.39 - 62.83 === 83.55999999999999. + // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError + // It is a little verbose for efficiency considering this method + // is a hotspot. + + + if (clamp) { + if (subDomain > 0) { + if (val <= d0) { + return r0; + } else if (val >= d1) { + return r1; + } + } else { + if (val >= d0) { + return r0; + } else if (val <= d1) { + return r1; + } + } + } else { + if (val === d0) { + return r0; + } + + if (val === d1) { + return r1; + } + } + + return (val - d0) / subDomain * subRange + r0; + } + /** + * Convert a percent string to absolute number. + * Returns NaN if percent is not a valid string or number + */ + + function parsePercent$1(percent, all) { + switch (percent) { + case 'center': + case 'middle': + percent = '50%'; + break; + + case 'left': + case 'top': + percent = '0%'; + break; + + case 'right': + case 'bottom': + percent = '100%'; + break; + } + + if (typeof percent === 'string') { + if (_trim(percent).match(/%$/)) { + return parseFloat(percent) / 100 * all; + } + + return parseFloat(percent); + } + + return percent == null ? NaN : +percent; + } + function round(x, precision, returnStr) { + if (precision == null) { + precision = 10; + } // Avoid range error + + + precision = Math.min(Math.max(0, precision), ROUND_SUPPORTED_PRECISION_MAX); // PENDING: 1.005.toFixed(2) is '1.00' rather than '1.01' + + x = (+x).toFixed(precision); + return returnStr ? x : +x; + } + /** + * Inplacd asc sort arr. + * The input arr will be modified. + */ + + function asc(arr) { + arr.sort(function (a, b) { + return a - b; + }); + return arr; + } + /** + * Get precision. + */ + + function getPrecision(val) { + val = +val; + + if (isNaN(val)) { + return 0; + } // It is much faster than methods converting number to string as follows + // let tmp = val.toString(); + // return tmp.length - 1 - tmp.indexOf('.'); + // especially when precision is low + // Notice: + // (1) If the loop count is over about 20, it is slower than `getPrecisionSafe`. + // (see https://jsbench.me/2vkpcekkvw/1) + // (2) If the val is less than for example 1e-15, the result may be incorrect. + // (see test/ut/spec/util/number.test.ts `getPrecision_equal_random`) + + + if (val > 1e-14) { + var e = 1; + + for (var i = 0; i < 15; i++, e *= 10) { + if (Math.round(val * e) / e === val) { + return i; + } + } + } + + return getPrecisionSafe(val); + } + /** + * Get precision with slow but safe method + */ + + function getPrecisionSafe(val) { + // toLowerCase for: '3.4E-12' + var str = val.toString().toLowerCase(); // Consider scientific notation: '3.4e-12' '3.4e+12' + + var eIndex = str.indexOf('e'); + var exp = eIndex > 0 ? +str.slice(eIndex + 1) : 0; + var significandPartLen = eIndex > 0 ? eIndex : str.length; + var dotIndex = str.indexOf('.'); + var decimalPartLen = dotIndex < 0 ? 0 : significandPartLen - 1 - dotIndex; + return Math.max(0, decimalPartLen - exp); + } + /** + * Minimal dicernible data precisioin according to a single pixel. + */ + + function getPixelPrecision(dataExtent, pixelExtent) { + var log = Math.log; + var LN10 = Math.LN10; + var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10); + var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10); // toFixed() digits argument must be between 0 and 20. + + var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20); + return !isFinite(precision) ? 20 : precision; + } + /** + * Get a data of given precision, assuring the sum of percentages + * in valueList is 1. + * The largest remainer method is used. + * https://en.wikipedia.org/wiki/Largest_remainder_method + * + * @param valueList a list of all data + * @param idx index of the data to be processed in valueList + * @param precision integer number showing digits of precision + * @return percent ranging from 0 to 100 + */ + + function getPercentWithPrecision(valueList, idx, precision) { + if (!valueList[idx]) { + return 0; + } + + var sum = reduce(valueList, function (acc, val) { + return acc + (isNaN(val) ? 0 : val); + }, 0); + + if (sum === 0) { + return 0; + } + + var digits = Math.pow(10, precision); + var votesPerQuota = map(valueList, function (val) { + return (isNaN(val) ? 0 : val) / sum * digits * 100; + }); + var targetSeats = digits * 100; + var seats = map(votesPerQuota, function (votes) { + // Assign automatic seats. + return Math.floor(votes); + }); + var currentSum = reduce(seats, function (acc, val) { + return acc + val; + }, 0); + var remainder = map(votesPerQuota, function (votes, idx) { + return votes - seats[idx]; + }); // Has remainding votes. + + while (currentSum < targetSeats) { + // Find next largest remainder. + var max = Number.NEGATIVE_INFINITY; + var maxId = null; + + for (var i = 0, len = remainder.length; i < len; ++i) { + if (remainder[i] > max) { + max = remainder[i]; + maxId = i; + } + } // Add a vote to max remainder. + + + ++seats[maxId]; + remainder[maxId] = 0; + ++currentSum; + } + + return seats[idx] / digits; + } + /** + * Solve the floating point adding problem like 0.1 + 0.2 === 0.30000000000000004 + * See + */ + + function addSafe(val0, val1) { + var maxPrecision = Math.max(getPrecision(val0), getPrecision(val1)); // const multiplier = Math.pow(10, maxPrecision); + // return (Math.round(val0 * multiplier) + Math.round(val1 * multiplier)) / multiplier; + + var sum = val0 + val1; // // PENDING: support more? + + return maxPrecision > ROUND_SUPPORTED_PRECISION_MAX ? sum : round(sum, maxPrecision); + } // Number.MAX_SAFE_INTEGER, ie do not support. + + var MAX_SAFE_INTEGER = 9007199254740991; + /** + * To 0 - 2 * PI, considering negative radian. + */ + + function remRadian(radian) { + var pi2 = Math.PI * 2; + return (radian % pi2 + pi2) % pi2; + } + /** + * @param {type} radian + * @return {boolean} + */ + + function isRadianAroundZero(val) { + return val > -RADIAN_EPSILON && val < RADIAN_EPSILON; + } // eslint-disable-next-line + + var TIME_REG = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d{1,2})(?::(\d{1,2})(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/; // jshint ignore:line + + /** + * @param value valid type: number | string | Date, otherwise return `new Date(NaN)` + * These values can be accepted: + * + An instance of Date, represent a time in its own time zone. + * + Or string in a subset of ISO 8601, only including: + * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06', + * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123', + * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00', + * all of which will be treated as local time if time zone is not specified + * (see ). + * + Or other string format, including (all of which will be treated as loacal time): + * '2012', '2012-3-1', '2012/3/1', '2012/03/01', + * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123' + * + a timestamp, which represent a time in UTC. + * @return date Never be null/undefined. If invalid, return `new Date(NaN)`. + */ + + function parseDate(value) { + if (value instanceof Date) { + return value; + } else if (typeof value === 'string') { + // Different browsers parse date in different way, so we parse it manually. + // Some other issues: + // new Date('1970-01-01') is UTC, + // new Date('1970/01/01') and new Date('1970-1-01') is local. + // See issue #3623 + var match = TIME_REG.exec(value); + + if (!match) { + // return Invalid Date. + return new Date(NaN); + } // Use local time when no timezone offset specifed. + + + if (!match[8]) { + // match[n] can only be string or undefined. + // But take care of '12' + 1 => '121'. + return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0); + } // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time, + // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment). + // For example, system timezone is set as "Time Zone: America/Toronto", + // then these code will get different result: + // `new Date(1478411999999).getTimezoneOffset(); // get 240` + // `new Date(1478412000000).getTimezoneOffset(); // get 300` + // So we should not use `new Date`, but use `Date.UTC`. + else { + var hour = +match[4] || 0; + + if (match[8].toUpperCase() !== 'Z') { + hour -= +match[8].slice(0, 3); + } + + return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0)); + } + } else if (value == null) { + return new Date(NaN); + } + + return new Date(Math.round(value)); + } + /** + * Quantity of a number. e.g. 0.1, 1, 10, 100 + * + * @param val + * @return + */ + + function quantity(val) { + return Math.pow(10, quantityExponent(val)); + } + /** + * Exponent of the quantity of a number + * e.g., 1234 equals to 1.234*10^3, so quantityExponent(1234) is 3 + * + * @param val non-negative value + * @return + */ + + function quantityExponent(val) { + if (val === 0) { + return 0; + } + + var exp = Math.floor(Math.log(val) / Math.LN10); + /** + * exp is expected to be the rounded-down result of the base-10 log of val. + * But due to the precision loss with Math.log(val), we need to restore it + * using 10^exp to make sure we can get val back from exp. #11249 + */ + + if (val / Math.pow(10, exp) >= 10) { + exp++; + } + + return exp; + } + /** + * find a “nice” number approximately equal to x. Round the number if round = true, + * take ceiling if round = false. The primary observation is that the “nicest” + * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers. + * + * See "Nice Numbers for Graph Labels" of Graphic Gems. + * + * @param val Non-negative value. + * @param round + * @return Niced number + */ + + function nice(val, round) { + var exponent = quantityExponent(val); + var exp10 = Math.pow(10, exponent); + var f = val / exp10; // 1 <= f < 10 + + var nf; + + if (round) { + if (f < 1.5) { + nf = 1; + } else if (f < 2.5) { + nf = 2; + } else if (f < 4) { + nf = 3; + } else if (f < 7) { + nf = 5; + } else { + nf = 10; + } + } else { + if (f < 1) { + nf = 1; + } else if (f < 2) { + nf = 2; + } else if (f < 3) { + nf = 3; + } else if (f < 5) { + nf = 5; + } else { + nf = 10; + } + } + + val = nf * exp10; // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754). + // 20 is the uppper bound of toFixed. + + return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val; + } + /** + * This code was copied from "d3.js" + * . + * See the license statement at the head of this file. + * @param ascArr + */ + + function quantile(ascArr, p) { + var H = (ascArr.length - 1) * p + 1; + var h = Math.floor(H); + var v = +ascArr[h - 1]; + var e = H - h; + return e ? v + e * (ascArr[h] - v) : v; + } + /** + * Order intervals asc, and split them when overlap. + * expect(numberUtil.reformIntervals([ + * {interval: [18, 62], close: [1, 1]}, + * {interval: [-Infinity, -70], close: [0, 0]}, + * {interval: [-70, -26], close: [1, 1]}, + * {interval: [-26, 18], close: [1, 1]}, + * {interval: [62, 150], close: [1, 1]}, + * {interval: [106, 150], close: [1, 1]}, + * {interval: [150, Infinity], close: [0, 0]} + * ])).toEqual([ + * {interval: [-Infinity, -70], close: [0, 0]}, + * {interval: [-70, -26], close: [1, 1]}, + * {interval: [-26, 18], close: [0, 1]}, + * {interval: [18, 62], close: [0, 1]}, + * {interval: [62, 150], close: [0, 1]}, + * {interval: [150, Infinity], close: [0, 0]} + * ]); + * @param list, where `close` mean open or close + * of the interval, and Infinity can be used. + * @return The origin list, which has been reformed. + */ + + function reformIntervals(list) { + list.sort(function (a, b) { + return littleThan(a, b, 0) ? -1 : 1; + }); + var curr = -Infinity; + var currClose = 1; + + for (var i = 0; i < list.length;) { + var interval = list[i].interval; + var close_1 = list[i].close; + + for (var lg = 0; lg < 2; lg++) { + if (interval[lg] <= curr) { + interval[lg] = curr; + close_1[lg] = !lg ? 1 - currClose : 1; + } + + curr = interval[lg]; + currClose = close_1[lg]; + } + + if (interval[0] === interval[1] && close_1[0] * close_1[1] !== 1) { + list.splice(i, 1); + } else { + i++; + } + } + + return list; + + function littleThan(a, b, lg) { + return a.interval[lg] < b.interval[lg] || a.interval[lg] === b.interval[lg] && (a.close[lg] - b.close[lg] === (!lg ? 1 : -1) || !lg && littleThan(a, b, 1)); + } + } + /** + * [Numberic is defined as]: + * `parseFloat(val) == val` + * For example: + * numeric: + * typeof number except NaN, '-123', '123', '2e3', '-2e3', '011', 'Infinity', Infinity, + * and they rounded by white-spaces or line-terminal like ' -123 \n ' (see es spec) + * not-numeric: + * null, undefined, [], {}, true, false, 'NaN', NaN, '123ab', + * empty string, string with only white-spaces or line-terminal (see es spec), + * 0x12, '0x12', '-0x12', 012, '012', '-012', + * non-string, ... + * + * @test See full test cases in `test/ut/spec/util/number.js`. + * @return Must be a typeof number. If not numeric, return NaN. + */ + + function numericToNumber(val) { + var valFloat = parseFloat(val); + return valFloat == val // eslint-disable-line eqeqeq + && (valFloat !== 0 || typeof val !== 'string' || val.indexOf('x') <= 0) // For case ' 0x0 '. + ? valFloat : NaN; + } + /** + * Definition of "numeric": see `numericToNumber`. + */ + + function isNumeric(val) { + return !isNaN(numericToNumber(val)); + } + /** + * Use random base to prevent users hard code depending on + * this auto generated marker id. + * @return An positive integer. + */ + + function getRandomIdBase() { + return Math.round(Math.random() * 9); + } + /** + * Get the greatest common dividor + * + * @param {number} a one number + * @param {number} b the other number + */ + + function getGreatestCommonDividor(a, b) { + if (b === 0) { + return a; + } + + return getGreatestCommonDividor(b, a % b); + } + /** + * Get the least common multiple + * + * @param {number} a one number + * @param {number} b the other number + */ + + function getLeastCommonMultiple(a, b) { + if (a == null) { + return b; + } + + if (b == null) { + return a; + } + + return a * b / getGreatestCommonDividor(a, b); + } + + var ECHARTS_PREFIX = '[ECharts] '; + var storedLogs = {}; + var hasConsole = typeof console !== 'undefined' // eslint-disable-next-line + && console.warn && console.log; + function warn(str) { + if (hasConsole) { + console.warn(ECHARTS_PREFIX + str); + } + } + function error(str) { + if (hasConsole) { + console.error(ECHARTS_PREFIX + str); + } + } + function deprecateLog(str) { + if ("development" !== 'production') { + if (storedLogs[str]) { + // Not display duplicate message. + return; + } + + if (hasConsole) { + storedLogs[str] = true; + console.warn(ECHARTS_PREFIX + 'DEPRECATED: ' + str); + } + } + } + function deprecateReplaceLog(oldOpt, newOpt, scope) { + if ("development" !== 'production') { + deprecateLog((scope ? "[" + scope + "]" : '') + (oldOpt + " is deprecated, use " + newOpt + " instead.")); + } + } + function consoleLog() { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + if ("development" !== 'production') { + /* eslint-disable no-console */ + if (typeof console !== 'undefined' && console.log) { + console.log.apply(console, args); + } + /* eslint-enable no-console */ + + } + } + /** + * If in __DEV__ environment, get console printable message for users hint. + * Parameters are separated by ' '. + * @usuage + * makePrintable('This is an error on', someVar, someObj); + * + * @param hintInfo anything about the current execution context to hint users. + * @throws Error + */ + + function makePrintable() { + var hintInfo = []; + + for (var _i = 0; _i < arguments.length; _i++) { + hintInfo[_i] = arguments[_i]; + } + + var msg = ''; + + if ("development" !== 'production') { + // Fuzzy stringify for print. + // This code only exist in dev environment. + var makePrintableStringIfPossible_1 = function (val) { + return val === void 0 ? 'undefined' : val === Infinity ? 'Infinity' : val === -Infinity ? '-Infinity' : eqNaN(val) ? 'NaN' : val instanceof Date ? 'Date(' + val.toISOString() + ')' : isFunction(val) ? 'function () { ... }' : isRegExp(val) ? val + '' : null; + }; + + msg = map(hintInfo, function (arg) { + if (isString(arg)) { + // Print without quotation mark for some statement. + return arg; + } else { + var printableStr = makePrintableStringIfPossible_1(arg); + + if (printableStr != null) { + return printableStr; + } else if (typeof JSON !== 'undefined' && JSON.stringify) { + try { + return JSON.stringify(arg, function (n, val) { + var printableStr = makePrintableStringIfPossible_1(val); + return printableStr == null ? val : printableStr; + }); // In most cases the info object is small, so do not line break. + } catch (err) { + return '?'; + } + } else { + return '?'; + } + } + }).join(' '); + } + + return msg; + } + /** + * @throws Error + */ + + function throwError(msg) { + throw new Error(msg); + } + + /** + * Make the name displayable. But we should + * make sure it is not duplicated with user + * specified name, so use '\0'; + */ + + var DUMMY_COMPONENT_NAME_PREFIX = 'series\0'; + var INTERNAL_COMPONENT_ID_PREFIX = '\0_ec_\0'; + /** + * If value is not array, then translate it to array. + * @param {*} value + * @return {Array} [value] or value + */ + + function normalizeToArray(value) { + return value instanceof Array ? value : value == null ? [] : [value]; + } + /** + * Sync default option between normal and emphasis like `position` and `show` + * In case some one will write code like + * label: { + * show: false, + * position: 'outside', + * fontSize: 18 + * }, + * emphasis: { + * label: { show: true } + * } + */ + + function defaultEmphasis(opt, key, subOpts) { + // Caution: performance sensitive. + if (opt) { + opt[key] = opt[key] || {}; + opt.emphasis = opt.emphasis || {}; + opt.emphasis[key] = opt.emphasis[key] || {}; // Default emphasis option from normal + + for (var i = 0, len = subOpts.length; i < len; i++) { + var subOptName = subOpts[i]; + + if (!opt.emphasis[key].hasOwnProperty(subOptName) && opt[key].hasOwnProperty(subOptName)) { + opt.emphasis[key][subOptName] = opt[key][subOptName]; + } + } + } + } + var TEXT_STYLE_OPTIONS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth', 'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY', 'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding']; // modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([ + // 'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter', + // 'fontStyle', 'fontWeight', 'fontSize', 'fontFamily', + // // FIXME: deprecated, check and remove it. + // 'textStyle' + // ]); + + /** + * The method do not ensure performance. + * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] + * This helper method retieves value from data. + */ + + function getDataItemValue(dataItem) { + return isObject(dataItem) && !isArray(dataItem) && !(dataItem instanceof Date) ? dataItem.value : dataItem; + } + /** + * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}] + * This helper method determine if dataItem has extra option besides value + */ + + function isDataItemOption(dataItem) { + return isObject(dataItem) && !(dataItem instanceof Array); // // markLine data can be array + // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array)); + } + /** + * Mapping to existings for merge. + * + * Mode "normalMege": + * The mapping result (merge result) will keep the order of the existing + * component, rather than the order of new option. Because we should ensure + * some specified index reference (like xAxisIndex) keep work. + * And in most cases, "merge option" is used to update partial option but not + * be expected to change the order. + * + * Mode "replaceMege": + * (1) Only the id mapped components will be merged. + * (2) Other existing components (except internal compoonets) will be removed. + * (3) Other new options will be used to create new component. + * (4) The index of the existing compoents will not be modified. + * That means their might be "hole" after the removal. + * The new components are created first at those available index. + * + * Mode "replaceAll": + * This mode try to support that reproduce an echarts instance from another + * echarts instance (via `getOption`) in some simple cases. + * In this senario, the `result` index are exactly the consistent with the `newCmptOptions`, + * which ensures the compoennt index referring (like `xAxisIndex: ?`) corrent. That is, + * the "hole" in `newCmptOptions` will also be kept. + * On the contrary, other modes try best to eliminate holes. + * PENDING: This is an experimental mode yet. + * + * @return See the comment of . + */ + + function mappingToExists(existings, newCmptOptions, mode) { + var isNormalMergeMode = mode === 'normalMerge'; + var isReplaceMergeMode = mode === 'replaceMerge'; + var isReplaceAllMode = mode === 'replaceAll'; + existings = existings || []; + newCmptOptions = (newCmptOptions || []).slice(); + var existingIdIdxMap = createHashMap(); // Validate id and name on user input option. + + each(newCmptOptions, function (cmptOption, index) { + if (!isObject(cmptOption)) { + newCmptOptions[index] = null; + return; + } + + if ("development" !== 'production') { + // There is some legacy case that name is set as `false`. + // But should work normally rather than throw error. + if (cmptOption.id != null && !isValidIdOrName(cmptOption.id)) { + warnInvalidateIdOrName(cmptOption.id); + } + + if (cmptOption.name != null && !isValidIdOrName(cmptOption.name)) { + warnInvalidateIdOrName(cmptOption.name); + } + } + }); + var result = prepareResult(existings, existingIdIdxMap, mode); + + if (isNormalMergeMode || isReplaceMergeMode) { + mappingById(result, existings, existingIdIdxMap, newCmptOptions); + } + + if (isNormalMergeMode) { + mappingByName(result, newCmptOptions); + } + + if (isNormalMergeMode || isReplaceMergeMode) { + mappingByIndex(result, newCmptOptions, isReplaceMergeMode); + } else if (isReplaceAllMode) { + mappingInReplaceAllMode(result, newCmptOptions); + } + + makeIdAndName(result); // The array `result` MUST NOT contain elided items, otherwise the + // forEach will ommit those items and result in incorrect result. + + return result; + } + + function prepareResult(existings, existingIdIdxMap, mode) { + var result = []; + + if (mode === 'replaceAll') { + return result; + } // Do not use native `map` to in case that the array `existings` + // contains elided items, which will be ommited. + + + for (var index = 0; index < existings.length; index++) { + var existing = existings[index]; // Because of replaceMerge, `existing` may be null/undefined. + + if (existing && existing.id != null) { + existingIdIdxMap.set(existing.id, index); + } // For non-internal-componnets: + // Mode "normalMerge": all existings kept. + // Mode "replaceMerge": all existing removed unless mapped by id. + // For internal-components: + // go with "replaceMerge" approach in both mode. + + + result.push({ + existing: mode === 'replaceMerge' || isComponentIdInternal(existing) ? null : existing, + newOption: null, + keyInfo: null, + brandNew: null + }); + } + + return result; + } + + function mappingById(result, existings, existingIdIdxMap, newCmptOptions) { + // Mapping by id if specified. + each(newCmptOptions, function (cmptOption, index) { + if (!cmptOption || cmptOption.id == null) { + return; + } + + var optionId = makeComparableKey(cmptOption.id); + var existingIdx = existingIdIdxMap.get(optionId); + + if (existingIdx != null) { + var resultItem = result[existingIdx]; + assert(!resultItem.newOption, 'Duplicated option on id "' + optionId + '".'); + resultItem.newOption = cmptOption; // In both mode, if id matched, new option will be merged to + // the existings rather than creating new component model. + + resultItem.existing = existings[existingIdx]; + newCmptOptions[index] = null; + } + }); + } + + function mappingByName(result, newCmptOptions) { + // Mapping by name if specified. + each(newCmptOptions, function (cmptOption, index) { + if (!cmptOption || cmptOption.name == null) { + return; + } + + for (var i = 0; i < result.length; i++) { + var existing = result[i].existing; + + if (!result[i].newOption // Consider name: two map to one. + // Can not match when both ids existing but different. + && existing && (existing.id == null || cmptOption.id == null) && !isComponentIdInternal(cmptOption) && !isComponentIdInternal(existing) && keyExistAndEqual('name', existing, cmptOption)) { + result[i].newOption = cmptOption; + newCmptOptions[index] = null; + return; + } + } + }); + } + + function mappingByIndex(result, newCmptOptions, brandNew) { + each(newCmptOptions, function (cmptOption) { + if (!cmptOption) { + return; + } // Find the first place that not mapped by id and not internal component (consider the "hole"). + + + var resultItem; + var nextIdx = 0; + + while ( // Be `!resultItem` only when `nextIdx >= result.length`. + (resultItem = result[nextIdx]) && ( // (1) Existing models that already have id should be able to mapped to. Because + // after mapping performed, model will always be assigned with an id if user not given. + // After that all models have id. + // (2) If new option has id, it can only set to a hole or append to the last. It should + // not be merged to the existings with different id. Because id should not be overwritten. + // (3) Name can be overwritten, because axis use name as 'show label text'. + resultItem.newOption || isComponentIdInternal(resultItem.existing) || // In mode "replaceMerge", here no not-mapped-non-internal-existing. + resultItem.existing && cmptOption.id != null && !keyExistAndEqual('id', cmptOption, resultItem.existing))) { + nextIdx++; + } + + if (resultItem) { + resultItem.newOption = cmptOption; + resultItem.brandNew = brandNew; + } else { + result.push({ + newOption: cmptOption, + brandNew: brandNew, + existing: null, + keyInfo: null + }); + } + + nextIdx++; + }); + } + + function mappingInReplaceAllMode(result, newCmptOptions) { + each(newCmptOptions, function (cmptOption) { + // The feature "reproduce" requires "hole" will also reproduced + // in case that compoennt index referring are broken. + result.push({ + newOption: cmptOption, + brandNew: true, + existing: null, + keyInfo: null + }); + }); + } + /** + * Make id and name for mapping result (result of mappingToExists) + * into `keyInfo` field. + */ + + + function makeIdAndName(mapResult) { + // We use this id to hash component models and view instances + // in echarts. id can be specified by user, or auto generated. + // The id generation rule ensures new view instance are able + // to mapped to old instance when setOption are called in + // no-merge mode. So we generate model id by name and plus + // type in view id. + // name can be duplicated among components, which is convenient + // to specify multi components (like series) by one name. + // Ensure that each id is distinct. + var idMap = createHashMap(); + each(mapResult, function (item) { + var existing = item.existing; + existing && idMap.set(existing.id, item); + }); + each(mapResult, function (item) { + var opt = item.newOption; // Force ensure id not duplicated. + + assert(!opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item, 'id duplicates: ' + (opt && opt.id)); + opt && opt.id != null && idMap.set(opt.id, item); + !item.keyInfo && (item.keyInfo = {}); + }); // Make name and id. + + each(mapResult, function (item, index) { + var existing = item.existing; + var opt = item.newOption; + var keyInfo = item.keyInfo; + + if (!isObject(opt)) { + return; + } // name can be overwitten. Consider case: axis.name = '20km'. + // But id generated by name will not be changed, which affect + // only in that case: setOption with 'not merge mode' and view + // instance will be recreated, which can be accepted. + + + keyInfo.name = opt.name != null ? makeComparableKey(opt.name) : existing ? existing.name // Avoid diffferent series has the same name, + // because name may be used like in color pallet. + : DUMMY_COMPONENT_NAME_PREFIX + index; + + if (existing) { + keyInfo.id = makeComparableKey(existing.id); + } else if (opt.id != null) { + keyInfo.id = makeComparableKey(opt.id); + } else { + // Consider this situatoin: + // optionA: [{name: 'a'}, {name: 'a'}, {..}] + // optionB [{..}, {name: 'a'}, {name: 'a'}] + // Series with the same name between optionA and optionB + // should be mapped. + var idNum = 0; + + do { + keyInfo.id = '\0' + keyInfo.name + '\0' + idNum++; + } while (idMap.get(keyInfo.id)); + } + + idMap.set(keyInfo.id, item); + }); + } + + function keyExistAndEqual(attr, obj1, obj2) { + var key1 = convertOptionIdName(obj1[attr], null); + var key2 = convertOptionIdName(obj2[attr], null); // See `MappingExistingItem`. `id` and `name` trade string equals to number. + + return key1 != null && key2 != null && key1 === key2; + } + /** + * @return return null if not exist. + */ + + + function makeComparableKey(val) { + if ("development" !== 'production') { + if (val == null) { + throw new Error(); + } + } + + return convertOptionIdName(val, ''); + } + + function convertOptionIdName(idOrName, defaultValue) { + if (idOrName == null) { + return defaultValue; + } + + var type = typeof idOrName; + return type === 'string' ? idOrName : type === 'number' || isStringSafe(idOrName) ? idOrName + '' : defaultValue; + } + + function warnInvalidateIdOrName(idOrName) { + if ("development" !== 'production') { + warn('`' + idOrName + '` is invalid id or name. Must be a string or number.'); + } + } + + function isValidIdOrName(idOrName) { + return isStringSafe(idOrName) || isNumeric(idOrName); + } + + function isNameSpecified(componentModel) { + var name = componentModel.name; // Is specified when `indexOf` get -1 or > 0. + + return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX)); + } + /** + * @public + * @param {Object} cmptOption + * @return {boolean} + */ + + function isComponentIdInternal(cmptOption) { + return cmptOption && cmptOption.id != null && makeComparableKey(cmptOption.id).indexOf(INTERNAL_COMPONENT_ID_PREFIX) === 0; + } + function makeInternalComponentId(idSuffix) { + return INTERNAL_COMPONENT_ID_PREFIX + idSuffix; + } + function setComponentTypeToKeyInfo(mappingResult, mainType, componentModelCtor) { + // Set mainType and complete subType. + each(mappingResult, function (item) { + var newOption = item.newOption; + + if (isObject(newOption)) { + item.keyInfo.mainType = mainType; + item.keyInfo.subType = determineSubType(mainType, newOption, item.existing, componentModelCtor); + } + }); + } + + function determineSubType(mainType, newCmptOption, existComponent, componentModelCtor) { + var subType = newCmptOption.type ? newCmptOption.type : existComponent ? existComponent.subType // Use determineSubType only when there is no existComponent. + : componentModelCtor.determineSubType(mainType, newCmptOption); // tooltip, markline, markpoint may always has no subType + + return subType; + } + /** + * A helper for removing duplicate items between batchA and batchB, + * and in themselves, and categorize by series. + * + * @param batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] + * @param batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...] + * @return result: [resultBatchA, resultBatchB] + */ + + + function compressBatches(batchA, batchB) { + var mapA = {}; + var mapB = {}; + makeMap(batchA || [], mapA); + makeMap(batchB || [], mapB, mapA); + return [mapToArray(mapA), mapToArray(mapB)]; + + function makeMap(sourceBatch, map, otherMap) { + for (var i = 0, len = sourceBatch.length; i < len; i++) { + var seriesId = convertOptionIdName(sourceBatch[i].seriesId, null); + + if (seriesId == null) { + return; + } + + var dataIndices = normalizeToArray(sourceBatch[i].dataIndex); + var otherDataIndices = otherMap && otherMap[seriesId]; + + for (var j = 0, lenj = dataIndices.length; j < lenj; j++) { + var dataIndex = dataIndices[j]; + + if (otherDataIndices && otherDataIndices[dataIndex]) { + otherDataIndices[dataIndex] = null; + } else { + (map[seriesId] || (map[seriesId] = {}))[dataIndex] = 1; + } + } + } + } + + function mapToArray(map, isData) { + var result = []; + + for (var i in map) { + if (map.hasOwnProperty(i) && map[i] != null) { + if (isData) { + result.push(+i); + } else { + var dataIndices = mapToArray(map[i], true); + dataIndices.length && result.push({ + seriesId: i, + dataIndex: dataIndices + }); + } + } + } + + return result; + } + } + /** + * @param payload Contains dataIndex (means rawIndex) / dataIndexInside / name + * each of which can be Array or primary type. + * @return dataIndex If not found, return undefined/null. + */ + + function queryDataIndex(data, payload) { + if (payload.dataIndexInside != null) { + return payload.dataIndexInside; + } else if (payload.dataIndex != null) { + return isArray(payload.dataIndex) ? map(payload.dataIndex, function (value) { + return data.indexOfRawIndex(value); + }) : data.indexOfRawIndex(payload.dataIndex); + } else if (payload.name != null) { + return isArray(payload.name) ? map(payload.name, function (value) { + return data.indexOfName(value); + }) : data.indexOfName(payload.name); + } + } + /** + * Enable property storage to any host object. + * Notice: Serialization is not supported. + * + * For example: + * let inner = zrUitl.makeInner(); + * + * function some1(hostObj) { + * inner(hostObj).someProperty = 1212; + * ... + * } + * function some2() { + * let fields = inner(this); + * fields.someProperty1 = 1212; + * fields.someProperty2 = 'xx'; + * ... + * } + * + * @return {Function} + */ + + function makeInner() { + var key = '__ec_inner_' + innerUniqueIndex++; + return function (hostObj) { + return hostObj[key] || (hostObj[key] = {}); + }; + } + var innerUniqueIndex = getRandomIdBase(); + /** + * The same behavior as `component.getReferringComponents`. + */ + + function parseFinder(ecModel, finderInput, opt) { + var _a = preParseFinder(finderInput, opt), + mainTypeSpecified = _a.mainTypeSpecified, + queryOptionMap = _a.queryOptionMap, + others = _a.others; + + var result = others; + var defaultMainType = opt ? opt.defaultMainType : null; + + if (!mainTypeSpecified && defaultMainType) { + queryOptionMap.set(defaultMainType, {}); + } + + queryOptionMap.each(function (queryOption, mainType) { + var queryResult = queryReferringComponents(ecModel, mainType, queryOption, { + useDefault: defaultMainType === mainType, + enableAll: opt && opt.enableAll != null ? opt.enableAll : true, + enableNone: opt && opt.enableNone != null ? opt.enableNone : true + }); + result[mainType + 'Models'] = queryResult.models; + result[mainType + 'Model'] = queryResult.models[0]; + }); + return result; + } + function preParseFinder(finderInput, opt) { + var finder; + + if (isString(finderInput)) { + var obj = {}; + obj[finderInput + 'Index'] = 0; + finder = obj; + } else { + finder = finderInput; + } + + var queryOptionMap = createHashMap(); + var others = {}; + var mainTypeSpecified = false; + each(finder, function (value, key) { + // Exclude 'dataIndex' and other illgal keys. + if (key === 'dataIndex' || key === 'dataIndexInside') { + others[key] = value; + return; + } + + var parsedKey = key.match(/^(\w+)(Index|Id|Name)$/) || []; + var mainType = parsedKey[1]; + var queryType = (parsedKey[2] || '').toLowerCase(); + + if (!mainType || !queryType || opt && opt.includeMainTypes && indexOf(opt.includeMainTypes, mainType) < 0) { + return; + } + + mainTypeSpecified = mainTypeSpecified || !!mainType; + var queryOption = queryOptionMap.get(mainType) || queryOptionMap.set(mainType, {}); + queryOption[queryType] = value; + }); + return { + mainTypeSpecified: mainTypeSpecified, + queryOptionMap: queryOptionMap, + others: others + }; + } + var SINGLE_REFERRING = { + useDefault: true, + enableAll: false, + enableNone: false + }; + var MULTIPLE_REFERRING = { + useDefault: false, + enableAll: true, + enableNone: true + }; + function queryReferringComponents(ecModel, mainType, userOption, opt) { + opt = opt || SINGLE_REFERRING; + var indexOption = userOption.index; + var idOption = userOption.id; + var nameOption = userOption.name; + var result = { + models: null, + specified: indexOption != null || idOption != null || nameOption != null + }; + + if (!result.specified) { + // Use the first as default if `useDefault`. + var firstCmpt = void 0; + result.models = opt.useDefault && (firstCmpt = ecModel.getComponent(mainType)) ? [firstCmpt] : []; + return result; + } + + if (indexOption === 'none' || indexOption === false) { + assert(opt.enableNone, '`"none"` or `false` is not a valid value on index option.'); + result.models = []; + return result; + } // `queryComponents` will return all components if + // both all of index/id/name are null/undefined. + + + if (indexOption === 'all') { + assert(opt.enableAll, '`"all"` is not a valid value on index option.'); + indexOption = idOption = nameOption = null; + } + + result.models = ecModel.queryComponents({ + mainType: mainType, + index: indexOption, + id: idOption, + name: nameOption + }); + return result; + } + function setAttribute(dom, key, value) { + dom.setAttribute ? dom.setAttribute(key, value) : dom[key] = value; + } + function getAttribute(dom, key) { + return dom.getAttribute ? dom.getAttribute(key) : dom[key]; + } + function getTooltipRenderMode(renderModeOption) { + if (renderModeOption === 'auto') { + // Using html when `document` exists, use richText otherwise + return env.domSupported ? 'html' : 'richText'; + } else { + return renderModeOption || 'html'; + } + } + /** + * Group a list by key. + */ + + function groupData(array, getKey // return key + ) { + var buckets = createHashMap(); + var keys = []; + each(array, function (item) { + var key = getKey(item); + (buckets.get(key) || (keys.push(key), buckets.set(key, []))).push(item); + }); + return { + keys: keys, + buckets: buckets + }; + } + /** + * Interpolate raw values of a series with percent + * + * @param data data + * @param labelModel label model of the text element + * @param sourceValue start value. May be null/undefined when init. + * @param targetValue end value + * @param percent 0~1 percentage; 0 uses start value while 1 uses end value + * @return interpolated values + * If `sourceValue` and `targetValue` are `number`, return `number`. + * If `sourceValue` and `targetValue` are `string`, return `string`. + * If `sourceValue` and `targetValue` are `(string | number)[]`, return `(string | number)[]`. + * Other cases do not supported. + */ + + function interpolateRawValues(data, precision, sourceValue, targetValue, percent) { + var isAutoPrecision = precision == null || precision === 'auto'; + + if (targetValue == null) { + return targetValue; + } + + if (typeof targetValue === 'number') { + var value = interpolateNumber(sourceValue || 0, targetValue, percent); + return round(value, isAutoPrecision ? Math.max(getPrecision(sourceValue || 0), getPrecision(targetValue)) : precision); + } else if (typeof targetValue === 'string') { + return percent < 1 ? sourceValue : targetValue; + } else { + var interpolated = []; + var leftArr = sourceValue; + var rightArr = targetValue; + var length_1 = Math.max(leftArr ? leftArr.length : 0, rightArr.length); + + for (var i = 0; i < length_1; ++i) { + var info = data.getDimensionInfo(i); // Don't interpolate ordinal dims + + if (info && info.type === 'ordinal') { + // In init, there is no `sourceValue`, but should better not to get undefined result. + interpolated[i] = (percent < 1 && leftArr ? leftArr : rightArr)[i]; + } else { + var leftVal = leftArr && leftArr[i] ? leftArr[i] : 0; + var rightVal = rightArr[i]; + var value = interpolateNumber(leftVal, rightVal, percent); + interpolated[i] = round(value, isAutoPrecision ? Math.max(getPrecision(leftVal), getPrecision(rightVal)) : precision); + } + } + + return interpolated; + } + } + + var TYPE_DELIMITER = '.'; + var IS_CONTAINER = '___EC__COMPONENT__CONTAINER___'; + var IS_EXTENDED_CLASS = '___EC__EXTENDED_CLASS___'; + /** + * Notice, parseClassType('') should returns {main: '', sub: ''} + * @public + */ + + function parseClassType(componentType) { + var ret = { + main: '', + sub: '' + }; + + if (componentType) { + var typeArr = componentType.split(TYPE_DELIMITER); + ret.main = typeArr[0] || ''; + ret.sub = typeArr[1] || ''; + } + + return ret; + } + /** + * @public + */ + + function checkClassType(componentType) { + assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType), 'componentType "' + componentType + '" illegal'); + } + + function isExtendedClass(clz) { + return !!(clz && clz[IS_EXTENDED_CLASS]); + } + /** + * Implements `ExtendableConstructor` for `rootClz`. + * + * @usage + * ```ts + * class Xxx {} + * type XxxConstructor = typeof Xxx & ExtendableConstructor + * enableClassExtend(Xxx as XxxConstructor); + * ``` + */ + + function enableClassExtend(rootClz, mandatoryMethods) { + rootClz.$constructor = rootClz; // FIXME: not necessary? + + rootClz.extend = function (proto) { + if ("development" !== 'production') { + each(mandatoryMethods, function (method) { + if (!proto[method]) { + console.warn('Method `' + method + '` should be implemented' + (proto.type ? ' in ' + proto.type : '') + '.'); + } + }); + } + + var superClass = this; // For backward compat, we both support ts class inheritance and this + // "extend" approach. + // The constructor should keep the same behavior as ts class inheritance: + // If this constructor/$constructor is not declared, auto invoke the super + // constructor. + // If this constructor/$constructor is declared, it is responsible for + // calling the super constructor. + + function ExtendedClass() { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + if (!proto.$constructor) { + if (!isESClass(superClass)) { + // Will throw error if superClass is an es6 native class. + superClass.apply(this, arguments); + } else { + var ins = createObject( // @ts-ignore + ExtendedClass.prototype, new (superClass.bind.apply(superClass, __spreadArray([void 0], args)))()); + return ins; + } + } else { + proto.$constructor.apply(this, arguments); + } + } + + ExtendedClass[IS_EXTENDED_CLASS] = true; + extend(ExtendedClass.prototype, proto); + ExtendedClass.extend = this.extend; + ExtendedClass.superCall = superCall; + ExtendedClass.superApply = superApply; + inherits(ExtendedClass, this); + ExtendedClass.superClass = superClass; + return ExtendedClass; + }; + } + + function isESClass(fn) { + return typeof fn === 'function' && /^class\s/.test(Function.prototype.toString.call(fn)); + } + /** + * A work around to both support ts extend and this extend mechanism. + * on sub-class. + * @usage + * ```ts + * class Component { ... } + * classUtil.enableClassExtend(Component); + * classUtil.enableClassManagement(Component, {registerWhenExtend: true}); + * + * class Series extends Component { ... } + * // Without calling `markExtend`, `registerWhenExtend` will not work. + * Component.markExtend(Series); + * ``` + */ + + + function mountExtend(SubClz, SupperClz) { + SubClz.extend = SupperClz.extend; + } // A random offset. + + var classBase = Math.round(Math.random() * 10); + /** + * Implements `CheckableConstructor` for `target`. + * Can not use instanceof, consider different scope by + * cross domain or es module import in ec extensions. + * Mount a method "isInstance()" to Clz. + * + * @usage + * ```ts + * class Xxx {} + * type XxxConstructor = typeof Xxx & CheckableConstructor; + * enableClassCheck(Xxx as XxxConstructor) + * ``` + */ + + function enableClassCheck(target) { + var classAttr = ['__\0is_clz', classBase++].join('_'); + target.prototype[classAttr] = true; + + if ("development" !== 'production') { + assert(!target.isInstance, 'The method "is" can not be defined.'); + } + + target.isInstance = function (obj) { + return !!(obj && obj[classAttr]); + }; + } // superCall should have class info, which can not be fetch from 'this'. + // Consider this case: + // class A has method f, + // class B inherits class A, overrides method f, f call superApply('f'), + // class C inherits class B, do not overrides method f, + // then when method of class C is called, dead loop occured. + + function superCall(context, methodName) { + var args = []; + + for (var _i = 2; _i < arguments.length; _i++) { + args[_i - 2] = arguments[_i]; + } + + return this.superClass.prototype[methodName].apply(context, args); + } + + function superApply(context, methodName, args) { + return this.superClass.prototype[methodName].apply(context, args); + } + /** + * Implements `ClassManager` for `target` + * + * @usage + * ```ts + * class Xxx {} + * type XxxConstructor = typeof Xxx & ClassManager + * enableClassManagement(Xxx as XxxConstructor); + * ``` + */ + + + function enableClassManagement(target) { + /** + * Component model classes + * key: componentType, + * value: + * componentClass, when componentType is 'xxx' + * or Object., when componentType is 'xxx.yy' + */ + var storage = {}; + + target.registerClass = function (clz) { + // `type` should not be a "instance memeber". + // If using TS class, should better declared as `static type = 'series.pie'`. + // otherwise users have to mount `type` on prototype manually. + // For backward compat and enable instance visit type via `this.type`, + // we stil support fetch `type` from prototype. + var componentFullType = clz.type || clz.prototype.type; + + if (componentFullType) { + checkClassType(componentFullType); // If only static type declared, we assign it to prototype mandatorily. + + clz.prototype.type = componentFullType; + var componentTypeInfo = parseClassType(componentFullType); + + if (!componentTypeInfo.sub) { + if ("development" !== 'production') { + if (storage[componentTypeInfo.main]) { + console.warn(componentTypeInfo.main + ' exists.'); + } + } + + storage[componentTypeInfo.main] = clz; + } else if (componentTypeInfo.sub !== IS_CONTAINER) { + var container = makeContainer(componentTypeInfo); + container[componentTypeInfo.sub] = clz; + } + } + + return clz; + }; + + target.getClass = function (mainType, subType, throwWhenNotFound) { + var clz = storage[mainType]; + + if (clz && clz[IS_CONTAINER]) { + clz = subType ? clz[subType] : null; + } + + if (throwWhenNotFound && !clz) { + throw new Error(!subType ? mainType + '.' + 'type should be specified.' : 'Component ' + mainType + '.' + (subType || '') + ' is used but not imported.'); + } + + return clz; + }; + + target.getClassesByMainType = function (componentType) { + var componentTypeInfo = parseClassType(componentType); + var result = []; + var obj = storage[componentTypeInfo.main]; + + if (obj && obj[IS_CONTAINER]) { + each(obj, function (o, type) { + type !== IS_CONTAINER && result.push(o); + }); + } else { + result.push(obj); + } + + return result; + }; + + target.hasClass = function (componentType) { + // Just consider componentType.main. + var componentTypeInfo = parseClassType(componentType); + return !!storage[componentTypeInfo.main]; + }; + /** + * @return Like ['aa', 'bb'], but can not be ['aa.xx'] + */ + + + target.getAllClassMainTypes = function () { + var types = []; + each(storage, function (obj, type) { + types.push(type); + }); + return types; + }; + /** + * If a main type is container and has sub types + */ + + + target.hasSubTypes = function (componentType) { + var componentTypeInfo = parseClassType(componentType); + var obj = storage[componentTypeInfo.main]; + return obj && obj[IS_CONTAINER]; + }; + + function makeContainer(componentTypeInfo) { + var container = storage[componentTypeInfo.main]; + + if (!container || !container[IS_CONTAINER]) { + container = storage[componentTypeInfo.main] = {}; + container[IS_CONTAINER] = true; + } + + return container; + } + } // /** + // * @param {string|Array.} properties + // */ + // export function setReadOnly(obj, properties) { + // FIXME It seems broken in IE8 simulation of IE11 + // if (!zrUtil.isArray(properties)) { + // properties = properties != null ? [properties] : []; + // } + // zrUtil.each(properties, function (prop) { + // let value = obj[prop]; + // Object.defineProperty + // && Object.defineProperty(obj, prop, { + // value: value, writable: false + // }); + // zrUtil.isArray(obj[prop]) + // && Object.freeze + // && Object.freeze(obj[prop]); + // }); + // } + + function makeStyleMapper(properties, ignoreParent) { + // Normalize + for (var i = 0; i < properties.length; i++) { + if (!properties[i][1]) { + properties[i][1] = properties[i][0]; + } + } + + ignoreParent = ignoreParent || false; + return function (model, excludes, includes) { + var style = {}; + + for (var i = 0; i < properties.length; i++) { + var propName = properties[i][1]; + + if (excludes && indexOf(excludes, propName) >= 0 || includes && indexOf(includes, propName) < 0) { + continue; + } + + var val = model.getShallow(propName, ignoreParent); + + if (val != null) { + style[properties[i][0]] = val; + } + } // TODO Text or image? + + + return style; + }; + } + + var AREA_STYLE_KEY_MAP = [['fill', 'color'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['opacity'], ['shadowColor'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`. + // So do not transfer decal directly. + ]; + var getAreaStyle = makeStyleMapper(AREA_STYLE_KEY_MAP); + + var AreaStyleMixin = + /** @class */ + function () { + function AreaStyleMixin() {} + + AreaStyleMixin.prototype.getAreaStyle = function (excludes, includes) { + return getAreaStyle(this, excludes, includes); + }; + + return AreaStyleMixin; + }(); + + var globalImageCache = new LRU(50); + function findExistImage(newImageOrSrc) { + if (typeof newImageOrSrc === 'string') { + var cachedImgObj = globalImageCache.get(newImageOrSrc); + return cachedImgObj && cachedImgObj.image; + } + else { + return newImageOrSrc; + } + } + function createOrUpdateImage(newImageOrSrc, image, hostEl, onload, cbPayload) { + if (!newImageOrSrc) { + return image; + } + else if (typeof newImageOrSrc === 'string') { + if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) { + return image; + } + var cachedImgObj = globalImageCache.get(newImageOrSrc); + var pendingWrap = { hostEl: hostEl, cb: onload, cbPayload: cbPayload }; + if (cachedImgObj) { + image = cachedImgObj.image; + !isImageReady(image) && cachedImgObj.pending.push(pendingWrap); + } + else { + image = new Image(); + image.onload = image.onerror = imageOnLoad; + globalImageCache.put(newImageOrSrc, image.__cachedImgObj = { + image: image, + pending: [pendingWrap] + }); + image.src = image.__zrImageSrc = newImageOrSrc; + } + return image; + } + else { + return newImageOrSrc; + } + } + function imageOnLoad() { + var cachedImgObj = this.__cachedImgObj; + this.onload = this.onerror = this.__cachedImgObj = null; + for (var i = 0; i < cachedImgObj.pending.length; i++) { + var pendingWrap = cachedImgObj.pending[i]; + var cb = pendingWrap.cb; + cb && cb(this, pendingWrap.cbPayload); + pendingWrap.hostEl.dirty(); + } + cachedImgObj.pending.length = 0; + } + function isImageReady(image) { + return image && image.width && image.height; + } + + var STYLE_REG = /\{([a-zA-Z0-9_]+)\|([^}]*)\}/g; + function truncateText(text, containerWidth, font, ellipsis, options) { + if (!containerWidth) { + return ''; + } + var textLines = (text + '').split('\n'); + options = prepareTruncateOptions(containerWidth, font, ellipsis, options); + for (var i = 0, len = textLines.length; i < len; i++) { + textLines[i] = truncateSingleLine(textLines[i], options); + } + return textLines.join('\n'); + } + function prepareTruncateOptions(containerWidth, font, ellipsis, options) { + options = options || {}; + var preparedOpts = extend({}, options); + preparedOpts.font = font; + ellipsis = retrieve2(ellipsis, '...'); + preparedOpts.maxIterations = retrieve2(options.maxIterations, 2); + var minChar = preparedOpts.minChar = retrieve2(options.minChar, 0); + preparedOpts.cnCharWidth = getWidth('国', font); + var ascCharWidth = preparedOpts.ascCharWidth = getWidth('a', font); + preparedOpts.placeholder = retrieve2(options.placeholder, ''); + var contentWidth = containerWidth = Math.max(0, containerWidth - 1); + for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) { + contentWidth -= ascCharWidth; + } + var ellipsisWidth = getWidth(ellipsis, font); + if (ellipsisWidth > contentWidth) { + ellipsis = ''; + ellipsisWidth = 0; + } + contentWidth = containerWidth - ellipsisWidth; + preparedOpts.ellipsis = ellipsis; + preparedOpts.ellipsisWidth = ellipsisWidth; + preparedOpts.contentWidth = contentWidth; + preparedOpts.containerWidth = containerWidth; + return preparedOpts; + } + function truncateSingleLine(textLine, options) { + var containerWidth = options.containerWidth; + var font = options.font; + var contentWidth = options.contentWidth; + if (!containerWidth) { + return ''; + } + var lineWidth = getWidth(textLine, font); + if (lineWidth <= containerWidth) { + return textLine; + } + for (var j = 0;; j++) { + if (lineWidth <= contentWidth || j >= options.maxIterations) { + textLine += options.ellipsis; + break; + } + var subLength = j === 0 + ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth) + : lineWidth > 0 + ? Math.floor(textLine.length * contentWidth / lineWidth) + : 0; + textLine = textLine.substr(0, subLength); + lineWidth = getWidth(textLine, font); + } + if (textLine === '') { + textLine = options.placeholder; + } + return textLine; + } + function estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) { + var width = 0; + var i = 0; + for (var len = text.length; i < len && width < contentWidth; i++) { + var charCode = text.charCodeAt(i); + width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth; + } + return i; + } + function parsePlainText(text, style) { + text != null && (text += ''); + var overflow = style.overflow; + var padding = style.padding; + var font = style.font; + var truncate = overflow === 'truncate'; + var calculatedLineHeight = getLineHeight(font); + var lineHeight = retrieve2(style.lineHeight, calculatedLineHeight); + var truncateLineOverflow = style.lineOverflow === 'truncate'; + var width = style.width; + var lines; + if (width != null && overflow === 'break' || overflow === 'breakAll') { + lines = text ? wrapText(text, style.font, width, overflow === 'breakAll', 0).lines : []; + } + else { + lines = text ? text.split('\n') : []; + } + var contentHeight = lines.length * lineHeight; + var height = retrieve2(style.height, contentHeight); + if (contentHeight > height && truncateLineOverflow) { + var lineCount = Math.floor(height / lineHeight); + lines = lines.slice(0, lineCount); + } + var outerHeight = height; + var outerWidth = width; + if (padding) { + outerHeight += padding[0] + padding[2]; + if (outerWidth != null) { + outerWidth += padding[1] + padding[3]; + } + } + if (text && truncate && outerWidth != null) { + var options = prepareTruncateOptions(width, font, style.ellipsis, { + minChar: style.truncateMinChar, + placeholder: style.placeholder + }); + for (var i = 0; i < lines.length; i++) { + lines[i] = truncateSingleLine(lines[i], options); + } + } + if (width == null) { + var maxWidth = 0; + for (var i = 0; i < lines.length; i++) { + maxWidth = Math.max(getWidth(lines[i], font), maxWidth); + } + width = maxWidth; + } + return { + lines: lines, + height: height, + outerHeight: outerHeight, + lineHeight: lineHeight, + calculatedLineHeight: calculatedLineHeight, + contentHeight: contentHeight, + width: width + }; + } + var RichTextToken = (function () { + function RichTextToken() { + } + return RichTextToken; + }()); + var RichTextLine = (function () { + function RichTextLine(tokens) { + this.tokens = []; + if (tokens) { + this.tokens = tokens; + } + } + return RichTextLine; + }()); + var RichTextContentBlock = (function () { + function RichTextContentBlock() { + this.width = 0; + this.height = 0; + this.contentWidth = 0; + this.contentHeight = 0; + this.outerWidth = 0; + this.outerHeight = 0; + this.lines = []; + } + return RichTextContentBlock; + }()); + function parseRichText(text, style) { + var contentBlock = new RichTextContentBlock(); + text != null && (text += ''); + if (!text) { + return contentBlock; + } + var topWidth = style.width; + var topHeight = style.height; + var overflow = style.overflow; + var wrapInfo = (overflow === 'break' || overflow === 'breakAll') && topWidth != null + ? { width: topWidth, accumWidth: 0, breakAll: overflow === 'breakAll' } + : null; + var lastIndex = STYLE_REG.lastIndex = 0; + var result; + while ((result = STYLE_REG.exec(text)) != null) { + var matchedIndex = result.index; + if (matchedIndex > lastIndex) { + pushTokens(contentBlock, text.substring(lastIndex, matchedIndex), style, wrapInfo); + } + pushTokens(contentBlock, result[2], style, wrapInfo, result[1]); + lastIndex = STYLE_REG.lastIndex; + } + if (lastIndex < text.length) { + pushTokens(contentBlock, text.substring(lastIndex, text.length), style, wrapInfo); + } + var pendingList = []; + var calculatedHeight = 0; + var calculatedWidth = 0; + var stlPadding = style.padding; + var truncate = overflow === 'truncate'; + var truncateLine = style.lineOverflow === 'truncate'; + function finishLine(line, lineWidth, lineHeight) { + line.width = lineWidth; + line.lineHeight = lineHeight; + calculatedHeight += lineHeight; + calculatedWidth = Math.max(calculatedWidth, lineWidth); + } + outer: for (var i = 0; i < contentBlock.lines.length; i++) { + var line = contentBlock.lines[i]; + var lineHeight = 0; + var lineWidth = 0; + for (var j = 0; j < line.tokens.length; j++) { + var token = line.tokens[j]; + var tokenStyle = token.styleName && style.rich[token.styleName] || {}; + var textPadding = token.textPadding = tokenStyle.padding; + var paddingH = textPadding ? textPadding[1] + textPadding[3] : 0; + var font = token.font = tokenStyle.font || style.font; + token.contentHeight = getLineHeight(font); + var tokenHeight = retrieve2(tokenStyle.height, token.contentHeight); + token.innerHeight = tokenHeight; + textPadding && (tokenHeight += textPadding[0] + textPadding[2]); + token.height = tokenHeight; + token.lineHeight = retrieve3(tokenStyle.lineHeight, style.lineHeight, tokenHeight); + token.align = tokenStyle && tokenStyle.align || style.align; + token.verticalAlign = tokenStyle && tokenStyle.verticalAlign || 'middle'; + if (truncateLine && topHeight != null && calculatedHeight + token.lineHeight > topHeight) { + if (j > 0) { + line.tokens = line.tokens.slice(0, j); + finishLine(line, lineWidth, lineHeight); + contentBlock.lines = contentBlock.lines.slice(0, i + 1); + } + else { + contentBlock.lines = contentBlock.lines.slice(0, i); + } + break outer; + } + var styleTokenWidth = tokenStyle.width; + var tokenWidthNotSpecified = styleTokenWidth == null || styleTokenWidth === 'auto'; + if (typeof styleTokenWidth === 'string' && styleTokenWidth.charAt(styleTokenWidth.length - 1) === '%') { + token.percentWidth = styleTokenWidth; + pendingList.push(token); + token.contentWidth = getWidth(token.text, font); + } + else { + if (tokenWidthNotSpecified) { + var textBackgroundColor = tokenStyle.backgroundColor; + var bgImg = textBackgroundColor && textBackgroundColor.image; + if (bgImg) { + bgImg = findExistImage(bgImg); + if (isImageReady(bgImg)) { + token.width = Math.max(token.width, bgImg.width * tokenHeight / bgImg.height); + } + } + } + var remainTruncWidth = truncate && topWidth != null + ? topWidth - lineWidth : null; + if (remainTruncWidth != null && remainTruncWidth < token.width) { + if (!tokenWidthNotSpecified || remainTruncWidth < paddingH) { + token.text = ''; + token.width = token.contentWidth = 0; + } + else { + token.text = truncateText(token.text, remainTruncWidth - paddingH, font, style.ellipsis, { minChar: style.truncateMinChar }); + token.width = token.contentWidth = getWidth(token.text, font); + } + } + else { + token.contentWidth = getWidth(token.text, font); + } + } + token.width += paddingH; + lineWidth += token.width; + tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight)); + } + finishLine(line, lineWidth, lineHeight); + } + contentBlock.outerWidth = contentBlock.width = retrieve2(topWidth, calculatedWidth); + contentBlock.outerHeight = contentBlock.height = retrieve2(topHeight, calculatedHeight); + contentBlock.contentHeight = calculatedHeight; + contentBlock.contentWidth = calculatedWidth; + if (stlPadding) { + contentBlock.outerWidth += stlPadding[1] + stlPadding[3]; + contentBlock.outerHeight += stlPadding[0] + stlPadding[2]; + } + for (var i = 0; i < pendingList.length; i++) { + var token = pendingList[i]; + var percentWidth = token.percentWidth; + token.width = parseInt(percentWidth, 10) / 100 * contentBlock.width; + } + return contentBlock; + } + function pushTokens(block, str, style, wrapInfo, styleName) { + var isEmptyStr = str === ''; + var tokenStyle = styleName && style.rich[styleName] || {}; + var lines = block.lines; + var font = tokenStyle.font || style.font; + var newLine = false; + var strLines; + var linesWidths; + if (wrapInfo) { + var tokenPadding = tokenStyle.padding; + var tokenPaddingH = tokenPadding ? tokenPadding[1] + tokenPadding[3] : 0; + if (tokenStyle.width != null && tokenStyle.width !== 'auto') { + var outerWidth_1 = parsePercent(tokenStyle.width, wrapInfo.width) + tokenPaddingH; + if (lines.length > 0) { + if (outerWidth_1 + wrapInfo.accumWidth > wrapInfo.width) { + strLines = str.split('\n'); + newLine = true; + } + } + wrapInfo.accumWidth = outerWidth_1; + } + else { + var res = wrapText(str, font, wrapInfo.width, wrapInfo.breakAll, wrapInfo.accumWidth); + wrapInfo.accumWidth = res.accumWidth + tokenPaddingH; + linesWidths = res.linesWidths; + strLines = res.lines; + } + } + else { + strLines = str.split('\n'); + } + for (var i = 0; i < strLines.length; i++) { + var text = strLines[i]; + var token = new RichTextToken(); + token.styleName = styleName; + token.text = text; + token.isLineHolder = !text && !isEmptyStr; + if (typeof tokenStyle.width === 'number') { + token.width = tokenStyle.width; + } + else { + token.width = linesWidths + ? linesWidths[i] + : getWidth(text, font); + } + if (!i && !newLine) { + var tokens = (lines[lines.length - 1] || (lines[0] = new RichTextLine())).tokens; + var tokensLen = tokens.length; + (tokensLen === 1 && tokens[0].isLineHolder) + ? (tokens[0] = token) + : ((text || !tokensLen || isEmptyStr) && tokens.push(token)); + } + else { + lines.push(new RichTextLine([token])); + } + } + } + function isLatin(ch) { + var code = ch.charCodeAt(0); + return code >= 0x21 && code <= 0xFF; + } + var breakCharMap = reduce(',&?/;] '.split(''), function (obj, ch) { + obj[ch] = true; + return obj; + }, {}); + function isWordBreakChar(ch) { + if (isLatin(ch)) { + if (breakCharMap[ch]) { + return true; + } + return false; + } + return true; + } + function wrapText(text, font, lineWidth, isBreakAll, lastAccumWidth) { + var lines = []; + var linesWidths = []; + var line = ''; + var currentWord = ''; + var currentWordWidth = 0; + var accumWidth = 0; + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i); + if (ch === '\n') { + if (currentWord) { + line += currentWord; + accumWidth += currentWordWidth; + } + lines.push(line); + linesWidths.push(accumWidth); + line = ''; + currentWord = ''; + currentWordWidth = 0; + accumWidth = 0; + continue; + } + var chWidth = getWidth(ch, font); + var inWord = isBreakAll ? false : !isWordBreakChar(ch); + if (!lines.length + ? lastAccumWidth + accumWidth + chWidth > lineWidth + : accumWidth + chWidth > lineWidth) { + if (!accumWidth) { + if (inWord) { + lines.push(currentWord); + linesWidths.push(currentWordWidth); + currentWord = ch; + currentWordWidth = chWidth; + } + else { + lines.push(ch); + linesWidths.push(chWidth); + } + } + else if (line || currentWord) { + if (inWord) { + if (!line) { + line = currentWord; + currentWord = ''; + currentWordWidth = 0; + accumWidth = currentWordWidth; + } + lines.push(line); + linesWidths.push(accumWidth - currentWordWidth); + currentWord += ch; + currentWordWidth += chWidth; + line = ''; + accumWidth = currentWordWidth; + } + else { + if (currentWord) { + line += currentWord; + accumWidth += currentWordWidth; + currentWord = ''; + currentWordWidth = 0; + } + lines.push(line); + linesWidths.push(accumWidth); + line = ch; + accumWidth = chWidth; + } + } + continue; + } + accumWidth += chWidth; + if (inWord) { + currentWord += ch; + currentWordWidth += chWidth; + } + else { + if (currentWord) { + line += currentWord; + currentWord = ''; + currentWordWidth = 0; + } + line += ch; + } + } + if (!lines.length && !line) { + line = text; + currentWord = ''; + currentWordWidth = 0; + } + if (currentWord) { + line += currentWord; + } + if (line) { + lines.push(line); + linesWidths.push(accumWidth); + } + if (lines.length === 1) { + accumWidth += lastAccumWidth; + } + return { + accumWidth: accumWidth, + lines: lines, + linesWidths: linesWidths + }; + } + + var STYLE_MAGIC_KEY = '__zr_style_' + Math.round((Math.random() * 10)); + var DEFAULT_COMMON_STYLE = { + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0, + shadowColor: '#000', + opacity: 1, + blend: 'source-over' + }; + var DEFAULT_COMMON_ANIMATION_PROPS = { + style: { + shadowBlur: true, + shadowOffsetX: true, + shadowOffsetY: true, + shadowColor: true, + opacity: true + } + }; + DEFAULT_COMMON_STYLE[STYLE_MAGIC_KEY] = true; + var PRIMARY_STATES_KEYS$1 = ['z', 'z2', 'invisible']; + var PRIMARY_STATES_KEYS_IN_HOVER_LAYER = ['invisible']; + var Displayable = (function (_super) { + __extends(Displayable, _super); + function Displayable(props) { + return _super.call(this, props) || this; + } + Displayable.prototype._init = function (props) { + var keysArr = keys(props); + for (var i = 0; i < keysArr.length; i++) { + var key = keysArr[i]; + if (key === 'style') { + this.useStyle(props[key]); + } + else { + _super.prototype.attrKV.call(this, key, props[key]); + } + } + if (!this.style) { + this.useStyle({}); + } + }; + Displayable.prototype.beforeBrush = function () { }; + Displayable.prototype.afterBrush = function () { }; + Displayable.prototype.innerBeforeBrush = function () { }; + Displayable.prototype.innerAfterBrush = function () { }; + Displayable.prototype.shouldBePainted = function (viewWidth, viewHeight, considerClipPath, considerAncestors) { + var m = this.transform; + if (this.ignore + || this.invisible + || this.style.opacity === 0 + || (this.culling + && isDisplayableCulled(this, viewWidth, viewHeight)) + || (m && !m[0] && !m[3])) { + return false; + } + if (considerClipPath && this.__clipPaths) { + for (var i = 0; i < this.__clipPaths.length; ++i) { + if (this.__clipPaths[i].isZeroArea()) { + return false; + } + } + } + if (considerAncestors && this.parent) { + var parent_1 = this.parent; + while (parent_1) { + if (parent_1.ignore) { + return false; + } + parent_1 = parent_1.parent; + } + } + return true; + }; + Displayable.prototype.contain = function (x, y) { + return this.rectContain(x, y); + }; + Displayable.prototype.traverse = function (cb, context) { + cb.call(context, this); + }; + Displayable.prototype.rectContain = function (x, y) { + var coord = this.transformCoordToLocal(x, y); + var rect = this.getBoundingRect(); + return rect.contain(coord[0], coord[1]); + }; + Displayable.prototype.getPaintRect = function () { + var rect = this._paintRect; + if (!this._paintRect || this.__dirty) { + var transform = this.transform; + var elRect = this.getBoundingRect(); + var style = this.style; + var shadowSize = style.shadowBlur || 0; + var shadowOffsetX = style.shadowOffsetX || 0; + var shadowOffsetY = style.shadowOffsetY || 0; + rect = this._paintRect || (this._paintRect = new BoundingRect(0, 0, 0, 0)); + if (transform) { + BoundingRect.applyTransform(rect, elRect, transform); + } + else { + rect.copy(elRect); + } + if (shadowSize || shadowOffsetX || shadowOffsetY) { + rect.width += shadowSize * 2 + Math.abs(shadowOffsetX); + rect.height += shadowSize * 2 + Math.abs(shadowOffsetY); + rect.x = Math.min(rect.x, rect.x + shadowOffsetX - shadowSize); + rect.y = Math.min(rect.y, rect.y + shadowOffsetY - shadowSize); + } + var tolerance = this.dirtyRectTolerance; + if (!rect.isZero()) { + rect.x = Math.floor(rect.x - tolerance); + rect.y = Math.floor(rect.y - tolerance); + rect.width = Math.ceil(rect.width + 1 + tolerance * 2); + rect.height = Math.ceil(rect.height + 1 + tolerance * 2); + } + } + return rect; + }; + Displayable.prototype.setPrevPaintRect = function (paintRect) { + if (paintRect) { + this._prevPaintRect = this._prevPaintRect || new BoundingRect(0, 0, 0, 0); + this._prevPaintRect.copy(paintRect); + } + else { + this._prevPaintRect = null; + } + }; + Displayable.prototype.getPrevPaintRect = function () { + return this._prevPaintRect; + }; + Displayable.prototype.animateStyle = function (loop) { + return this.animate('style', loop); + }; + Displayable.prototype.updateDuringAnimation = function (targetKey) { + if (targetKey === 'style') { + this.dirtyStyle(); + } + else { + this.markRedraw(); + } + }; + Displayable.prototype.attrKV = function (key, value) { + if (key !== 'style') { + _super.prototype.attrKV.call(this, key, value); + } + else { + if (!this.style) { + this.useStyle(value); + } + else { + this.setStyle(value); + } + } + }; + Displayable.prototype.setStyle = function (keyOrObj, value) { + if (typeof keyOrObj === 'string') { + this.style[keyOrObj] = value; + } + else { + extend(this.style, keyOrObj); + } + this.dirtyStyle(); + return this; + }; + Displayable.prototype.dirtyStyle = function (notRedraw) { + if (!notRedraw) { + this.markRedraw(); + } + this.__dirty |= STYLE_CHANGED_BIT; + if (this._rect) { + this._rect = null; + } + }; + Displayable.prototype.dirty = function () { + this.dirtyStyle(); + }; + Displayable.prototype.styleChanged = function () { + return !!(this.__dirty & STYLE_CHANGED_BIT); + }; + Displayable.prototype.styleUpdated = function () { + this.__dirty &= ~STYLE_CHANGED_BIT; + }; + Displayable.prototype.createStyle = function (obj) { + return createObject(DEFAULT_COMMON_STYLE, obj); + }; + Displayable.prototype.useStyle = function (obj) { + if (!obj[STYLE_MAGIC_KEY]) { + obj = this.createStyle(obj); + } + if (this.__inHover) { + this.__hoverStyle = obj; + } + else { + this.style = obj; + } + this.dirtyStyle(); + }; + Displayable.prototype.isStyleObject = function (obj) { + return obj[STYLE_MAGIC_KEY]; + }; + Displayable.prototype._innerSaveToNormal = function (toState) { + _super.prototype._innerSaveToNormal.call(this, toState); + var normalState = this._normalState; + if (toState.style && !normalState.style) { + normalState.style = this._mergeStyle(this.createStyle(), this.style); + } + this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS$1); + }; + Displayable.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) { + _super.prototype._applyStateObj.call(this, stateName, state, normalState, keepCurrentStates, transition, animationCfg); + var needsRestoreToNormal = !(state && keepCurrentStates); + var targetStyle; + if (state && state.style) { + if (transition) { + if (keepCurrentStates) { + targetStyle = state.style; + } + else { + targetStyle = this._mergeStyle(this.createStyle(), normalState.style); + this._mergeStyle(targetStyle, state.style); + } + } + else { + targetStyle = this._mergeStyle(this.createStyle(), keepCurrentStates ? this.style : normalState.style); + this._mergeStyle(targetStyle, state.style); + } + } + else if (needsRestoreToNormal) { + targetStyle = normalState.style; + } + if (targetStyle) { + if (transition) { + var sourceStyle = this.style; + this.style = this.createStyle(needsRestoreToNormal ? {} : sourceStyle); + if (needsRestoreToNormal) { + var changedKeys = keys(sourceStyle); + for (var i = 0; i < changedKeys.length; i++) { + var key = changedKeys[i]; + if (key in targetStyle) { + targetStyle[key] = targetStyle[key]; + this.style[key] = sourceStyle[key]; + } + } + } + var targetKeys = keys(targetStyle); + for (var i = 0; i < targetKeys.length; i++) { + var key = targetKeys[i]; + this.style[key] = this.style[key]; + } + this._transitionState(stateName, { + style: targetStyle + }, animationCfg, this.getAnimationStyleProps()); + } + else { + this.useStyle(targetStyle); + } + } + var statesKeys = this.__inHover ? PRIMARY_STATES_KEYS_IN_HOVER_LAYER : PRIMARY_STATES_KEYS$1; + for (var i = 0; i < statesKeys.length; i++) { + var key = statesKeys[i]; + if (state && state[key] != null) { + this[key] = state[key]; + } + else if (needsRestoreToNormal) { + if (normalState[key] != null) { + this[key] = normalState[key]; + } + } + } + }; + Displayable.prototype._mergeStates = function (states) { + var mergedState = _super.prototype._mergeStates.call(this, states); + var mergedStyle; + for (var i = 0; i < states.length; i++) { + var state = states[i]; + if (state.style) { + mergedStyle = mergedStyle || {}; + this._mergeStyle(mergedStyle, state.style); + } + } + if (mergedStyle) { + mergedState.style = mergedStyle; + } + return mergedState; + }; + Displayable.prototype._mergeStyle = function (targetStyle, sourceStyle) { + extend(targetStyle, sourceStyle); + return targetStyle; + }; + Displayable.prototype.getAnimationStyleProps = function () { + return DEFAULT_COMMON_ANIMATION_PROPS; + }; + Displayable.initDefaultProps = (function () { + var dispProto = Displayable.prototype; + dispProto.type = 'displayable'; + dispProto.invisible = false; + dispProto.z = 0; + dispProto.z2 = 0; + dispProto.zlevel = 0; + dispProto.culling = false; + dispProto.cursor = 'pointer'; + dispProto.rectHover = false; + dispProto.incremental = false; + dispProto._rect = null; + dispProto.dirtyRectTolerance = 0; + dispProto.__dirty = REDRAW_BIT | STYLE_CHANGED_BIT; + })(); + return Displayable; + }(Element)); + var tmpRect = new BoundingRect(0, 0, 0, 0); + var viewRect = new BoundingRect(0, 0, 0, 0); + function isDisplayableCulled(el, width, height) { + tmpRect.copy(el.getBoundingRect()); + if (el.transform) { + tmpRect.applyTransform(el.transform); + } + viewRect.width = width; + viewRect.height = height; + return !tmpRect.intersect(viewRect); + } + + var mathPow = Math.pow; + var mathSqrt = Math.sqrt; + var EPSILON$1 = 1e-8; + var EPSILON_NUMERIC = 1e-4; + var THREE_SQRT = mathSqrt(3); + var ONE_THIRD = 1 / 3; + var _v0 = create(); + var _v1 = create(); + var _v2 = create(); + function isAroundZero(val) { + return val > -EPSILON$1 && val < EPSILON$1; + } + function isNotAroundZero$1(val) { + return val > EPSILON$1 || val < -EPSILON$1; + } + function cubicAt(p0, p1, p2, p3, t) { + var onet = 1 - t; + return onet * onet * (onet * p0 + 3 * t * p1) + + t * t * (t * p3 + 3 * onet * p2); + } + function cubicDerivativeAt(p0, p1, p2, p3, t) { + var onet = 1 - t; + return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + + (p3 - p2) * t * t); + } + function cubicRootAt(p0, p1, p2, p3, val, roots) { + var a = p3 + 3 * (p1 - p2) - p0; + var b = 3 * (p2 - p1 * 2 + p0); + var c = 3 * (p1 - p0); + var d = p0 - val; + var A = b * b - 3 * a * c; + var B = b * c - 9 * a * d; + var C = c * c - 3 * b * d; + var n = 0; + if (isAroundZero(A) && isAroundZero(B)) { + if (isAroundZero(b)) { + roots[0] = 0; + } + else { + var t1 = -c / b; + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + } + else { + var disc = B * B - 4 * A * C; + if (isAroundZero(disc)) { + var K = B / A; + var t1 = -b / a + K; + var t2 = -K / 2; + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + } + else if (disc > 0) { + var discSqrt = mathSqrt(disc); + var Y1 = A * b + 1.5 * a * (-B + discSqrt); + var Y2 = A * b + 1.5 * a * (-B - discSqrt); + if (Y1 < 0) { + Y1 = -mathPow(-Y1, ONE_THIRD); + } + else { + Y1 = mathPow(Y1, ONE_THIRD); + } + if (Y2 < 0) { + Y2 = -mathPow(-Y2, ONE_THIRD); + } + else { + Y2 = mathPow(Y2, ONE_THIRD); + } + var t1 = (-b - (Y1 + Y2)) / (3 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + else { + var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A)); + var theta = Math.acos(T) / 3; + var ASqrt = mathSqrt(A); + var tmp = Math.cos(theta); + var t1 = (-b - 2 * ASqrt * tmp) / (3 * a); + var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a); + var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + if (t3 >= 0 && t3 <= 1) { + roots[n++] = t3; + } + } + } + return n; + } + function cubicExtrema(p0, p1, p2, p3, extrema) { + var b = 6 * p2 - 12 * p1 + 6 * p0; + var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2; + var c = 3 * p1 - 3 * p0; + var n = 0; + if (isAroundZero(a)) { + if (isNotAroundZero$1(b)) { + var t1 = -c / b; + if (t1 >= 0 && t1 <= 1) { + extrema[n++] = t1; + } + } + } + else { + var disc = b * b - 4 * a * c; + if (isAroundZero(disc)) { + extrema[0] = -b / (2 * a); + } + else if (disc > 0) { + var discSqrt = mathSqrt(disc); + var t1 = (-b + discSqrt) / (2 * a); + var t2 = (-b - discSqrt) / (2 * a); + if (t1 >= 0 && t1 <= 1) { + extrema[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + extrema[n++] = t2; + } + } + } + return n; + } + function cubicSubdivide(p0, p1, p2, p3, t, out) { + var p01 = (p1 - p0) * t + p0; + var p12 = (p2 - p1) * t + p1; + var p23 = (p3 - p2) * t + p2; + var p012 = (p12 - p01) * t + p01; + var p123 = (p23 - p12) * t + p12; + var p0123 = (p123 - p012) * t + p012; + out[0] = p0; + out[1] = p01; + out[2] = p012; + out[3] = p0123; + out[4] = p0123; + out[5] = p123; + out[6] = p23; + out[7] = p3; + } + function cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, out) { + var t; + var interval = 0.005; + var d = Infinity; + var prev; + var next; + var d1; + var d2; + _v0[0] = x; + _v0[1] = y; + for (var _t = 0; _t < 1; _t += 0.05) { + _v1[0] = cubicAt(x0, x1, x2, x3, _t); + _v1[1] = cubicAt(y0, y1, y2, y3, _t); + d1 = distSquare(_v0, _v1); + if (d1 < d) { + t = _t; + d = d1; + } + } + d = Infinity; + for (var i = 0; i < 32; i++) { + if (interval < EPSILON_NUMERIC) { + break; + } + prev = t - interval; + next = t + interval; + _v1[0] = cubicAt(x0, x1, x2, x3, prev); + _v1[1] = cubicAt(y0, y1, y2, y3, prev); + d1 = distSquare(_v1, _v0); + if (prev >= 0 && d1 < d) { + t = prev; + d = d1; + } + else { + _v2[0] = cubicAt(x0, x1, x2, x3, next); + _v2[1] = cubicAt(y0, y1, y2, y3, next); + d2 = distSquare(_v2, _v0); + if (next <= 1 && d2 < d) { + t = next; + d = d2; + } + else { + interval *= 0.5; + } + } + } + if (out) { + out[0] = cubicAt(x0, x1, x2, x3, t); + out[1] = cubicAt(y0, y1, y2, y3, t); + } + return mathSqrt(d); + } + function cubicLength(x0, y0, x1, y1, x2, y2, x3, y3, iteration) { + var px = x0; + var py = y0; + var d = 0; + var step = 1 / iteration; + for (var i = 1; i <= iteration; i++) { + var t = i * step; + var x = cubicAt(x0, x1, x2, x3, t); + var y = cubicAt(y0, y1, y2, y3, t); + var dx = x - px; + var dy = y - py; + d += Math.sqrt(dx * dx + dy * dy); + px = x; + py = y; + } + return d; + } + function quadraticAt(p0, p1, p2, t) { + var onet = 1 - t; + return onet * (onet * p0 + 2 * t * p1) + t * t * p2; + } + function quadraticDerivativeAt(p0, p1, p2, t) { + return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1)); + } + function quadraticRootAt(p0, p1, p2, val, roots) { + var a = p0 - 2 * p1 + p2; + var b = 2 * (p1 - p0); + var c = p0 - val; + var n = 0; + if (isAroundZero(a)) { + if (isNotAroundZero$1(b)) { + var t1 = -c / b; + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + } + else { + var disc = b * b - 4 * a * c; + if (isAroundZero(disc)) { + var t1 = -b / (2 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + } + else if (disc > 0) { + var discSqrt = mathSqrt(disc); + var t1 = (-b + discSqrt) / (2 * a); + var t2 = (-b - discSqrt) / (2 * a); + if (t1 >= 0 && t1 <= 1) { + roots[n++] = t1; + } + if (t2 >= 0 && t2 <= 1) { + roots[n++] = t2; + } + } + } + return n; + } + function quadraticExtremum(p0, p1, p2) { + var divider = p0 + p2 - 2 * p1; + if (divider === 0) { + return 0.5; + } + else { + return (p0 - p1) / divider; + } + } + function quadraticSubdivide(p0, p1, p2, t, out) { + var p01 = (p1 - p0) * t + p0; + var p12 = (p2 - p1) * t + p1; + var p012 = (p12 - p01) * t + p01; + out[0] = p0; + out[1] = p01; + out[2] = p012; + out[3] = p012; + out[4] = p12; + out[5] = p2; + } + function quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, out) { + var t; + var interval = 0.005; + var d = Infinity; + _v0[0] = x; + _v0[1] = y; + for (var _t = 0; _t < 1; _t += 0.05) { + _v1[0] = quadraticAt(x0, x1, x2, _t); + _v1[1] = quadraticAt(y0, y1, y2, _t); + var d1 = distSquare(_v0, _v1); + if (d1 < d) { + t = _t; + d = d1; + } + } + d = Infinity; + for (var i = 0; i < 32; i++) { + if (interval < EPSILON_NUMERIC) { + break; + } + var prev = t - interval; + var next = t + interval; + _v1[0] = quadraticAt(x0, x1, x2, prev); + _v1[1] = quadraticAt(y0, y1, y2, prev); + var d1 = distSquare(_v1, _v0); + if (prev >= 0 && d1 < d) { + t = prev; + d = d1; + } + else { + _v2[0] = quadraticAt(x0, x1, x2, next); + _v2[1] = quadraticAt(y0, y1, y2, next); + var d2 = distSquare(_v2, _v0); + if (next <= 1 && d2 < d) { + t = next; + d = d2; + } + else { + interval *= 0.5; + } + } + } + if (out) { + out[0] = quadraticAt(x0, x1, x2, t); + out[1] = quadraticAt(y0, y1, y2, t); + } + return mathSqrt(d); + } + function quadraticLength(x0, y0, x1, y1, x2, y2, iteration) { + var px = x0; + var py = y0; + var d = 0; + var step = 1 / iteration; + for (var i = 1; i <= iteration; i++) { + var t = i * step; + var x = quadraticAt(x0, x1, x2, t); + var y = quadraticAt(y0, y1, y2, t); + var dx = x - px; + var dy = y - py; + d += Math.sqrt(dx * dx + dy * dy); + px = x; + py = y; + } + return d; + } + + var mathMin$1 = Math.min; + var mathMax$1 = Math.max; + var mathSin = Math.sin; + var mathCos = Math.cos; + var PI2 = Math.PI * 2; + var start = create(); + var end = create(); + var extremity = create(); + function fromPoints(points, min, max) { + if (points.length === 0) { + return; + } + var p = points[0]; + var left = p[0]; + var right = p[0]; + var top = p[1]; + var bottom = p[1]; + for (var i = 1; i < points.length; i++) { + p = points[i]; + left = mathMin$1(left, p[0]); + right = mathMax$1(right, p[0]); + top = mathMin$1(top, p[1]); + bottom = mathMax$1(bottom, p[1]); + } + min[0] = left; + min[1] = top; + max[0] = right; + max[1] = bottom; + } + function fromLine(x0, y0, x1, y1, min, max) { + min[0] = mathMin$1(x0, x1); + min[1] = mathMin$1(y0, y1); + max[0] = mathMax$1(x0, x1); + max[1] = mathMax$1(y0, y1); + } + var xDim = []; + var yDim = []; + function fromCubic(x0, y0, x1, y1, x2, y2, x3, y3, min, max) { + var cubicExtrema$1 = cubicExtrema; + var cubicAt$1 = cubicAt; + var n = cubicExtrema$1(x0, x1, x2, x3, xDim); + min[0] = Infinity; + min[1] = Infinity; + max[0] = -Infinity; + max[1] = -Infinity; + for (var i = 0; i < n; i++) { + var x = cubicAt$1(x0, x1, x2, x3, xDim[i]); + min[0] = mathMin$1(x, min[0]); + max[0] = mathMax$1(x, max[0]); + } + n = cubicExtrema$1(y0, y1, y2, y3, yDim); + for (var i = 0; i < n; i++) { + var y = cubicAt$1(y0, y1, y2, y3, yDim[i]); + min[1] = mathMin$1(y, min[1]); + max[1] = mathMax$1(y, max[1]); + } + min[0] = mathMin$1(x0, min[0]); + max[0] = mathMax$1(x0, max[0]); + min[0] = mathMin$1(x3, min[0]); + max[0] = mathMax$1(x3, max[0]); + min[1] = mathMin$1(y0, min[1]); + max[1] = mathMax$1(y0, max[1]); + min[1] = mathMin$1(y3, min[1]); + max[1] = mathMax$1(y3, max[1]); + } + function fromQuadratic(x0, y0, x1, y1, x2, y2, min, max) { + var quadraticExtremum$1 = quadraticExtremum; + var quadraticAt$1 = quadraticAt; + var tx = mathMax$1(mathMin$1(quadraticExtremum$1(x0, x1, x2), 1), 0); + var ty = mathMax$1(mathMin$1(quadraticExtremum$1(y0, y1, y2), 1), 0); + var x = quadraticAt$1(x0, x1, x2, tx); + var y = quadraticAt$1(y0, y1, y2, ty); + min[0] = mathMin$1(x0, x2, x); + min[1] = mathMin$1(y0, y2, y); + max[0] = mathMax$1(x0, x2, x); + max[1] = mathMax$1(y0, y2, y); + } + function fromArc(x, y, rx, ry, startAngle, endAngle, anticlockwise, min$1, max$1) { + var vec2Min = min; + var vec2Max = max; + var diff = Math.abs(startAngle - endAngle); + if (diff % PI2 < 1e-4 && diff > 1e-4) { + min$1[0] = x - rx; + min$1[1] = y - ry; + max$1[0] = x + rx; + max$1[1] = y + ry; + return; + } + start[0] = mathCos(startAngle) * rx + x; + start[1] = mathSin(startAngle) * ry + y; + end[0] = mathCos(endAngle) * rx + x; + end[1] = mathSin(endAngle) * ry + y; + vec2Min(min$1, start, end); + vec2Max(max$1, start, end); + startAngle = startAngle % (PI2); + if (startAngle < 0) { + startAngle = startAngle + PI2; + } + endAngle = endAngle % (PI2); + if (endAngle < 0) { + endAngle = endAngle + PI2; + } + if (startAngle > endAngle && !anticlockwise) { + endAngle += PI2; + } + else if (startAngle < endAngle && anticlockwise) { + startAngle += PI2; + } + if (anticlockwise) { + var tmp = endAngle; + endAngle = startAngle; + startAngle = tmp; + } + for (var angle = 0; angle < endAngle; angle += Math.PI / 2) { + if (angle > startAngle) { + extremity[0] = mathCos(angle) * rx + x; + extremity[1] = mathSin(angle) * ry + y; + vec2Min(min$1, extremity, min$1); + vec2Max(max$1, extremity, max$1); + } + } + } + + var CMD = { + M: 1, + L: 2, + C: 3, + Q: 4, + A: 5, + Z: 6, + R: 7 + }; + var tmpOutX = []; + var tmpOutY = []; + var min$1 = []; + var max$1 = []; + var min2 = []; + var max2 = []; + var mathMin$2 = Math.min; + var mathMax$2 = Math.max; + var mathCos$1 = Math.cos; + var mathSin$1 = Math.sin; + var mathSqrt$1 = Math.sqrt; + var mathAbs = Math.abs; + var PI = Math.PI; + var PI2$1 = PI * 2; + var hasTypedArray = typeof Float32Array !== 'undefined'; + var tmpAngles = []; + function modPI2(radian) { + var n = Math.round(radian / PI * 1e8) / 1e8; + return (n % 2) * PI; + } + function normalizeArcAngles(angles, anticlockwise) { + var newStartAngle = modPI2(angles[0]); + if (newStartAngle < 0) { + newStartAngle += PI2$1; + } + var delta = newStartAngle - angles[0]; + var newEndAngle = angles[1]; + newEndAngle += delta; + if (!anticlockwise && newEndAngle - newStartAngle >= PI2$1) { + newEndAngle = newStartAngle + PI2$1; + } + else if (anticlockwise && newStartAngle - newEndAngle >= PI2$1) { + newEndAngle = newStartAngle - PI2$1; + } + else if (!anticlockwise && newStartAngle > newEndAngle) { + newEndAngle = newStartAngle + (PI2$1 - modPI2(newStartAngle - newEndAngle)); + } + else if (anticlockwise && newStartAngle < newEndAngle) { + newEndAngle = newStartAngle - (PI2$1 - modPI2(newEndAngle - newStartAngle)); + } + angles[0] = newStartAngle; + angles[1] = newEndAngle; + } + var PathProxy = (function () { + function PathProxy(notSaveData) { + this.dpr = 1; + this._xi = 0; + this._yi = 0; + this._x0 = 0; + this._y0 = 0; + this._len = 0; + if (notSaveData) { + this._saveData = false; + } + if (this._saveData) { + this.data = []; + } + } + PathProxy.prototype.increaseVersion = function () { + this._version++; + }; + PathProxy.prototype.getVersion = function () { + return this._version; + }; + PathProxy.prototype.setScale = function (sx, sy, segmentIgnoreThreshold) { + segmentIgnoreThreshold = segmentIgnoreThreshold || 0; + if (segmentIgnoreThreshold > 0) { + this._ux = mathAbs(segmentIgnoreThreshold / devicePixelRatio / sx) || 0; + this._uy = mathAbs(segmentIgnoreThreshold / devicePixelRatio / sy) || 0; + } + }; + PathProxy.prototype.setDPR = function (dpr) { + this.dpr = dpr; + }; + PathProxy.prototype.setContext = function (ctx) { + this._ctx = ctx; + }; + PathProxy.prototype.getContext = function () { + return this._ctx; + }; + PathProxy.prototype.beginPath = function () { + this._ctx && this._ctx.beginPath(); + this.reset(); + return this; + }; + PathProxy.prototype.reset = function () { + if (this._saveData) { + this._len = 0; + } + if (this._lineDash) { + this._lineDash = null; + this._dashOffset = 0; + } + if (this._pathSegLen) { + this._pathSegLen = null; + this._pathLen = 0; + } + this._version++; + }; + PathProxy.prototype.moveTo = function (x, y) { + this._drawPendingPt(); + this.addData(CMD.M, x, y); + this._ctx && this._ctx.moveTo(x, y); + this._x0 = x; + this._y0 = y; + this._xi = x; + this._yi = y; + return this; + }; + PathProxy.prototype.lineTo = function (x, y) { + var dx = mathAbs(x - this._xi); + var dy = mathAbs(y - this._yi); + var exceedUnit = dx > this._ux || dy > this._uy; + this.addData(CMD.L, x, y); + if (this._ctx && exceedUnit) { + this._needsDash ? this._dashedLineTo(x, y) + : this._ctx.lineTo(x, y); + } + if (exceedUnit) { + this._xi = x; + this._yi = y; + this._pendingPtDist = 0; + } + else { + var d2 = dx * dx + dy * dy; + if (d2 > this._pendingPtDist) { + this._pendingPtX = x; + this._pendingPtY = y; + this._pendingPtDist = d2; + } + } + return this; + }; + PathProxy.prototype.bezierCurveTo = function (x1, y1, x2, y2, x3, y3) { + this._drawPendingPt(); + this.addData(CMD.C, x1, y1, x2, y2, x3, y3); + if (this._ctx) { + this._needsDash ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3) + : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); + } + this._xi = x3; + this._yi = y3; + return this; + }; + PathProxy.prototype.quadraticCurveTo = function (x1, y1, x2, y2) { + this._drawPendingPt(); + this.addData(CMD.Q, x1, y1, x2, y2); + if (this._ctx) { + this._needsDash ? this._dashedQuadraticTo(x1, y1, x2, y2) + : this._ctx.quadraticCurveTo(x1, y1, x2, y2); + } + this._xi = x2; + this._yi = y2; + return this; + }; + PathProxy.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) { + this._drawPendingPt(); + tmpAngles[0] = startAngle; + tmpAngles[1] = endAngle; + normalizeArcAngles(tmpAngles, anticlockwise); + startAngle = tmpAngles[0]; + endAngle = tmpAngles[1]; + var delta = endAngle - startAngle; + this.addData(CMD.A, cx, cy, r, r, startAngle, delta, 0, anticlockwise ? 0 : 1); + this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise); + this._xi = mathCos$1(endAngle) * r + cx; + this._yi = mathSin$1(endAngle) * r + cy; + return this; + }; + PathProxy.prototype.arcTo = function (x1, y1, x2, y2, radius) { + this._drawPendingPt(); + if (this._ctx) { + this._ctx.arcTo(x1, y1, x2, y2, radius); + } + return this; + }; + PathProxy.prototype.rect = function (x, y, w, h) { + this._drawPendingPt(); + this._ctx && this._ctx.rect(x, y, w, h); + this.addData(CMD.R, x, y, w, h); + return this; + }; + PathProxy.prototype.closePath = function () { + this._drawPendingPt(); + this.addData(CMD.Z); + var ctx = this._ctx; + var x0 = this._x0; + var y0 = this._y0; + if (ctx) { + this._needsDash && this._dashedLineTo(x0, y0); + ctx.closePath(); + } + this._xi = x0; + this._yi = y0; + return this; + }; + PathProxy.prototype.fill = function (ctx) { + ctx && ctx.fill(); + this.toStatic(); + }; + PathProxy.prototype.stroke = function (ctx) { + ctx && ctx.stroke(); + this.toStatic(); + }; + PathProxy.prototype.setLineDash = function (lineDash) { + if (lineDash instanceof Array) { + this._lineDash = lineDash; + this._dashIdx = 0; + var lineDashSum = 0; + for (var i = 0; i < lineDash.length; i++) { + lineDashSum += lineDash[i]; + } + this._dashSum = lineDashSum; + this._needsDash = true; + } + else { + this._lineDash = null; + this._needsDash = false; + } + return this; + }; + PathProxy.prototype.setLineDashOffset = function (offset) { + this._dashOffset = offset; + return this; + }; + PathProxy.prototype.len = function () { + return this._len; + }; + PathProxy.prototype.setData = function (data) { + var len = data.length; + if (!(this.data && this.data.length === len) && hasTypedArray) { + this.data = new Float32Array(len); + } + for (var i = 0; i < len; i++) { + this.data[i] = data[i]; + } + this._len = len; + }; + PathProxy.prototype.appendPath = function (path) { + if (!(path instanceof Array)) { + path = [path]; + } + var len = path.length; + var appendSize = 0; + var offset = this._len; + for (var i = 0; i < len; i++) { + appendSize += path[i].len(); + } + if (hasTypedArray && (this.data instanceof Float32Array)) { + this.data = new Float32Array(offset + appendSize); + } + for (var i = 0; i < len; i++) { + var appendPathData = path[i].data; + for (var k = 0; k < appendPathData.length; k++) { + this.data[offset++] = appendPathData[k]; + } + } + this._len = offset; + }; + PathProxy.prototype.addData = function (cmd, a, b, c, d, e, f, g, h) { + if (!this._saveData) { + return; + } + var data = this.data; + if (this._len + arguments.length > data.length) { + this._expandData(); + data = this.data; + } + for (var i = 0; i < arguments.length; i++) { + data[this._len++] = arguments[i]; + } + }; + PathProxy.prototype._drawPendingPt = function () { + if (this._pendingPtDist > 0) { + this._ctx && this._ctx.lineTo(this._pendingPtX, this._pendingPtY); + this._pendingPtDist = 0; + } + }; + PathProxy.prototype._expandData = function () { + if (!(this.data instanceof Array)) { + var newData = []; + for (var i = 0; i < this._len; i++) { + newData[i] = this.data[i]; + } + this.data = newData; + } + }; + PathProxy.prototype._dashedLineTo = function (x1, y1) { + var dashSum = this._dashSum; + var lineDash = this._lineDash; + var ctx = this._ctx; + var offset = this._dashOffset; + var x0 = this._xi; + var y0 = this._yi; + var dx = x1 - x0; + var dy = y1 - y0; + var dist = mathSqrt$1(dx * dx + dy * dy); + var x = x0; + var y = y0; + var nDash = lineDash.length; + var dash; + var idx; + dx /= dist; + dy /= dist; + if (offset < 0) { + offset = dashSum + offset; + } + offset %= dashSum; + x -= offset * dx; + y -= offset * dy; + while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1) + || (dx === 0 && ((dy > 0 && y <= y1) || (dy < 0 && y >= y1)))) { + idx = this._dashIdx; + dash = lineDash[idx]; + x += dx * dash; + y += dy * dash; + this._dashIdx = (idx + 1) % nDash; + if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) { + continue; + } + ctx[idx % 2 ? 'moveTo' : 'lineTo'](dx >= 0 ? mathMin$2(x, x1) : mathMax$2(x, x1), dy >= 0 ? mathMin$2(y, y1) : mathMax$2(y, y1)); + } + dx = x - x1; + dy = y - y1; + this._dashOffset = -mathSqrt$1(dx * dx + dy * dy); + }; + PathProxy.prototype._dashedBezierTo = function (x1, y1, x2, y2, x3, y3) { + var ctx = this._ctx; + var dashSum = this._dashSum; + var offset = this._dashOffset; + var lineDash = this._lineDash; + var x0 = this._xi; + var y0 = this._yi; + var bezierLen = 0; + var idx = this._dashIdx; + var nDash = lineDash.length; + var t; + var dx; + var dy; + var x; + var y; + var tmpLen = 0; + if (offset < 0) { + offset = dashSum + offset; + } + offset %= dashSum; + for (t = 0; t < 1; t += 0.1) { + dx = cubicAt(x0, x1, x2, x3, t + 0.1) + - cubicAt(x0, x1, x2, x3, t); + dy = cubicAt(y0, y1, y2, y3, t + 0.1) + - cubicAt(y0, y1, y2, y3, t); + bezierLen += mathSqrt$1(dx * dx + dy * dy); + } + for (; idx < nDash; idx++) { + tmpLen += lineDash[idx]; + if (tmpLen > offset) { + break; + } + } + t = (tmpLen - offset) / bezierLen; + while (t <= 1) { + x = cubicAt(x0, x1, x2, x3, t); + y = cubicAt(y0, y1, y2, y3, t); + idx % 2 ? ctx.moveTo(x, y) + : ctx.lineTo(x, y); + t += lineDash[idx] / bezierLen; + idx = (idx + 1) % nDash; + } + (idx % 2 !== 0) && ctx.lineTo(x3, y3); + dx = x3 - x; + dy = y3 - y; + this._dashOffset = -mathSqrt$1(dx * dx + dy * dy); + }; + PathProxy.prototype._dashedQuadraticTo = function (x1, y1, x2, y2) { + var x3 = x2; + var y3 = y2; + x2 = (x2 + 2 * x1) / 3; + y2 = (y2 + 2 * y1) / 3; + x1 = (this._xi + 2 * x1) / 3; + y1 = (this._yi + 2 * y1) / 3; + this._dashedBezierTo(x1, y1, x2, y2, x3, y3); + }; + PathProxy.prototype.toStatic = function () { + if (!this._saveData) { + return; + } + this._drawPendingPt(); + var data = this.data; + if (data instanceof Array) { + data.length = this._len; + if (hasTypedArray && this._len > 11) { + this.data = new Float32Array(data); + } + } + }; + PathProxy.prototype.getBoundingRect = function () { + min$1[0] = min$1[1] = min2[0] = min2[1] = Number.MAX_VALUE; + max$1[0] = max$1[1] = max2[0] = max2[1] = -Number.MAX_VALUE; + var data = this.data; + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + var i; + for (i = 0; i < this._len;) { + var cmd = data[i++]; + var isFirst = i === 1; + if (isFirst) { + xi = data[i]; + yi = data[i + 1]; + x0 = xi; + y0 = yi; + } + switch (cmd) { + case CMD.M: + xi = x0 = data[i++]; + yi = y0 = data[i++]; + min2[0] = x0; + min2[1] = y0; + max2[0] = x0; + max2[1] = y0; + break; + case CMD.L: + fromLine(xi, yi, data[i], data[i + 1], min2, max2); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.C: + fromCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], min2, max2); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.Q: + fromQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], min2, max2); + xi = data[i++]; + yi = data[i++]; + break; + case CMD.A: + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var startAngle = data[i++]; + var endAngle = data[i++] + startAngle; + i += 1; + var anticlockwise = !data[i++]; + if (isFirst) { + x0 = mathCos$1(startAngle) * rx + cx; + y0 = mathSin$1(startAngle) * ry + cy; + } + fromArc(cx, cy, rx, ry, startAngle, endAngle, anticlockwise, min2, max2); + xi = mathCos$1(endAngle) * rx + cx; + yi = mathSin$1(endAngle) * ry + cy; + break; + case CMD.R: + x0 = xi = data[i++]; + y0 = yi = data[i++]; + var width = data[i++]; + var height = data[i++]; + fromLine(x0, y0, x0 + width, y0 + height, min2, max2); + break; + case CMD.Z: + xi = x0; + yi = y0; + break; + } + min(min$1, min$1, min2); + max(max$1, max$1, max2); + } + if (i === 0) { + min$1[0] = min$1[1] = max$1[0] = max$1[1] = 0; + } + return new BoundingRect(min$1[0], min$1[1], max$1[0] - min$1[0], max$1[1] - min$1[1]); + }; + PathProxy.prototype._calculateLength = function () { + var data = this.data; + var len = this._len; + var ux = this._ux; + var uy = this._uy; + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + if (!this._pathSegLen) { + this._pathSegLen = []; + } + var pathSegLen = this._pathSegLen; + var pathTotalLen = 0; + var segCount = 0; + for (var i = 0; i < len;) { + var cmd = data[i++]; + var isFirst = i === 1; + if (isFirst) { + xi = data[i]; + yi = data[i + 1]; + x0 = xi; + y0 = yi; + } + var l = -1; + switch (cmd) { + case CMD.M: + xi = x0 = data[i++]; + yi = y0 = data[i++]; + break; + case CMD.L: { + var x2 = data[i++]; + var y2 = data[i++]; + var dx = x2 - xi; + var dy = y2 - yi; + if (mathAbs(dx) > ux || mathAbs(dy) > uy || i === len - 1) { + l = Math.sqrt(dx * dx + dy * dy); + xi = x2; + yi = y2; + } + break; + } + case CMD.C: { + var x1 = data[i++]; + var y1 = data[i++]; + var x2 = data[i++]; + var y2 = data[i++]; + var x3 = data[i++]; + var y3 = data[i++]; + l = cubicLength(xi, yi, x1, y1, x2, y2, x3, y3, 10); + xi = x3; + yi = y3; + break; + } + case CMD.Q: { + var x1 = data[i++]; + var y1 = data[i++]; + var x2 = data[i++]; + var y2 = data[i++]; + l = quadraticLength(xi, yi, x1, y1, x2, y2, 10); + xi = x2; + yi = y2; + break; + } + case CMD.A: + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var startAngle = data[i++]; + var delta = data[i++]; + var endAngle = delta + startAngle; + i += 1; + var anticlockwise = !data[i++]; + if (isFirst) { + x0 = mathCos$1(startAngle) * rx + cx; + y0 = mathSin$1(startAngle) * ry + cy; + } + l = mathMax$2(rx, ry) * mathMin$2(PI2$1, Math.abs(delta)); + xi = mathCos$1(endAngle) * rx + cx; + yi = mathSin$1(endAngle) * ry + cy; + break; + case CMD.R: { + x0 = xi = data[i++]; + y0 = yi = data[i++]; + var width = data[i++]; + var height = data[i++]; + l = width * 2 + height * 2; + break; + } + case CMD.Z: { + var dx = x0 - xi; + var dy = y0 - yi; + l = Math.sqrt(dx * dx + dy * dy); + xi = x0; + yi = y0; + break; + } + } + if (l >= 0) { + pathSegLen[segCount++] = l; + pathTotalLen += l; + } + } + this._pathLen = pathTotalLen; + return pathTotalLen; + }; + PathProxy.prototype.rebuildPath = function (ctx, percent) { + var d = this.data; + var ux = this._ux; + var uy = this._uy; + var len = this._len; + var x0; + var y0; + var xi; + var yi; + var x; + var y; + var drawPart = percent < 1; + var pathSegLen; + var pathTotalLen; + var accumLength = 0; + var segCount = 0; + var displayedLength; + var pendingPtDist = 0; + var pendingPtX; + var pendingPtY; + if (drawPart) { + if (!this._pathSegLen) { + this._calculateLength(); + } + pathSegLen = this._pathSegLen; + pathTotalLen = this._pathLen; + displayedLength = percent * pathTotalLen; + if (!displayedLength) { + return; + } + } + lo: for (var i = 0; i < len;) { + var cmd = d[i++]; + var isFirst = i === 1; + if (isFirst) { + xi = d[i]; + yi = d[i + 1]; + x0 = xi; + y0 = yi; + } + if (cmd !== CMD.L && pendingPtDist > 0) { + ctx.lineTo(pendingPtX, pendingPtY); + pendingPtDist = 0; + } + switch (cmd) { + case CMD.M: + x0 = xi = d[i++]; + y0 = yi = d[i++]; + ctx.moveTo(xi, yi); + break; + case CMD.L: { + x = d[i++]; + y = d[i++]; + var dx = mathAbs(x - xi); + var dy = mathAbs(y - yi); + if (dx > ux || dy > uy) { + if (drawPart) { + var l = pathSegLen[segCount++]; + if (accumLength + l > displayedLength) { + var t = (displayedLength - accumLength) / l; + ctx.lineTo(xi * (1 - t) + x * t, yi * (1 - t) + y * t); + break lo; + } + accumLength += l; + } + ctx.lineTo(x, y); + xi = x; + yi = y; + pendingPtDist = 0; + } + else { + var d2 = dx * dx + dy * dy; + if (d2 > pendingPtDist) { + pendingPtX = x; + pendingPtY = y; + pendingPtDist = d2; + } + } + break; + } + case CMD.C: { + var x1 = d[i++]; + var y1 = d[i++]; + var x2 = d[i++]; + var y2 = d[i++]; + var x3 = d[i++]; + var y3 = d[i++]; + if (drawPart) { + var l = pathSegLen[segCount++]; + if (accumLength + l > displayedLength) { + var t = (displayedLength - accumLength) / l; + cubicSubdivide(xi, x1, x2, x3, t, tmpOutX); + cubicSubdivide(yi, y1, y2, y3, t, tmpOutY); + ctx.bezierCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2], tmpOutX[3], tmpOutY[3]); + break lo; + } + accumLength += l; + } + ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3); + xi = x3; + yi = y3; + break; + } + case CMD.Q: { + var x1 = d[i++]; + var y1 = d[i++]; + var x2 = d[i++]; + var y2 = d[i++]; + if (drawPart) { + var l = pathSegLen[segCount++]; + if (accumLength + l > displayedLength) { + var t = (displayedLength - accumLength) / l; + quadraticSubdivide(xi, x1, x2, t, tmpOutX); + quadraticSubdivide(yi, y1, y2, t, tmpOutY); + ctx.quadraticCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2]); + break lo; + } + accumLength += l; + } + ctx.quadraticCurveTo(x1, y1, x2, y2); + xi = x2; + yi = y2; + break; + } + case CMD.A: + var cx = d[i++]; + var cy = d[i++]; + var rx = d[i++]; + var ry = d[i++]; + var startAngle = d[i++]; + var delta = d[i++]; + var psi = d[i++]; + var anticlockwise = !d[i++]; + var r = (rx > ry) ? rx : ry; + var isEllipse = mathAbs(rx - ry) > 1e-3; + var endAngle = startAngle + delta; + var breakBuild = false; + if (drawPart) { + var l = pathSegLen[segCount++]; + if (accumLength + l > displayedLength) { + endAngle = startAngle + delta * (displayedLength - accumLength) / l; + breakBuild = true; + } + accumLength += l; + } + if (isEllipse && ctx.ellipse) { + ctx.ellipse(cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise); + } + else { + ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise); + } + if (breakBuild) { + break lo; + } + if (isFirst) { + x0 = mathCos$1(startAngle) * rx + cx; + y0 = mathSin$1(startAngle) * ry + cy; + } + xi = mathCos$1(endAngle) * rx + cx; + yi = mathSin$1(endAngle) * ry + cy; + break; + case CMD.R: + x0 = xi = d[i]; + y0 = yi = d[i + 1]; + x = d[i++]; + y = d[i++]; + var width = d[i++]; + var height = d[i++]; + if (drawPart) { + var l = pathSegLen[segCount++]; + if (accumLength + l > displayedLength) { + var d_1 = displayedLength - accumLength; + ctx.moveTo(x, y); + ctx.lineTo(x + mathMin$2(d_1, width), y); + d_1 -= width; + if (d_1 > 0) { + ctx.lineTo(x + width, y + mathMin$2(d_1, height)); + } + d_1 -= height; + if (d_1 > 0) { + ctx.lineTo(x + mathMax$2(width - d_1, 0), y + height); + } + d_1 -= width; + if (d_1 > 0) { + ctx.lineTo(x, y + mathMax$2(height - d_1, 0)); + } + break lo; + } + accumLength += l; + } + ctx.rect(x, y, width, height); + break; + case CMD.Z: + if (drawPart) { + var l = pathSegLen[segCount++]; + if (accumLength + l > displayedLength) { + var t = (displayedLength - accumLength) / l; + ctx.lineTo(xi * (1 - t) + x0 * t, yi * (1 - t) + y0 * t); + break lo; + } + accumLength += l; + } + ctx.closePath(); + xi = x0; + yi = y0; + } + } + }; + PathProxy.prototype.clone = function () { + var newProxy = new PathProxy(); + var data = this.data; + newProxy.data = data.slice ? data.slice() + : Array.prototype.slice.call(data); + newProxy._len = this._len; + return newProxy; + }; + PathProxy.CMD = CMD; + PathProxy.initDefaultProps = (function () { + var proto = PathProxy.prototype; + proto._saveData = true; + proto._needsDash = false; + proto._dashOffset = 0; + proto._dashIdx = 0; + proto._dashSum = 0; + proto._ux = 0; + proto._uy = 0; + proto._pendingPtDist = 0; + proto._version = 0; + })(); + return PathProxy; + }()); + + function containStroke(x0, y0, x1, y1, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + var _a = 0; + var _b = x0; + if ((y > y0 + _l && y > y1 + _l) + || (y < y0 - _l && y < y1 - _l) + || (x > x0 + _l && x > x1 + _l) + || (x < x0 - _l && x < x1 - _l)) { + return false; + } + if (x0 !== x1) { + _a = (y0 - y1) / (x0 - x1); + _b = (x0 * y1 - x1 * y0) / (x0 - x1); + } + else { + return Math.abs(x - x0) <= _l / 2; + } + var tmp = _a * x - y + _b; + var _s = tmp * tmp / (_a * _a + 1); + return _s <= _l / 2 * _l / 2; + } + + function containStroke$1(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + if ((y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l) + || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l) + || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l) + || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)) { + return false; + } + var d = cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null); + return d <= _l / 2; + } + + function containStroke$2(x0, y0, x1, y1, x2, y2, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + if ((y > y0 + _l && y > y1 + _l && y > y2 + _l) + || (y < y0 - _l && y < y1 - _l && y < y2 - _l) + || (x > x0 + _l && x > x1 + _l && x > x2 + _l) + || (x < x0 - _l && x < x1 - _l && x < x2 - _l)) { + return false; + } + var d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null); + return d <= _l / 2; + } + + var PI2$2 = Math.PI * 2; + function normalizeRadian(angle) { + angle %= PI2$2; + if (angle < 0) { + angle += PI2$2; + } + return angle; + } + + var PI2$3 = Math.PI * 2; + function containStroke$3(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) { + if (lineWidth === 0) { + return false; + } + var _l = lineWidth; + x -= cx; + y -= cy; + var d = Math.sqrt(x * x + y * y); + if ((d - _l > r) || (d + _l < r)) { + return false; + } + if (Math.abs(startAngle - endAngle) % PI2$3 < 1e-4) { + return true; + } + if (anticlockwise) { + var tmp = startAngle; + startAngle = normalizeRadian(endAngle); + endAngle = normalizeRadian(tmp); + } + else { + startAngle = normalizeRadian(startAngle); + endAngle = normalizeRadian(endAngle); + } + if (startAngle > endAngle) { + endAngle += PI2$3; + } + var angle = Math.atan2(y, x); + if (angle < 0) { + angle += PI2$3; + } + return (angle >= startAngle && angle <= endAngle) + || (angle + PI2$3 >= startAngle && angle + PI2$3 <= endAngle); + } + + function windingLine(x0, y0, x1, y1, x, y) { + if ((y > y0 && y > y1) || (y < y0 && y < y1)) { + return 0; + } + if (y1 === y0) { + return 0; + } + var t = (y - y0) / (y1 - y0); + var dir = y1 < y0 ? 1 : -1; + if (t === 1 || t === 0) { + dir = y1 < y0 ? 0.5 : -0.5; + } + var x_ = t * (x1 - x0) + x0; + return x_ === x ? Infinity : x_ > x ? dir : 0; + } + + var CMD$1 = PathProxy.CMD; + var PI2$4 = Math.PI * 2; + var EPSILON$2 = 1e-4; + function isAroundEqual(a, b) { + return Math.abs(a - b) < EPSILON$2; + } + var roots = [-1, -1, -1]; + var extrema = [-1, -1]; + function swapExtrema() { + var tmp = extrema[0]; + extrema[0] = extrema[1]; + extrema[1] = tmp; + } + function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) { + if ((y > y0 && y > y1 && y > y2 && y > y3) + || (y < y0 && y < y1 && y < y2 && y < y3)) { + return 0; + } + var nRoots = cubicRootAt(y0, y1, y2, y3, y, roots); + if (nRoots === 0) { + return 0; + } + else { + var w = 0; + var nExtrema = -1; + var y0_ = void 0; + var y1_ = void 0; + for (var i = 0; i < nRoots; i++) { + var t = roots[i]; + var unit = (t === 0 || t === 1) ? 0.5 : 1; + var x_ = cubicAt(x0, x1, x2, x3, t); + if (x_ < x) { + continue; + } + if (nExtrema < 0) { + nExtrema = cubicExtrema(y0, y1, y2, y3, extrema); + if (extrema[1] < extrema[0] && nExtrema > 1) { + swapExtrema(); + } + y0_ = cubicAt(y0, y1, y2, y3, extrema[0]); + if (nExtrema > 1) { + y1_ = cubicAt(y0, y1, y2, y3, extrema[1]); + } + } + if (nExtrema === 2) { + if (t < extrema[0]) { + w += y0_ < y0 ? unit : -unit; + } + else if (t < extrema[1]) { + w += y1_ < y0_ ? unit : -unit; + } + else { + w += y3 < y1_ ? unit : -unit; + } + } + else { + if (t < extrema[0]) { + w += y0_ < y0 ? unit : -unit; + } + else { + w += y3 < y0_ ? unit : -unit; + } + } + } + return w; + } + } + function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) { + if ((y > y0 && y > y1 && y > y2) + || (y < y0 && y < y1 && y < y2)) { + return 0; + } + var nRoots = quadraticRootAt(y0, y1, y2, y, roots); + if (nRoots === 0) { + return 0; + } + else { + var t = quadraticExtremum(y0, y1, y2); + if (t >= 0 && t <= 1) { + var w = 0; + var y_ = quadraticAt(y0, y1, y2, t); + for (var i = 0; i < nRoots; i++) { + var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1; + var x_ = quadraticAt(x0, x1, x2, roots[i]); + if (x_ < x) { + continue; + } + if (roots[i] < t) { + w += y_ < y0 ? unit : -unit; + } + else { + w += y2 < y_ ? unit : -unit; + } + } + return w; + } + else { + var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1; + var x_ = quadraticAt(x0, x1, x2, roots[0]); + if (x_ < x) { + return 0; + } + return y2 < y0 ? unit : -unit; + } + } + } + function windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) { + y -= cy; + if (y > r || y < -r) { + return 0; + } + var tmp = Math.sqrt(r * r - y * y); + roots[0] = -tmp; + roots[1] = tmp; + var dTheta = Math.abs(startAngle - endAngle); + if (dTheta < 1e-4) { + return 0; + } + if (dTheta >= PI2$4 - 1e-4) { + startAngle = 0; + endAngle = PI2$4; + var dir = anticlockwise ? 1 : -1; + if (x >= roots[0] + cx && x <= roots[1] + cx) { + return dir; + } + else { + return 0; + } + } + if (startAngle > endAngle) { + var tmp_1 = startAngle; + startAngle = endAngle; + endAngle = tmp_1; + } + if (startAngle < 0) { + startAngle += PI2$4; + endAngle += PI2$4; + } + var w = 0; + for (var i = 0; i < 2; i++) { + var x_ = roots[i]; + if (x_ + cx > x) { + var angle = Math.atan2(y, x_); + var dir = anticlockwise ? 1 : -1; + if (angle < 0) { + angle = PI2$4 + angle; + } + if ((angle >= startAngle && angle <= endAngle) + || (angle + PI2$4 >= startAngle && angle + PI2$4 <= endAngle)) { + if (angle > Math.PI / 2 && angle < Math.PI * 1.5) { + dir = -dir; + } + w += dir; + } + } + } + return w; + } + function containPath(path, lineWidth, isStroke, x, y) { + var data = path.data; + var len = path.len(); + var w = 0; + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + var x1; + var y1; + for (var i = 0; i < len;) { + var cmd = data[i++]; + var isFirst = i === 1; + if (cmd === CMD$1.M && i > 1) { + if (!isStroke) { + w += windingLine(xi, yi, x0, y0, x, y); + } + } + if (isFirst) { + xi = data[i]; + yi = data[i + 1]; + x0 = xi; + y0 = yi; + } + switch (cmd) { + case CMD$1.M: + x0 = data[i++]; + y0 = data[i++]; + xi = x0; + yi = y0; + break; + case CMD$1.L: + if (isStroke) { + if (containStroke(xi, yi, data[i], data[i + 1], lineWidth, x, y)) { + return true; + } + } + else { + w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD$1.C: + if (isStroke) { + if (containStroke$1(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) { + return true; + } + } + else { + w += windingCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD$1.Q: + if (isStroke) { + if (containStroke$2(xi, yi, data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) { + return true; + } + } + else { + w += windingQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y) || 0; + } + xi = data[i++]; + yi = data[i++]; + break; + case CMD$1.A: + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var theta = data[i++]; + var dTheta = data[i++]; + i += 1; + var anticlockwise = !!(1 - data[i++]); + x1 = Math.cos(theta) * rx + cx; + y1 = Math.sin(theta) * ry + cy; + if (!isFirst) { + w += windingLine(xi, yi, x1, y1, x, y); + } + else { + x0 = x1; + y0 = y1; + } + var _x = (x - cx) * ry / rx + cx; + if (isStroke) { + if (containStroke$3(cx, cy, ry, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) { + return true; + } + } + else { + w += windingArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y); + } + xi = Math.cos(theta + dTheta) * rx + cx; + yi = Math.sin(theta + dTheta) * ry + cy; + break; + case CMD$1.R: + x0 = xi = data[i++]; + y0 = yi = data[i++]; + var width = data[i++]; + var height = data[i++]; + x1 = x0 + width; + y1 = y0 + height; + if (isStroke) { + if (containStroke(x0, y0, x1, y0, lineWidth, x, y) + || containStroke(x1, y0, x1, y1, lineWidth, x, y) + || containStroke(x1, y1, x0, y1, lineWidth, x, y) + || containStroke(x0, y1, x0, y0, lineWidth, x, y)) { + return true; + } + } + else { + w += windingLine(x1, y0, x1, y1, x, y); + w += windingLine(x0, y1, x0, y0, x, y); + } + break; + case CMD$1.Z: + if (isStroke) { + if (containStroke(xi, yi, x0, y0, lineWidth, x, y)) { + return true; + } + } + else { + w += windingLine(xi, yi, x0, y0, x, y); + } + xi = x0; + yi = y0; + break; + } + } + if (!isStroke && !isAroundEqual(yi, y0)) { + w += windingLine(xi, yi, x0, y0, x, y) || 0; + } + return w !== 0; + } + function contain(pathProxy, x, y) { + return containPath(pathProxy, 0, false, x, y); + } + function containStroke$4(pathProxy, lineWidth, x, y) { + return containPath(pathProxy, lineWidth, true, x, y); + } + + var DEFAULT_PATH_STYLE = defaults({ + fill: '#000', + stroke: null, + strokePercent: 1, + fillOpacity: 1, + strokeOpacity: 1, + lineDashOffset: 0, + lineWidth: 1, + lineCap: 'butt', + miterLimit: 10, + strokeNoScale: false, + strokeFirst: false + }, DEFAULT_COMMON_STYLE); + var DEFAULT_PATH_ANIMATION_PROPS = { + style: defaults({ + fill: true, + stroke: true, + strokePercent: true, + fillOpacity: true, + strokeOpacity: true, + lineDashOffset: true, + lineWidth: true, + miterLimit: true + }, DEFAULT_COMMON_ANIMATION_PROPS.style) + }; + var pathCopyParams = [ + 'x', 'y', 'rotation', 'scaleX', 'scaleY', 'originX', 'originY', 'invisible', + 'culling', 'z', 'z2', 'zlevel', 'parent' + ]; + var Path = (function (_super) { + __extends(Path, _super); + function Path(opts) { + return _super.call(this, opts) || this; + } + Path.prototype.update = function () { + var _this = this; + _super.prototype.update.call(this); + var style = this.style; + if (style.decal) { + var decalEl = this._decalEl = this._decalEl || new Path(); + if (decalEl.buildPath === Path.prototype.buildPath) { + decalEl.buildPath = function (ctx) { + _this.buildPath(ctx, _this.shape); + }; + } + decalEl.silent = true; + var decalElStyle = decalEl.style; + for (var key in style) { + if (decalElStyle[key] !== style[key]) { + decalElStyle[key] = style[key]; + } + } + decalElStyle.fill = style.fill ? style.decal : null; + decalElStyle.decal = null; + decalElStyle.shadowColor = null; + style.strokeFirst && (decalElStyle.stroke = null); + for (var i = 0; i < pathCopyParams.length; ++i) { + decalEl[pathCopyParams[i]] = this[pathCopyParams[i]]; + } + decalEl.__dirty |= REDRAW_BIT; + } + else if (this._decalEl) { + this._decalEl = null; + } + }; + Path.prototype.getDecalElement = function () { + return this._decalEl; + }; + Path.prototype._init = function (props) { + var keysArr = keys(props); + this.shape = this.getDefaultShape(); + var defaultStyle = this.getDefaultStyle(); + if (defaultStyle) { + this.useStyle(defaultStyle); + } + for (var i = 0; i < keysArr.length; i++) { + var key = keysArr[i]; + var value = props[key]; + if (key === 'style') { + if (!this.style) { + this.useStyle(value); + } + else { + extend(this.style, value); + } + } + else if (key === 'shape') { + extend(this.shape, value); + } + else { + _super.prototype.attrKV.call(this, key, value); + } + } + if (!this.style) { + this.useStyle({}); + } + }; + Path.prototype.getDefaultStyle = function () { + return null; + }; + Path.prototype.getDefaultShape = function () { + return {}; + }; + Path.prototype.canBeInsideText = function () { + return this.hasFill(); + }; + Path.prototype.getInsideTextFill = function () { + var pathFill = this.style.fill; + if (pathFill !== 'none') { + if (isString(pathFill)) { + var fillLum = lum(pathFill, 0); + if (fillLum > 0.5) { + return DARK_LABEL_COLOR; + } + else if (fillLum > 0.2) { + return LIGHTER_LABEL_COLOR; + } + return LIGHT_LABEL_COLOR; + } + else if (pathFill) { + return LIGHT_LABEL_COLOR; + } + } + return DARK_LABEL_COLOR; + }; + Path.prototype.getInsideTextStroke = function (textFill) { + var pathFill = this.style.fill; + if (isString(pathFill)) { + var zr = this.__zr; + var isDarkMode = !!(zr && zr.isDarkMode()); + var isDarkLabel = lum(textFill, 0) < DARK_MODE_THRESHOLD; + if (isDarkMode === isDarkLabel) { + return pathFill; + } + } + }; + Path.prototype.buildPath = function (ctx, shapeCfg, inBatch) { }; + Path.prototype.pathUpdated = function () { + this.__dirty &= ~SHAPE_CHANGED_BIT; + }; + Path.prototype.getUpdatedPathProxy = function (inBatch) { + !this.path && this.createPathProxy(); + this.path.beginPath(); + this.buildPath(this.path, this.shape, inBatch); + return this.path; + }; + Path.prototype.createPathProxy = function () { + this.path = new PathProxy(false); + }; + Path.prototype.hasStroke = function () { + var style = this.style; + var stroke = style.stroke; + return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0)); + }; + Path.prototype.hasFill = function () { + var style = this.style; + var fill = style.fill; + return fill != null && fill !== 'none'; + }; + Path.prototype.getBoundingRect = function () { + var rect = this._rect; + var style = this.style; + var needsUpdateRect = !rect; + if (needsUpdateRect) { + var firstInvoke = false; + if (!this.path) { + firstInvoke = true; + this.createPathProxy(); + } + var path = this.path; + if (firstInvoke || (this.__dirty & SHAPE_CHANGED_BIT)) { + path.beginPath(); + this.buildPath(path, this.shape, false); + this.pathUpdated(); + } + rect = path.getBoundingRect(); + } + this._rect = rect; + if (this.hasStroke() && this.path && this.path.len() > 0) { + var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone()); + if (this.__dirty || needsUpdateRect) { + rectWithStroke.copy(rect); + var lineScale = style.strokeNoScale ? this.getLineScale() : 1; + var w = style.lineWidth; + if (!this.hasFill()) { + var strokeContainThreshold = this.strokeContainThreshold; + w = Math.max(w, strokeContainThreshold == null ? 4 : strokeContainThreshold); + } + if (lineScale > 1e-10) { + rectWithStroke.width += w / lineScale; + rectWithStroke.height += w / lineScale; + rectWithStroke.x -= w / lineScale / 2; + rectWithStroke.y -= w / lineScale / 2; + } + } + return rectWithStroke; + } + return rect; + }; + Path.prototype.contain = function (x, y) { + var localPos = this.transformCoordToLocal(x, y); + var rect = this.getBoundingRect(); + var style = this.style; + x = localPos[0]; + y = localPos[1]; + if (rect.contain(x, y)) { + var pathProxy = this.path; + if (this.hasStroke()) { + var lineWidth = style.lineWidth; + var lineScale = style.strokeNoScale ? this.getLineScale() : 1; + if (lineScale > 1e-10) { + if (!this.hasFill()) { + lineWidth = Math.max(lineWidth, this.strokeContainThreshold); + } + if (containStroke$4(pathProxy, lineWidth / lineScale, x, y)) { + return true; + } + } + } + if (this.hasFill()) { + return contain(pathProxy, x, y); + } + } + return false; + }; + Path.prototype.dirtyShape = function () { + this.__dirty |= SHAPE_CHANGED_BIT; + if (this._rect) { + this._rect = null; + } + if (this._decalEl) { + this._decalEl.dirtyShape(); + } + this.markRedraw(); + }; + Path.prototype.dirty = function () { + this.dirtyStyle(); + this.dirtyShape(); + }; + Path.prototype.animateShape = function (loop) { + return this.animate('shape', loop); + }; + Path.prototype.updateDuringAnimation = function (targetKey) { + if (targetKey === 'style') { + this.dirtyStyle(); + } + else if (targetKey === 'shape') { + this.dirtyShape(); + } + else { + this.markRedraw(); + } + }; + Path.prototype.attrKV = function (key, value) { + if (key === 'shape') { + this.setShape(value); + } + else { + _super.prototype.attrKV.call(this, key, value); + } + }; + Path.prototype.setShape = function (keyOrObj, value) { + var shape = this.shape; + if (!shape) { + shape = this.shape = {}; + } + if (typeof keyOrObj === 'string') { + shape[keyOrObj] = value; + } + else { + extend(shape, keyOrObj); + } + this.dirtyShape(); + return this; + }; + Path.prototype.shapeChanged = function () { + return !!(this.__dirty & SHAPE_CHANGED_BIT); + }; + Path.prototype.createStyle = function (obj) { + return createObject(DEFAULT_PATH_STYLE, obj); + }; + Path.prototype._innerSaveToNormal = function (toState) { + _super.prototype._innerSaveToNormal.call(this, toState); + var normalState = this._normalState; + if (toState.shape && !normalState.shape) { + normalState.shape = extend({}, this.shape); + } + }; + Path.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) { + _super.prototype._applyStateObj.call(this, stateName, state, normalState, keepCurrentStates, transition, animationCfg); + var needsRestoreToNormal = !(state && keepCurrentStates); + var targetShape; + if (state && state.shape) { + if (transition) { + if (keepCurrentStates) { + targetShape = state.shape; + } + else { + targetShape = extend({}, normalState.shape); + extend(targetShape, state.shape); + } + } + else { + targetShape = extend({}, keepCurrentStates ? this.shape : normalState.shape); + extend(targetShape, state.shape); + } + } + else if (needsRestoreToNormal) { + targetShape = normalState.shape; + } + if (targetShape) { + if (transition) { + this.shape = extend({}, this.shape); + var targetShapePrimaryProps = {}; + var shapeKeys = keys(targetShape); + for (var i = 0; i < shapeKeys.length; i++) { + var key = shapeKeys[i]; + if (typeof targetShape[key] === 'object') { + this.shape[key] = targetShape[key]; + } + else { + targetShapePrimaryProps[key] = targetShape[key]; + } + } + this._transitionState(stateName, { + shape: targetShapePrimaryProps + }, animationCfg); + } + else { + this.shape = targetShape; + this.dirtyShape(); + } + } + }; + Path.prototype._mergeStates = function (states) { + var mergedState = _super.prototype._mergeStates.call(this, states); + var mergedShape; + for (var i = 0; i < states.length; i++) { + var state = states[i]; + if (state.shape) { + mergedShape = mergedShape || {}; + this._mergeStyle(mergedShape, state.shape); + } + } + if (mergedShape) { + mergedState.shape = mergedShape; + } + return mergedState; + }; + Path.prototype.getAnimationStyleProps = function () { + return DEFAULT_PATH_ANIMATION_PROPS; + }; + Path.prototype.isZeroArea = function () { + return false; + }; + Path.extend = function (defaultProps) { + var Sub = (function (_super) { + __extends(Sub, _super); + function Sub(opts) { + var _this = _super.call(this, opts) || this; + defaultProps.init && defaultProps.init.call(_this, opts); + return _this; + } + Sub.prototype.getDefaultStyle = function () { + return clone(defaultProps.style); + }; + Sub.prototype.getDefaultShape = function () { + return clone(defaultProps.shape); + }; + return Sub; + }(Path)); + for (var key in defaultProps) { + if (typeof defaultProps[key] === 'function') { + Sub.prototype[key] = defaultProps[key]; + } + } + return Sub; + }; + Path.initDefaultProps = (function () { + var pathProto = Path.prototype; + pathProto.type = 'path'; + pathProto.strokeContainThreshold = 5; + pathProto.segmentIgnoreThreshold = 0; + pathProto.subPixelOptimize = false; + pathProto.autoBatch = false; + pathProto.__dirty = REDRAW_BIT | STYLE_CHANGED_BIT | SHAPE_CHANGED_BIT; + })(); + return Path; + }(Displayable)); + + var DEFAULT_TSPAN_STYLE = defaults({ + strokeFirst: true, + font: DEFAULT_FONT, + x: 0, + y: 0, + textAlign: 'left', + textBaseline: 'top', + miterLimit: 2 + }, DEFAULT_PATH_STYLE); + var TSpan = (function (_super) { + __extends(TSpan, _super); + function TSpan() { + return _super !== null && _super.apply(this, arguments) || this; + } + TSpan.prototype.hasStroke = function () { + var style = this.style; + var stroke = style.stroke; + return stroke != null && stroke !== 'none' && style.lineWidth > 0; + }; + TSpan.prototype.hasFill = function () { + var style = this.style; + var fill = style.fill; + return fill != null && fill !== 'none'; + }; + TSpan.prototype.createStyle = function (obj) { + return createObject(DEFAULT_TSPAN_STYLE, obj); + }; + TSpan.prototype.setBoundingRect = function (rect) { + this._rect = rect; + }; + TSpan.prototype.getBoundingRect = function () { + var style = this.style; + if (!this._rect) { + var text = style.text; + text != null ? (text += '') : (text = ''); + var rect = getBoundingRect(text, style.font, style.textAlign, style.textBaseline); + rect.x += style.x || 0; + rect.y += style.y || 0; + if (this.hasStroke()) { + var w = style.lineWidth; + rect.x -= w / 2; + rect.y -= w / 2; + rect.width += w; + rect.height += w; + } + this._rect = rect; + } + return this._rect; + }; + TSpan.initDefaultProps = (function () { + var tspanProto = TSpan.prototype; + tspanProto.dirtyRectTolerance = 10; + })(); + return TSpan; + }(Displayable)); + TSpan.prototype.type = 'tspan'; + + var DEFAULT_IMAGE_STYLE = defaults({ + x: 0, + y: 0 + }, DEFAULT_COMMON_STYLE); + var DEFAULT_IMAGE_ANIMATION_PROPS = { + style: defaults({ + x: true, + y: true, + width: true, + height: true, + sx: true, + sy: true, + sWidth: true, + sHeight: true + }, DEFAULT_COMMON_ANIMATION_PROPS.style) + }; + function isImageLike(source) { + return !!(source + && typeof source !== 'string' + && source.width && source.height); + } + var ZRImage = (function (_super) { + __extends(ZRImage, _super); + function ZRImage() { + return _super !== null && _super.apply(this, arguments) || this; + } + ZRImage.prototype.createStyle = function (obj) { + return createObject(DEFAULT_IMAGE_STYLE, obj); + }; + ZRImage.prototype._getSize = function (dim) { + var style = this.style; + var size = style[dim]; + if (size != null) { + return size; + } + var imageSource = isImageLike(style.image) + ? style.image : this.__image; + if (!imageSource) { + return 0; + } + var otherDim = dim === 'width' ? 'height' : 'width'; + var otherDimSize = style[otherDim]; + if (otherDimSize == null) { + return imageSource[dim]; + } + else { + return imageSource[dim] / imageSource[otherDim] * otherDimSize; + } + }; + ZRImage.prototype.getWidth = function () { + return this._getSize('width'); + }; + ZRImage.prototype.getHeight = function () { + return this._getSize('height'); + }; + ZRImage.prototype.getAnimationStyleProps = function () { + return DEFAULT_IMAGE_ANIMATION_PROPS; + }; + ZRImage.prototype.getBoundingRect = function () { + var style = this.style; + if (!this._rect) { + this._rect = new BoundingRect(style.x || 0, style.y || 0, this.getWidth(), this.getHeight()); + } + return this._rect; + }; + return ZRImage; + }(Displayable)); + ZRImage.prototype.type = 'image'; + + function buildPath(ctx, shape) { + var x = shape.x; + var y = shape.y; + var width = shape.width; + var height = shape.height; + var r = shape.r; + var r1; + var r2; + var r3; + var r4; + if (width < 0) { + x = x + width; + width = -width; + } + if (height < 0) { + y = y + height; + height = -height; + } + if (typeof r === 'number') { + r1 = r2 = r3 = r4 = r; + } + else if (r instanceof Array) { + if (r.length === 1) { + r1 = r2 = r3 = r4 = r[0]; + } + else if (r.length === 2) { + r1 = r3 = r[0]; + r2 = r4 = r[1]; + } + else if (r.length === 3) { + r1 = r[0]; + r2 = r4 = r[1]; + r3 = r[2]; + } + else { + r1 = r[0]; + r2 = r[1]; + r3 = r[2]; + r4 = r[3]; + } + } + else { + r1 = r2 = r3 = r4 = 0; + } + var total; + if (r1 + r2 > width) { + total = r1 + r2; + r1 *= width / total; + r2 *= width / total; + } + if (r3 + r4 > width) { + total = r3 + r4; + r3 *= width / total; + r4 *= width / total; + } + if (r2 + r3 > height) { + total = r2 + r3; + r2 *= height / total; + r3 *= height / total; + } + if (r1 + r4 > height) { + total = r1 + r4; + r1 *= height / total; + r4 *= height / total; + } + ctx.moveTo(x + r1, y); + ctx.lineTo(x + width - r2, y); + r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0); + ctx.lineTo(x + width, y + height - r3); + r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2); + ctx.lineTo(x + r4, y + height); + r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI); + ctx.lineTo(x, y + r1); + r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5); + } + + var round$1 = Math.round; + function subPixelOptimizeLine(outputShape, inputShape, style) { + if (!inputShape) { + return; + } + var x1 = inputShape.x1; + var x2 = inputShape.x2; + var y1 = inputShape.y1; + var y2 = inputShape.y2; + outputShape.x1 = x1; + outputShape.x2 = x2; + outputShape.y1 = y1; + outputShape.y2 = y2; + var lineWidth = style && style.lineWidth; + if (!lineWidth) { + return outputShape; + } + if (round$1(x1 * 2) === round$1(x2 * 2)) { + outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true); + } + if (round$1(y1 * 2) === round$1(y2 * 2)) { + outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true); + } + return outputShape; + } + function subPixelOptimizeRect(outputShape, inputShape, style) { + if (!inputShape) { + return; + } + var originX = inputShape.x; + var originY = inputShape.y; + var originWidth = inputShape.width; + var originHeight = inputShape.height; + outputShape.x = originX; + outputShape.y = originY; + outputShape.width = originWidth; + outputShape.height = originHeight; + var lineWidth = style && style.lineWidth; + if (!lineWidth) { + return outputShape; + } + outputShape.x = subPixelOptimize(originX, lineWidth, true); + outputShape.y = subPixelOptimize(originY, lineWidth, true); + outputShape.width = Math.max(subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x, originWidth === 0 ? 0 : 1); + outputShape.height = Math.max(subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y, originHeight === 0 ? 0 : 1); + return outputShape; + } + function subPixelOptimize(position, lineWidth, positiveOrNegative) { + if (!lineWidth) { + return position; + } + var doubledPosition = round$1(position * 2); + return (doubledPosition + round$1(lineWidth)) % 2 === 0 + ? doubledPosition / 2 + : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2; + } + + var RectShape = (function () { + function RectShape() { + this.x = 0; + this.y = 0; + this.width = 0; + this.height = 0; + } + return RectShape; + }()); + var subPixelOptimizeOutputShape = {}; + var Rect = (function (_super) { + __extends(Rect, _super); + function Rect(opts) { + return _super.call(this, opts) || this; + } + Rect.prototype.getDefaultShape = function () { + return new RectShape(); + }; + Rect.prototype.buildPath = function (ctx, shape) { + var x; + var y; + var width; + var height; + if (this.subPixelOptimize) { + var optimizedShape = subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style); + x = optimizedShape.x; + y = optimizedShape.y; + width = optimizedShape.width; + height = optimizedShape.height; + optimizedShape.r = shape.r; + shape = optimizedShape; + } + else { + x = shape.x; + y = shape.y; + width = shape.width; + height = shape.height; + } + if (!shape.r) { + ctx.rect(x, y, width, height); + } + else { + buildPath(ctx, shape); + } + }; + Rect.prototype.isZeroArea = function () { + return !this.shape.width || !this.shape.height; + }; + return Rect; + }(Path)); + Rect.prototype.type = 'rect'; + + var DEFAULT_RICH_TEXT_COLOR = { + fill: '#000' + }; + var DEFAULT_STROKE_LINE_WIDTH = 2; + var DEFAULT_TEXT_ANIMATION_PROPS = { + style: defaults({ + fill: true, + stroke: true, + fillOpacity: true, + strokeOpacity: true, + lineWidth: true, + fontSize: true, + lineHeight: true, + width: true, + height: true, + textShadowColor: true, + textShadowBlur: true, + textShadowOffsetX: true, + textShadowOffsetY: true, + backgroundColor: true, + padding: true, + borderColor: true, + borderWidth: true, + borderRadius: true + }, DEFAULT_COMMON_ANIMATION_PROPS.style) + }; + var ZRText = (function (_super) { + __extends(ZRText, _super); + function ZRText(opts) { + var _this = _super.call(this) || this; + _this.type = 'text'; + _this._children = []; + _this._defaultStyle = DEFAULT_RICH_TEXT_COLOR; + _this.attr(opts); + return _this; + } + ZRText.prototype.childrenRef = function () { + return this._children; + }; + ZRText.prototype.update = function () { + _super.prototype.update.call(this); + if (this.styleChanged()) { + this._updateSubTexts(); + } + for (var i = 0; i < this._children.length; i++) { + var child = this._children[i]; + child.zlevel = this.zlevel; + child.z = this.z; + child.z2 = this.z2; + child.culling = this.culling; + child.cursor = this.cursor; + child.invisible = this.invisible; + } + }; + ZRText.prototype.updateTransform = function () { + var innerTransformable = this.innerTransformable; + if (innerTransformable) { + innerTransformable.updateTransform(); + if (innerTransformable.transform) { + this.transform = innerTransformable.transform; + } + } + else { + _super.prototype.updateTransform.call(this); + } + }; + ZRText.prototype.getLocalTransform = function (m) { + var innerTransformable = this.innerTransformable; + return innerTransformable + ? innerTransformable.getLocalTransform(m) + : _super.prototype.getLocalTransform.call(this, m); + }; + ZRText.prototype.getComputedTransform = function () { + if (this.__hostTarget) { + this.__hostTarget.getComputedTransform(); + this.__hostTarget.updateInnerText(true); + } + return _super.prototype.getComputedTransform.call(this); + }; + ZRText.prototype._updateSubTexts = function () { + this._childCursor = 0; + normalizeTextStyle(this.style); + this.style.rich + ? this._updateRichTexts() + : this._updatePlainTexts(); + this._children.length = this._childCursor; + this.styleUpdated(); + }; + ZRText.prototype.addSelfToZr = function (zr) { + _super.prototype.addSelfToZr.call(this, zr); + for (var i = 0; i < this._children.length; i++) { + this._children[i].__zr = zr; + } + }; + ZRText.prototype.removeSelfFromZr = function (zr) { + _super.prototype.removeSelfFromZr.call(this, zr); + for (var i = 0; i < this._children.length; i++) { + this._children[i].__zr = null; + } + }; + ZRText.prototype.getBoundingRect = function () { + if (this.styleChanged()) { + this._updateSubTexts(); + } + if (!this._rect) { + var tmpRect = new BoundingRect(0, 0, 0, 0); + var children = this._children; + var tmpMat = []; + var rect = null; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var childRect = child.getBoundingRect(); + var transform = child.getLocalTransform(tmpMat); + if (transform) { + tmpRect.copy(childRect); + tmpRect.applyTransform(transform); + rect = rect || tmpRect.clone(); + rect.union(tmpRect); + } + else { + rect = rect || childRect.clone(); + rect.union(childRect); + } + } + this._rect = rect || tmpRect; + } + return this._rect; + }; + ZRText.prototype.setDefaultTextStyle = function (defaultTextStyle) { + this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR; + }; + ZRText.prototype.setTextContent = function (textContent) { + throw new Error('Can\'t attach text on another text'); + }; + ZRText.prototype._mergeStyle = function (targetStyle, sourceStyle) { + if (!sourceStyle) { + return targetStyle; + } + var sourceRich = sourceStyle.rich; + var targetRich = targetStyle.rich || (sourceRich && {}); + extend(targetStyle, sourceStyle); + if (sourceRich && targetRich) { + this._mergeRich(targetRich, sourceRich); + targetStyle.rich = targetRich; + } + else if (targetRich) { + targetStyle.rich = targetRich; + } + return targetStyle; + }; + ZRText.prototype._mergeRich = function (targetRich, sourceRich) { + var richNames = keys(sourceRich); + for (var i = 0; i < richNames.length; i++) { + var richName = richNames[i]; + targetRich[richName] = targetRich[richName] || {}; + extend(targetRich[richName], sourceRich[richName]); + } + }; + ZRText.prototype.getAnimationStyleProps = function () { + return DEFAULT_TEXT_ANIMATION_PROPS; + }; + ZRText.prototype._getOrCreateChild = function (Ctor) { + var child = this._children[this._childCursor]; + if (!child || !(child instanceof Ctor)) { + child = new Ctor(); + } + this._children[this._childCursor++] = child; + child.__zr = this.__zr; + child.parent = this; + return child; + }; + ZRText.prototype._updatePlainTexts = function () { + var style = this.style; + var textFont = style.font || DEFAULT_FONT; + var textPadding = style.padding; + var text = getStyleText(style); + var contentBlock = parsePlainText(text, style); + var needDrawBg = needDrawBackground(style); + var bgColorDrawn = !!(style.backgroundColor); + var outerHeight = contentBlock.outerHeight; + var textLines = contentBlock.lines; + var lineHeight = contentBlock.lineHeight; + var defaultStyle = this._defaultStyle; + var baseX = style.x || 0; + var baseY = style.y || 0; + var textAlign = style.align || defaultStyle.align || 'left'; + var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top'; + var textX = baseX; + var textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign); + if (needDrawBg || textPadding) { + var outerWidth_1 = contentBlock.width; + textPadding && (outerWidth_1 += textPadding[1] + textPadding[3]); + var boxX = adjustTextX(baseX, outerWidth_1, textAlign); + var boxY = adjustTextY(baseY, outerHeight, verticalAlign); + needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth_1, outerHeight); + } + textY += lineHeight / 2; + if (textPadding) { + textX = getTextXForPadding(baseX, textAlign, textPadding); + if (verticalAlign === 'top') { + textY += textPadding[0]; + } + else if (verticalAlign === 'bottom') { + textY -= textPadding[2]; + } + } + var defaultLineWidth = 0; + var useDefaultFill = false; + var textFill = getFill('fill' in style + ? style.fill + : (useDefaultFill = true, defaultStyle.fill)); + var textStroke = getStroke('stroke' in style + ? style.stroke + : (!bgColorDrawn + && (!defaultStyle.autoStroke || useDefaultFill)) + ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke) + : null); + var hasShadow = style.textShadowBlur > 0; + var fixedBoundingRect = style.width != null + && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll'); + var calculatedLineHeight = contentBlock.calculatedLineHeight; + for (var i = 0; i < textLines.length; i++) { + var el = this._getOrCreateChild(TSpan); + var subElStyle = el.createStyle(); + el.useStyle(subElStyle); + subElStyle.text = textLines[i]; + subElStyle.x = textX; + subElStyle.y = textY; + if (textAlign) { + subElStyle.textAlign = textAlign; + } + subElStyle.textBaseline = 'middle'; + subElStyle.opacity = style.opacity; + subElStyle.strokeFirst = true; + if (hasShadow) { + subElStyle.shadowBlur = style.textShadowBlur || 0; + subElStyle.shadowColor = style.textShadowColor || 'transparent'; + subElStyle.shadowOffsetX = style.textShadowOffsetX || 0; + subElStyle.shadowOffsetY = style.textShadowOffsetY || 0; + } + if (textStroke) { + subElStyle.stroke = textStroke; + subElStyle.lineWidth = style.lineWidth || defaultLineWidth; + subElStyle.lineDash = style.lineDash; + subElStyle.lineDashOffset = style.lineDashOffset || 0; + } + if (textFill) { + subElStyle.fill = textFill; + } + subElStyle.font = textFont; + textY += lineHeight; + if (fixedBoundingRect) { + el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, style.width, subElStyle.textAlign), adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline), style.width, calculatedLineHeight)); + } + } + }; + ZRText.prototype._updateRichTexts = function () { + var style = this.style; + var text = getStyleText(style); + var contentBlock = parseRichText(text, style); + var contentWidth = contentBlock.width; + var outerWidth = contentBlock.outerWidth; + var outerHeight = contentBlock.outerHeight; + var textPadding = style.padding; + var baseX = style.x || 0; + var baseY = style.y || 0; + var defaultStyle = this._defaultStyle; + var textAlign = style.align || defaultStyle.align; + var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign; + var boxX = adjustTextX(baseX, outerWidth, textAlign); + var boxY = adjustTextY(baseY, outerHeight, verticalAlign); + var xLeft = boxX; + var lineTop = boxY; + if (textPadding) { + xLeft += textPadding[3]; + lineTop += textPadding[0]; + } + var xRight = xLeft + contentWidth; + if (needDrawBackground(style)) { + this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight); + } + var bgColorDrawn = !!(style.backgroundColor); + for (var i = 0; i < contentBlock.lines.length; i++) { + var line = contentBlock.lines[i]; + var tokens = line.tokens; + var tokenCount = tokens.length; + var lineHeight = line.lineHeight; + var remainedWidth = line.width; + var leftIndex = 0; + var lineXLeft = xLeft; + var lineXRight = xRight; + var rightIndex = tokenCount - 1; + var token = void 0; + while (leftIndex < tokenCount + && (token = tokens[leftIndex], !token.align || token.align === 'left')) { + this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn); + remainedWidth -= token.width; + lineXLeft += token.width; + leftIndex++; + } + while (rightIndex >= 0 + && (token = tokens[rightIndex], token.align === 'right')) { + this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn); + remainedWidth -= token.width; + lineXRight -= token.width; + rightIndex--; + } + lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2; + while (leftIndex <= rightIndex) { + token = tokens[leftIndex]; + this._placeToken(token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center', bgColorDrawn); + lineXLeft += token.width; + leftIndex++; + } + lineTop += lineHeight; + } + }; + ZRText.prototype._placeToken = function (token, style, lineHeight, lineTop, x, textAlign, parentBgColorDrawn) { + var tokenStyle = style.rich[token.styleName] || {}; + tokenStyle.text = token.text; + var verticalAlign = token.verticalAlign; + var y = lineTop + lineHeight / 2; + if (verticalAlign === 'top') { + y = lineTop + token.height / 2; + } + else if (verticalAlign === 'bottom') { + y = lineTop + lineHeight - token.height / 2; + } + var needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle); + needDrawBg && this._renderBackground(tokenStyle, style, textAlign === 'right' + ? x - token.width + : textAlign === 'center' + ? x - token.width / 2 + : x, y - token.height / 2, token.width, token.height); + var bgColorDrawn = !!tokenStyle.backgroundColor; + var textPadding = token.textPadding; + if (textPadding) { + x = getTextXForPadding(x, textAlign, textPadding); + y -= token.height / 2 - textPadding[0] - token.innerHeight / 2; + } + var el = this._getOrCreateChild(TSpan); + var subElStyle = el.createStyle(); + el.useStyle(subElStyle); + var defaultStyle = this._defaultStyle; + var useDefaultFill = false; + var defaultLineWidth = 0; + var textFill = getFill('fill' in tokenStyle ? tokenStyle.fill + : 'fill' in style ? style.fill + : (useDefaultFill = true, defaultStyle.fill)); + var textStroke = getStroke('stroke' in tokenStyle ? tokenStyle.stroke + : 'stroke' in style ? style.stroke + : (!bgColorDrawn + && !parentBgColorDrawn + && (!defaultStyle.autoStroke || useDefaultFill)) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke) + : null); + var hasShadow = tokenStyle.textShadowBlur > 0 + || style.textShadowBlur > 0; + subElStyle.text = token.text; + subElStyle.x = x; + subElStyle.y = y; + if (hasShadow) { + subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0; + subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent'; + subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0; + subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0; + } + subElStyle.textAlign = textAlign; + subElStyle.textBaseline = 'middle'; + subElStyle.font = token.font || DEFAULT_FONT; + subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1); + if (textStroke) { + subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth); + subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash); + subElStyle.lineDashOffset = style.lineDashOffset || 0; + subElStyle.stroke = textStroke; + } + if (textFill) { + subElStyle.fill = textFill; + } + var textWidth = token.contentWidth; + var textHeight = token.contentHeight; + el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign), adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline), textWidth, textHeight)); + }; + ZRText.prototype._renderBackground = function (style, topStyle, x, y, width, height) { + var textBackgroundColor = style.backgroundColor; + var textBorderWidth = style.borderWidth; + var textBorderColor = style.borderColor; + var isImageBg = textBackgroundColor && textBackgroundColor.image; + var isPlainOrGradientBg = textBackgroundColor && !isImageBg; + var textBorderRadius = style.borderRadius; + var self = this; + var rectEl; + var imgEl; + if (isPlainOrGradientBg || style.lineHeight || (textBorderWidth && textBorderColor)) { + rectEl = this._getOrCreateChild(Rect); + rectEl.useStyle(rectEl.createStyle()); + rectEl.style.fill = null; + var rectShape = rectEl.shape; + rectShape.x = x; + rectShape.y = y; + rectShape.width = width; + rectShape.height = height; + rectShape.r = textBorderRadius; + rectEl.dirtyShape(); + } + if (isPlainOrGradientBg) { + var rectStyle = rectEl.style; + rectStyle.fill = textBackgroundColor || null; + rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1); + } + else if (isImageBg) { + imgEl = this._getOrCreateChild(ZRImage); + imgEl.onload = function () { + self.dirtyStyle(); + }; + var imgStyle = imgEl.style; + imgStyle.image = textBackgroundColor.image; + imgStyle.x = x; + imgStyle.y = y; + imgStyle.width = width; + imgStyle.height = height; + } + if (textBorderWidth && textBorderColor) { + var rectStyle = rectEl.style; + rectStyle.lineWidth = textBorderWidth; + rectStyle.stroke = textBorderColor; + rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1); + rectStyle.lineDash = style.borderDash; + rectStyle.lineDashOffset = style.borderDashOffset || 0; + rectEl.strokeContainThreshold = 0; + if (rectEl.hasFill() && rectEl.hasStroke()) { + rectStyle.strokeFirst = true; + rectStyle.lineWidth *= 2; + } + } + var commonStyle = (rectEl || imgEl).style; + commonStyle.shadowBlur = style.shadowBlur || 0; + commonStyle.shadowColor = style.shadowColor || 'transparent'; + commonStyle.shadowOffsetX = style.shadowOffsetX || 0; + commonStyle.shadowOffsetY = style.shadowOffsetY || 0; + commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1); + }; + ZRText.makeFont = function (style) { + var font = ''; + if (style.fontSize || style.fontFamily || style.fontWeight) { + var fontSize = ''; + if (typeof style.fontSize === 'string' + && (style.fontSize.indexOf('px') !== -1 + || style.fontSize.indexOf('rem') !== -1 + || style.fontSize.indexOf('em') !== -1)) { + fontSize = style.fontSize; + } + else if (!isNaN(+style.fontSize)) { + fontSize = style.fontSize + 'px'; + } + else { + fontSize = '12px'; + } + font = [ + style.fontStyle, + style.fontWeight, + fontSize, + style.fontFamily || 'sans-serif' + ].join(' '); + } + return font && trim(font) || style.textFont || style.font; + }; + return ZRText; + }(Displayable)); + var VALID_TEXT_ALIGN = { left: true, right: 1, center: 1 }; + var VALID_TEXT_VERTICAL_ALIGN = { top: 1, bottom: 1, middle: 1 }; + function normalizeTextStyle(style) { + normalizeStyle(style); + each(style.rich, normalizeStyle); + return style; + } + function normalizeStyle(style) { + if (style) { + style.font = ZRText.makeFont(style); + var textAlign = style.align; + textAlign === 'middle' && (textAlign = 'center'); + style.align = (textAlign == null || VALID_TEXT_ALIGN[textAlign]) ? textAlign : 'left'; + var verticalAlign = style.verticalAlign; + verticalAlign === 'center' && (verticalAlign = 'middle'); + style.verticalAlign = (verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]) ? verticalAlign : 'top'; + var textPadding = style.padding; + if (textPadding) { + style.padding = normalizeCssArray(style.padding); + } + } + } + function getStroke(stroke, lineWidth) { + return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none') + ? null + : (stroke.image || stroke.colorStops) + ? '#000' + : stroke; + } + function getFill(fill) { + return (fill == null || fill === 'none') + ? null + : (fill.image || fill.colorStops) + ? '#000' + : fill; + } + function getTextXForPadding(x, textAlign, textPadding) { + return textAlign === 'right' + ? (x - textPadding[1]) + : textAlign === 'center' + ? (x + textPadding[3] / 2 - textPadding[1] / 2) + : (x + textPadding[3]); + } + function getStyleText(style) { + var text = style.text; + text != null && (text += ''); + return text; + } + function needDrawBackground(style) { + return !!(style.backgroundColor + || style.lineHeight + || (style.borderWidth && style.borderColor)); + } + + var getECData = makeInner(); + var setCommonECData = function (seriesIndex, dataType, dataIdx, el) { + if (el) { + var ecData = getECData(el); // Add data index and series index for indexing the data by element + // Useful in tooltip + + ecData.dataIndex = dataIdx; + ecData.dataType = dataType; + ecData.seriesIndex = seriesIndex; // TODO: not store dataIndex on children. + + if (el.type === 'group') { + el.traverse(function (child) { + var childECData = getECData(child); + childECData.seriesIndex = seriesIndex; + childECData.dataIndex = dataIdx; + childECData.dataType = dataType; + }); + } + } + }; + + var _highlightNextDigit = 1; + var _highlightKeyMap = {}; + var getSavedStates = makeInner(); + var HOVER_STATE_NORMAL = 0; + var HOVER_STATE_BLUR = 1; + var HOVER_STATE_EMPHASIS = 2; + var SPECIAL_STATES = ['emphasis', 'blur', 'select']; + var DISPLAY_STATES = ['normal', 'emphasis', 'blur', 'select']; + var Z2_EMPHASIS_LIFT = 10; + var Z2_SELECT_LIFT = 9; + var HIGHLIGHT_ACTION_TYPE = 'highlight'; + var DOWNPLAY_ACTION_TYPE = 'downplay'; + var SELECT_ACTION_TYPE = 'select'; + var UNSELECT_ACTION_TYPE = 'unselect'; + var TOGGLE_SELECT_ACTION_TYPE = 'toggleSelect'; + + function hasFillOrStroke(fillOrStroke) { + return fillOrStroke != null && fillOrStroke !== 'none'; + } // Most lifted color are duplicated. + + + var liftedColorCache = new LRU(100); + + function liftColor(color$1) { + if (typeof color$1 !== 'string') { + return color$1; + } + + var liftedColor = liftedColorCache.get(color$1); + + if (!liftedColor) { + liftedColor = lift(color$1, -0.1); + liftedColorCache.put(color$1, liftedColor); + } + + return liftedColor; + } + + function doChangeHoverState(el, stateName, hoverStateEnum) { + if (el.onHoverStateChange && (el.hoverState || 0) !== hoverStateEnum) { + el.onHoverStateChange(stateName); + } + + el.hoverState = hoverStateEnum; + } + + function singleEnterEmphasis(el) { + // Only mark the flag. + // States will be applied in the echarts.ts in next frame. + doChangeHoverState(el, 'emphasis', HOVER_STATE_EMPHASIS); + } + + function singleLeaveEmphasis(el) { + // Only mark the flag. + // States will be applied in the echarts.ts in next frame. + if (el.hoverState === HOVER_STATE_EMPHASIS) { + doChangeHoverState(el, 'normal', HOVER_STATE_NORMAL); + } + } + + function singleEnterBlur(el) { + doChangeHoverState(el, 'blur', HOVER_STATE_BLUR); + } + + function singleLeaveBlur(el) { + if (el.hoverState === HOVER_STATE_BLUR) { + doChangeHoverState(el, 'normal', HOVER_STATE_NORMAL); + } + } + + function singleEnterSelect(el) { + el.selected = true; + } + + function singleLeaveSelect(el) { + el.selected = false; + } + + function updateElementState(el, updater, commonParam) { + updater(el, commonParam); + } + + function traverseUpdateState(el, updater, commonParam) { + updateElementState(el, updater, commonParam); + el.isGroup && el.traverse(function (child) { + updateElementState(child, updater, commonParam); + }); + } + + function setStatesFlag(el, stateName) { + switch (stateName) { + case 'emphasis': + el.hoverState = HOVER_STATE_EMPHASIS; + break; + + case 'normal': + el.hoverState = HOVER_STATE_NORMAL; + break; + + case 'blur': + el.hoverState = HOVER_STATE_BLUR; + break; + + case 'select': + el.selected = true; + } + } + + function getFromStateStyle(el, props, toStateName, defaultValue) { + var style = el.style; + var fromState = {}; + + for (var i = 0; i < props.length; i++) { + var propName = props[i]; + var val = style[propName]; + fromState[propName] = val == null ? defaultValue && defaultValue[propName] : val; + } + + for (var i = 0; i < el.animators.length; i++) { + var animator = el.animators[i]; + + if (animator.__fromStateTransition // Dont consider the animation to emphasis state. + && animator.__fromStateTransition.indexOf(toStateName) < 0 && animator.targetName === 'style') { + animator.saveFinalToTarget(fromState, props); + } + } + + return fromState; + } + + function createEmphasisDefaultState(el, stateName, targetStates, state) { + var hasSelect = targetStates && indexOf(targetStates, 'select') >= 0; + var cloned = false; + + if (el instanceof Path) { + var store = getSavedStates(el); + var fromFill = hasSelect ? store.selectFill || store.normalFill : store.normalFill; + var fromStroke = hasSelect ? store.selectStroke || store.normalStroke : store.normalStroke; + + if (hasFillOrStroke(fromFill) || hasFillOrStroke(fromStroke)) { + state = state || {}; + var emphasisStyle = state.style || {}; // inherit case + + if (emphasisStyle.fill === 'inherit') { + cloned = true; + state = extend({}, state); + emphasisStyle = extend({}, emphasisStyle); + emphasisStyle.fill = fromFill; + } // Apply default color lift + else if (!hasFillOrStroke(emphasisStyle.fill) && hasFillOrStroke(fromFill)) { + cloned = true; // Not modify the original value. + + state = extend({}, state); + emphasisStyle = extend({}, emphasisStyle); // Already being applied 'emphasis'. DON'T lift color multiple times. + + emphasisStyle.fill = liftColor(fromFill); + } // Not highlight stroke if fill has been highlighted. + else if (!hasFillOrStroke(emphasisStyle.stroke) && hasFillOrStroke(fromStroke)) { + if (!cloned) { + state = extend({}, state); + emphasisStyle = extend({}, emphasisStyle); + } + + emphasisStyle.stroke = liftColor(fromStroke); + } + + state.style = emphasisStyle; + } + } + + if (state) { + // TODO Share with textContent? + if (state.z2 == null) { + if (!cloned) { + state = extend({}, state); + } + + var z2EmphasisLift = el.z2EmphasisLift; + state.z2 = el.z2 + (z2EmphasisLift != null ? z2EmphasisLift : Z2_EMPHASIS_LIFT); + } + } + + return state; + } + + function createSelectDefaultState(el, stateName, state) { + // const hasSelect = indexOf(el.currentStates, stateName) >= 0; + if (state) { + // TODO Share with textContent? + if (state.z2 == null) { + state = extend({}, state); + var z2SelectLift = el.z2SelectLift; + state.z2 = el.z2 + (z2SelectLift != null ? z2SelectLift : Z2_SELECT_LIFT); + } + } + + return state; + } + + function createBlurDefaultState(el, stateName, state) { + var hasBlur = indexOf(el.currentStates, stateName) >= 0; + var currentOpacity = el.style.opacity; + var fromState = !hasBlur ? getFromStateStyle(el, ['opacity'], stateName, { + opacity: 1 + }) : null; + state = state || {}; + var blurStyle = state.style || {}; + + if (blurStyle.opacity == null) { + // clone state + state = extend({}, state); + blurStyle = extend({ + // Already being applied 'emphasis'. DON'T mul opacity multiple times. + opacity: hasBlur ? currentOpacity : fromState.opacity * 0.1 + }, blurStyle); + state.style = blurStyle; + } + + return state; + } + + function elementStateProxy(stateName, targetStates) { + var state = this.states[stateName]; + + if (this.style) { + if (stateName === 'emphasis') { + return createEmphasisDefaultState(this, stateName, targetStates, state); + } else if (stateName === 'blur') { + return createBlurDefaultState(this, stateName, state); + } else if (stateName === 'select') { + return createSelectDefaultState(this, stateName, state); + } + } + + return state; + } + /**FI + * Set hover style (namely "emphasis style") of element. + * @param el Should not be `zrender/graphic/Group`. + * @param focus 'self' | 'selfInSeries' | 'series' + */ + + + function setDefaultStateProxy(el) { + el.stateProxy = elementStateProxy; + var textContent = el.getTextContent(); + var textGuide = el.getTextGuideLine(); + + if (textContent) { + textContent.stateProxy = elementStateProxy; + } + + if (textGuide) { + textGuide.stateProxy = elementStateProxy; + } + } + function enterEmphasisWhenMouseOver(el, e) { + !shouldSilent(el, e) // "emphasis" event highlight has higher priority than mouse highlight. + && !el.__highByOuter && traverseUpdateState(el, singleEnterEmphasis); + } + function leaveEmphasisWhenMouseOut(el, e) { + !shouldSilent(el, e) // "emphasis" event highlight has higher priority than mouse highlight. + && !el.__highByOuter && traverseUpdateState(el, singleLeaveEmphasis); + } + function enterEmphasis(el, highlightDigit) { + el.__highByOuter |= 1 << (highlightDigit || 0); + traverseUpdateState(el, singleEnterEmphasis); + } + function leaveEmphasis(el, highlightDigit) { + !(el.__highByOuter &= ~(1 << (highlightDigit || 0))) && traverseUpdateState(el, singleLeaveEmphasis); + } + function enterBlur(el) { + traverseUpdateState(el, singleEnterBlur); + } + function leaveBlur(el) { + traverseUpdateState(el, singleLeaveBlur); + } + function enterSelect(el) { + traverseUpdateState(el, singleEnterSelect); + } + function leaveSelect(el) { + traverseUpdateState(el, singleLeaveSelect); + } + + function shouldSilent(el, e) { + return el.__highDownSilentOnTouch && e.zrByTouch; + } + + function allLeaveBlur(api) { + var model = api.getModel(); + model.eachComponent(function (componentType, componentModel) { + var view = componentType === 'series' ? api.getViewOfSeriesModel(componentModel) : api.getViewOfComponentModel(componentModel); // Leave blur anyway + + view.group.traverse(function (child) { + singleLeaveBlur(child); + }); + }); + } + function blurSeries(targetSeriesIndex, focus, blurScope, api) { + var ecModel = api.getModel(); + blurScope = blurScope || 'coordinateSystem'; + + function leaveBlurOfIndices(data, dataIndices) { + for (var i = 0; i < dataIndices.length; i++) { + var itemEl = data.getItemGraphicEl(dataIndices[i]); + itemEl && leaveBlur(itemEl); + } + } + + if (targetSeriesIndex == null) { + return; + } + + if (!focus || focus === 'none') { + return; + } + + var targetSeriesModel = ecModel.getSeriesByIndex(targetSeriesIndex); + var targetCoordSys = targetSeriesModel.coordinateSystem; + + if (targetCoordSys && targetCoordSys.master) { + targetCoordSys = targetCoordSys.master; + } + + var blurredSeries = []; + ecModel.eachSeries(function (seriesModel) { + var sameSeries = targetSeriesModel === seriesModel; + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && coordSys.master) { + coordSys = coordSys.master; + } + + var sameCoordSys = coordSys && targetCoordSys ? coordSys === targetCoordSys : sameSeries; // If there is no coordinate system. use sameSeries instead. + + if (!( // Not blur other series if blurScope series + blurScope === 'series' && !sameSeries // Not blur other coordinate system if blurScope is coordinateSystem + || blurScope === 'coordinateSystem' && !sameCoordSys // Not blur self series if focus is series. + || focus === 'series' && sameSeries // TODO blurScope: coordinate system + )) { + var view = api.getViewOfSeriesModel(seriesModel); + view.group.traverse(function (child) { + singleEnterBlur(child); + }); + + if (isArrayLike(focus)) { + leaveBlurOfIndices(seriesModel.getData(), focus); + } else if (isObject(focus)) { + var dataTypes = keys(focus); + + for (var d = 0; d < dataTypes.length; d++) { + leaveBlurOfIndices(seriesModel.getData(dataTypes[d]), focus[dataTypes[d]]); + } + } + + blurredSeries.push(seriesModel); + } + }); + ecModel.eachComponent(function (componentType, componentModel) { + if (componentType === 'series') { + return; + } + + var view = api.getViewOfComponentModel(componentModel); + + if (view && view.blurSeries) { + view.blurSeries(blurredSeries, ecModel); + } + }); + } + function blurComponent(componentMainType, componentIndex, api) { + if (componentMainType == null || componentIndex == null) { + return; + } + + var componentModel = api.getModel().getComponent(componentMainType, componentIndex); + + if (!componentModel) { + return; + } + + var view = api.getViewOfComponentModel(componentModel); + + if (!view || !view.focusBlurEnabled) { + return; + } + + view.group.traverse(function (child) { + singleEnterBlur(child); + }); + } + function blurSeriesFromHighlightPayload(seriesModel, payload, api) { + var seriesIndex = seriesModel.seriesIndex; + var data = seriesModel.getData(payload.dataType); + var dataIndex = queryDataIndex(data, payload); // Pick the first one if there is multiple/none exists. + + dataIndex = (isArray(dataIndex) ? dataIndex[0] : dataIndex) || 0; + var el = data.getItemGraphicEl(dataIndex); + + if (!el) { + var count = data.count(); + var current = 0; // If data on dataIndex is NaN. + + while (!el && current < count) { + el = data.getItemGraphicEl(current++); + } + } + + if (el) { + var ecData = getECData(el); + blurSeries(seriesIndex, ecData.focus, ecData.blurScope, api); + } else { + // If there is no element put on the data. Try getting it from raw option + // TODO Should put it on seriesModel? + var focus_1 = seriesModel.get(['emphasis', 'focus']); + var blurScope = seriesModel.get(['emphasis', 'blurScope']); + + if (focus_1 != null) { + blurSeries(seriesIndex, focus_1, blurScope, api); + } + } + } + function findComponentHighDownDispatchers(componentMainType, componentIndex, name, api) { + var ret = { + focusSelf: false, + dispatchers: null + }; + + if (componentMainType == null || componentMainType === 'series' || componentIndex == null || name == null) { + return ret; + } + + var componentModel = api.getModel().getComponent(componentMainType, componentIndex); + + if (!componentModel) { + return ret; + } + + var view = api.getViewOfComponentModel(componentModel); + + if (!view || !view.findHighDownDispatchers) { + return ret; + } + + var dispatchers = view.findHighDownDispatchers(name); // At presnet, the component (like Geo) only blur inside itself. + // So we do not use `blurScope` in component. + + var focusSelf; + + for (var i = 0; i < dispatchers.length; i++) { + if ("development" !== 'production' && !isHighDownDispatcher(dispatchers[i])) { + error('param should be highDownDispatcher'); + } + + if (getECData(dispatchers[i]).focus === 'self') { + focusSelf = true; + break; + } + } + + return { + focusSelf: focusSelf, + dispatchers: dispatchers + }; + } + function handleGlobalMouseOverForHighDown(dispatcher, e, api) { + if ("development" !== 'production' && !isHighDownDispatcher(dispatcher)) { + error('param should be highDownDispatcher'); + } + + var ecData = getECData(dispatcher); + + var _a = findComponentHighDownDispatchers(ecData.componentMainType, ecData.componentIndex, ecData.componentHighDownName, api), + dispatchers = _a.dispatchers, + focusSelf = _a.focusSelf; // If `findHighDownDispatchers` is supported on the component, + // highlight/downplay elements with the same name. + + + if (dispatchers) { + if (focusSelf) { + blurComponent(ecData.componentMainType, ecData.componentIndex, api); + } + + each(dispatchers, function (dispatcher) { + return enterEmphasisWhenMouseOver(dispatcher, e); + }); + } else { + // Try blur all in the related series. Then emphasis the hoverred. + // TODO. progressive mode. + blurSeries(ecData.seriesIndex, ecData.focus, ecData.blurScope, api); + + if (ecData.focus === 'self') { + blurComponent(ecData.componentMainType, ecData.componentIndex, api); + } // Other than series, component that not support `findHighDownDispatcher` will + // also use it. But in this case, highlight/downplay are only supported in + // mouse hover but not in dispatchAction. + + + enterEmphasisWhenMouseOver(dispatcher, e); + } + } + function handleGlboalMouseOutForHighDown(dispatcher, e, api) { + if ("development" !== 'production' && !isHighDownDispatcher(dispatcher)) { + error('param should be highDownDispatcher'); + } + + allLeaveBlur(api); + var ecData = getECData(dispatcher); + var dispatchers = findComponentHighDownDispatchers(ecData.componentMainType, ecData.componentIndex, ecData.componentHighDownName, api).dispatchers; + + if (dispatchers) { + each(dispatchers, function (dispatcher) { + return leaveEmphasisWhenMouseOut(dispatcher, e); + }); + } else { + leaveEmphasisWhenMouseOut(dispatcher, e); + } + } + function toggleSelectionFromPayload(seriesModel, payload, api) { + if (!isSelectChangePayload(payload)) { + return; + } + + var dataType = payload.dataType; + var data = seriesModel.getData(dataType); + var dataIndex = queryDataIndex(data, payload); + + if (!isArray(dataIndex)) { + dataIndex = [dataIndex]; + } + + seriesModel[payload.type === TOGGLE_SELECT_ACTION_TYPE ? 'toggleSelect' : payload.type === SELECT_ACTION_TYPE ? 'select' : 'unselect'](dataIndex, dataType); + } + function updateSeriesElementSelection(seriesModel) { + var allData = seriesModel.getAllData(); + each(allData, function (_a) { + var data = _a.data, + type = _a.type; + data.eachItemGraphicEl(function (el, idx) { + seriesModel.isSelected(idx, type) ? enterSelect(el) : leaveSelect(el); + }); + }); + } + function getAllSelectedIndices(ecModel) { + var ret = []; + ecModel.eachSeries(function (seriesModel) { + var allData = seriesModel.getAllData(); + each(allData, function (_a) { + var data = _a.data, + type = _a.type; + var dataIndices = seriesModel.getSelectedDataIndices(); + + if (dataIndices.length > 0) { + var item = { + dataIndex: dataIndices, + seriesIndex: seriesModel.seriesIndex + }; + + if (type != null) { + item.dataType = type; + } + + ret.push(item); + } + }); + }); + return ret; + } + /** + * Enable the function that mouseover will trigger the emphasis state. + * + * NOTE: + * This function should be used on the element with dataIndex, seriesIndex. + * + */ + + function enableHoverEmphasis(el, focus, blurScope) { + setAsHighDownDispatcher(el, true); + traverseUpdateState(el, setDefaultStateProxy); + enableHoverFocus(el, focus, blurScope); + } + function enableHoverFocus(el, focus, blurScope) { + var ecData = getECData(el); + + if (focus != null) { + // TODO dataIndex may be set after this function. This check is not useful. + // if (ecData.dataIndex == null) { + // if (__DEV__) { + // console.warn('focus can only been set on element with dataIndex'); + // } + // } + // else { + ecData.focus = focus; + ecData.blurScope = blurScope; // } + } else if (ecData.focus) { + ecData.focus = null; + } + } + var OTHER_STATES = ['emphasis', 'blur', 'select']; + var defaultStyleGetterMap = { + itemStyle: 'getItemStyle', + lineStyle: 'getLineStyle', + areaStyle: 'getAreaStyle' + }; + /** + * Set emphasis/blur/selected states of element. + */ + + function setStatesStylesFromModel(el, itemModel, styleType, // default itemStyle + getter) { + styleType = styleType || 'itemStyle'; + + for (var i = 0; i < OTHER_STATES.length; i++) { + var stateName = OTHER_STATES[i]; + var model = itemModel.getModel([stateName, styleType]); + var state = el.ensureState(stateName); // Let it throw error if getterType is not found. + + state.style = getter ? getter(model) : model[defaultStyleGetterMap[styleType]](); + } + } + /** + * @parame el + * @param el.highDownSilentOnTouch + * In touch device, mouseover event will be trigger on touchstart event + * (see module:zrender/dom/HandlerProxy). By this mechanism, we can + * conveniently use hoverStyle when tap on touch screen without additional + * code for compatibility. + * But if the chart/component has select feature, which usually also use + * hoverStyle, there might be conflict between 'select-highlight' and + * 'hover-highlight' especially when roam is enabled (see geo for example). + * In this case, `highDownSilentOnTouch` should be used to disable + * hover-highlight on touch device. + * @param asDispatcher If `false`, do not set as "highDownDispatcher". + */ + + function setAsHighDownDispatcher(el, asDispatcher) { + var disable = asDispatcher === false; + var extendedEl = el; // Make `highDownSilentOnTouch` and `onStateChange` only work after + // `setAsHighDownDispatcher` called. Avoid it is modified by user unexpectedly. + + if (el.highDownSilentOnTouch) { + extendedEl.__highDownSilentOnTouch = el.highDownSilentOnTouch; + } // Simple optimize, since this method might be + // called for each elements of a group in some cases. + + + if (!disable || extendedEl.__highDownDispatcher) { + // Emphasis, normal can be triggered manually by API or other components like hover link. + // el[method]('emphasis', onElementEmphasisEvent)[method]('normal', onElementNormalEvent); + // Also keep previous record. + extendedEl.__highByOuter = extendedEl.__highByOuter || 0; + extendedEl.__highDownDispatcher = !disable; + } + } + function isHighDownDispatcher(el) { + return !!(el && el.__highDownDispatcher); + } + /** + * Enable component highlight/downplay features: + * + hover link (within the same name) + * + focus blur in component + */ + + function enableComponentHighDownFeatures(el, componentModel, componentHighDownName) { + var ecData = getECData(el); + ecData.componentMainType = componentModel.mainType; + ecData.componentIndex = componentModel.componentIndex; + ecData.componentHighDownName = componentHighDownName; + } + /** + * Support hightlight/downplay record on each elements. + * For the case: hover highlight/downplay (legend, visualMap, ...) and + * user triggerred hightlight/downplay should not conflict. + * Only all of the highlightDigit cleared, return to normal. + * @param {string} highlightKey + * @return {number} highlightDigit + */ + + function getHighlightDigit(highlightKey) { + var highlightDigit = _highlightKeyMap[highlightKey]; + + if (highlightDigit == null && _highlightNextDigit <= 32) { + highlightDigit = _highlightKeyMap[highlightKey] = _highlightNextDigit++; + } + + return highlightDigit; + } + function isSelectChangePayload(payload) { + var payloadType = payload.type; + return payloadType === SELECT_ACTION_TYPE || payloadType === UNSELECT_ACTION_TYPE || payloadType === TOGGLE_SELECT_ACTION_TYPE; + } + function isHighDownPayload(payload) { + var payloadType = payload.type; + return payloadType === HIGHLIGHT_ACTION_TYPE || payloadType === DOWNPLAY_ACTION_TYPE; + } + function savePathStates(el) { + var store = getSavedStates(el); + store.normalFill = el.style.fill; + store.normalStroke = el.style.stroke; + var selectState = el.states.select || {}; + store.selectFill = selectState.style && selectState.style.fill || null; + store.selectStroke = selectState.style && selectState.style.stroke || null; + } + + var CMD$2 = PathProxy.CMD; + var points = [[], [], []]; + var mathSqrt$2 = Math.sqrt; + var mathAtan2 = Math.atan2; + function transformPath(path, m) { + if (!m) { + return; + } + var data = path.data; + var len = path.len(); + var cmd; + var nPoint; + var i; + var j; + var k; + var p; + var M = CMD$2.M; + var C = CMD$2.C; + var L = CMD$2.L; + var R = CMD$2.R; + var A = CMD$2.A; + var Q = CMD$2.Q; + for (i = 0, j = 0; i < len;) { + cmd = data[i++]; + j = i; + nPoint = 0; + switch (cmd) { + case M: + nPoint = 1; + break; + case L: + nPoint = 1; + break; + case C: + nPoint = 3; + break; + case Q: + nPoint = 2; + break; + case A: + var x = m[4]; + var y = m[5]; + var sx = mathSqrt$2(m[0] * m[0] + m[1] * m[1]); + var sy = mathSqrt$2(m[2] * m[2] + m[3] * m[3]); + var angle = mathAtan2(-m[1] / sy, m[0] / sx); + data[i] *= sx; + data[i++] += x; + data[i] *= sy; + data[i++] += y; + data[i++] *= sx; + data[i++] *= sy; + data[i++] += angle; + data[i++] += angle; + i += 2; + j = i; + break; + case R: + p[0] = data[i++]; + p[1] = data[i++]; + applyTransform(p, p, m); + data[j++] = p[0]; + data[j++] = p[1]; + p[0] += data[i++]; + p[1] += data[i++]; + applyTransform(p, p, m); + data[j++] = p[0]; + data[j++] = p[1]; + } + for (k = 0; k < nPoint; k++) { + var p_1 = points[k]; + p_1[0] = data[i++]; + p_1[1] = data[i++]; + applyTransform(p_1, p_1, m); + data[j++] = p_1[0]; + data[j++] = p_1[1]; + } + } + path.increaseVersion(); + } + + var mathSqrt$3 = Math.sqrt; + var mathSin$2 = Math.sin; + var mathCos$2 = Math.cos; + var PI$1 = Math.PI; + function vMag(v) { + return Math.sqrt(v[0] * v[0] + v[1] * v[1]); + } + function vRatio(u, v) { + return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v)); + } + function vAngle(u, v) { + return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) + * Math.acos(vRatio(u, v)); + } + function processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) { + var psi = psiDeg * (PI$1 / 180.0); + var xp = mathCos$2(psi) * (x1 - x2) / 2.0 + + mathSin$2(psi) * (y1 - y2) / 2.0; + var yp = -1 * mathSin$2(psi) * (x1 - x2) / 2.0 + + mathCos$2(psi) * (y1 - y2) / 2.0; + var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry); + if (lambda > 1) { + rx *= mathSqrt$3(lambda); + ry *= mathSqrt$3(lambda); + } + var f = (fa === fs ? -1 : 1) + * mathSqrt$3((((rx * rx) * (ry * ry)) + - ((rx * rx) * (yp * yp)) + - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp) + + (ry * ry) * (xp * xp))) || 0; + var cxp = f * rx * yp / ry; + var cyp = f * -ry * xp / rx; + var cx = (x1 + x2) / 2.0 + + mathCos$2(psi) * cxp + - mathSin$2(psi) * cyp; + var cy = (y1 + y2) / 2.0 + + mathSin$2(psi) * cxp + + mathCos$2(psi) * cyp; + var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]); + var u = [(xp - cxp) / rx, (yp - cyp) / ry]; + var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry]; + var dTheta = vAngle(u, v); + if (vRatio(u, v) <= -1) { + dTheta = PI$1; + } + if (vRatio(u, v) >= 1) { + dTheta = 0; + } + if (dTheta < 0) { + var n = Math.round(dTheta / PI$1 * 1e6) / 1e6; + dTheta = PI$1 * 2 + (n % 2) * PI$1; + } + path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs); + } + var commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig; + var numberReg = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g; + function createPathProxyFromString(data) { + var path = new PathProxy(); + if (!data) { + return path; + } + var cpx = 0; + var cpy = 0; + var subpathX = cpx; + var subpathY = cpy; + var prevCmd; + var CMD = PathProxy.CMD; + var cmdList = data.match(commandReg); + if (!cmdList) { + return path; + } + for (var l = 0; l < cmdList.length; l++) { + var cmdText = cmdList[l]; + var cmdStr = cmdText.charAt(0); + var cmd = void 0; + var p = cmdText.match(numberReg) || []; + var pLen = p.length; + for (var i = 0; i < pLen; i++) { + p[i] = parseFloat(p[i]); + } + var off = 0; + while (off < pLen) { + var ctlPtx = void 0; + var ctlPty = void 0; + var rx = void 0; + var ry = void 0; + var psi = void 0; + var fa = void 0; + var fs = void 0; + var x1 = cpx; + var y1 = cpy; + var len = void 0; + var pathData = void 0; + switch (cmdStr) { + case 'l': + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'L': + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'm': + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.M; + path.addData(cmd, cpx, cpy); + subpathX = cpx; + subpathY = cpy; + cmdStr = 'l'; + break; + case 'M': + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.M; + path.addData(cmd, cpx, cpy); + subpathX = cpx; + subpathY = cpy; + cmdStr = 'L'; + break; + case 'h': + cpx += p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'H': + cpx = p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'v': + cpy += p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'V': + cpy = p[off++]; + cmd = CMD.L; + path.addData(cmd, cpx, cpy); + break; + case 'C': + cmd = CMD.C; + path.addData(cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]); + cpx = p[off - 2]; + cpy = p[off - 1]; + break; + case 'c': + cmd = CMD.C; + path.addData(cmd, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy); + cpx += p[off - 2]; + cpy += p[off - 1]; + break; + case 'S': + ctlPtx = cpx; + ctlPty = cpy; + len = path.len(); + pathData = path.data; + if (prevCmd === CMD.C) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cmd = CMD.C; + x1 = p[off++]; + y1 = p[off++]; + cpx = p[off++]; + cpy = p[off++]; + path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); + break; + case 's': + ctlPtx = cpx; + ctlPty = cpy; + len = path.len(); + pathData = path.data; + if (prevCmd === CMD.C) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cmd = CMD.C; + x1 = cpx + p[off++]; + y1 = cpy + p[off++]; + cpx += p[off++]; + cpy += p[off++]; + path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy); + break; + case 'Q': + x1 = p[off++]; + y1 = p[off++]; + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.Q; + path.addData(cmd, x1, y1, cpx, cpy); + break; + case 'q': + x1 = p[off++] + cpx; + y1 = p[off++] + cpy; + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.Q; + path.addData(cmd, x1, y1, cpx, cpy); + break; + case 'T': + ctlPtx = cpx; + ctlPty = cpy; + len = path.len(); + pathData = path.data; + if (prevCmd === CMD.Q) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.Q; + path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); + break; + case 't': + ctlPtx = cpx; + ctlPty = cpy; + len = path.len(); + pathData = path.data; + if (prevCmd === CMD.Q) { + ctlPtx += cpx - pathData[len - 4]; + ctlPty += cpy - pathData[len - 3]; + } + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.Q; + path.addData(cmd, ctlPtx, ctlPty, cpx, cpy); + break; + case 'A': + rx = p[off++]; + ry = p[off++]; + psi = p[off++]; + fa = p[off++]; + fs = p[off++]; + x1 = cpx, y1 = cpy; + cpx = p[off++]; + cpy = p[off++]; + cmd = CMD.A; + processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path); + break; + case 'a': + rx = p[off++]; + ry = p[off++]; + psi = p[off++]; + fa = p[off++]; + fs = p[off++]; + x1 = cpx, y1 = cpy; + cpx += p[off++]; + cpy += p[off++]; + cmd = CMD.A; + processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path); + break; + } + } + if (cmdStr === 'z' || cmdStr === 'Z') { + cmd = CMD.Z; + path.addData(cmd); + cpx = subpathX; + cpy = subpathY; + } + prevCmd = cmd; + } + path.toStatic(); + return path; + } + var SVGPath = (function (_super) { + __extends(SVGPath, _super); + function SVGPath() { + return _super !== null && _super.apply(this, arguments) || this; + } + SVGPath.prototype.applyTransform = function (m) { }; + return SVGPath; + }(Path)); + function isPathProxy(path) { + return path.setData != null; + } + function createPathOptions(str, opts) { + var pathProxy = createPathProxyFromString(str); + var innerOpts = extend({}, opts); + innerOpts.buildPath = function (path) { + if (isPathProxy(path)) { + path.setData(pathProxy.data); + var ctx = path.getContext(); + if (ctx) { + path.rebuildPath(ctx, 1); + } + } + else { + var ctx = path; + pathProxy.rebuildPath(ctx, 1); + } + }; + innerOpts.applyTransform = function (m) { + transformPath(pathProxy, m); + this.dirtyShape(); + }; + return innerOpts; + } + function createFromString(str, opts) { + return new SVGPath(createPathOptions(str, opts)); + } + function extendFromString(str, defaultOpts) { + var innerOpts = createPathOptions(str, defaultOpts); + var Sub = (function (_super) { + __extends(Sub, _super); + function Sub(opts) { + var _this = _super.call(this, opts) || this; + _this.applyTransform = innerOpts.applyTransform; + _this.buildPath = innerOpts.buildPath; + return _this; + } + return Sub; + }(SVGPath)); + return Sub; + } + function mergePath(pathEls, opts) { + var pathList = []; + var len = pathEls.length; + for (var i = 0; i < len; i++) { + var pathEl = pathEls[i]; + pathList.push(pathEl.getUpdatedPathProxy(true)); + } + var pathBundle = new Path(opts); + pathBundle.createPathProxy(); + pathBundle.buildPath = function (path) { + if (isPathProxy(path)) { + path.appendPath(pathList); + var ctx = path.getContext(); + if (ctx) { + path.rebuildPath(ctx, 1); + } + } + }; + return pathBundle; + } + function clonePath(sourcePath, opts) { + opts = opts || {}; + var path = new Path(); + if (sourcePath.shape) { + path.setShape(sourcePath.shape); + } + path.setStyle(sourcePath.style); + if (opts.bakeTransform) { + transformPath(path.path, sourcePath.getComputedTransform()); + } + else { + if (opts.toLocal) { + path.setLocalTransform(sourcePath.getComputedTransform()); + } + else { + path.copyTransform(sourcePath); + } + } + path.buildPath = sourcePath.buildPath; + path.applyTransform = path.applyTransform; + path.z = sourcePath.z; + path.z2 = sourcePath.z2; + path.zlevel = sourcePath.zlevel; + return path; + } + + var CircleShape = (function () { + function CircleShape() { + this.cx = 0; + this.cy = 0; + this.r = 0; + } + return CircleShape; + }()); + var Circle = (function (_super) { + __extends(Circle, _super); + function Circle(opts) { + return _super.call(this, opts) || this; + } + Circle.prototype.getDefaultShape = function () { + return new CircleShape(); + }; + Circle.prototype.buildPath = function (ctx, shape, inBundle) { + if (inBundle) { + ctx.moveTo(shape.cx + shape.r, shape.cy); + } + ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2); + }; + return Circle; + }(Path)); + Circle.prototype.type = 'circle'; + + var EllipseShape = (function () { + function EllipseShape() { + this.cx = 0; + this.cy = 0; + this.rx = 0; + this.ry = 0; + } + return EllipseShape; + }()); + var Ellipse = (function (_super) { + __extends(Ellipse, _super); + function Ellipse(opts) { + return _super.call(this, opts) || this; + } + Ellipse.prototype.getDefaultShape = function () { + return new EllipseShape(); + }; + Ellipse.prototype.buildPath = function (ctx, shape) { + var k = 0.5522848; + var x = shape.cx; + var y = shape.cy; + var a = shape.rx; + var b = shape.ry; + var ox = a * k; + var oy = b * k; + ctx.moveTo(x - a, y); + ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b); + ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y); + ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b); + ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y); + ctx.closePath(); + }; + return Ellipse; + }(Path)); + Ellipse.prototype.type = 'ellipse'; + + var PI$2 = Math.PI; + var PI2$5 = PI$2 * 2; + var mathSin$3 = Math.sin; + var mathCos$3 = Math.cos; + var mathACos = Math.acos; + var mathATan2 = Math.atan2; + var mathAbs$1 = Math.abs; + var mathSqrt$4 = Math.sqrt; + var mathMax$3 = Math.max; + var mathMin$3 = Math.min; + var e = 1e-4; + function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { + var x10 = x1 - x0; + var y10 = y1 - y0; + var x32 = x3 - x2; + var y32 = y3 - y2; + var t = y32 * x10 - x32 * y10; + if (t * t < e) { + return; + } + t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t; + return [x0 + t * x10, y0 + t * y10]; + } + function computeCornerTangents(x0, y0, x1, y1, radius, cr, clockwise) { + var x01 = x0 - x1; + var y01 = y0 - y1; + var lo = (clockwise ? cr : -cr) / mathSqrt$4(x01 * x01 + y01 * y01); + var ox = lo * y01; + var oy = -lo * x01; + var x11 = x0 + ox; + var y11 = y0 + oy; + var x10 = x1 + ox; + var y10 = y1 + oy; + var x00 = (x11 + x10) / 2; + var y00 = (y11 + y10) / 2; + var dx = x10 - x11; + var dy = y10 - y11; + var d2 = dx * dx + dy * dy; + var r = radius - cr; + var s = x11 * y10 - x10 * y11; + var d = (dy < 0 ? -1 : 1) * mathSqrt$4(mathMax$3(0, r * r * d2 - s * s)); + var cx0 = (s * dy - dx * d) / d2; + var cy0 = (-s * dx - dy * d) / d2; + var cx1 = (s * dy + dx * d) / d2; + var cy1 = (-s * dx + dy * d) / d2; + var dx0 = cx0 - x00; + var dy0 = cy0 - y00; + var dx1 = cx1 - x00; + var dy1 = cy1 - y00; + if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) { + cx0 = cx1; + cy0 = cy1; + } + return { + cx: cx0, + cy: cy0, + x01: -ox, + y01: -oy, + x11: cx0 * (radius / r - 1), + y11: cy0 * (radius / r - 1) + }; + } + function buildPath$1(ctx, shape) { + var radius = mathMax$3(shape.r, 0); + var innerRadius = mathMax$3(shape.r0 || 0, 0); + var hasRadius = radius > 0; + var hasInnerRadius = innerRadius > 0; + if (!hasRadius && !hasInnerRadius) { + return; + } + if (!hasRadius) { + radius = innerRadius; + innerRadius = 0; + } + if (innerRadius > radius) { + var tmp = radius; + radius = innerRadius; + innerRadius = tmp; + } + var clockwise = !!shape.clockwise; + var startAngle = shape.startAngle; + var endAngle = shape.endAngle; + var arc; + if (startAngle === endAngle) { + arc = 0; + } + else { + var tmpAngles = [startAngle, endAngle]; + normalizeArcAngles(tmpAngles, !clockwise); + arc = mathAbs$1(tmpAngles[0] - tmpAngles[1]); + } + var x = shape.cx; + var y = shape.cy; + var cornerRadius = shape.cornerRadius || 0; + var innerCornerRadius = shape.innerCornerRadius || 0; + if (!(radius > e)) { + ctx.moveTo(x, y); + } + else if (arc > PI2$5 - e) { + ctx.moveTo(x + radius * mathCos$3(startAngle), y + radius * mathSin$3(startAngle)); + ctx.arc(x, y, radius, startAngle, endAngle, !clockwise); + if (innerRadius > e) { + ctx.moveTo(x + innerRadius * mathCos$3(endAngle), y + innerRadius * mathSin$3(endAngle)); + ctx.arc(x, y, innerRadius, endAngle, startAngle, clockwise); + } + } + else { + var halfRd = mathAbs$1(radius - innerRadius) / 2; + var cr = mathMin$3(halfRd, cornerRadius); + var icr = mathMin$3(halfRd, innerCornerRadius); + var cr0 = icr; + var cr1 = cr; + var xrs = radius * mathCos$3(startAngle); + var yrs = radius * mathSin$3(startAngle); + var xire = innerRadius * mathCos$3(endAngle); + var yire = innerRadius * mathSin$3(endAngle); + var xre = void 0; + var yre = void 0; + var xirs = void 0; + var yirs = void 0; + if (cr > e || icr > e) { + xre = radius * mathCos$3(endAngle); + yre = radius * mathSin$3(endAngle); + xirs = innerRadius * mathCos$3(startAngle); + yirs = innerRadius * mathSin$3(startAngle); + if (arc < PI$2) { + var it_1 = intersect(xrs, yrs, xirs, yirs, xre, yre, xire, yire); + if (it_1) { + var x0 = xrs - it_1[0]; + var y0 = yrs - it_1[1]; + var x1 = xre - it_1[0]; + var y1 = yre - it_1[1]; + var a = 1 / mathSin$3(mathACos((x0 * x1 + y0 * y1) / (mathSqrt$4(x0 * x0 + y0 * y0) * mathSqrt$4(x1 * x1 + y1 * y1))) / 2); + var b = mathSqrt$4(it_1[0] * it_1[0] + it_1[1] * it_1[1]); + cr0 = mathMin$3(icr, (innerRadius - b) / (a - 1)); + cr1 = mathMin$3(cr, (radius - b) / (a + 1)); + } + } + } + if (!(arc > e)) { + ctx.moveTo(x + xrs, y + yrs); + } + else if (cr1 > e) { + var ct0 = computeCornerTangents(xirs, yirs, xrs, yrs, radius, cr1, clockwise); + var ct1 = computeCornerTangents(xre, yre, xire, yire, radius, cr1, clockwise); + ctx.moveTo(x + ct0.cx + ct0.x01, y + ct0.cy + ct0.y01); + if (cr1 < cr) { + ctx.arc(x + ct0.cx, y + ct0.cy, cr1, mathATan2(ct0.y01, ct0.x01), mathATan2(ct1.y01, ct1.x01), !clockwise); + } + else { + ctx.arc(x + ct0.cx, y + ct0.cy, cr1, mathATan2(ct0.y01, ct0.x01), mathATan2(ct0.y11, ct0.x11), !clockwise); + ctx.arc(x, y, radius, mathATan2(ct0.cy + ct0.y11, ct0.cx + ct0.x11), mathATan2(ct1.cy + ct1.y11, ct1.cx + ct1.x11), !clockwise); + ctx.arc(x + ct1.cx, y + ct1.cy, cr1, mathATan2(ct1.y11, ct1.x11), mathATan2(ct1.y01, ct1.x01), !clockwise); + } + } + else { + ctx.moveTo(x + xrs, y + yrs); + ctx.arc(x, y, radius, startAngle, endAngle, !clockwise); + } + if (!(innerRadius > e) || !(arc > e)) { + ctx.lineTo(x + xire, y + yire); + } + else if (cr0 > e) { + var ct0 = computeCornerTangents(xire, yire, xre, yre, innerRadius, -cr0, clockwise); + var ct1 = computeCornerTangents(xrs, yrs, xirs, yirs, innerRadius, -cr0, clockwise); + ctx.lineTo(x + ct0.cx + ct0.x01, y + ct0.cy + ct0.y01); + if (cr0 < icr) { + ctx.arc(x + ct0.cx, y + ct0.cy, cr0, mathATan2(ct0.y01, ct0.x01), mathATan2(ct1.y01, ct1.x01), !clockwise); + } + else { + ctx.arc(x + ct0.cx, y + ct0.cy, cr0, mathATan2(ct0.y01, ct0.x01), mathATan2(ct0.y11, ct0.x11), !clockwise); + ctx.arc(x, y, innerRadius, mathATan2(ct0.cy + ct0.y11, ct0.cx + ct0.x11), mathATan2(ct1.cy + ct1.y11, ct1.cx + ct1.x11), clockwise); + ctx.arc(x + ct1.cx, y + ct1.cy, cr0, mathATan2(ct1.y11, ct1.x11), mathATan2(ct1.y01, ct1.x01), !clockwise); + } + } + else { + ctx.lineTo(x + xire, y + yire); + ctx.arc(x, y, innerRadius, endAngle, startAngle, clockwise); + } + } + ctx.closePath(); + } + + var SectorShape = (function () { + function SectorShape() { + this.cx = 0; + this.cy = 0; + this.r0 = 0; + this.r = 0; + this.startAngle = 0; + this.endAngle = Math.PI * 2; + this.clockwise = true; + this.cornerRadius = 0; + this.innerCornerRadius = 0; + } + return SectorShape; + }()); + var Sector = (function (_super) { + __extends(Sector, _super); + function Sector(opts) { + return _super.call(this, opts) || this; + } + Sector.prototype.getDefaultShape = function () { + return new SectorShape(); + }; + Sector.prototype.buildPath = function (ctx, shape) { + buildPath$1(ctx, shape); + }; + Sector.prototype.isZeroArea = function () { + return this.shape.startAngle === this.shape.endAngle + || this.shape.r === this.shape.r0; + }; + return Sector; + }(Path)); + Sector.prototype.type = 'sector'; + + var RingShape = (function () { + function RingShape() { + this.cx = 0; + this.cy = 0; + this.r = 0; + this.r0 = 0; + } + return RingShape; + }()); + var Ring = (function (_super) { + __extends(Ring, _super); + function Ring(opts) { + return _super.call(this, opts) || this; + } + Ring.prototype.getDefaultShape = function () { + return new RingShape(); + }; + Ring.prototype.buildPath = function (ctx, shape) { + var x = shape.cx; + var y = shape.cy; + var PI2 = Math.PI * 2; + ctx.moveTo(x + shape.r, y); + ctx.arc(x, y, shape.r, 0, PI2, false); + ctx.moveTo(x + shape.r0, y); + ctx.arc(x, y, shape.r0, 0, PI2, true); + }; + return Ring; + }(Path)); + Ring.prototype.type = 'ring'; + + function interpolate(p0, p1, p2, p3, t, t2, t3) { + var v0 = (p2 - p0) * 0.5; + var v1 = (p3 - p1) * 0.5; + return (2 * (p1 - p2) + v0 + v1) * t3 + + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + + v0 * t + p1; + } + function smoothSpline(points, isLoop) { + var len = points.length; + var ret = []; + var distance$1 = 0; + for (var i = 1; i < len; i++) { + distance$1 += distance(points[i - 1], points[i]); + } + var segs = distance$1 / 2; + segs = segs < len ? len : segs; + for (var i = 0; i < segs; i++) { + var pos = i / (segs - 1) * (isLoop ? len : len - 1); + var idx = Math.floor(pos); + var w = pos - idx; + var p0 = void 0; + var p1 = points[idx % len]; + var p2 = void 0; + var p3 = void 0; + if (!isLoop) { + p0 = points[idx === 0 ? idx : idx - 1]; + p2 = points[idx > len - 2 ? len - 1 : idx + 1]; + p3 = points[idx > len - 3 ? len - 1 : idx + 2]; + } + else { + p0 = points[(idx - 1 + len) % len]; + p2 = points[(idx + 1) % len]; + p3 = points[(idx + 2) % len]; + } + var w2 = w * w; + var w3 = w * w2; + ret.push([ + interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3), + interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3) + ]); + } + return ret; + } + + function smoothBezier(points, smooth, isLoop, constraint) { + var cps = []; + var v = []; + var v1 = []; + var v2 = []; + var prevPoint; + var nextPoint; + var min$1; + var max$1; + if (constraint) { + min$1 = [Infinity, Infinity]; + max$1 = [-Infinity, -Infinity]; + for (var i = 0, len = points.length; i < len; i++) { + min(min$1, min$1, points[i]); + max(max$1, max$1, points[i]); + } + min(min$1, min$1, constraint[0]); + max(max$1, max$1, constraint[1]); + } + for (var i = 0, len = points.length; i < len; i++) { + var point = points[i]; + if (isLoop) { + prevPoint = points[i ? i - 1 : len - 1]; + nextPoint = points[(i + 1) % len]; + } + else { + if (i === 0 || i === len - 1) { + cps.push(clone$1(points[i])); + continue; + } + else { + prevPoint = points[i - 1]; + nextPoint = points[i + 1]; + } + } + sub(v, nextPoint, prevPoint); + scale(v, v, smooth); + var d0 = distance(point, prevPoint); + var d1 = distance(point, nextPoint); + var sum = d0 + d1; + if (sum !== 0) { + d0 /= sum; + d1 /= sum; + } + scale(v1, v, -d0); + scale(v2, v, d1); + var cp0 = add([], point, v1); + var cp1 = add([], point, v2); + if (constraint) { + max(cp0, cp0, min$1); + min(cp0, cp0, max$1); + max(cp1, cp1, min$1); + min(cp1, cp1, max$1); + } + cps.push(cp0); + cps.push(cp1); + } + if (isLoop) { + cps.push(cps.shift()); + } + return cps; + } + + function buildPath$2(ctx, shape, closePath) { + var smooth = shape.smooth; + var points = shape.points; + if (points && points.length >= 2) { + if (smooth && smooth !== 'spline') { + var controlPoints = smoothBezier(points, smooth, closePath, shape.smoothConstraint); + ctx.moveTo(points[0][0], points[0][1]); + var len = points.length; + for (var i = 0; i < (closePath ? len : len - 1); i++) { + var cp1 = controlPoints[i * 2]; + var cp2 = controlPoints[i * 2 + 1]; + var p = points[(i + 1) % len]; + ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]); + } + } + else { + if (smooth === 'spline') { + points = smoothSpline(points, closePath); + } + ctx.moveTo(points[0][0], points[0][1]); + for (var i = 1, l = points.length; i < l; i++) { + ctx.lineTo(points[i][0], points[i][1]); + } + } + closePath && ctx.closePath(); + } + } + + var PolygonShape = (function () { + function PolygonShape() { + this.points = null; + this.smooth = 0; + this.smoothConstraint = null; + } + return PolygonShape; + }()); + var Polygon = (function (_super) { + __extends(Polygon, _super); + function Polygon(opts) { + return _super.call(this, opts) || this; + } + Polygon.prototype.getDefaultShape = function () { + return new PolygonShape(); + }; + Polygon.prototype.buildPath = function (ctx, shape) { + buildPath$2(ctx, shape, true); + }; + return Polygon; + }(Path)); + Polygon.prototype.type = 'polygon'; + + var PolylineShape = (function () { + function PolylineShape() { + this.points = null; + this.percent = 1; + this.smooth = 0; + this.smoothConstraint = null; + } + return PolylineShape; + }()); + var Polyline = (function (_super) { + __extends(Polyline, _super); + function Polyline(opts) { + return _super.call(this, opts) || this; + } + Polyline.prototype.getDefaultStyle = function () { + return { + stroke: '#000', + fill: null + }; + }; + Polyline.prototype.getDefaultShape = function () { + return new PolylineShape(); + }; + Polyline.prototype.buildPath = function (ctx, shape) { + buildPath$2(ctx, shape, false); + }; + return Polyline; + }(Path)); + Polyline.prototype.type = 'polyline'; + + var subPixelOptimizeOutputShape$1 = {}; + var LineShape = (function () { + function LineShape() { + this.x1 = 0; + this.y1 = 0; + this.x2 = 0; + this.y2 = 0; + this.percent = 1; + } + return LineShape; + }()); + var Line = (function (_super) { + __extends(Line, _super); + function Line(opts) { + return _super.call(this, opts) || this; + } + Line.prototype.getDefaultStyle = function () { + return { + stroke: '#000', + fill: null + }; + }; + Line.prototype.getDefaultShape = function () { + return new LineShape(); + }; + Line.prototype.buildPath = function (ctx, shape) { + var x1; + var y1; + var x2; + var y2; + if (this.subPixelOptimize) { + var optimizedShape = subPixelOptimizeLine(subPixelOptimizeOutputShape$1, shape, this.style); + x1 = optimizedShape.x1; + y1 = optimizedShape.y1; + x2 = optimizedShape.x2; + y2 = optimizedShape.y2; + } + else { + x1 = shape.x1; + y1 = shape.y1; + x2 = shape.x2; + y2 = shape.y2; + } + var percent = shape.percent; + if (percent === 0) { + return; + } + ctx.moveTo(x1, y1); + if (percent < 1) { + x2 = x1 * (1 - percent) + x2 * percent; + y2 = y1 * (1 - percent) + y2 * percent; + } + ctx.lineTo(x2, y2); + }; + Line.prototype.pointAt = function (p) { + var shape = this.shape; + return [ + shape.x1 * (1 - p) + shape.x2 * p, + shape.y1 * (1 - p) + shape.y2 * p + ]; + }; + return Line; + }(Path)); + Line.prototype.type = 'line'; + + var out = []; + var BezierCurveShape = (function () { + function BezierCurveShape() { + this.x1 = 0; + this.y1 = 0; + this.x2 = 0; + this.y2 = 0; + this.cpx1 = 0; + this.cpy1 = 0; + this.percent = 1; + } + return BezierCurveShape; + }()); + function someVectorAt(shape, t, isTangent) { + var cpx2 = shape.cpx2; + var cpy2 = shape.cpy2; + if (cpx2 === null || cpy2 === null) { + return [ + (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t), + (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t) + ]; + } + else { + return [ + (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t), + (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t) + ]; + } + } + var BezierCurve = (function (_super) { + __extends(BezierCurve, _super); + function BezierCurve(opts) { + return _super.call(this, opts) || this; + } + BezierCurve.prototype.getDefaultStyle = function () { + return { + stroke: '#000', + fill: null + }; + }; + BezierCurve.prototype.getDefaultShape = function () { + return new BezierCurveShape(); + }; + BezierCurve.prototype.buildPath = function (ctx, shape) { + var x1 = shape.x1; + var y1 = shape.y1; + var x2 = shape.x2; + var y2 = shape.y2; + var cpx1 = shape.cpx1; + var cpy1 = shape.cpy1; + var cpx2 = shape.cpx2; + var cpy2 = shape.cpy2; + var percent = shape.percent; + if (percent === 0) { + return; + } + ctx.moveTo(x1, y1); + if (cpx2 == null || cpy2 == null) { + if (percent < 1) { + quadraticSubdivide(x1, cpx1, x2, percent, out); + cpx1 = out[1]; + x2 = out[2]; + quadraticSubdivide(y1, cpy1, y2, percent, out); + cpy1 = out[1]; + y2 = out[2]; + } + ctx.quadraticCurveTo(cpx1, cpy1, x2, y2); + } + else { + if (percent < 1) { + cubicSubdivide(x1, cpx1, cpx2, x2, percent, out); + cpx1 = out[1]; + cpx2 = out[2]; + x2 = out[3]; + cubicSubdivide(y1, cpy1, cpy2, y2, percent, out); + cpy1 = out[1]; + cpy2 = out[2]; + y2 = out[3]; + } + ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2); + } + }; + BezierCurve.prototype.pointAt = function (t) { + return someVectorAt(this.shape, t, false); + }; + BezierCurve.prototype.tangentAt = function (t) { + var p = someVectorAt(this.shape, t, true); + return normalize(p, p); + }; + return BezierCurve; + }(Path)); + BezierCurve.prototype.type = 'bezier-curve'; + + var ArcShape = (function () { + function ArcShape() { + this.cx = 0; + this.cy = 0; + this.r = 0; + this.startAngle = 0; + this.endAngle = Math.PI * 2; + this.clockwise = true; + } + return ArcShape; + }()); + var Arc = (function (_super) { + __extends(Arc, _super); + function Arc(opts) { + return _super.call(this, opts) || this; + } + Arc.prototype.getDefaultStyle = function () { + return { + stroke: '#000', + fill: null + }; + }; + Arc.prototype.getDefaultShape = function () { + return new ArcShape(); + }; + Arc.prototype.buildPath = function (ctx, shape) { + var x = shape.cx; + var y = shape.cy; + var r = Math.max(shape.r, 0); + var startAngle = shape.startAngle; + var endAngle = shape.endAngle; + var clockwise = shape.clockwise; + var unitX = Math.cos(startAngle); + var unitY = Math.sin(startAngle); + ctx.moveTo(unitX * r + x, unitY * r + y); + ctx.arc(x, y, r, startAngle, endAngle, !clockwise); + }; + return Arc; + }(Path)); + Arc.prototype.type = 'arc'; + + var CompoundPath = (function (_super) { + __extends(CompoundPath, _super); + function CompoundPath() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.type = 'compound'; + return _this; + } + CompoundPath.prototype._updatePathDirty = function () { + var paths = this.shape.paths; + var dirtyPath = this.shapeChanged(); + for (var i = 0; i < paths.length; i++) { + dirtyPath = dirtyPath || paths[i].shapeChanged(); + } + if (dirtyPath) { + this.dirtyShape(); + } + }; + CompoundPath.prototype.beforeBrush = function () { + this._updatePathDirty(); + var paths = this.shape.paths || []; + var scale = this.getGlobalScale(); + for (var i = 0; i < paths.length; i++) { + if (!paths[i].path) { + paths[i].createPathProxy(); + } + paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold); + } + }; + CompoundPath.prototype.buildPath = function (ctx, shape) { + var paths = shape.paths || []; + for (var i = 0; i < paths.length; i++) { + paths[i].buildPath(ctx, paths[i].shape, true); + } + }; + CompoundPath.prototype.afterBrush = function () { + var paths = this.shape.paths || []; + for (var i = 0; i < paths.length; i++) { + paths[i].pathUpdated(); + } + }; + CompoundPath.prototype.getBoundingRect = function () { + this._updatePathDirty.call(this); + return Path.prototype.getBoundingRect.call(this); + }; + return CompoundPath; + }(Path)); + + var Gradient = (function () { + function Gradient(colorStops) { + this.colorStops = colorStops || []; + } + Gradient.prototype.addColorStop = function (offset, color) { + this.colorStops.push({ + offset: offset, + color: color + }); + }; + return Gradient; + }()); + + var LinearGradient = (function (_super) { + __extends(LinearGradient, _super); + function LinearGradient(x, y, x2, y2, colorStops, globalCoord) { + var _this = _super.call(this, colorStops) || this; + _this.x = x == null ? 0 : x; + _this.y = y == null ? 0 : y; + _this.x2 = x2 == null ? 1 : x2; + _this.y2 = y2 == null ? 0 : y2; + _this.type = 'linear'; + _this.global = globalCoord || false; + return _this; + } + return LinearGradient; + }(Gradient)); + + var RadialGradient = (function (_super) { + __extends(RadialGradient, _super); + function RadialGradient(x, y, r, colorStops, globalCoord) { + var _this = _super.call(this, colorStops) || this; + _this.x = x == null ? 0.5 : x; + _this.y = y == null ? 0.5 : y; + _this.r = r == null ? 0.5 : r; + _this.type = 'radial'; + _this.global = globalCoord || false; + return _this; + } + return RadialGradient; + }(Gradient)); + + var extent = [0, 0]; + var extent2 = [0, 0]; + var minTv$1 = new Point(); + var maxTv$1 = new Point(); + var OrientedBoundingRect = (function () { + function OrientedBoundingRect(rect, transform) { + this._corners = []; + this._axes = []; + this._origin = [0, 0]; + for (var i = 0; i < 4; i++) { + this._corners[i] = new Point(); + } + for (var i = 0; i < 2; i++) { + this._axes[i] = new Point(); + } + if (rect) { + this.fromBoundingRect(rect, transform); + } + } + OrientedBoundingRect.prototype.fromBoundingRect = function (rect, transform) { + var corners = this._corners; + var axes = this._axes; + var x = rect.x; + var y = rect.y; + var x2 = x + rect.width; + var y2 = y + rect.height; + corners[0].set(x, y); + corners[1].set(x2, y); + corners[2].set(x2, y2); + corners[3].set(x, y2); + if (transform) { + for (var i = 0; i < 4; i++) { + corners[i].transform(transform); + } + } + Point.sub(axes[0], corners[1], corners[0]); + Point.sub(axes[1], corners[3], corners[0]); + axes[0].normalize(); + axes[1].normalize(); + for (var i = 0; i < 2; i++) { + this._origin[i] = axes[i].dot(corners[0]); + } + }; + OrientedBoundingRect.prototype.intersect = function (other, mtv) { + var overlapped = true; + var noMtv = !mtv; + minTv$1.set(Infinity, Infinity); + maxTv$1.set(0, 0); + if (!this._intersectCheckOneSide(this, other, minTv$1, maxTv$1, noMtv, 1)) { + overlapped = false; + if (noMtv) { + return overlapped; + } + } + if (!this._intersectCheckOneSide(other, this, minTv$1, maxTv$1, noMtv, -1)) { + overlapped = false; + if (noMtv) { + return overlapped; + } + } + if (!noMtv) { + Point.copy(mtv, overlapped ? minTv$1 : maxTv$1); + } + return overlapped; + }; + OrientedBoundingRect.prototype._intersectCheckOneSide = function (self, other, minTv, maxTv, noMtv, inverse) { + var overlapped = true; + for (var i = 0; i < 2; i++) { + var axis = this._axes[i]; + this._getProjMinMaxOnAxis(i, self._corners, extent); + this._getProjMinMaxOnAxis(i, other._corners, extent2); + if (extent[1] < extent2[0] || extent[0] > extent2[1]) { + overlapped = false; + if (noMtv) { + return overlapped; + } + var dist0 = Math.abs(extent2[0] - extent[1]); + var dist1 = Math.abs(extent[0] - extent2[1]); + if (Math.min(dist0, dist1) > maxTv.len()) { + if (dist0 < dist1) { + Point.scale(maxTv, axis, -dist0 * inverse); + } + else { + Point.scale(maxTv, axis, dist1 * inverse); + } + } + } + else if (minTv) { + var dist0 = Math.abs(extent2[0] - extent[1]); + var dist1 = Math.abs(extent[0] - extent2[1]); + if (Math.min(dist0, dist1) < minTv.len()) { + if (dist0 < dist1) { + Point.scale(minTv, axis, dist0 * inverse); + } + else { + Point.scale(minTv, axis, -dist1 * inverse); + } + } + } + } + return overlapped; + }; + OrientedBoundingRect.prototype._getProjMinMaxOnAxis = function (dim, corners, out) { + var axis = this._axes[dim]; + var origin = this._origin; + var proj = corners[0].dot(axis) + origin[dim]; + var min = proj; + var max = proj; + for (var i = 1; i < corners.length; i++) { + var proj_1 = corners[i].dot(axis) + origin[dim]; + min = Math.min(proj_1, min); + max = Math.max(proj_1, max); + } + out[0] = min; + out[1] = max; + }; + return OrientedBoundingRect; + }()); + + var m = []; + var IncrementalDisplayable = (function (_super) { + __extends(IncrementalDisplayable, _super); + function IncrementalDisplayable() { + var _this = _super !== null && _super.apply(this, arguments) || this; + _this.notClear = true; + _this.incremental = true; + _this._displayables = []; + _this._temporaryDisplayables = []; + _this._cursor = 0; + return _this; + } + IncrementalDisplayable.prototype.traverse = function (cb, context) { + cb.call(context, this); + }; + IncrementalDisplayable.prototype.useStyle = function () { + this.style = {}; + }; + IncrementalDisplayable.prototype.getCursor = function () { + return this._cursor; + }; + IncrementalDisplayable.prototype.innerAfterBrush = function () { + this._cursor = this._displayables.length; + }; + IncrementalDisplayable.prototype.clearDisplaybles = function () { + this._displayables = []; + this._temporaryDisplayables = []; + this._cursor = 0; + this.markRedraw(); + this.notClear = false; + }; + IncrementalDisplayable.prototype.clearTemporalDisplayables = function () { + this._temporaryDisplayables = []; + }; + IncrementalDisplayable.prototype.addDisplayable = function (displayable, notPersistent) { + if (notPersistent) { + this._temporaryDisplayables.push(displayable); + } + else { + this._displayables.push(displayable); + } + this.markRedraw(); + }; + IncrementalDisplayable.prototype.addDisplayables = function (displayables, notPersistent) { + notPersistent = notPersistent || false; + for (var i = 0; i < displayables.length; i++) { + this.addDisplayable(displayables[i], notPersistent); + } + }; + IncrementalDisplayable.prototype.getDisplayables = function () { + return this._displayables; + }; + IncrementalDisplayable.prototype.getTemporalDisplayables = function () { + return this._temporaryDisplayables; + }; + IncrementalDisplayable.prototype.eachPendingDisplayable = function (cb) { + for (var i = this._cursor; i < this._displayables.length; i++) { + cb && cb(this._displayables[i]); + } + for (var i = 0; i < this._temporaryDisplayables.length; i++) { + cb && cb(this._temporaryDisplayables[i]); + } + }; + IncrementalDisplayable.prototype.update = function () { + this.updateTransform(); + for (var i = this._cursor; i < this._displayables.length; i++) { + var displayable = this._displayables[i]; + displayable.parent = this; + displayable.update(); + displayable.parent = null; + } + for (var i = 0; i < this._temporaryDisplayables.length; i++) { + var displayable = this._temporaryDisplayables[i]; + displayable.parent = this; + displayable.update(); + displayable.parent = null; + } + }; + IncrementalDisplayable.prototype.getBoundingRect = function () { + if (!this._rect) { + var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity); + for (var i = 0; i < this._displayables.length; i++) { + var displayable = this._displayables[i]; + var childRect = displayable.getBoundingRect().clone(); + if (displayable.needLocalTransform()) { + childRect.applyTransform(displayable.getLocalTransform(m)); + } + rect.union(childRect); + } + this._rect = rect; + } + return this._rect; + }; + IncrementalDisplayable.prototype.contain = function (x, y) { + var localPos = this.transformCoordToLocal(x, y); + var rect = this.getBoundingRect(); + if (rect.contain(localPos[0], localPos[1])) { + for (var i = 0; i < this._displayables.length; i++) { + var displayable = this._displayables[i]; + if (displayable.contain(x, y)) { + return true; + } + } + } + return false; + }; + return IncrementalDisplayable; + }(Displayable)); + + var transitionStore = makeInner(); + /** + * Return null if animation is disabled. + */ + + function getAnimationConfig(animationType, animatableModel, dataIndex, // Extra opts can override the option in animatable model. + extraOpts, // TODO It's only for pictorial bar now. + extraDelayParams) { + var animationPayload; // Check if there is global animation configuration from dataZoom/resize can override the config in option. + // If animation is enabled. Will use this animation config in payload. + // If animation is disabled. Just ignore it. + + if (animatableModel && animatableModel.ecModel) { + var updatePayload = animatableModel.ecModel.getUpdatePayload(); + animationPayload = updatePayload && updatePayload.animation; + } + + var animationEnabled = animatableModel && animatableModel.isAnimationEnabled(); + var isUpdate = animationType === 'update'; + + if (animationEnabled) { + var duration = void 0; + var easing = void 0; + var delay = void 0; + + if (extraOpts) { + duration = retrieve2(extraOpts.duration, 200); + easing = retrieve2(extraOpts.easing, 'cubicOut'); + delay = 0; + } else { + duration = animatableModel.getShallow(isUpdate ? 'animationDurationUpdate' : 'animationDuration'); + easing = animatableModel.getShallow(isUpdate ? 'animationEasingUpdate' : 'animationEasing'); + delay = animatableModel.getShallow(isUpdate ? 'animationDelayUpdate' : 'animationDelay'); + } // animation from payload has highest priority. + + + if (animationPayload) { + animationPayload.duration != null && (duration = animationPayload.duration); + animationPayload.easing != null && (easing = animationPayload.easing); + animationPayload.delay != null && (delay = animationPayload.delay); + } + + if (typeof delay === 'function') { + delay = delay(dataIndex, extraDelayParams); + } + + if (typeof duration === 'function') { + duration = duration(dataIndex); + } + + var config = { + duration: duration || 0, + delay: delay, + easing: easing + }; + return config; + } else { + return null; + } + } + + function animateOrSetProps(animationType, el, props, animatableModel, dataIndex, cb, during) { + var isFrom = false; + var removeOpt; + + if (typeof dataIndex === 'function') { + during = cb; + cb = dataIndex; + dataIndex = null; + } else if (isObject(dataIndex)) { + cb = dataIndex.cb; + during = dataIndex.during; + isFrom = dataIndex.isFrom; + removeOpt = dataIndex.removeOpt; + dataIndex = dataIndex.dataIndex; + } + + var isRemove = animationType === 'remove'; + + if (!isRemove) { + // Must stop the remove animation. + el.stopAnimation('remove'); + } + + var animationConfig = getAnimationConfig(animationType, animatableModel, dataIndex, isRemove ? removeOpt || {} : null, animatableModel && animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null); + + if (animationConfig && animationConfig.duration > 0) { + var duration = animationConfig.duration; + var animationDelay = animationConfig.delay; + var animationEasing = animationConfig.easing; + var animateConfig = { + duration: duration, + delay: animationDelay || 0, + easing: animationEasing, + done: cb, + force: !!cb || !!during, + // Set to final state in update/init animation. + // So the post processing based on the path shape can be done correctly. + setToFinal: !isRemove, + scope: animationType, + during: during + }; + isFrom ? el.animateFrom(props, animateConfig) : el.animateTo(props, animateConfig); + } else { + el.stopAnimation(); // If `isFrom`, the props is the "from" props. + + !isFrom && el.attr(props); // Call during at least once. + + during && during(1); + cb && cb(); + } + } + /** + * Update graphic element properties with or without animation according to the + * configuration in series. + * + * Caution: this method will stop previous animation. + * So do not use this method to one element twice before + * animation starts, unless you know what you are doing. + * @example + * graphic.updateProps(el, { + * position: [100, 100] + * }, seriesModel, dataIndex, function () { console.log('Animation done!'); }); + * // Or + * graphic.updateProps(el, { + * position: [100, 100] + * }, seriesModel, function () { console.log('Animation done!'); }); + */ + + + function updateProps(el, props, // TODO: TYPE AnimatableModel + animatableModel, dataIndex, cb, during) { + animateOrSetProps('update', el, props, animatableModel, dataIndex, cb, during); + } + /** + * Init graphic element properties with or without animation according to the + * configuration in series. + * + * Caution: this method will stop previous animation. + * So do not use this method to one element twice before + * animation starts, unless you know what you are doing. + */ + + function initProps(el, props, animatableModel, dataIndex, cb, during) { + animateOrSetProps('init', el, props, animatableModel, dataIndex, cb, during); + } + /** + * If element is removed. + * It can determine if element is having remove animation. + */ + + function isElementRemoved(el) { + if (!el.__zr) { + return true; + } + + for (var i = 0; i < el.animators.length; i++) { + var animator = el.animators[i]; + + if (animator.scope === 'remove') { + return true; + } + } + + return false; + } + /** + * Remove graphic element + */ + + function removeElement(el, props, animatableModel, dataIndex, cb, during) { + // Don't do remove animation twice. + if (isElementRemoved(el)) { + return; + } + + animateOrSetProps('remove', el, props, animatableModel, dataIndex, cb, during); + } + + function fadeOutDisplayable(el, animatableModel, dataIndex, done) { + el.removeTextContent(); + el.removeTextGuideLine(); + removeElement(el, { + style: { + opacity: 0 + } + }, animatableModel, dataIndex, done); + } + + function removeElementWithFadeOut(el, animatableModel, dataIndex) { + function doRemove() { + el.parent && el.parent.remove(el); + } // Hide label and labelLine first + // TODO Also use fade out animation? + + + if (!el.isGroup) { + fadeOutDisplayable(el, animatableModel, dataIndex, doRemove); + } else { + el.traverse(function (disp) { + if (!disp.isGroup) { + // Can invoke doRemove multiple times. + fadeOutDisplayable(disp, animatableModel, dataIndex, doRemove); + } + }); + } + } + /** + * Save old style for style transition in universalTransition module. + * It's used when element will be reused in each render. + * For chart like map, heatmap, which will always create new element. + * We don't need to save this because universalTransition can get old style from the old element + */ + + function saveOldStyle(el) { + transitionStore(el).oldStyle = el.style; + } + function getOldStyle(el) { + return transitionStore(el).oldStyle; + } + + var mathMax$4 = Math.max; + var mathMin$4 = Math.min; + var _customShapeMap = {}; + /** + * Extend shape with parameters + */ + + function extendShape(opts) { + return Path.extend(opts); + } + var extendPathFromString = extendFromString; + /** + * Extend path + */ + + function extendPath(pathData, opts) { + return extendPathFromString(pathData, opts); + } + /** + * Register a user defined shape. + * The shape class can be fetched by `getShapeClass` + * This method will overwrite the registered shapes, including + * the registered built-in shapes, if using the same `name`. + * The shape can be used in `custom series` and + * `graphic component` by declaring `{type: name}`. + * + * @param name + * @param ShapeClass Can be generated by `extendShape`. + */ + + function registerShape(name, ShapeClass) { + _customShapeMap[name] = ShapeClass; + } + /** + * Find shape class registered by `registerShape`. Usually used in + * fetching user defined shape. + * + * [Caution]: + * (1) This method **MUST NOT be used inside echarts !!!**, unless it is prepared + * to use user registered shapes. + * Because the built-in shape (see `getBuiltInShape`) will be registered by + * `registerShape` by default. That enables users to get both built-in + * shapes as well as the shapes belonging to themsleves. But users can overwrite + * the built-in shapes by using names like 'circle', 'rect' via calling + * `registerShape`. So the echarts inner featrues should not fetch shapes from here + * in case that it is overwritten by users, except that some features, like + * `custom series`, `graphic component`, do it deliberately. + * + * (2) In the features like `custom series`, `graphic component`, the user input + * `{tpye: 'xxx'}` does not only specify shapes but also specify other graphic + * elements like `'group'`, `'text'`, `'image'` or event `'path'`. Those names + * are reserved names, that is, if some user register a shape named `'image'`, + * the shape will not be used. If we intending to add some more reserved names + * in feature, that might bring break changes (disable some existing user shape + * names). But that case probably rearly happen. So we dont make more mechanism + * to resolve this issue here. + * + * @param name + * @return The shape class. If not found, return nothing. + */ + + function getShapeClass(name) { + if (_customShapeMap.hasOwnProperty(name)) { + return _customShapeMap[name]; + } + } + /** + * Create a path element from path data string + * @param pathData + * @param opts + * @param rect + * @param layout 'center' or 'cover' default to be cover + */ + + function makePath(pathData, opts, rect, layout) { + var path = createFromString(pathData, opts); + + if (rect) { + if (layout === 'center') { + rect = centerGraphic(rect, path.getBoundingRect()); + } + + resizePath(path, rect); + } + + return path; + } + /** + * Create a image element from image url + * @param imageUrl image url + * @param opts options + * @param rect constrain rect + * @param layout 'center' or 'cover'. Default to be 'cover' + */ + + function makeImage(imageUrl, rect, layout) { + var zrImg = new ZRImage({ + style: { + image: imageUrl, + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + onload: function (img) { + if (layout === 'center') { + var boundingRect = { + width: img.width, + height: img.height + }; + zrImg.setStyle(centerGraphic(rect, boundingRect)); + } + } + }); + return zrImg; + } + /** + * Get position of centered element in bounding box. + * + * @param rect element local bounding box + * @param boundingRect constraint bounding box + * @return element position containing x, y, width, and height + */ + + function centerGraphic(rect, boundingRect) { + // Set rect to center, keep width / height ratio. + var aspect = boundingRect.width / boundingRect.height; + var width = rect.height * aspect; + var height; + + if (width <= rect.width) { + height = rect.height; + } else { + width = rect.width; + height = width / aspect; + } + + var cx = rect.x + rect.width / 2; + var cy = rect.y + rect.height / 2; + return { + x: cx - width / 2, + y: cy - height / 2, + width: width, + height: height + }; + } + + var mergePath$1 = mergePath; + /** + * Resize a path to fit the rect + * @param path + * @param rect + */ + + function resizePath(path, rect) { + if (!path.applyTransform) { + return; + } + + var pathRect = path.getBoundingRect(); + var m = pathRect.calculateTransform(rect); + path.applyTransform(m); + } + /** + * Sub pixel optimize line for canvas + */ + + function subPixelOptimizeLine$1(param) { + subPixelOptimizeLine(param.shape, param.shape, param.style); + return param; + } + /** + * Sub pixel optimize rect for canvas + */ + + function subPixelOptimizeRect$1(param) { + subPixelOptimizeRect(param.shape, param.shape, param.style); + return param; + } + /** + * Sub pixel optimize for canvas + * + * @param position Coordinate, such as x, y + * @param lineWidth Should be nonnegative integer. + * @param positiveOrNegative Default false (negative). + * @return Optimized position. + */ + + var subPixelOptimize$1 = subPixelOptimize; + /** + * Get transform matrix of target (param target), + * in coordinate of its ancestor (param ancestor) + * + * @param target + * @param [ancestor] + */ + + function getTransform(target, ancestor) { + var mat = identity([]); + + while (target && target !== ancestor) { + mul$1(mat, target.getLocalTransform(), mat); + target = target.parent; + } + + return mat; + } + /** + * Apply transform to an vertex. + * @param target [x, y] + * @param transform Can be: + * + Transform matrix: like [1, 0, 0, 1, 0, 0] + * + {position, rotation, scale}, the same as `zrender/Transformable`. + * @param invert Whether use invert matrix. + * @return [x, y] + */ + + function applyTransform$1(target, transform, invert$1) { + if (transform && !isArrayLike(transform)) { + transform = Transformable.getLocalTransform(transform); + } + + if (invert$1) { + transform = invert([], transform); + } + + return applyTransform([], target, transform); + } + /** + * @param direction 'left' 'right' 'top' 'bottom' + * @param transform Transform matrix: like [1, 0, 0, 1, 0, 0] + * @param invert Whether use invert matrix. + * @return Transformed direction. 'left' 'right' 'top' 'bottom' + */ + + function transformDirection(direction, transform, invert) { + // Pick a base, ensure that transform result will not be (0, 0). + var hBase = transform[4] === 0 || transform[5] === 0 || transform[0] === 0 ? 1 : Math.abs(2 * transform[4] / transform[0]); + var vBase = transform[4] === 0 || transform[5] === 0 || transform[2] === 0 ? 1 : Math.abs(2 * transform[4] / transform[2]); + var vertex = [direction === 'left' ? -hBase : direction === 'right' ? hBase : 0, direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0]; + vertex = applyTransform$1(vertex, transform, invert); + return Math.abs(vertex[0]) > Math.abs(vertex[1]) ? vertex[0] > 0 ? 'right' : 'left' : vertex[1] > 0 ? 'bottom' : 'top'; + } + + function isNotGroup(el) { + return !el.isGroup; + } + + function isPath(el) { + return el.shape != null; + } + /** + * Apply group transition animation from g1 to g2. + * If no animatableModel, no animation. + */ + + + function groupTransition(g1, g2, animatableModel) { + if (!g1 || !g2) { + return; + } + + function getElMap(g) { + var elMap = {}; + g.traverse(function (el) { + if (isNotGroup(el) && el.anid) { + elMap[el.anid] = el; + } + }); + return elMap; + } + + function getAnimatableProps(el) { + var obj = { + x: el.x, + y: el.y, + rotation: el.rotation + }; + + if (isPath(el)) { + obj.shape = extend({}, el.shape); + } + + return obj; + } + + var elMap1 = getElMap(g1); + g2.traverse(function (el) { + if (isNotGroup(el) && el.anid) { + var oldEl = elMap1[el.anid]; + + if (oldEl) { + var newProp = getAnimatableProps(el); + el.attr(getAnimatableProps(oldEl)); + updateProps(el, newProp, animatableModel, getECData(el).dataIndex); + } + } + }); + } + function clipPointsByRect(points, rect) { + // FIXME: this way migth be incorrect when grpahic clipped by a corner. + // and when element have border. + return map(points, function (point) { + var x = point[0]; + x = mathMax$4(x, rect.x); + x = mathMin$4(x, rect.x + rect.width); + var y = point[1]; + y = mathMax$4(y, rect.y); + y = mathMin$4(y, rect.y + rect.height); + return [x, y]; + }); + } + /** + * Return a new clipped rect. If rect size are negative, return undefined. + */ + + function clipRectByRect(targetRect, rect) { + var x = mathMax$4(targetRect.x, rect.x); + var x2 = mathMin$4(targetRect.x + targetRect.width, rect.x + rect.width); + var y = mathMax$4(targetRect.y, rect.y); + var y2 = mathMin$4(targetRect.y + targetRect.height, rect.y + rect.height); // If the total rect is cliped, nothing, including the border, + // should be painted. So return undefined. + + if (x2 >= x && y2 >= y) { + return { + x: x, + y: y, + width: x2 - x, + height: y2 - y + }; + } + } + function createIcon(iconStr, // Support 'image://' or 'path://' or direct svg path. + opt, rect) { + var innerOpts = extend({ + rectHover: true + }, opt); + var style = innerOpts.style = { + strokeNoScale: true + }; + rect = rect || { + x: -1, + y: -1, + width: 2, + height: 2 + }; + + if (iconStr) { + return iconStr.indexOf('image://') === 0 ? (style.image = iconStr.slice(8), defaults(style, rect), new ZRImage(innerOpts)) : makePath(iconStr.replace('path://', ''), innerOpts, rect, 'center'); + } + } + /** + * Return `true` if the given line (line `a`) and the given polygon + * are intersect. + * Note that we do not count colinear as intersect here because no + * requirement for that. We could do that if required in future. + */ + + function linePolygonIntersect(a1x, a1y, a2x, a2y, points) { + for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) { + var p = points[i]; + + if (lineLineIntersect(a1x, a1y, a2x, a2y, p[0], p[1], p2[0], p2[1])) { + return true; + } + + p2 = p; + } + } + /** + * Return `true` if the given two lines (line `a` and line `b`) + * are intersect. + * Note that we do not count colinear as intersect here because no + * requirement for that. We could do that if required in future. + */ + + function lineLineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { + // let `vec_m` to be `vec_a2 - vec_a1` and `vec_n` to be `vec_b2 - vec_b1`. + var mx = a2x - a1x; + var my = a2y - a1y; + var nx = b2x - b1x; + var ny = b2y - b1y; // `vec_m` and `vec_n` are parallel iff + // exising `k` such that `vec_m = k · vec_n`, equivalent to `vec_m X vec_n = 0`. + + var nmCrossProduct = crossProduct2d(nx, ny, mx, my); + + if (nearZero(nmCrossProduct)) { + return false; + } // `vec_m` and `vec_n` are intersect iff + // existing `p` and `q` in [0, 1] such that `vec_a1 + p * vec_m = vec_b1 + q * vec_n`, + // such that `q = ((vec_a1 - vec_b1) X vec_m) / (vec_n X vec_m)` + // and `p = ((vec_a1 - vec_b1) X vec_n) / (vec_n X vec_m)`. + + + var b1a1x = a1x - b1x; + var b1a1y = a1y - b1y; + var q = crossProduct2d(b1a1x, b1a1y, mx, my) / nmCrossProduct; + + if (q < 0 || q > 1) { + return false; + } + + var p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct; + + if (p < 0 || p > 1) { + return false; + } + + return true; + } + /** + * Cross product of 2-dimension vector. + */ + + function crossProduct2d(x1, y1, x2, y2) { + return x1 * y2 - x2 * y1; + } + + function nearZero(val) { + return val <= 1e-6 && val >= -1e-6; + } + + function setTooltipConfig(opt) { + var itemTooltipOption = opt.itemTooltipOption; + var componentModel = opt.componentModel; + var itemName = opt.itemName; + var itemTooltipOptionObj = isString(itemTooltipOption) ? { + formatter: itemTooltipOption + } : itemTooltipOption; + var mainType = componentModel.mainType; + var componentIndex = componentModel.componentIndex; + var formatterParams = { + componentType: mainType, + name: itemName, + $vars: ['name'] + }; + formatterParams[mainType + 'Index'] = componentIndex; + var formatterParamsExtra = opt.formatterParamsExtra; + + if (formatterParamsExtra) { + each(keys(formatterParamsExtra), function (key) { + if (!hasOwn(formatterParams, key)) { + formatterParams[key] = formatterParamsExtra[key]; + formatterParams.$vars.push(key); + } + }); + } + + var ecData = getECData(opt.el); + ecData.componentMainType = mainType; + ecData.componentIndex = componentIndex; + ecData.tooltipConfig = { + name: itemName, + option: defaults({ + content: itemName, + formatterParams: formatterParams + }, itemTooltipOptionObj) + }; + } // Register built-in shapes. These shapes might be overwirtten + // by users, although we do not recommend that. + + registerShape('circle', Circle); + registerShape('ellipse', Ellipse); + registerShape('sector', Sector); + registerShape('ring', Ring); + registerShape('polygon', Polygon); + registerShape('polyline', Polyline); + registerShape('rect', Rect); + registerShape('line', Line); + registerShape('bezierCurve', BezierCurve); + registerShape('arc', Arc); + + var graphic = /*#__PURE__*/Object.freeze({ + __proto__: null, + updateProps: updateProps, + initProps: initProps, + removeElement: removeElement, + removeElementWithFadeOut: removeElementWithFadeOut, + isElementRemoved: isElementRemoved, + extendShape: extendShape, + extendPath: extendPath, + registerShape: registerShape, + getShapeClass: getShapeClass, + makePath: makePath, + makeImage: makeImage, + mergePath: mergePath$1, + resizePath: resizePath, + subPixelOptimizeLine: subPixelOptimizeLine$1, + subPixelOptimizeRect: subPixelOptimizeRect$1, + subPixelOptimize: subPixelOptimize$1, + getTransform: getTransform, + applyTransform: applyTransform$1, + transformDirection: transformDirection, + groupTransition: groupTransition, + clipPointsByRect: clipPointsByRect, + clipRectByRect: clipRectByRect, + createIcon: createIcon, + linePolygonIntersect: linePolygonIntersect, + lineLineIntersect: lineLineIntersect, + setTooltipConfig: setTooltipConfig, + Group: Group, + Image: ZRImage, + Text: ZRText, + Circle: Circle, + Ellipse: Ellipse, + Sector: Sector, + Ring: Ring, + Polygon: Polygon, + Polyline: Polyline, + Rect: Rect, + Line: Line, + BezierCurve: BezierCurve, + Arc: Arc, + IncrementalDisplayable: IncrementalDisplayable, + CompoundPath: CompoundPath, + LinearGradient: LinearGradient, + RadialGradient: RadialGradient, + BoundingRect: BoundingRect, + OrientedBoundingRect: OrientedBoundingRect, + Point: Point, + Path: Path + }); + + var EMPTY_OBJ = {}; + function setLabelText(label, labelTexts) { + for (var i = 0; i < SPECIAL_STATES.length; i++) { + var stateName = SPECIAL_STATES[i]; + var text = labelTexts[stateName]; + var state = label.ensureState(stateName); + state.style = state.style || {}; + state.style.text = text; + } + + var oldStates = label.currentStates.slice(); + label.clearStates(true); + label.setStyle({ + text: labelTexts.normal + }); + label.useStates(oldStates, true); + } + + function getLabelText(opt, stateModels, interpolatedValue) { + var labelFetcher = opt.labelFetcher; + var labelDataIndex = opt.labelDataIndex; + var labelDimIndex = opt.labelDimIndex; + var normalModel = stateModels.normal; + var baseText; + + if (labelFetcher) { + baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex, normalModel && normalModel.get('formatter'), interpolatedValue != null ? { + interpolatedValue: interpolatedValue + } : null); + } + + if (baseText == null) { + baseText = isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt, interpolatedValue) : opt.defaultText; + } + + var statesText = { + normal: baseText + }; + + for (var i = 0; i < SPECIAL_STATES.length; i++) { + var stateName = SPECIAL_STATES[i]; + var stateModel = stateModels[stateName]; + statesText[stateName] = retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, stateName, null, labelDimIndex, stateModel && stateModel.get('formatter')) : null, baseText); + } + + return statesText; + } + + function setLabelStyle(targetEl, labelStatesModels, opt, stateSpecified // TODO specified position? + ) { + opt = opt || EMPTY_OBJ; + var isSetOnText = targetEl instanceof ZRText; + var needsCreateText = false; + + for (var i = 0; i < DISPLAY_STATES.length; i++) { + var stateModel = labelStatesModels[DISPLAY_STATES[i]]; + + if (stateModel && stateModel.getShallow('show')) { + needsCreateText = true; + break; + } + } + + var textContent = isSetOnText ? targetEl : targetEl.getTextContent(); + + if (needsCreateText) { + if (!isSetOnText) { + // Reuse the previous + if (!textContent) { + textContent = new ZRText(); + targetEl.setTextContent(textContent); + } // Use same state proxy + + + if (targetEl.stateProxy) { + textContent.stateProxy = targetEl.stateProxy; + } + } + + var labelStatesTexts = getLabelText(opt, labelStatesModels); + var normalModel = labelStatesModels.normal; + var showNormal = !!normalModel.getShallow('show'); + var normalStyle = createTextStyle(normalModel, stateSpecified && stateSpecified.normal, opt, false, !isSetOnText); + normalStyle.text = labelStatesTexts.normal; + + if (!isSetOnText) { + // Always create new + targetEl.setTextConfig(createTextConfig(normalModel, opt, false)); + } + + for (var i = 0; i < SPECIAL_STATES.length; i++) { + var stateName = SPECIAL_STATES[i]; + var stateModel = labelStatesModels[stateName]; + + if (stateModel) { + var stateObj = textContent.ensureState(stateName); + var stateShow = !!retrieve2(stateModel.getShallow('show'), showNormal); + + if (stateShow !== showNormal) { + stateObj.ignore = !stateShow; + } + + stateObj.style = createTextStyle(stateModel, stateSpecified && stateSpecified[stateName], opt, true, !isSetOnText); + stateObj.style.text = labelStatesTexts[stateName]; + + if (!isSetOnText) { + var targetElEmphasisState = targetEl.ensureState(stateName); + targetElEmphasisState.textConfig = createTextConfig(stateModel, opt, true); + } + } + } // PENDING: if there is many requirements that emphasis position + // need to be different from normal position, we might consider + // auto slient is those cases. + + + textContent.silent = !!normalModel.getShallow('silent'); // Keep x and y + + if (textContent.style.x != null) { + normalStyle.x = textContent.style.x; + } + + if (textContent.style.y != null) { + normalStyle.y = textContent.style.y; + } + + textContent.ignore = !showNormal; // Always create new style. + + textContent.useStyle(normalStyle); + textContent.dirty(); + + if (opt.enableTextSetter) { + labelInner(textContent).setLabelText = function (interpolatedValue) { + var labelStatesTexts = getLabelText(opt, labelStatesModels, interpolatedValue); + setLabelText(textContent, labelStatesTexts); + }; + } + } else if (textContent) { + // Not display rich text. + textContent.ignore = true; + } + + targetEl.dirty(); + } + function getLabelStatesModels(itemModel, labelName) { + labelName = labelName || 'label'; + var statesModels = { + normal: itemModel.getModel(labelName) + }; + + for (var i = 0; i < SPECIAL_STATES.length; i++) { + var stateName = SPECIAL_STATES[i]; + statesModels[stateName] = itemModel.getModel([stateName, labelName]); + } + + return statesModels; + } + /** + * Set basic textStyle properties. + */ + + function createTextStyle(textStyleModel, specifiedTextStyle, // Fixed style in the code. Can't be set by model. + opt, isNotNormal, isAttached // If text is attached on an element. If so, auto color will handling in zrender. + ) { + var textStyle = {}; + setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached); + specifiedTextStyle && extend(textStyle, specifiedTextStyle); // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false); + + return textStyle; + } + function createTextConfig(textStyleModel, opt, isNotNormal) { + opt = opt || {}; + var textConfig = {}; + var labelPosition; + var labelRotate = textStyleModel.getShallow('rotate'); + var labelDistance = retrieve2(textStyleModel.getShallow('distance'), isNotNormal ? null : 5); + var labelOffset = textStyleModel.getShallow('offset'); + labelPosition = textStyleModel.getShallow('position') || (isNotNormal ? null : 'inside'); // 'outside' is not a valid zr textPostion value, but used + // in bar series, and magric type should be considered. + + labelPosition === 'outside' && (labelPosition = opt.defaultOutsidePosition || 'top'); + + if (labelPosition != null) { + textConfig.position = labelPosition; + } + + if (labelOffset != null) { + textConfig.offset = labelOffset; + } + + if (labelRotate != null) { + labelRotate *= Math.PI / 180; + textConfig.rotation = labelRotate; + } + + if (labelDistance != null) { + textConfig.distance = labelDistance; + } // fill and auto is determined by the color of path fill if it's not specified by developers. + + + textConfig.outsideFill = textStyleModel.get('color') === 'inherit' ? opt.inheritColor || null : 'auto'; + return textConfig; + } + /** + * The uniform entry of set text style, that is, retrieve style definitions + * from `model` and set to `textStyle` object. + * + * Never in merge mode, but in overwrite mode, that is, all of the text style + * properties will be set. (Consider the states of normal and emphasis and + * default value can be adopted, merge would make the logic too complicated + * to manage.) + */ + + function setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached) { + // Consider there will be abnormal when merge hover style to normal style if given default value. + opt = opt || EMPTY_OBJ; + var ecModel = textStyleModel.ecModel; + var globalTextStyle = ecModel && ecModel.option.textStyle; // Consider case: + // { + // data: [{ + // value: 12, + // label: { + // rich: { + // // no 'a' here but using parent 'a'. + // } + // } + // }], + // rich: { + // a: { ... } + // } + // } + + var richItemNames = getRichItemNames(textStyleModel); + var richResult; + + if (richItemNames) { + richResult = {}; + + for (var name_1 in richItemNames) { + if (richItemNames.hasOwnProperty(name_1)) { + // Cascade is supported in rich. + var richTextStyle = textStyleModel.getModel(['rich', name_1]); // In rich, never `disableBox`. + // FIXME: consider `label: {formatter: '{a|xx}', color: 'blue', rich: {a: {}}}`, + // the default color `'blue'` will not be adopted if no color declared in `rich`. + // That might confuses users. So probably we should put `textStyleModel` as the + // root ancestor of the `richTextStyle`. But that would be a break change. + + setTokenTextStyle(richResult[name_1] = {}, richTextStyle, globalTextStyle, opt, isNotNormal, isAttached, false, true); + } + } + } + + if (richResult) { + textStyle.rich = richResult; + } + + var overflow = textStyleModel.get('overflow'); + + if (overflow) { + textStyle.overflow = overflow; + } + + var margin = textStyleModel.get('minMargin'); + + if (margin != null) { + textStyle.margin = margin; + } + + setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isNotNormal, isAttached, true, false); + } // Consider case: + // { + // data: [{ + // value: 12, + // label: { + // rich: { + // // no 'a' here but using parent 'a'. + // } + // } + // }], + // rich: { + // a: { ... } + // } + // } + // TODO TextStyleModel + + + function getRichItemNames(textStyleModel) { + // Use object to remove duplicated names. + var richItemNameMap; + + while (textStyleModel && textStyleModel !== textStyleModel.ecModel) { + var rich = (textStyleModel.option || EMPTY_OBJ).rich; + + if (rich) { + richItemNameMap = richItemNameMap || {}; + var richKeys = keys(rich); + + for (var i = 0; i < richKeys.length; i++) { + var richKey = richKeys[i]; + richItemNameMap[richKey] = 1; + } + } + + textStyleModel = textStyleModel.parentModel; + } + + return richItemNameMap; + } + + var TEXT_PROPS_WITH_GLOBAL = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY']; + var TEXT_PROPS_SELF = ['align', 'lineHeight', 'width', 'height', 'tag', 'verticalAlign']; + var TEXT_PROPS_BOX = ['padding', 'borderWidth', 'borderRadius', 'borderDashOffset', 'backgroundColor', 'borderColor', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY']; + + function setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isNotNormal, isAttached, isBlock, inRich) { + // In merge mode, default value should not be given. + globalTextStyle = !isNotNormal && globalTextStyle || EMPTY_OBJ; + var inheritColor = opt && opt.inheritColor; + var fillColor = textStyleModel.getShallow('color'); + var strokeColor = textStyleModel.getShallow('textBorderColor'); + var opacity = retrieve2(textStyleModel.getShallow('opacity'), globalTextStyle.opacity); + + if (fillColor === 'inherit' || fillColor === 'auto') { + if ("development" !== 'production') { + if (fillColor === 'auto') { + deprecateReplaceLog('color: \'auto\'', 'color: \'inherit\''); + } + } + + if (inheritColor) { + fillColor = inheritColor; + } else { + fillColor = null; + } + } + + if (strokeColor === 'inherit' || strokeColor === 'auto') { + if ("development" !== 'production') { + if (strokeColor === 'auto') { + deprecateReplaceLog('color: \'auto\'', 'color: \'inherit\''); + } + } + + if (inheritColor) { + strokeColor = inheritColor; + } else { + strokeColor = null; + } + } + + if (!isAttached) { + // Only use default global textStyle.color if text is individual. + // Otherwise it will use the strategy of attached text color because text may be on a path. + fillColor = fillColor || globalTextStyle.color; + strokeColor = strokeColor || globalTextStyle.textBorderColor; + } + + if (fillColor != null) { + textStyle.fill = fillColor; + } + + if (strokeColor != null) { + textStyle.stroke = strokeColor; + } + + var textBorderWidth = retrieve2(textStyleModel.getShallow('textBorderWidth'), globalTextStyle.textBorderWidth); + + if (textBorderWidth != null) { + textStyle.lineWidth = textBorderWidth; + } + + var textBorderType = retrieve2(textStyleModel.getShallow('textBorderType'), globalTextStyle.textBorderType); + + if (textBorderType != null) { + textStyle.lineDash = textBorderType; + } + + var textBorderDashOffset = retrieve2(textStyleModel.getShallow('textBorderDashOffset'), globalTextStyle.textBorderDashOffset); + + if (textBorderDashOffset != null) { + textStyle.lineDashOffset = textBorderDashOffset; + } + + if (!isNotNormal && opacity == null && !inRich) { + opacity = opt && opt.defaultOpacity; + } + + if (opacity != null) { + textStyle.opacity = opacity; + } // TODO + + + if (!isNotNormal && !isAttached) { + // Set default finally. + if (textStyle.fill == null && opt.inheritColor) { + textStyle.fill = opt.inheritColor; + } + } // Do not use `getFont` here, because merge should be supported, where + // part of these properties may be changed in emphasis style, and the + // others should remain their original value got from normal style. + + + for (var i = 0; i < TEXT_PROPS_WITH_GLOBAL.length; i++) { + var key = TEXT_PROPS_WITH_GLOBAL[i]; + var val = retrieve2(textStyleModel.getShallow(key), globalTextStyle[key]); + + if (val != null) { + textStyle[key] = val; + } + } + + for (var i = 0; i < TEXT_PROPS_SELF.length; i++) { + var key = TEXT_PROPS_SELF[i]; + var val = textStyleModel.getShallow(key); + + if (val != null) { + textStyle[key] = val; + } + } + + if (textStyle.verticalAlign == null) { + var baseline = textStyleModel.getShallow('baseline'); + + if (baseline != null) { + textStyle.verticalAlign = baseline; + } + } + + if (!isBlock || !opt.disableBox) { + for (var i = 0; i < TEXT_PROPS_BOX.length; i++) { + var key = TEXT_PROPS_BOX[i]; + var val = textStyleModel.getShallow(key); + + if (val != null) { + textStyle[key] = val; + } + } + + var borderType = textStyleModel.getShallow('borderType'); + + if (borderType != null) { + textStyle.borderDash = borderType; + } + + if ((textStyle.backgroundColor === 'auto' || textStyle.backgroundColor === 'inherit') && inheritColor) { + if ("development" !== 'production') { + if (textStyle.backgroundColor === 'auto') { + deprecateReplaceLog('backgroundColor: \'auto\'', 'backgroundColor: \'inherit\''); + } + } + + textStyle.backgroundColor = inheritColor; + } + + if ((textStyle.borderColor === 'auto' || textStyle.borderColor === 'inherit') && inheritColor) { + if ("development" !== 'production') { + if (textStyle.borderColor === 'auto') { + deprecateReplaceLog('borderColor: \'auto\'', 'borderColor: \'inherit\''); + } + } + + textStyle.borderColor = inheritColor; + } + } + } + + function getFont(opt, ecModel) { + var gTextStyleModel = ecModel && ecModel.getModel('textStyle'); + return trim([// FIXME in node-canvas fontWeight is before fontStyle + opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'].join(' ')); + } + var labelInner = makeInner(); + function setLabelValueAnimation(label, labelStatesModels, value, getDefaultText) { + if (!label) { + return; + } + + var obj = labelInner(label); + obj.prevValue = obj.value; + obj.value = value; + var normalLabelModel = labelStatesModels.normal; + obj.valueAnimation = normalLabelModel.get('valueAnimation'); + + if (obj.valueAnimation) { + obj.precision = normalLabelModel.get('precision'); + obj.defaultInterpolatedText = getDefaultText; + obj.statesModels = labelStatesModels; + } + } + function animateLabelValue(textEl, dataIndex, data, animatableModel, labelFetcher) { + var labelInnerStore = labelInner(textEl); + + if (!labelInnerStore.valueAnimation || labelInnerStore.prevValue === labelInnerStore.value) { + // Value not changed, no new label animation + return; + } + + var defaultInterpolatedText = labelInnerStore.defaultInterpolatedText; // Consider the case that being animating, do not use the `obj.value`, + // Otherwise it will jump to the `obj.value` when this new animation started. + + var currValue = retrieve2(labelInnerStore.interpolatedValue, labelInnerStore.prevValue); + var targetValue = labelInnerStore.value; + + function during(percent) { + var interpolated = interpolateRawValues(data, labelInnerStore.precision, currValue, targetValue, percent); + labelInnerStore.interpolatedValue = percent === 1 ? null : interpolated; + var labelText = getLabelText({ + labelDataIndex: dataIndex, + labelFetcher: labelFetcher, + defaultText: defaultInterpolatedText ? defaultInterpolatedText(interpolated) : interpolated + '' + }, labelInnerStore.statesModels, interpolated); + setLabelText(textEl, labelText); + } + + textEl.percent = 0; + (labelInnerStore.prevValue == null ? initProps : updateProps)(textEl, { + // percent is used to prevent animation from being aborted #15916 + percent: 1 + }, animatableModel, dataIndex, null, during); + } + + var PATH_COLOR = ['textStyle', 'color']; // TODO Performance improvement? + + var tmpRichText = new ZRText(); + + var TextStyleMixin = + /** @class */ + function () { + function TextStyleMixin() {} + /** + * Get color property or get color from option.textStyle.color + */ + // TODO Callback + + + TextStyleMixin.prototype.getTextColor = function (isEmphasis) { + var ecModel = this.ecModel; + return this.getShallow('color') || (!isEmphasis && ecModel ? ecModel.get(PATH_COLOR) : null); + }; + /** + * Create font string from fontStyle, fontWeight, fontSize, fontFamily + * @return {string} + */ + + + TextStyleMixin.prototype.getFont = function () { + return getFont({ + fontStyle: this.getShallow('fontStyle'), + fontWeight: this.getShallow('fontWeight'), + fontSize: this.getShallow('fontSize'), + fontFamily: this.getShallow('fontFamily') + }, this.ecModel); + }; + + TextStyleMixin.prototype.getTextRect = function (text) { + tmpRichText.useStyle({ + text: text, + fontStyle: this.getShallow('fontStyle'), + fontWeight: this.getShallow('fontWeight'), + fontSize: this.getShallow('fontSize'), + fontFamily: this.getShallow('fontFamily'), + verticalAlign: this.getShallow('verticalAlign') || this.getShallow('baseline'), + padding: this.getShallow('padding'), + lineHeight: this.getShallow('lineHeight'), + rich: this.getShallow('rich') + }); + tmpRichText.update(); + return tmpRichText.getBoundingRect(); + }; + + return TextStyleMixin; + }(); + + var LINE_STYLE_KEY_MAP = [['lineWidth', 'width'], ['stroke', 'color'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'], ['lineDash', 'type'], ['lineDashOffset', 'dashOffset'], ['lineCap', 'cap'], ['lineJoin', 'join'], ['miterLimit'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`. + // So do not transfer decal directly. + ]; + var getLineStyle = makeStyleMapper(LINE_STYLE_KEY_MAP); + + var LineStyleMixin = + /** @class */ + function () { + function LineStyleMixin() {} + + LineStyleMixin.prototype.getLineStyle = function (excludes) { + return getLineStyle(this, excludes); + }; + + return LineStyleMixin; + }(); + + var ITEM_STYLE_KEY_MAP = [['fill', 'color'], ['stroke', 'borderColor'], ['lineWidth', 'borderWidth'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'], ['lineDash', 'borderType'], ['lineDashOffset', 'borderDashOffset'], ['lineCap', 'borderCap'], ['lineJoin', 'borderJoin'], ['miterLimit', 'borderMiterLimit'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`. + // So do not transfer decal directly. + ]; + var getItemStyle = makeStyleMapper(ITEM_STYLE_KEY_MAP); + + var ItemStyleMixin = + /** @class */ + function () { + function ItemStyleMixin() {} + + ItemStyleMixin.prototype.getItemStyle = function (excludes, includes) { + return getItemStyle(this, excludes, includes); + }; + + return ItemStyleMixin; + }(); + + var Model = + /** @class */ + function () { + function Model(option, parentModel, ecModel) { + this.parentModel = parentModel; + this.ecModel = ecModel; + this.option = option; // Simple optimization + // if (this.init) { + // if (arguments.length <= 4) { + // this.init(option, parentModel, ecModel, extraOpt); + // } + // else { + // this.init.apply(this, arguments); + // } + // } + } + + Model.prototype.init = function (option, parentModel, ecModel) { + var rest = []; + + for (var _i = 3; _i < arguments.length; _i++) { + rest[_i - 3] = arguments[_i]; + } + }; + /** + * Merge the input option to me. + */ + + + Model.prototype.mergeOption = function (option, ecModel) { + merge(this.option, option, true); + }; // `path` can be 'xxx.yyy.zzz', so the return value type have to be `ModelOption` + // TODO: TYPE strict key check? + // get(path: string | string[], ignoreParent?: boolean): ModelOption; + + + Model.prototype.get = function (path, ignoreParent) { + if (path == null) { + return this.option; + } + + return this._doGet(this.parsePath(path), !ignoreParent && this.parentModel); + }; + + Model.prototype.getShallow = function (key, ignoreParent) { + var option = this.option; + var val = option == null ? option : option[key]; + + if (val == null && !ignoreParent) { + var parentModel = this.parentModel; + + if (parentModel) { + // FIXME:TS do not know how to make it works + val = parentModel.getShallow(key); + } + } + + return val; + }; // `path` can be 'xxx.yyy.zzz', so the return value type have to be `Model` + // getModel(path: string | string[], parentModel?: Model): Model; + // TODO 'xxx.yyy.zzz' is deprecated + + + Model.prototype.getModel = function (path, parentModel) { + var hasPath = path != null; + var pathFinal = hasPath ? this.parsePath(path) : null; + var obj = hasPath ? this._doGet(pathFinal) : this.option; + parentModel = parentModel || this.parentModel && this.parentModel.getModel(this.resolveParentPath(pathFinal)); + return new Model(obj, parentModel, this.ecModel); + }; + /** + * Squash option stack into one. + * parentModel will be removed after squashed. + * + * NOTE: resolveParentPath will not be applied here for simplicity. DON'T use this function + * if resolveParentPath is modified. + * + * @param deepMerge If do deep merge. Default to be false. + */ + // squash( + // deepMerge?: boolean, + // handleCallback?: (func: () => object) => object + // ) { + // const optionStack = []; + // let model: Model = this; + // while (model) { + // if (model.option) { + // optionStack.push(model.option); + // } + // model = model.parentModel; + // } + // const newOption = {} as Opt; + // let option; + // while (option = optionStack.pop()) { // Top down merge + // if (isFunction(option) && handleCallback) { + // option = handleCallback(option); + // } + // if (deepMerge) { + // merge(newOption, option); + // } + // else { + // extend(newOption, option); + // } + // } + // // Remove parentModel + // this.option = newOption; + // this.parentModel = null; + // } + + /** + * If model has option + */ + + + Model.prototype.isEmpty = function () { + return this.option == null; + }; + + Model.prototype.restoreData = function () {}; // Pending + + + Model.prototype.clone = function () { + var Ctor = this.constructor; + return new Ctor(clone(this.option)); + }; // setReadOnly(properties): void { + // clazzUtil.setReadOnly(this, properties); + // } + // If path is null/undefined, return null/undefined. + + + Model.prototype.parsePath = function (path) { + if (typeof path === 'string') { + return path.split('.'); + } + + return path; + }; // Resolve path for parent. Perhaps useful when parent use a different property. + // Default to be a identity resolver. + // Can be modified to a different resolver. + + + Model.prototype.resolveParentPath = function (path) { + return path; + }; // FIXME:TS check whether put this method here + + + Model.prototype.isAnimationEnabled = function () { + if (!env.node && this.option) { + if (this.option.animation != null) { + return !!this.option.animation; + } else if (this.parentModel) { + return this.parentModel.isAnimationEnabled(); + } + } + }; + + Model.prototype._doGet = function (pathArr, parentModel) { + var obj = this.option; + + if (!pathArr) { + return obj; + } + + for (var i = 0; i < pathArr.length; i++) { + // Ignore empty + if (!pathArr[i]) { + continue; + } // obj could be number/string/... (like 0) + + + obj = obj && typeof obj === 'object' ? obj[pathArr[i]] : null; + + if (obj == null) { + break; + } + } + + if (obj == null && parentModel) { + obj = parentModel._doGet(this.resolveParentPath(pathArr), parentModel.parentModel); + } + + return obj; + }; + + return Model; + }(); + + enableClassExtend(Model); + enableClassCheck(Model); + mixin(Model, LineStyleMixin); + mixin(Model, ItemStyleMixin); + mixin(Model, AreaStyleMixin); + mixin(Model, TextStyleMixin); + + var base = Math.round(Math.random() * 10); + /** + * @public + * @param {string} type + * @return {string} + */ + + function getUID(type) { + // Considering the case of crossing js context, + // use Math.random to make id as unique as possible. + return [type || '', base++].join('_'); + } + /** + * Implements `SubTypeDefaulterManager` for `target`. + */ + + function enableSubTypeDefaulter(target) { + var subTypeDefaulters = {}; + + target.registerSubTypeDefaulter = function (componentType, defaulter) { + var componentTypeInfo = parseClassType(componentType); + subTypeDefaulters[componentTypeInfo.main] = defaulter; + }; + + target.determineSubType = function (componentType, option) { + var type = option.type; + + if (!type) { + var componentTypeMain = parseClassType(componentType).main; + + if (target.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) { + type = subTypeDefaulters[componentTypeMain](option); + } + } + + return type; + }; + } + /** + * Implements `TopologicalTravelable` for `entity`. + * + * Topological travel on Activity Network (Activity On Vertices). + * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis']. + * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology. + * If there is circular dependencey, Error will be thrown. + */ + + function enableTopologicalTravel(entity, dependencyGetter) { + /** + * @param targetNameList Target Component type list. + * Can be ['aa', 'bb', 'aa.xx'] + * @param fullNameList By which we can build dependency graph. + * @param callback Params: componentType, dependencies. + * @param context Scope of callback. + */ + entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) { + if (!targetNameList.length) { + return; + } + + var result = makeDepndencyGraph(fullNameList); + var graph = result.graph; + var noEntryList = result.noEntryList; + var targetNameSet = {}; + each(targetNameList, function (name) { + targetNameSet[name] = true; + }); + + while (noEntryList.length) { + var currComponentType = noEntryList.pop(); + var currVertex = graph[currComponentType]; + var isInTargetNameSet = !!targetNameSet[currComponentType]; + + if (isInTargetNameSet) { + callback.call(context, currComponentType, currVertex.originalDeps.slice()); + delete targetNameSet[currComponentType]; + } + + each(currVertex.successor, isInTargetNameSet ? removeEdgeAndAdd : removeEdge); + } + + each(targetNameSet, function () { + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = makePrintable('Circular dependency may exists: ', targetNameSet, targetNameList, fullNameList); + } + + throw new Error(errMsg); + }); + + function removeEdge(succComponentType) { + graph[succComponentType].entryCount--; + + if (graph[succComponentType].entryCount === 0) { + noEntryList.push(succComponentType); + } + } // Consider this case: legend depends on series, and we call + // chart.setOption({series: [...]}), where only series is in option. + // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will + // not be called, but only sereis.mergeOption is called. Thus legend + // have no chance to update its local record about series (like which + // name of series is available in legend). + + + function removeEdgeAndAdd(succComponentType) { + targetNameSet[succComponentType] = true; + removeEdge(succComponentType); + } + }; + + function makeDepndencyGraph(fullNameList) { + var graph = {}; + var noEntryList = []; + each(fullNameList, function (name) { + var thisItem = createDependencyGraphItem(graph, name); + var originalDeps = thisItem.originalDeps = dependencyGetter(name); + var availableDeps = getAvailableDependencies(originalDeps, fullNameList); + thisItem.entryCount = availableDeps.length; + + if (thisItem.entryCount === 0) { + noEntryList.push(name); + } + + each(availableDeps, function (dependentName) { + if (indexOf(thisItem.predecessor, dependentName) < 0) { + thisItem.predecessor.push(dependentName); + } + + var thatItem = createDependencyGraphItem(graph, dependentName); + + if (indexOf(thatItem.successor, dependentName) < 0) { + thatItem.successor.push(name); + } + }); + }); + return { + graph: graph, + noEntryList: noEntryList + }; + } + + function createDependencyGraphItem(graph, name) { + if (!graph[name]) { + graph[name] = { + predecessor: [], + successor: [] + }; + } + + return graph[name]; + } + + function getAvailableDependencies(originalDeps, fullNameList) { + var availableDeps = []; + each(originalDeps, function (dep) { + indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep); + }); + return availableDeps; + } + } + function inheritDefaultOption(superOption, subOption) { + // See also `model/Component.ts#getDefaultOption` + return merge(merge({}, superOption, true), subOption, true); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + /** + * Language: English. + */ + var langEN = { + time: { + month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthAbbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayOfWeek: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayOfWeekAbbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] + }, + legend: { + selector: { + all: 'All', + inverse: 'Inv' + } + }, + toolbox: { + brush: { + title: { + rect: 'Box Select', + polygon: 'Lasso Select', + lineX: 'Horizontally Select', + lineY: 'Vertically Select', + keep: 'Keep Selections', + clear: 'Clear Selections' + } + }, + dataView: { + title: 'Data View', + lang: ['Data View', 'Close', 'Refresh'] + }, + dataZoom: { + title: { + zoom: 'Zoom', + back: 'Zoom Reset' + } + }, + magicType: { + title: { + line: 'Switch to Line Chart', + bar: 'Switch to Bar Chart', + stack: 'Stack', + tiled: 'Tile' + } + }, + restore: { + title: 'Restore' + }, + saveAsImage: { + title: 'Save as Image', + lang: ['Right Click to Save Image'] + } + }, + series: { + typeNames: { + pie: 'Pie chart', + bar: 'Bar chart', + line: 'Line chart', + scatter: 'Scatter plot', + effectScatter: 'Ripple scatter plot', + radar: 'Radar chart', + tree: 'Tree', + treemap: 'Treemap', + boxplot: 'Boxplot', + candlestick: 'Candlestick', + k: 'K line chart', + heatmap: 'Heat map', + map: 'Map', + parallel: 'Parallel coordinate map', + lines: 'Line graph', + graph: 'Relationship graph', + sankey: 'Sankey diagram', + funnel: 'Funnel chart', + gauge: 'Gauge', + pictorialBar: 'Pictorial bar', + themeRiver: 'Theme River Map', + sunburst: 'Sunburst' + } + }, + aria: { + general: { + withTitle: 'This is a chart about "{title}"', + withoutTitle: 'This is a chart' + }, + series: { + single: { + prefix: '', + withName: ' with type {seriesType} named {seriesName}.', + withoutName: ' with type {seriesType}.' + }, + multiple: { + prefix: '. It consists of {seriesCount} series count.', + withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.', + withoutName: ' The {seriesId} series is a {seriesType}.', + separator: { + middle: '', + end: '' + } + } + }, + data: { + allData: 'The data is as follows: ', + partialData: 'The first {displayCnt} items are: ', + withName: 'the data for {name} is {value}', + withoutName: '{value}', + separator: { + middle: ', ', + end: '. ' + } + } + } + }; + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var langZH = { + time: { + month: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + monthAbbr: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + dayOfWeek: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], + dayOfWeekAbbr: ['日', '一', '二', '三', '四', '五', '六'] + }, + legend: { + selector: { + all: '全选', + inverse: '反选' + } + }, + toolbox: { + brush: { + title: { + rect: '矩形选择', + polygon: '圈选', + lineX: '横向选择', + lineY: '纵向选择', + keep: '保持选择', + clear: '清除选择' + } + }, + dataView: { + title: '数据视图', + lang: ['数据视图', '关闭', '刷新'] + }, + dataZoom: { + title: { + zoom: '区域缩放', + back: '区域缩放还原' + } + }, + magicType: { + title: { + line: '切换为折线图', + bar: '切换为柱状图', + stack: '切换为堆叠', + tiled: '切换为平铺' + } + }, + restore: { + title: '还原' + }, + saveAsImage: { + title: '保存为图片', + lang: ['右键另存为图片'] + } + }, + series: { + typeNames: { + pie: '饼图', + bar: '柱状图', + line: '折线图', + scatter: '散点图', + effectScatter: '涟漪散点图', + radar: '雷达图', + tree: '树图', + treemap: '矩形树图', + boxplot: '箱型图', + candlestick: 'K线图', + k: 'K线图', + heatmap: '热力图', + map: '地图', + parallel: '平行坐标图', + lines: '线图', + graph: '关系图', + sankey: '桑基图', + funnel: '漏斗图', + gauge: '仪表盘图', + pictorialBar: '象形柱图', + themeRiver: '主题河流图', + sunburst: '旭日图' + } + }, + aria: { + general: { + withTitle: '这是一个关于“{title}”的图表。', + withoutTitle: '这是一个图表,' + }, + series: { + single: { + prefix: '', + withName: '图表类型是{seriesType},表示{seriesName}。', + withoutName: '图表类型是{seriesType}。' + }, + multiple: { + prefix: '它由{seriesCount}个图表系列组成。', + withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},', + withoutName: '第{seriesId}个系列是一个{seriesType},', + separator: { + middle: ';', + end: '。' + } + } + }, + data: { + allData: '其数据是——', + partialData: '其中,前{displayCnt}项是——', + withName: '{name}的数据是{value}', + withoutName: '{value}', + separator: { + middle: ',', + end: '' + } + } + } + }; + + var LOCALE_ZH = 'ZH'; + var LOCALE_EN = 'EN'; + var DEFAULT_LOCALE = LOCALE_EN; + var localeStorage = {}; + var localeModels = {}; + var SYSTEM_LANG = !env.domSupported ? DEFAULT_LOCALE : function () { + var langStr = ( + /* eslint-disable-next-line */ + document.documentElement.lang || navigator.language || navigator.browserLanguage).toUpperCase(); + return langStr.indexOf(LOCALE_ZH) > -1 ? LOCALE_ZH : DEFAULT_LOCALE; + }(); + function registerLocale(locale, localeObj) { + locale = locale.toUpperCase(); + localeModels[locale] = new Model(localeObj); + localeStorage[locale] = localeObj; + } // export function getLocale(locale: string) { + // return localeStorage[locale]; + // } + + function createLocaleObject(locale) { + if (isString(locale)) { + var localeObj = localeStorage[locale.toUpperCase()] || {}; + + if (locale === LOCALE_ZH || locale === LOCALE_EN) { + return clone(localeObj); + } else { + return merge(clone(localeObj), clone(localeStorage[DEFAULT_LOCALE]), false); + } + } else { + return merge(clone(locale), clone(localeStorage[DEFAULT_LOCALE]), false); + } + } + function getLocaleModel(lang) { + return localeModels[lang]; + } + function getDefaultLocaleModel() { + return localeModels[DEFAULT_LOCALE]; + } // Default locale + + registerLocale(LOCALE_EN, langEN); + registerLocale(LOCALE_ZH, langZH); + + var ONE_SECOND = 1000; + var ONE_MINUTE = ONE_SECOND * 60; + var ONE_HOUR = ONE_MINUTE * 60; + var ONE_DAY = ONE_HOUR * 24; + var ONE_YEAR = ONE_DAY * 365; + var defaultLeveledFormatter = { + year: '{yyyy}', + month: '{MMM}', + day: '{d}', + hour: '{HH}:{mm}', + minute: '{HH}:{mm}', + second: '{HH}:{mm}:{ss}', + millisecond: '{HH}:{mm}:{ss} {SSS}', + none: '{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}' + }; + var fullDayFormatter = '{yyyy}-{MM}-{dd}'; + var fullLeveledFormatter = { + year: '{yyyy}', + month: '{yyyy}-{MM}', + day: fullDayFormatter, + hour: fullDayFormatter + ' ' + defaultLeveledFormatter.hour, + minute: fullDayFormatter + ' ' + defaultLeveledFormatter.minute, + second: fullDayFormatter + ' ' + defaultLeveledFormatter.second, + millisecond: defaultLeveledFormatter.none + }; + var primaryTimeUnits = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond']; + var timeUnits = ['year', 'half-year', 'quarter', 'month', 'week', 'half-week', 'day', 'half-day', 'quarter-day', 'hour', 'minute', 'second', 'millisecond']; + function pad(str, len) { + str += ''; + return '0000'.substr(0, len - str.length) + str; + } + function getPrimaryTimeUnit(timeUnit) { + switch (timeUnit) { + case 'half-year': + case 'quarter': + return 'month'; + + case 'week': + case 'half-week': + return 'day'; + + case 'half-day': + case 'quarter-day': + return 'hour'; + + default: + // year, minutes, second, milliseconds + return timeUnit; + } + } + function isPrimaryTimeUnit(timeUnit) { + return timeUnit === getPrimaryTimeUnit(timeUnit); + } + function getDefaultFormatPrecisionOfInterval(timeUnit) { + switch (timeUnit) { + case 'year': + case 'month': + return 'day'; + + case 'millisecond': + return 'millisecond'; + + default: + // Also for day, hour, minute, second + return 'second'; + } + } + function format( // Note: The result based on `isUTC` are totally different, which can not be just simply + // substituted by the result without `isUTC`. So we make the param `isUTC` mandatory. + time, template, isUTC, lang) { + var date = parseDate(time); + var y = date[fullYearGetterName(isUTC)](); + var M = date[monthGetterName(isUTC)]() + 1; + var q = Math.floor((M - 1) / 4) + 1; + var d = date[dateGetterName(isUTC)](); + var e = date['get' + (isUTC ? 'UTC' : '') + 'Day'](); + var H = date[hoursGetterName(isUTC)](); + var h = (H - 1) % 12 + 1; + var m = date[minutesGetterName(isUTC)](); + var s = date[secondsGetterName(isUTC)](); + var S = date[millisecondsGetterName(isUTC)](); + var localeModel = lang instanceof Model ? lang : getLocaleModel(lang || SYSTEM_LANG) || getDefaultLocaleModel(); + var timeModel = localeModel.getModel('time'); + var month = timeModel.get('month'); + var monthAbbr = timeModel.get('monthAbbr'); + var dayOfWeek = timeModel.get('dayOfWeek'); + var dayOfWeekAbbr = timeModel.get('dayOfWeekAbbr'); + return (template || '').replace(/{yyyy}/g, y + '').replace(/{yy}/g, y % 100 + '').replace(/{Q}/g, q + '').replace(/{MMMM}/g, month[M - 1]).replace(/{MMM}/g, monthAbbr[M - 1]).replace(/{MM}/g, pad(M, 2)).replace(/{M}/g, M + '').replace(/{dd}/g, pad(d, 2)).replace(/{d}/g, d + '').replace(/{eeee}/g, dayOfWeek[e]).replace(/{ee}/g, dayOfWeekAbbr[e]).replace(/{e}/g, e + '').replace(/{HH}/g, pad(H, 2)).replace(/{H}/g, H + '').replace(/{hh}/g, pad(h + '', 2)).replace(/{h}/g, h + '').replace(/{mm}/g, pad(m, 2)).replace(/{m}/g, m + '').replace(/{ss}/g, pad(s, 2)).replace(/{s}/g, s + '').replace(/{SSS}/g, pad(S, 3)).replace(/{S}/g, S + ''); + } + function leveledFormat(tick, idx, formatter, lang, isUTC) { + var template = null; + + if (typeof formatter === 'string') { + // Single formatter for all units at all levels + template = formatter; + } else if (typeof formatter === 'function') { + // Callback formatter + template = formatter(tick.value, idx, { + level: tick.level + }); + } else { + var defaults$1 = extend({}, defaultLeveledFormatter); + + if (tick.level > 0) { + for (var i = 0; i < primaryTimeUnits.length; ++i) { + defaults$1[primaryTimeUnits[i]] = "{primary|" + defaults$1[primaryTimeUnits[i]] + "}"; + } + } + + var mergedFormatter = formatter ? formatter.inherit === false ? formatter // Use formatter with bigger units + : defaults(formatter, defaults$1) : defaults$1; + var unit = getUnitFromValue(tick.value, isUTC); + + if (mergedFormatter[unit]) { + template = mergedFormatter[unit]; + } else if (mergedFormatter.inherit) { + // Unit formatter is not defined and should inherit from bigger units + var targetId = timeUnits.indexOf(unit); + + for (var i = targetId - 1; i >= 0; --i) { + if (mergedFormatter[unit]) { + template = mergedFormatter[unit]; + break; + } + } + + template = template || defaults$1.none; + } + + if (isArray(template)) { + var levelId = tick.level == null ? 0 : tick.level >= 0 ? tick.level : template.length + tick.level; + levelId = Math.min(levelId, template.length - 1); + template = template[levelId]; + } + } + + return format(new Date(tick.value), template, isUTC, lang); + } + function getUnitFromValue(value, isUTC) { + var date = parseDate(value); + var M = date[monthGetterName(isUTC)]() + 1; + var d = date[dateGetterName(isUTC)](); + var h = date[hoursGetterName(isUTC)](); + var m = date[minutesGetterName(isUTC)](); + var s = date[secondsGetterName(isUTC)](); + var S = date[millisecondsGetterName(isUTC)](); + var isSecond = S === 0; + var isMinute = isSecond && s === 0; + var isHour = isMinute && m === 0; + var isDay = isHour && h === 0; + var isMonth = isDay && d === 1; + var isYear = isMonth && M === 1; + + if (isYear) { + return 'year'; + } else if (isMonth) { + return 'month'; + } else if (isDay) { + return 'day'; + } else if (isHour) { + return 'hour'; + } else if (isMinute) { + return 'minute'; + } else if (isSecond) { + return 'second'; + } else { + return 'millisecond'; + } + } + function getUnitValue(value, unit, isUTC) { + var date = typeof value === 'number' ? parseDate(value) : value; + unit = unit || getUnitFromValue(value, isUTC); + + switch (unit) { + case 'year': + return date[fullYearGetterName(isUTC)](); + + case 'half-year': + return date[monthGetterName(isUTC)]() >= 6 ? 1 : 0; + + case 'quarter': + return Math.floor((date[monthGetterName(isUTC)]() + 1) / 4); + + case 'month': + return date[monthGetterName(isUTC)](); + + case 'day': + return date[dateGetterName(isUTC)](); + + case 'half-day': + return date[hoursGetterName(isUTC)]() / 24; + + case 'hour': + return date[hoursGetterName(isUTC)](); + + case 'minute': + return date[minutesGetterName(isUTC)](); + + case 'second': + return date[secondsGetterName(isUTC)](); + + case 'millisecond': + return date[millisecondsGetterName(isUTC)](); + } + } + function fullYearGetterName(isUTC) { + return isUTC ? 'getUTCFullYear' : 'getFullYear'; + } + function monthGetterName(isUTC) { + return isUTC ? 'getUTCMonth' : 'getMonth'; + } + function dateGetterName(isUTC) { + return isUTC ? 'getUTCDate' : 'getDate'; + } + function hoursGetterName(isUTC) { + return isUTC ? 'getUTCHours' : 'getHours'; + } + function minutesGetterName(isUTC) { + return isUTC ? 'getUTCMinutes' : 'getMinutes'; + } + function secondsGetterName(isUTC) { + return isUTC ? 'getUTCSeconds' : 'getSeconds'; + } + function millisecondsGetterName(isUTC) { + return isUTC ? 'getUTCMilliseconds' : 'getMilliseconds'; + } + function fullYearSetterName(isUTC) { + return isUTC ? 'setUTCFullYear' : 'setFullYear'; + } + function monthSetterName(isUTC) { + return isUTC ? 'setUTCMonth' : 'setMonth'; + } + function dateSetterName(isUTC) { + return isUTC ? 'setUTCDate' : 'setDate'; + } + function hoursSetterName(isUTC) { + return isUTC ? 'setUTCHours' : 'setHours'; + } + function minutesSetterName(isUTC) { + return isUTC ? 'setUTCMinutes' : 'setMinutes'; + } + function secondsSetterName(isUTC) { + return isUTC ? 'setUTCSeconds' : 'setSeconds'; + } + function millisecondsSetterName(isUTC) { + return isUTC ? 'setUTCMilliseconds' : 'setMilliseconds'; + } + + function getTextRect(text, font, align, verticalAlign, padding, rich, truncate, lineHeight) { + var textEl = new ZRText({ + style: { + text: text, + font: font, + align: align, + verticalAlign: verticalAlign, + padding: padding, + rich: rich, + overflow: truncate ? 'truncate' : null, + lineHeight: lineHeight + } + }); + return textEl.getBoundingRect(); + } + + /** + * Add a comma each three digit. + */ + + function addCommas(x) { + if (!isNumeric(x)) { + return isString(x) ? x : '-'; + } + + var parts = (x + '').split('.'); + return parts[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + (parts.length > 1 ? '.' + parts[1] : ''); + } + function toCamelCase(str, upperCaseFirst) { + str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) { + return group1.toUpperCase(); + }); + + if (upperCaseFirst && str) { + str = str.charAt(0).toUpperCase() + str.slice(1); + } + + return str; + } + var normalizeCssArray$1 = normalizeCssArray; + var replaceReg = /([&<>"'])/g; + var replaceMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + '\'': ''' + }; + function encodeHTML(source) { + return source == null ? '' : (source + '').replace(replaceReg, function (str, c) { + return replaceMap[c]; + }); + } + /** + * Make value user readable for tooltip and label. + * "User readable": + * Try to not print programmer-specific text like NaN, Infinity, null, undefined. + * Avoid to display an empty string, which users can not recognize there is + * a value and it might look like a bug. + */ + + function makeValueReadable(value, valueType, useUTC) { + var USER_READABLE_DEFUALT_TIME_PATTERN = '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss}'; + + function stringToUserReadable(str) { + return str && trim(str) ? str : '-'; + } + + function isNumberUserReadable(num) { + return !!(num != null && !isNaN(num) && isFinite(num)); + } + + var isTypeTime = valueType === 'time'; + var isValueDate = value instanceof Date; + + if (isTypeTime || isValueDate) { + var date = isTypeTime ? parseDate(value) : value; + + if (!isNaN(+date)) { + return format(date, USER_READABLE_DEFUALT_TIME_PATTERN, useUTC); + } else if (isValueDate) { + return '-'; + } // In other cases, continue to try to display the value in the following code. + + } + + if (valueType === 'ordinal') { + return isStringSafe(value) ? stringToUserReadable(value) : isNumber(value) ? isNumberUserReadable(value) ? value + '' : '-' : '-'; + } // By default. + + + var numericResult = numericToNumber(value); + return isNumberUserReadable(numericResult) ? addCommas(numericResult) : isStringSafe(value) ? stringToUserReadable(value) : typeof value === 'boolean' ? value + '' : '-'; + } + var TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g']; + + var wrapVar = function (varName, seriesIdx) { + return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}'; + }; + /** + * Template formatter + * @param {Array.|Object} paramsList + */ + + + function formatTpl(tpl, paramsList, encode) { + if (!isArray(paramsList)) { + paramsList = [paramsList]; + } + + var seriesLen = paramsList.length; + + if (!seriesLen) { + return ''; + } + + var $vars = paramsList[0].$vars || []; + + for (var i = 0; i < $vars.length; i++) { + var alias = TPL_VAR_ALIAS[i]; + tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0)); + } + + for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) { + for (var k = 0; k < $vars.length; k++) { + var val = paramsList[seriesIdx][$vars[k]]; + tpl = tpl.replace(wrapVar(TPL_VAR_ALIAS[k], seriesIdx), encode ? encodeHTML(val) : val); + } + } + + return tpl; + } + /** + * simple Template formatter + */ + + function formatTplSimple(tpl, param, encode) { + each(param, function (value, key) { + tpl = tpl.replace('{' + key + '}', encode ? encodeHTML(value) : value); + }); + return tpl; + } + function getTooltipMarker(inOpt, extraCssText) { + var opt = isString(inOpt) ? { + color: inOpt, + extraCssText: extraCssText + } : inOpt || {}; + var color = opt.color; + var type = opt.type; + extraCssText = opt.extraCssText; + var renderMode = opt.renderMode || 'html'; + + if (!color) { + return ''; + } + + if (renderMode === 'html') { + return type === 'subItem' ? '' : ''; + } else { + // Should better not to auto generate style name by auto-increment number here. + // Because this util is usually called in tooltip formatter, which is probably + // called repeatly when mouse move and the auto-increment number increases fast. + // Users can make their own style name by theirselves, make it unique and readable. + var markerId = opt.markerId || 'markerX'; + return { + renderMode: renderMode, + content: '{' + markerId + '|} ', + style: type === 'subItem' ? { + width: 4, + height: 4, + borderRadius: 2, + backgroundColor: color + } : { + width: 10, + height: 10, + borderRadius: 5, + backgroundColor: color + } + }; + } + } + /** + * @deprecated Use `time/format` instead. + * ISO Date format + * @param {string} tpl + * @param {number} value + * @param {boolean} [isUTC=false] Default in local time. + * see `module:echarts/scale/Time` + * and `module:echarts/util/number#parseDate`. + * @inner + */ + + function formatTime(tpl, value, isUTC) { + if ("development" !== 'production') { + deprecateReplaceLog('echarts.format.formatTime', 'echarts.time.format'); + } + + if (tpl === 'week' || tpl === 'month' || tpl === 'quarter' || tpl === 'half-year' || tpl === 'year') { + tpl = 'MM-dd\nyyyy'; + } + + var date = parseDate(value); + var utc = isUTC ? 'UTC' : ''; + var y = date['get' + utc + 'FullYear'](); + var M = date['get' + utc + 'Month']() + 1; + var d = date['get' + utc + 'Date'](); + var h = date['get' + utc + 'Hours'](); + var m = date['get' + utc + 'Minutes'](); + var s = date['get' + utc + 'Seconds'](); + var S = date['get' + utc + 'Milliseconds'](); + tpl = tpl.replace('MM', pad(M, 2)).replace('M', M).replace('yyyy', y).replace('yy', y % 100 + '').replace('dd', pad(d, 2)).replace('d', d).replace('hh', pad(h, 2)).replace('h', h).replace('mm', pad(m, 2)).replace('m', m).replace('ss', pad(s, 2)).replace('s', s).replace('SSS', pad(S, 3)); + return tpl; + } + /** + * Capital first + * @param {string} str + * @return {string} + */ + + function capitalFirst(str) { + return str ? str.charAt(0).toUpperCase() + str.substr(1) : str; + } + /** + * @return Never be null/undefined. + */ + + function convertToColorString(color, defaultColor) { + defaultColor = defaultColor || 'transparent'; + return isString(color) ? color : isObject(color) ? color.colorStops && (color.colorStops[0] || {}).color || defaultColor : defaultColor; + } + /** + * open new tab + * @param link url + * @param target blank or self + */ + + function windowOpen(link, target) { + /* global window */ + if (target === '_blank' || target === 'blank') { + var blank = window.open(); + blank.opener = null; + blank.location.href = link; + } else { + window.open(link, target); + } + } + + var each$1 = each; + /** + * @public + */ + + var LOCATION_PARAMS = ['left', 'right', 'top', 'bottom', 'width', 'height']; + /** + * @public + */ + + var HV_NAMES = [['width', 'left', 'right'], ['height', 'top', 'bottom']]; + + function boxLayout(orient, group, gap, maxWidth, maxHeight) { + var x = 0; + var y = 0; + + if (maxWidth == null) { + maxWidth = Infinity; + } + + if (maxHeight == null) { + maxHeight = Infinity; + } + + var currentLineMaxSize = 0; + group.eachChild(function (child, idx) { + var rect = child.getBoundingRect(); + var nextChild = group.childAt(idx + 1); + var nextChildRect = nextChild && nextChild.getBoundingRect(); + var nextX; + var nextY; + + if (orient === 'horizontal') { + var moveX = rect.width + (nextChildRect ? -nextChildRect.x + rect.x : 0); + nextX = x + moveX; // Wrap when width exceeds maxWidth or meet a `newline` group + // FIXME compare before adding gap? + + if (nextX > maxWidth || child.newline) { + x = 0; + nextX = moveX; + y += currentLineMaxSize + gap; + currentLineMaxSize = rect.height; + } else { + // FIXME: consider rect.y is not `0`? + currentLineMaxSize = Math.max(currentLineMaxSize, rect.height); + } + } else { + var moveY = rect.height + (nextChildRect ? -nextChildRect.y + rect.y : 0); + nextY = y + moveY; // Wrap when width exceeds maxHeight or meet a `newline` group + + if (nextY > maxHeight || child.newline) { + x += currentLineMaxSize + gap; + y = 0; + nextY = moveY; + currentLineMaxSize = rect.width; + } else { + currentLineMaxSize = Math.max(currentLineMaxSize, rect.width); + } + } + + if (child.newline) { + return; + } + + child.x = x; + child.y = y; + child.markRedraw(); + orient === 'horizontal' ? x = nextX + gap : y = nextY + gap; + }); + } + /** + * VBox or HBox layouting + * @param {string} orient + * @param {module:zrender/graphic/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ + + + var box = boxLayout; + /** + * VBox layouting + * @param {module:zrender/graphic/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ + + var vbox = curry(boxLayout, 'vertical'); + /** + * HBox layouting + * @param {module:zrender/graphic/Group} group + * @param {number} gap + * @param {number} [width=Infinity] + * @param {number} [height=Infinity] + */ + + var hbox = curry(boxLayout, 'horizontal'); + /** + * If x or x2 is not specified or 'center' 'left' 'right', + * the width would be as long as possible. + * If y or y2 is not specified or 'middle' 'top' 'bottom', + * the height would be as long as possible. + */ + + function getAvailableSize(positionInfo, containerRect, margin) { + var containerWidth = containerRect.width; + var containerHeight = containerRect.height; + var x = parsePercent$1(positionInfo.left, containerWidth); + var y = parsePercent$1(positionInfo.top, containerHeight); + var x2 = parsePercent$1(positionInfo.right, containerWidth); + var y2 = parsePercent$1(positionInfo.bottom, containerHeight); + (isNaN(x) || isNaN(parseFloat(positionInfo.left))) && (x = 0); + (isNaN(x2) || isNaN(parseFloat(positionInfo.right))) && (x2 = containerWidth); + (isNaN(y) || isNaN(parseFloat(positionInfo.top))) && (y = 0); + (isNaN(y2) || isNaN(parseFloat(positionInfo.bottom))) && (y2 = containerHeight); + margin = normalizeCssArray$1(margin || 0); + return { + width: Math.max(x2 - x - margin[1] - margin[3], 0), + height: Math.max(y2 - y - margin[0] - margin[2], 0) + }; + } + /** + * Parse position info. + */ + + function getLayoutRect(positionInfo, containerRect, margin) { + margin = normalizeCssArray$1(margin || 0); + var containerWidth = containerRect.width; + var containerHeight = containerRect.height; + var left = parsePercent$1(positionInfo.left, containerWidth); + var top = parsePercent$1(positionInfo.top, containerHeight); + var right = parsePercent$1(positionInfo.right, containerWidth); + var bottom = parsePercent$1(positionInfo.bottom, containerHeight); + var width = parsePercent$1(positionInfo.width, containerWidth); + var height = parsePercent$1(positionInfo.height, containerHeight); + var verticalMargin = margin[2] + margin[0]; + var horizontalMargin = margin[1] + margin[3]; + var aspect = positionInfo.aspect; // If width is not specified, calculate width from left and right + + if (isNaN(width)) { + width = containerWidth - right - horizontalMargin - left; + } + + if (isNaN(height)) { + height = containerHeight - bottom - verticalMargin - top; + } + + if (aspect != null) { + // If width and height are not given + // 1. Graph should not exceeds the container + // 2. Aspect must be keeped + // 3. Graph should take the space as more as possible + // FIXME + // Margin is not considered, because there is no case that both + // using margin and aspect so far. + if (isNaN(width) && isNaN(height)) { + if (aspect > containerWidth / containerHeight) { + width = containerWidth * 0.8; + } else { + height = containerHeight * 0.8; + } + } // Calculate width or height with given aspect + + + if (isNaN(width)) { + width = aspect * height; + } + + if (isNaN(height)) { + height = width / aspect; + } + } // If left is not specified, calculate left from right and width + + + if (isNaN(left)) { + left = containerWidth - right - width - horizontalMargin; + } + + if (isNaN(top)) { + top = containerHeight - bottom - height - verticalMargin; + } // Align left and top + + + switch (positionInfo.left || positionInfo.right) { + case 'center': + left = containerWidth / 2 - width / 2 - margin[3]; + break; + + case 'right': + left = containerWidth - width - horizontalMargin; + break; + } + + switch (positionInfo.top || positionInfo.bottom) { + case 'middle': + case 'center': + top = containerHeight / 2 - height / 2 - margin[0]; + break; + + case 'bottom': + top = containerHeight - height - verticalMargin; + break; + } // If something is wrong and left, top, width, height are calculated as NaN + + + left = left || 0; + top = top || 0; + + if (isNaN(width)) { + // Width may be NaN if only one value is given except width + width = containerWidth - horizontalMargin - left - (right || 0); + } + + if (isNaN(height)) { + // Height may be NaN if only one value is given except height + height = containerHeight - verticalMargin - top - (bottom || 0); + } + + var rect = new BoundingRect(left + margin[3], top + margin[0], width, height); + rect.margin = margin; + return rect; + } + /** + * Position a zr element in viewport + * Group position is specified by either + * {left, top}, {right, bottom} + * If all properties exists, right and bottom will be igonred. + * + * Logic: + * 1. Scale (against origin point in parent coord) + * 2. Rotate (against origin point in parent coord) + * 3. Traslate (with el.position by this method) + * So this method only fixes the last step 'Traslate', which does not affect + * scaling and rotating. + * + * If be called repeatly with the same input el, the same result will be gotten. + * + * @param el Should have `getBoundingRect` method. + * @param positionInfo + * @param positionInfo.left + * @param positionInfo.top + * @param positionInfo.right + * @param positionInfo.bottom + * @param positionInfo.width Only for opt.boundingModel: 'raw' + * @param positionInfo.height Only for opt.boundingModel: 'raw' + * @param containerRect + * @param margin + * @param opt + * @param opt.hv Only horizontal or only vertical. Default to be [1, 1] + * @param opt.boundingMode + * Specify how to calculate boundingRect when locating. + * 'all': Position the boundingRect that is transformed and uioned + * both itself and its descendants. + * This mode simplies confine the elements in the bounding + * of their container (e.g., using 'right: 0'). + * 'raw': Position the boundingRect that is not transformed and only itself. + * This mode is useful when you want a element can overflow its + * container. (Consider a rotated circle needs to be located in a corner.) + * In this mode positionInfo.width/height can only be number. + */ + + function positionElement(el, positionInfo, containerRect, margin, opt) { + var h = !opt || !opt.hv || opt.hv[0]; + var v = !opt || !opt.hv || opt.hv[1]; + var boundingMode = opt && opt.boundingMode || 'all'; + + if (!h && !v) { + return; + } + + var rect; + + if (boundingMode === 'raw') { + rect = el.type === 'group' ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0) : el.getBoundingRect(); + } else { + rect = el.getBoundingRect(); + + if (el.needLocalTransform()) { + var transform = el.getLocalTransform(); // Notice: raw rect may be inner object of el, + // which should not be modified. + + rect = rect.clone(); + rect.applyTransform(transform); + } + } // The real width and height can not be specified but calculated by the given el. + + + var layoutRect = getLayoutRect(defaults({ + width: rect.width, + height: rect.height + }, positionInfo), containerRect, margin); // Because 'tranlate' is the last step in transform + // (see zrender/core/Transformable#getLocalTransform), + // we can just only modify el.position to get final result. + + var dx = h ? layoutRect.x - rect.x : 0; + var dy = v ? layoutRect.y - rect.y : 0; + + if (boundingMode === 'raw') { + el.x = dx; + el.y = dy; + } else { + el.x += dx; + el.y += dy; + } + + el.markRedraw(); + } + /** + * @param option Contains some of the properties in HV_NAMES. + * @param hvIdx 0: horizontal; 1: vertical. + */ + + function sizeCalculable(option, hvIdx) { + return option[HV_NAMES[hvIdx][0]] != null || option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null; + } + function fetchLayoutMode(ins) { + var layoutMode = ins.layoutMode || ins.constructor.layoutMode; + return isObject(layoutMode) ? layoutMode : layoutMode ? { + type: layoutMode + } : null; + } + /** + * Consider Case: + * When default option has {left: 0, width: 100}, and we set {right: 0} + * through setOption or media query, using normal zrUtil.merge will cause + * {right: 0} does not take effect. + * + * @example + * ComponentModel.extend({ + * init: function () { + * ... + * let inputPositionParams = layout.getLayoutParams(option); + * this.mergeOption(inputPositionParams); + * }, + * mergeOption: function (newOption) { + * newOption && zrUtil.merge(thisOption, newOption, true); + * layout.mergeLayoutParam(thisOption, newOption); + * } + * }); + * + * @param targetOption + * @param newOption + * @param opt + */ + + function mergeLayoutParam(targetOption, newOption, opt) { + var ignoreSize = opt && opt.ignoreSize; + !isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]); + var hResult = merge(HV_NAMES[0], 0); + var vResult = merge(HV_NAMES[1], 1); + copy(HV_NAMES[0], targetOption, hResult); + copy(HV_NAMES[1], targetOption, vResult); + + function merge(names, hvIdx) { + var newParams = {}; + var newValueCount = 0; + var merged = {}; + var mergedValueCount = 0; + var enoughParamNumber = 2; + each$1(names, function (name) { + merged[name] = targetOption[name]; + }); + each$1(names, function (name) { + // Consider case: newOption.width is null, which is + // set by user for removing width setting. + hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]); + hasValue(newParams, name) && newValueCount++; + hasValue(merged, name) && mergedValueCount++; + }); + + if (ignoreSize[hvIdx]) { + // Only one of left/right is premitted to exist. + if (hasValue(newOption, names[1])) { + merged[names[2]] = null; + } else if (hasValue(newOption, names[2])) { + merged[names[1]] = null; + } + + return merged; + } // Case: newOption: {width: ..., right: ...}, + // or targetOption: {right: ...} and newOption: {width: ...}, + // There is no conflict when merged only has params count + // little than enoughParamNumber. + + + if (mergedValueCount === enoughParamNumber || !newValueCount) { + return merged; + } // Case: newOption: {width: ..., right: ...}, + // Than we can make sure user only want those two, and ignore + // all origin params in targetOption. + else if (newValueCount >= enoughParamNumber) { + return newParams; + } else { + // Chose another param from targetOption by priority. + for (var i = 0; i < names.length; i++) { + var name_1 = names[i]; + + if (!hasProp(newParams, name_1) && hasProp(targetOption, name_1)) { + newParams[name_1] = targetOption[name_1]; + break; + } + } + + return newParams; + } + } + + function hasProp(obj, name) { + return obj.hasOwnProperty(name); + } + + function hasValue(obj, name) { + return obj[name] != null && obj[name] !== 'auto'; + } + + function copy(names, target, source) { + each$1(names, function (name) { + target[name] = source[name]; + }); + } + } + /** + * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object. + */ + + function getLayoutParams(source) { + return copyLayoutParams({}, source); + } + /** + * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object. + * @param {Object} source + * @return {Object} Result contains those props. + */ + + function copyLayoutParams(target, source) { + source && target && each$1(LOCATION_PARAMS, function (name) { + source.hasOwnProperty(name) && (target[name] = source[name]); + }); + return target; + } + + var inner = makeInner(); + + var ComponentModel = + /** @class */ + function (_super) { + __extends(ComponentModel, _super); + + function ComponentModel(option, parentModel, ecModel) { + var _this = _super.call(this, option, parentModel, ecModel) || this; + + _this.uid = getUID('ec_cpt_model'); + return _this; + } + + ComponentModel.prototype.init = function (option, parentModel, ecModel) { + this.mergeDefaultAndTheme(option, ecModel); + }; + + ComponentModel.prototype.mergeDefaultAndTheme = function (option, ecModel) { + var layoutMode = fetchLayoutMode(this); + var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; + var themeModel = ecModel.getTheme(); + merge(option, themeModel.get(this.mainType)); + merge(option, this.getDefaultOption()); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }; + + ComponentModel.prototype.mergeOption = function (option, ecModel) { + merge(this.option, option, true); + var layoutMode = fetchLayoutMode(this); + + if (layoutMode) { + mergeLayoutParam(this.option, option, layoutMode); + } + }; + /** + * Called immediately after `init` or `mergeOption` of this instance called. + */ + + + ComponentModel.prototype.optionUpdated = function (newCptOption, isInit) {}; + /** + * [How to declare defaultOption]: + * + * (A) If using class declaration in typescript (since echarts 5): + * ```ts + * import {ComponentOption} from '../model/option'; + * export interface XxxOption extends ComponentOption { + * aaa: number + * } + * export class XxxModel extends Component { + * static type = 'xxx'; + * static defaultOption: XxxOption = { + * aaa: 123 + * } + * } + * Component.registerClass(XxxModel); + * ``` + * ```ts + * import {inheritDefaultOption} from '../util/component'; + * import {XxxModel, XxxOption} from './XxxModel'; + * export interface XxxSubOption extends XxxOption { + * bbb: number + * } + * class XxxSubModel extends XxxModel { + * static defaultOption: XxxSubOption = inheritDefaultOption(XxxModel.defaultOption, { + * bbb: 456 + * }) + * fn() { + * let opt = this.getDefaultOption(); + * // opt is {aaa: 123, bbb: 456} + * } + * } + * ``` + * + * (B) If using class extend (previous approach in echarts 3 & 4): + * ```js + * let XxxComponent = Component.extend({ + * defaultOption: { + * xx: 123 + * } + * }) + * ``` + * ```js + * let XxxSubComponent = XxxComponent.extend({ + * defaultOption: { + * yy: 456 + * }, + * fn: function () { + * let opt = this.getDefaultOption(); + * // opt is {xx: 123, yy: 456} + * } + * }) + * ``` + */ + + + ComponentModel.prototype.getDefaultOption = function () { + var ctor = this.constructor; // If using class declaration, it is different to travel super class + // in legacy env and auto merge defaultOption. So if using class + // declaration, defaultOption should be merged manually. + + if (!isExtendedClass(ctor)) { + // When using ts class, defaultOption must be declared as static. + return ctor.defaultOption; + } // FIXME: remove this approach? + + + var fields = inner(this); + + if (!fields.defaultOption) { + var optList = []; + var clz = ctor; + + while (clz) { + var opt = clz.prototype.defaultOption; + opt && optList.push(opt); + clz = clz.superClass; + } + + var defaultOption = {}; + + for (var i = optList.length - 1; i >= 0; i--) { + defaultOption = merge(defaultOption, optList[i], true); + } + + fields.defaultOption = defaultOption; + } + + return fields.defaultOption; + }; + /** + * Notice: always force to input param `useDefault` in case that forget to consider it. + * The same behavior as `modelUtil.parseFinder`. + * + * @param useDefault In many cases like series refer axis and axis refer grid, + * If axis index / axis id not specified, use the first target as default. + * In other cases like dataZoom refer axis, if not specified, measn no refer. + */ + + + ComponentModel.prototype.getReferringComponents = function (mainType, opt) { + var indexKey = mainType + 'Index'; + var idKey = mainType + 'Id'; + return queryReferringComponents(this.ecModel, mainType, { + index: this.get(indexKey, true), + id: this.get(idKey, true) + }, opt); + }; + + ComponentModel.prototype.getBoxLayoutParams = function () { + // Consider itself having box layout configs. + var boxLayoutModel = this; + return { + left: boxLayoutModel.get('left'), + top: boxLayoutModel.get('top'), + right: boxLayoutModel.get('right'), + bottom: boxLayoutModel.get('bottom'), + width: boxLayoutModel.get('width'), + height: boxLayoutModel.get('height') + }; + }; + + ComponentModel.protoInitialize = function () { + var proto = ComponentModel.prototype; + proto.type = 'component'; + proto.id = ''; + proto.name = ''; + proto.mainType = ''; + proto.subType = ''; + proto.componentIndex = 0; + }(); + + return ComponentModel; + }(Model); + + mountExtend(ComponentModel, Model); + enableClassManagement(ComponentModel); + enableSubTypeDefaulter(ComponentModel); + enableTopologicalTravel(ComponentModel, getDependencies); + + function getDependencies(componentType) { + var deps = []; + each(ComponentModel.getClassesByMainType(componentType), function (clz) { + deps = deps.concat(clz.dependencies || clz.prototype.dependencies || []); + }); // Ensure main type. + + deps = map(deps, function (type) { + return parseClassType(type).main; + }); // Hack dataset for convenience. + + if (componentType !== 'dataset' && indexOf(deps, 'dataset') <= 0) { + deps.unshift('dataset'); + } + + return deps; + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var platform = ''; // Navigator not exists in node + + if (typeof navigator !== 'undefined') { + /* global navigator */ + platform = navigator.platform || ''; + } + + var decalColor = 'rgba(0, 0, 0, 0.2)'; + var globalDefault = { + darkMode: 'auto', + // backgroundColor: 'rgba(0,0,0,0)', + colorBy: 'series', + color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'], + gradientColor: ['#f6efa6', '#d88273', '#bf444c'], + aria: { + decal: { + decals: [{ + color: decalColor, + dashArrayX: [1, 0], + dashArrayY: [2, 5], + symbolSize: 1, + rotation: Math.PI / 6 + }, { + color: decalColor, + symbol: 'circle', + dashArrayX: [[8, 8], [0, 8, 8, 0]], + dashArrayY: [6, 0], + symbolSize: 0.8 + }, { + color: decalColor, + dashArrayX: [1, 0], + dashArrayY: [4, 3], + rotation: -Math.PI / 4 + }, { + color: decalColor, + dashArrayX: [[6, 6], [0, 6, 6, 0]], + dashArrayY: [6, 0] + }, { + color: decalColor, + dashArrayX: [[1, 0], [1, 6]], + dashArrayY: [1, 0, 6, 0], + rotation: Math.PI / 4 + }, { + color: decalColor, + symbol: 'triangle', + dashArrayX: [[9, 9], [0, 9, 9, 0]], + dashArrayY: [7, 2], + symbolSize: 0.75 + }] + } + }, + // If xAxis and yAxis declared, grid is created by default. + // grid: {}, + textStyle: { + // color: '#000', + // decoration: 'none', + // PENDING + fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif', + // fontFamily: 'Arial, Verdana, sans-serif', + fontSize: 12, + fontStyle: 'normal', + fontWeight: 'normal' + }, + // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/ + // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation + // Default is source-over + blendMode: null, + stateAnimation: { + duration: 300, + easing: 'cubicOut' + }, + animation: 'auto', + animationDuration: 1000, + animationDurationUpdate: 500, + animationEasing: 'cubicInOut', + animationEasingUpdate: 'cubicInOut', + animationThreshold: 2000, + // Configuration for progressive/incremental rendering + progressiveThreshold: 3000, + progressive: 400, + // Threshold of if use single hover layer to optimize. + // It is recommended that `hoverLayerThreshold` is equivalent to or less than + // `progressiveThreshold`, otherwise hover will cause restart of progressive, + // which is unexpected. + // see example . + hoverLayerThreshold: 3000, + // See: module:echarts/scale/Time + useUTC: false + }; + + var VISUAL_DIMENSIONS = createHashMap(['tooltip', 'label', 'itemName', 'itemId', 'itemGroupId', 'seriesName']); + var SOURCE_FORMAT_ORIGINAL = 'original'; + var SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows'; + var SOURCE_FORMAT_OBJECT_ROWS = 'objectRows'; + var SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns'; + var SOURCE_FORMAT_TYPED_ARRAY = 'typedArray'; + var SOURCE_FORMAT_UNKNOWN = 'unknown'; + var SERIES_LAYOUT_BY_COLUMN = 'column'; + var SERIES_LAYOUT_BY_ROW = 'row'; + + var BE_ORDINAL = { + Must: 1, + Might: 2, + Not: 3 // Other cases + + }; + var innerGlobalModel = makeInner(); + /** + * MUST be called before mergeOption of all series. + */ + + function resetSourceDefaulter(ecModel) { + // `datasetMap` is used to make default encode. + innerGlobalModel(ecModel).datasetMap = createHashMap(); + } + /** + * [The strategy of the arrengment of data dimensions for dataset]: + * "value way": all axes are non-category axes. So series one by one take + * several (the number is coordSysDims.length) dimensions from dataset. + * The result of data arrengment of data dimensions like: + * | ser0_x | ser0_y | ser1_x | ser1_y | ser2_x | ser2_y | + * "category way": at least one axis is category axis. So the the first data + * dimension is always mapped to the first category axis and shared by + * all of the series. The other data dimensions are taken by series like + * "value way" does. + * The result of data arrengment of data dimensions like: + * | ser_shared_x | ser0_y | ser1_y | ser2_y | + * + * @return encode Never be `null/undefined`. + */ + + function makeSeriesEncodeForAxisCoordSys(coordDimensions, seriesModel, source) { + var encode = {}; + var datasetModel = querySeriesUpstreamDatasetModel(seriesModel); // Currently only make default when using dataset, util more reqirements occur. + + if (!datasetModel || !coordDimensions) { + return encode; + } + + var encodeItemName = []; + var encodeSeriesName = []; + var ecModel = seriesModel.ecModel; + var datasetMap = innerGlobalModel(ecModel).datasetMap; + var key = datasetModel.uid + '_' + source.seriesLayoutBy; + var baseCategoryDimIndex; + var categoryWayValueDimStart; + coordDimensions = coordDimensions.slice(); + each(coordDimensions, function (coordDimInfoLoose, coordDimIdx) { + var coordDimInfo = isObject(coordDimInfoLoose) ? coordDimInfoLoose : coordDimensions[coordDimIdx] = { + name: coordDimInfoLoose + }; + + if (coordDimInfo.type === 'ordinal' && baseCategoryDimIndex == null) { + baseCategoryDimIndex = coordDimIdx; + categoryWayValueDimStart = getDataDimCountOnCoordDim(coordDimInfo); + } + + encode[coordDimInfo.name] = []; + }); + var datasetRecord = datasetMap.get(key) || datasetMap.set(key, { + categoryWayDim: categoryWayValueDimStart, + valueWayDim: 0 + }); // TODO + // Auto detect first time axis and do arrangement. + + each(coordDimensions, function (coordDimInfo, coordDimIdx) { + var coordDimName = coordDimInfo.name; + var count = getDataDimCountOnCoordDim(coordDimInfo); // In value way. + + if (baseCategoryDimIndex == null) { + var start = datasetRecord.valueWayDim; + pushDim(encode[coordDimName], start, count); + pushDim(encodeSeriesName, start, count); + datasetRecord.valueWayDim += count; // ??? TODO give a better default series name rule? + // especially when encode x y specified. + // consider: when mutiple series share one dimension + // category axis, series name should better use + // the other dimsion name. On the other hand, use + // both dimensions name. + } // In category way, the first category axis. + else if (baseCategoryDimIndex === coordDimIdx) { + pushDim(encode[coordDimName], 0, count); + pushDim(encodeItemName, 0, count); + } // In category way, the other axis. + else { + var start = datasetRecord.categoryWayDim; + pushDim(encode[coordDimName], start, count); + pushDim(encodeSeriesName, start, count); + datasetRecord.categoryWayDim += count; + } + }); + + function pushDim(dimIdxArr, idxFrom, idxCount) { + for (var i = 0; i < idxCount; i++) { + dimIdxArr.push(idxFrom + i); + } + } + + function getDataDimCountOnCoordDim(coordDimInfo) { + var dimsDef = coordDimInfo.dimsDef; + return dimsDef ? dimsDef.length : 1; + } + + encodeItemName.length && (encode.itemName = encodeItemName); + encodeSeriesName.length && (encode.seriesName = encodeSeriesName); + return encode; + } + /** + * Work for data like [{name: ..., value: ...}, ...]. + * + * @return encode Never be `null/undefined`. + */ + + function makeSeriesEncodeForNameBased(seriesModel, source, dimCount) { + var encode = {}; + var datasetModel = querySeriesUpstreamDatasetModel(seriesModel); // Currently only make default when using dataset, util more reqirements occur. + + if (!datasetModel) { + return encode; + } + + var sourceFormat = source.sourceFormat; + var dimensionsDefine = source.dimensionsDefine; + var potentialNameDimIndex; + + if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) { + each(dimensionsDefine, function (dim, idx) { + if ((isObject(dim) ? dim.name : dim) === 'name') { + potentialNameDimIndex = idx; + } + }); + } + + var idxResult = function () { + var idxRes0 = {}; + var idxRes1 = {}; + var guessRecords = []; // 5 is an experience value. + + for (var i = 0, len = Math.min(5, dimCount); i < len; i++) { + var guessResult = doGuessOrdinal(source.data, sourceFormat, source.seriesLayoutBy, dimensionsDefine, source.startIndex, i); + guessRecords.push(guessResult); + var isPureNumber = guessResult === BE_ORDINAL.Not; // [Strategy of idxRes0]: find the first BE_ORDINAL.Not as the value dim, + // and then find a name dim with the priority: + // "BE_ORDINAL.Might|BE_ORDINAL.Must" > "other dim" > "the value dim itself". + + if (isPureNumber && idxRes0.v == null && i !== potentialNameDimIndex) { + idxRes0.v = i; + } + + if (idxRes0.n == null || idxRes0.n === idxRes0.v || !isPureNumber && guessRecords[idxRes0.n] === BE_ORDINAL.Not) { + idxRes0.n = i; + } + + if (fulfilled(idxRes0) && guessRecords[idxRes0.n] !== BE_ORDINAL.Not) { + return idxRes0; + } // [Strategy of idxRes1]: if idxRes0 not satisfied (that is, no BE_ORDINAL.Not), + // find the first BE_ORDINAL.Might as the value dim, + // and then find a name dim with the priority: + // "other dim" > "the value dim itself". + // That is for backward compat: number-like (e.g., `'3'`, `'55'`) can be + // treated as number. + + + if (!isPureNumber) { + if (guessResult === BE_ORDINAL.Might && idxRes1.v == null && i !== potentialNameDimIndex) { + idxRes1.v = i; + } + + if (idxRes1.n == null || idxRes1.n === idxRes1.v) { + idxRes1.n = i; + } + } + } + + function fulfilled(idxResult) { + return idxResult.v != null && idxResult.n != null; + } + + return fulfilled(idxRes0) ? idxRes0 : fulfilled(idxRes1) ? idxRes1 : null; + }(); + + if (idxResult) { + encode.value = [idxResult.v]; // `potentialNameDimIndex` has highest priority. + + var nameDimIndex = potentialNameDimIndex != null ? potentialNameDimIndex : idxResult.n; // By default, label use itemName in charts. + // So we dont set encodeLabel here. + + encode.itemName = [nameDimIndex]; + encode.seriesName = [nameDimIndex]; + } + + return encode; + } + /** + * @return If return null/undefined, indicate that should not use datasetModel. + */ + + function querySeriesUpstreamDatasetModel(seriesModel) { + // Caution: consider the scenario: + // A dataset is declared and a series is not expected to use the dataset, + // and at the beginning `setOption({series: { noData })` (just prepare other + // option but no data), then `setOption({series: {data: [...]}); In this case, + // the user should set an empty array to avoid that dataset is used by default. + var thisData = seriesModel.get('data', true); + + if (!thisData) { + return queryReferringComponents(seriesModel.ecModel, 'dataset', { + index: seriesModel.get('datasetIndex', true), + id: seriesModel.get('datasetId', true) + }, SINGLE_REFERRING).models[0]; + } + } + /** + * @return Always return an array event empty. + */ + + function queryDatasetUpstreamDatasetModels(datasetModel) { + // Only these attributes declared, we by defualt reference to `datasetIndex: 0`. + // Otherwise, no reference. + if (!datasetModel.get('transform', true) && !datasetModel.get('fromTransformResult', true)) { + return []; + } + + return queryReferringComponents(datasetModel.ecModel, 'dataset', { + index: datasetModel.get('fromDatasetIndex', true), + id: datasetModel.get('fromDatasetId', true) + }, SINGLE_REFERRING).models; + } + /** + * The rule should not be complex, otherwise user might not + * be able to known where the data is wrong. + * The code is ugly, but how to make it neat? + */ + + function guessOrdinal(source, dimIndex) { + return doGuessOrdinal(source.data, source.sourceFormat, source.seriesLayoutBy, source.dimensionsDefine, source.startIndex, dimIndex); + } // dimIndex may be overflow source data. + // return {BE_ORDINAL} + + function doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex) { + var result; // Experience value. + + var maxLoop = 5; + + if (isTypedArray(data)) { + return BE_ORDINAL.Not; + } // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine + // always exists in source. + + + var dimName; + var dimType; + + if (dimensionsDefine) { + var dimDefItem = dimensionsDefine[dimIndex]; + + if (isObject(dimDefItem)) { + dimName = dimDefItem.name; + dimType = dimDefItem.type; + } else if (isString(dimDefItem)) { + dimName = dimDefItem; + } + } + + if (dimType != null) { + return dimType === 'ordinal' ? BE_ORDINAL.Must : BE_ORDINAL.Not; + } + + if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) { + var dataArrayRows = data; + + if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) { + var sample = dataArrayRows[dimIndex]; + + for (var i = 0; i < (sample || []).length && i < maxLoop; i++) { + if ((result = detectValue(sample[startIndex + i])) != null) { + return result; + } + } + } else { + for (var i = 0; i < dataArrayRows.length && i < maxLoop; i++) { + var row = dataArrayRows[startIndex + i]; + + if (row && (result = detectValue(row[dimIndex])) != null) { + return result; + } + } + } + } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) { + var dataObjectRows = data; + + if (!dimName) { + return BE_ORDINAL.Not; + } + + for (var i = 0; i < dataObjectRows.length && i < maxLoop; i++) { + var item = dataObjectRows[i]; + + if (item && (result = detectValue(item[dimName])) != null) { + return result; + } + } + } else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) { + var dataKeyedColumns = data; + + if (!dimName) { + return BE_ORDINAL.Not; + } + + var sample = dataKeyedColumns[dimName]; + + if (!sample || isTypedArray(sample)) { + return BE_ORDINAL.Not; + } + + for (var i = 0; i < sample.length && i < maxLoop; i++) { + if ((result = detectValue(sample[i])) != null) { + return result; + } + } + } else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) { + var dataOriginal = data; + + for (var i = 0; i < dataOriginal.length && i < maxLoop; i++) { + var item = dataOriginal[i]; + var val = getDataItemValue(item); + + if (!isArray(val)) { + return BE_ORDINAL.Not; + } + + if ((result = detectValue(val[dimIndex])) != null) { + return result; + } + } + } + + function detectValue(val) { + var beStr = isString(val); // Consider usage convenience, '1', '2' will be treated as "number". + // `isFinit('')` get `true`. + + if (val != null && isFinite(val) && val !== '') { + return beStr ? BE_ORDINAL.Might : BE_ORDINAL.Not; + } else if (beStr && val !== '-') { + return BE_ORDINAL.Must; + } + } + + return BE_ORDINAL.Not; + } + + var internalOptionCreatorMap = createHashMap(); + function registerInternalOptionCreator(mainType, creator) { + assert(internalOptionCreatorMap.get(mainType) == null && creator); + internalOptionCreatorMap.set(mainType, creator); + } + function concatInternalOptions(ecModel, mainType, newCmptOptionList) { + var internalOptionCreator = internalOptionCreatorMap.get(mainType); + + if (!internalOptionCreator) { + return newCmptOptionList; + } + + var internalOptions = internalOptionCreator(ecModel); + + if (!internalOptions) { + return newCmptOptionList; + } + + if ("development" !== 'production') { + for (var i = 0; i < internalOptions.length; i++) { + assert(isComponentIdInternal(internalOptions[i])); + } + } + + return newCmptOptionList.concat(internalOptions); + } + + var innerColor = makeInner(); + var innerDecal = makeInner(); + + var PaletteMixin = + /** @class */ + function () { + function PaletteMixin() {} + + PaletteMixin.prototype.getColorFromPalette = function (name, scope, requestNum) { + var defaultPalette = normalizeToArray(this.get('color', true)); + var layeredPalette = this.get('colorLayer', true); + return getFromPalette(this, innerColor, defaultPalette, layeredPalette, name, scope, requestNum); + }; + + PaletteMixin.prototype.clearColorPalette = function () { + clearPalette(this, innerColor); + }; + + return PaletteMixin; + }(); + + function getDecalFromPalette(ecModel, name, scope, requestNum) { + var defaultDecals = normalizeToArray(ecModel.get(['aria', 'decal', 'decals'])); + return getFromPalette(ecModel, innerDecal, defaultDecals, null, name, scope, requestNum); + } + + function getNearestPalette(palettes, requestColorNum) { + var paletteNum = palettes.length; // TODO palettes must be in order + + for (var i = 0; i < paletteNum; i++) { + if (palettes[i].length > requestColorNum) { + return palettes[i]; + } + } + + return palettes[paletteNum - 1]; + } + /** + * @param name MUST NOT be null/undefined. Otherwise call this function + * twise with the same parameters will get different result. + * @param scope default this. + * @return Can be null/undefined + */ + + + function getFromPalette(that, inner, defaultPalette, layeredPalette, name, scope, requestNum) { + scope = scope || that; + var scopeFields = inner(scope); + var paletteIdx = scopeFields.paletteIdx || 0; + var paletteNameMap = scopeFields.paletteNameMap = scopeFields.paletteNameMap || {}; // Use `hasOwnProperty` to avoid conflict with Object.prototype. + + if (paletteNameMap.hasOwnProperty(name)) { + return paletteNameMap[name]; + } + + var palette = requestNum == null || !layeredPalette ? defaultPalette : getNearestPalette(layeredPalette, requestNum); // In case can't find in layered color palette. + + palette = palette || defaultPalette; + + if (!palette || !palette.length) { + return; + } + + var pickedPaletteItem = palette[paletteIdx]; + + if (name) { + paletteNameMap[name] = pickedPaletteItem; + } + + scopeFields.paletteIdx = (paletteIdx + 1) % palette.length; + return pickedPaletteItem; + } + + function clearPalette(that, inner) { + inner(that).paletteIdx = 0; + inner(that).paletteNameMap = {}; + } + + // Internal method names: + // ----------------------- + + var reCreateSeriesIndices; + var assertSeriesInitialized; + var initBase; + var OPTION_INNER_KEY = '\0_ec_inner'; + var OPTION_INNER_VALUE = 1; + var BUITIN_COMPONENTS_MAP = { + grid: 'GridComponent', + polar: 'PolarComponent', + geo: 'GeoComponent', + singleAxis: 'SingleAxisComponent', + parallel: 'ParallelComponent', + calendar: 'CalendarComponent', + graphic: 'GraphicComponent', + toolbox: 'ToolboxComponent', + tooltip: 'TooltipComponent', + axisPointer: 'AxisPointerComponent', + brush: 'BrushComponent', + title: 'TitleComponent', + timeline: 'TimelineComponent', + markPoint: 'MarkPointComponent', + markLine: 'MarkLineComponent', + markArea: 'MarkAreaComponent', + legend: 'LegendComponent', + dataZoom: 'DataZoomComponent', + visualMap: 'VisualMapComponent', + // aria: 'AriaComponent', + // dataset: 'DatasetComponent', + // Dependencies + xAxis: 'GridComponent', + yAxis: 'GridComponent', + angleAxis: 'PolarComponent', + radiusAxis: 'PolarComponent' + }; + var BUILTIN_CHARTS_MAP = { + line: 'LineChart', + bar: 'BarChart', + pie: 'PieChart', + scatter: 'ScatterChart', + radar: 'RadarChart', + map: 'MapChart', + tree: 'TreeChart', + treemap: 'TreemapChart', + graph: 'GraphChart', + gauge: 'GaugeChart', + funnel: 'FunnelChart', + parallel: 'ParallelChart', + sankey: 'SankeyChart', + boxplot: 'BoxplotChart', + candlestick: 'CandlestickChart', + effectScatter: 'EffectScatterChart', + lines: 'LinesChart', + heatmap: 'HeatmapChart', + pictorialBar: 'PictorialBarChart', + themeRiver: 'ThemeRiverChart', + sunburst: 'SunburstChart', + custom: 'CustomChart' + }; + var componetsMissingLogPrinted = {}; + + function checkMissingComponents(option) { + each(option, function (componentOption, mainType) { + if (!ComponentModel.hasClass(mainType)) { + var componentImportName = BUITIN_COMPONENTS_MAP[mainType]; + + if (componentImportName && !componetsMissingLogPrinted[componentImportName]) { + error("Component " + mainType + " is used but not imported.\nimport { " + componentImportName + " } from 'echarts/components';\necharts.use([" + componentImportName + "]);"); + componetsMissingLogPrinted[componentImportName] = true; + } + } + }); + } + + var GlobalModel = + /** @class */ + function (_super) { + __extends(GlobalModel, _super); + + function GlobalModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + + GlobalModel.prototype.init = function (option, parentModel, ecModel, theme, locale, optionManager) { + theme = theme || {}; + this.option = null; // Mark as not initialized. + + this._theme = new Model(theme); + this._locale = new Model(locale); + this._optionManager = optionManager; + }; + + GlobalModel.prototype.setOption = function (option, opts, optionPreprocessorFuncs) { + if ("development" !== 'production') { + assert(option != null, 'option is null/undefined'); + assert(option[OPTION_INNER_KEY] !== OPTION_INNER_VALUE, 'please use chart.getOption()'); + } + + var innerOpt = normalizeSetOptionInput(opts); + + this._optionManager.setOption(option, optionPreprocessorFuncs, innerOpt); + + this._resetOption(null, innerOpt); + }; + /** + * @param type null/undefined: reset all. + * 'recreate': force recreate all. + * 'timeline': only reset timeline option + * 'media': only reset media query option + * @return Whether option changed. + */ + + + GlobalModel.prototype.resetOption = function (type, opt) { + return this._resetOption(type, normalizeSetOptionInput(opt)); + }; + + GlobalModel.prototype._resetOption = function (type, opt) { + var optionChanged = false; + var optionManager = this._optionManager; + + if (!type || type === 'recreate') { + var baseOption = optionManager.mountOption(type === 'recreate'); + + if ("development" !== 'production') { + checkMissingComponents(baseOption); + } + + if (!this.option || type === 'recreate') { + initBase(this, baseOption); + } else { + this.restoreData(); + + this._mergeOption(baseOption, opt); + } + + optionChanged = true; + } + + if (type === 'timeline' || type === 'media') { + this.restoreData(); + } // By design, if `setOption(option2)` at the second time, and `option2` is a `ECUnitOption`, + // it should better not have the same props with `MediaUnit['option']`. + // Becuase either `option2` or `MediaUnit['option']` will be always merged to "current option" + // rather than original "baseOption". If they both override a prop, the result might be + // unexpected when media state changed after `setOption` called. + // If we really need to modify a props in each `MediaUnit['option']`, use the full version + // (`{baseOption, media}`) in `setOption`. + // For `timeline`, the case is the same. + + + if (!type || type === 'recreate' || type === 'timeline') { + var timelineOption = optionManager.getTimelineOption(this); + + if (timelineOption) { + optionChanged = true; + + this._mergeOption(timelineOption, opt); + } + } + + if (!type || type === 'recreate' || type === 'media') { + var mediaOptions = optionManager.getMediaOption(this); + + if (mediaOptions.length) { + each(mediaOptions, function (mediaOption) { + optionChanged = true; + + this._mergeOption(mediaOption, opt); + }, this); + } + } + + return optionChanged; + }; + + GlobalModel.prototype.mergeOption = function (option) { + this._mergeOption(option, null); + }; + + GlobalModel.prototype._mergeOption = function (newOption, opt) { + var option = this.option; + var componentsMap = this._componentsMap; + var componentsCount = this._componentsCount; + var newCmptTypes = []; + var newCmptTypeMap = createHashMap(); + var replaceMergeMainTypeMap = opt && opt.replaceMergeMainTypeMap; + resetSourceDefaulter(this); // If no component class, merge directly. + // For example: color, animaiton options, etc. + + each(newOption, function (componentOption, mainType) { + if (componentOption == null) { + return; + } + + if (!ComponentModel.hasClass(mainType)) { + // globalSettingTask.dirty(); + option[mainType] = option[mainType] == null ? clone(componentOption) : merge(option[mainType], componentOption, true); + } else if (mainType) { + newCmptTypes.push(mainType); + newCmptTypeMap.set(mainType, true); + } + }); + + if (replaceMergeMainTypeMap) { + // If there is a mainType `xxx` in `replaceMerge` but not declared in option, + // we trade it as it is declared in option as `{xxx: []}`. Because: + // (1) for normal merge, `{xxx: null/undefined}` are the same meaning as `{xxx: []}`. + // (2) some preprocessor may convert some of `{xxx: null/undefined}` to `{xxx: []}`. + replaceMergeMainTypeMap.each(function (val, mainTypeInReplaceMerge) { + if (ComponentModel.hasClass(mainTypeInReplaceMerge) && !newCmptTypeMap.get(mainTypeInReplaceMerge)) { + newCmptTypes.push(mainTypeInReplaceMerge); + newCmptTypeMap.set(mainTypeInReplaceMerge, true); + } + }); + } + + ComponentModel.topologicalTravel(newCmptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this); + + function visitComponent(mainType) { + var newCmptOptionList = concatInternalOptions(this, mainType, normalizeToArray(newOption[mainType])); + var oldCmptList = componentsMap.get(mainType); + var mergeMode = // `!oldCmptList` means init. See the comment in `mappingToExists` + !oldCmptList ? 'replaceAll' : replaceMergeMainTypeMap && replaceMergeMainTypeMap.get(mainType) ? 'replaceMerge' : 'normalMerge'; + var mappingResult = mappingToExists(oldCmptList, newCmptOptionList, mergeMode); // Set mainType and complete subType. + + setComponentTypeToKeyInfo(mappingResult, mainType, ComponentModel); // Empty it before the travel, in order to prevent `this._componentsMap` + // from being used in the `init`/`mergeOption`/`optionUpdated` of some + // components, which is probably incorrect logic. + + option[mainType] = null; + componentsMap.set(mainType, null); + componentsCount.set(mainType, 0); + var optionsByMainType = []; + var cmptsByMainType = []; + var cmptsCountByMainType = 0; + each(mappingResult, function (resultItem, index) { + var componentModel = resultItem.existing; + var newCmptOption = resultItem.newOption; + + if (!newCmptOption) { + if (componentModel) { + // Consider where is no new option and should be merged using {}, + // see removeEdgeAndAdd in topologicalTravel and + // ComponentModel.getAllClassMainTypes. + componentModel.mergeOption({}, this); + componentModel.optionUpdated({}, false); + } // If no both `resultItem.exist` and `resultItem.option`, + // either it is in `replaceMerge` and not matched by any id, + // or it has been removed in previous `replaceMerge` and left a "hole" in this component index. + + } else { + var isSeriesType = mainType === 'series'; + var ComponentModelClass = ComponentModel.getClass(mainType, resultItem.keyInfo.subType, !isSeriesType // Give a more detailed warn later if series don't exists + ); + + if (!ComponentModelClass) { + if ("development" !== 'production') { + var subType = resultItem.keyInfo.subType; + var seriesImportName = BUILTIN_CHARTS_MAP[subType]; + + if (!componetsMissingLogPrinted[subType]) { + componetsMissingLogPrinted[subType] = true; + + if (seriesImportName) { + error("Series " + subType + " is used but not imported.\nimport { " + seriesImportName + " } from 'echarts/charts';\necharts.use([" + seriesImportName + "]);"); + } else { + error("Unkown series " + subType); + } + } + } + + return; + } + + if (componentModel && componentModel.constructor === ComponentModelClass) { + componentModel.name = resultItem.keyInfo.name; // componentModel.settingTask && componentModel.settingTask.dirty(); + + componentModel.mergeOption(newCmptOption, this); + componentModel.optionUpdated(newCmptOption, false); + } else { + // PENDING Global as parent ? + var extraOpt = extend({ + componentIndex: index + }, resultItem.keyInfo); + componentModel = new ComponentModelClass(newCmptOption, this, this, extraOpt); // Assign `keyInfo` + + extend(componentModel, extraOpt); + + if (resultItem.brandNew) { + componentModel.__requireNewView = true; + } + + componentModel.init(newCmptOption, this, this); // Call optionUpdated after init. + // newCmptOption has been used as componentModel.option + // and may be merged with theme and default, so pass null + // to avoid confusion. + + componentModel.optionUpdated(null, true); + } + } + + if (componentModel) { + optionsByMainType.push(componentModel.option); + cmptsByMainType.push(componentModel); + cmptsCountByMainType++; + } else { + // Always do assign to avoid elided item in array. + optionsByMainType.push(void 0); + cmptsByMainType.push(void 0); + } + }, this); + option[mainType] = optionsByMainType; + componentsMap.set(mainType, cmptsByMainType); + componentsCount.set(mainType, cmptsCountByMainType); // Backup series for filtering. + + if (mainType === 'series') { + reCreateSeriesIndices(this); + } + } // If no series declared, ensure `_seriesIndices` initialized. + + + if (!this._seriesIndices) { + reCreateSeriesIndices(this); + } + }; + /** + * Get option for output (cloned option and inner info removed) + */ + + + GlobalModel.prototype.getOption = function () { + var option = clone(this.option); + each(option, function (optInMainType, mainType) { + if (ComponentModel.hasClass(mainType)) { + var opts = normalizeToArray(optInMainType); // Inner cmpts need to be removed. + // Inner cmpts might not be at last since ec5.0, but still + // compatible for users: if inner cmpt at last, splice the returned array. + + var realLen = opts.length; + var metNonInner = false; + + for (var i = realLen - 1; i >= 0; i--) { + // Remove options with inner id. + if (opts[i] && !isComponentIdInternal(opts[i])) { + metNonInner = true; + } else { + opts[i] = null; + !metNonInner && realLen--; + } + } + + opts.length = realLen; + option[mainType] = opts; + } + }); + delete option[OPTION_INNER_KEY]; + return option; + }; + + GlobalModel.prototype.getTheme = function () { + return this._theme; + }; + + GlobalModel.prototype.getLocaleModel = function () { + return this._locale; + }; + + GlobalModel.prototype.setUpdatePayload = function (payload) { + this._payload = payload; + }; + + GlobalModel.prototype.getUpdatePayload = function () { + return this._payload; + }; + /** + * @param idx If not specified, return the first one. + */ + + + GlobalModel.prototype.getComponent = function (mainType, idx) { + var list = this._componentsMap.get(mainType); + + if (list) { + var cmpt = list[idx || 0]; + + if (cmpt) { + return cmpt; + } else if (idx == null) { + for (var i = 0; i < list.length; i++) { + if (list[i]) { + return list[i]; + } + } + } + } + }; + /** + * @return Never be null/undefined. + */ + + + GlobalModel.prototype.queryComponents = function (condition) { + var mainType = condition.mainType; + + if (!mainType) { + return []; + } + + var index = condition.index; + var id = condition.id; + var name = condition.name; + + var cmpts = this._componentsMap.get(mainType); + + if (!cmpts || !cmpts.length) { + return []; + } + + var result; + + if (index != null) { + result = []; + each(normalizeToArray(index), function (idx) { + cmpts[idx] && result.push(cmpts[idx]); + }); + } else if (id != null) { + result = queryByIdOrName('id', id, cmpts); + } else if (name != null) { + result = queryByIdOrName('name', name, cmpts); + } else { + // Return all non-empty components in that mainType + result = filter(cmpts, function (cmpt) { + return !!cmpt; + }); + } + + return filterBySubType(result, condition); + }; + /** + * The interface is different from queryComponents, + * which is convenient for inner usage. + * + * @usage + * let result = findComponents( + * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}} + * ); + * let result = findComponents( + * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}} + * ); + * let result = findComponents( + * {mainType: 'series', + * filter: function (model, index) {...}} + * ); + * // result like [component0, componnet1, ...] + */ + + + GlobalModel.prototype.findComponents = function (condition) { + var query = condition.query; + var mainType = condition.mainType; + var queryCond = getQueryCond(query); + var result = queryCond ? this.queryComponents(queryCond) // Retrieve all non-empty components. + : filter(this._componentsMap.get(mainType), function (cmpt) { + return !!cmpt; + }); + return doFilter(filterBySubType(result, condition)); + + function getQueryCond(q) { + var indexAttr = mainType + 'Index'; + var idAttr = mainType + 'Id'; + var nameAttr = mainType + 'Name'; + return q && (q[indexAttr] != null || q[idAttr] != null || q[nameAttr] != null) ? { + mainType: mainType, + // subType will be filtered finally. + index: q[indexAttr], + id: q[idAttr], + name: q[nameAttr] + } : null; + } + + function doFilter(res) { + return condition.filter ? filter(res, condition.filter) : res; + } + }; + + GlobalModel.prototype.eachComponent = function (mainType, cb, context) { + var componentsMap = this._componentsMap; + + if (isFunction(mainType)) { + var ctxForAll_1 = cb; + var cbForAll_1 = mainType; + componentsMap.each(function (cmpts, componentType) { + for (var i = 0; cmpts && i < cmpts.length; i++) { + var cmpt = cmpts[i]; + cmpt && cbForAll_1.call(ctxForAll_1, componentType, cmpt, cmpt.componentIndex); + } + }); + } else { + var cmpts = isString(mainType) ? componentsMap.get(mainType) : isObject(mainType) ? this.findComponents(mainType) : null; + + for (var i = 0; cmpts && i < cmpts.length; i++) { + var cmpt = cmpts[i]; + cmpt && cb.call(context, cmpt, cmpt.componentIndex); + } + } + }; + /** + * Get series list before filtered by name. + */ + + + GlobalModel.prototype.getSeriesByName = function (name) { + var nameStr = convertOptionIdName(name, null); + return filter(this._componentsMap.get('series'), function (oneSeries) { + return !!oneSeries && nameStr != null && oneSeries.name === nameStr; + }); + }; + /** + * Get series list before filtered by index. + */ + + + GlobalModel.prototype.getSeriesByIndex = function (seriesIndex) { + return this._componentsMap.get('series')[seriesIndex]; + }; + /** + * Get series list before filtered by type. + * FIXME: rename to getRawSeriesByType? + */ + + + GlobalModel.prototype.getSeriesByType = function (subType) { + return filter(this._componentsMap.get('series'), function (oneSeries) { + return !!oneSeries && oneSeries.subType === subType; + }); + }; + /** + * Get all series before filtered. + */ + + + GlobalModel.prototype.getSeries = function () { + return filter(this._componentsMap.get('series'), function (oneSeries) { + return !!oneSeries; + }); + }; + /** + * Count series before filtered. + */ + + + GlobalModel.prototype.getSeriesCount = function () { + return this._componentsCount.get('series'); + }; + /** + * After filtering, series may be different + * frome raw series. + */ + + + GlobalModel.prototype.eachSeries = function (cb, context) { + assertSeriesInitialized(this); + each(this._seriesIndices, function (rawSeriesIndex) { + var series = this._componentsMap.get('series')[rawSeriesIndex]; + + cb.call(context, series, rawSeriesIndex); + }, this); + }; + /** + * Iterate raw series before filtered. + * + * @param {Function} cb + * @param {*} context + */ + + + GlobalModel.prototype.eachRawSeries = function (cb, context) { + each(this._componentsMap.get('series'), function (series) { + series && cb.call(context, series, series.componentIndex); + }); + }; + /** + * After filtering, series may be different. + * frome raw series. + */ + + + GlobalModel.prototype.eachSeriesByType = function (subType, cb, context) { + assertSeriesInitialized(this); + each(this._seriesIndices, function (rawSeriesIndex) { + var series = this._componentsMap.get('series')[rawSeriesIndex]; + + if (series.subType === subType) { + cb.call(context, series, rawSeriesIndex); + } + }, this); + }; + /** + * Iterate raw series before filtered of given type. + */ + + + GlobalModel.prototype.eachRawSeriesByType = function (subType, cb, context) { + return each(this.getSeriesByType(subType), cb, context); + }; + + GlobalModel.prototype.isSeriesFiltered = function (seriesModel) { + assertSeriesInitialized(this); + return this._seriesIndicesMap.get(seriesModel.componentIndex) == null; + }; + + GlobalModel.prototype.getCurrentSeriesIndices = function () { + return (this._seriesIndices || []).slice(); + }; + + GlobalModel.prototype.filterSeries = function (cb, context) { + assertSeriesInitialized(this); + var newSeriesIndices = []; + each(this._seriesIndices, function (seriesRawIdx) { + var series = this._componentsMap.get('series')[seriesRawIdx]; + + cb.call(context, series, seriesRawIdx) && newSeriesIndices.push(seriesRawIdx); + }, this); + this._seriesIndices = newSeriesIndices; + this._seriesIndicesMap = createHashMap(newSeriesIndices); + }; + + GlobalModel.prototype.restoreData = function (payload) { + reCreateSeriesIndices(this); + var componentsMap = this._componentsMap; + var componentTypes = []; + componentsMap.each(function (components, componentType) { + if (ComponentModel.hasClass(componentType)) { + componentTypes.push(componentType); + } + }); + ComponentModel.topologicalTravel(componentTypes, ComponentModel.getAllClassMainTypes(), function (componentType) { + each(componentsMap.get(componentType), function (component) { + if (component && (componentType !== 'series' || !isNotTargetSeries(component, payload))) { + component.restoreData(); + } + }); + }); + }; + + GlobalModel.internalField = function () { + reCreateSeriesIndices = function (ecModel) { + var seriesIndices = ecModel._seriesIndices = []; + each(ecModel._componentsMap.get('series'), function (series) { + // series may have been removed by `replaceMerge`. + series && seriesIndices.push(series.componentIndex); + }); + ecModel._seriesIndicesMap = createHashMap(seriesIndices); + }; + + assertSeriesInitialized = function (ecModel) { + // Components that use _seriesIndices should depends on series component, + // which make sure that their initialization is after series. + if ("development" !== 'production') { + if (!ecModel._seriesIndices) { + throw new Error('Option should contains series.'); + } + } + }; + + initBase = function (ecModel, baseOption) { + // Using OPTION_INNER_KEY to mark that this option can not be used outside, + // i.e. `chart.setOption(chart.getModel().option);` is forbiden. + ecModel.option = {}; + ecModel.option[OPTION_INNER_KEY] = OPTION_INNER_VALUE; // Init with series: [], in case of calling findSeries method + // before series initialized. + + ecModel._componentsMap = createHashMap({ + series: [] + }); + ecModel._componentsCount = createHashMap(); // If user spefied `option.aria`, aria will be enable. This detection should be + // performed before theme and globalDefault merge. + + var airaOption = baseOption.aria; + + if (isObject(airaOption) && airaOption.enabled == null) { + airaOption.enabled = true; + } + + mergeTheme(baseOption, ecModel._theme.option); // TODO Needs clone when merging to the unexisted property + + merge(baseOption, globalDefault, false); + + ecModel._mergeOption(baseOption, null); + }; + }(); + + return GlobalModel; + }(Model); + + function isNotTargetSeries(seriesModel, payload) { + if (payload) { + var index = payload.seriesIndex; + var id = payload.seriesId; + var name_1 = payload.seriesName; + return index != null && seriesModel.componentIndex !== index || id != null && seriesModel.id !== id || name_1 != null && seriesModel.name !== name_1; + } + } + + function mergeTheme(option, theme) { + // PENDING + // NOT use `colorLayer` in theme if option has `color` + var notMergeColorLayer = option.color && !option.colorLayer; + each(theme, function (themeItem, name) { + if (name === 'colorLayer' && notMergeColorLayer) { + return; + } // If it is component model mainType, the model handles that merge later. + // otherwise, merge them here. + + + if (!ComponentModel.hasClass(name)) { + if (typeof themeItem === 'object') { + option[name] = !option[name] ? clone(themeItem) : merge(option[name], themeItem, false); + } else { + if (option[name] == null) { + option[name] = themeItem; + } + } + } + }); + } + + function queryByIdOrName(attr, idOrName, cmpts) { + // Here is a break from echarts4: string and number are + // treated as equal. + if (isArray(idOrName)) { + var keyMap_1 = createHashMap(); + each(idOrName, function (idOrNameItem) { + if (idOrNameItem != null) { + var idName = convertOptionIdName(idOrNameItem, null); + idName != null && keyMap_1.set(idOrNameItem, true); + } + }); + return filter(cmpts, function (cmpt) { + return cmpt && keyMap_1.get(cmpt[attr]); + }); + } else { + var idName_1 = convertOptionIdName(idOrName, null); + return filter(cmpts, function (cmpt) { + return cmpt && idName_1 != null && cmpt[attr] === idName_1; + }); + } + } + + function filterBySubType(components, condition) { + // Using hasOwnProperty for restrict. Consider + // subType is undefined in user payload. + return condition.hasOwnProperty('subType') ? filter(components, function (cmpt) { + return cmpt && cmpt.subType === condition.subType; + }) : components; + } + + function normalizeSetOptionInput(opts) { + var replaceMergeMainTypeMap = createHashMap(); + opts && each(normalizeToArray(opts.replaceMerge), function (mainType) { + if ("development" !== 'production') { + assert(ComponentModel.hasClass(mainType), '"' + mainType + '" is not valid component main type in "replaceMerge"'); + } + + replaceMergeMainTypeMap.set(mainType, true); + }); + return { + replaceMergeMainTypeMap: replaceMergeMainTypeMap + }; + } + + mixin(GlobalModel, PaletteMixin); + + var availableMethods = ['getDom', 'getZr', 'getWidth', 'getHeight', 'getDevicePixelRatio', 'dispatchAction', 'isDisposed', 'on', 'off', 'getDataURL', 'getConnectedDataURL', // 'getModel', + 'getOption', // 'getViewOfComponentModel', + // 'getViewOfSeriesModel', + 'getId', 'updateLabelLayout']; + + var ExtensionAPI = + /** @class */ + function () { + function ExtensionAPI(ecInstance) { + each(availableMethods, function (methodName) { + this[methodName] = bind(ecInstance[methodName], ecInstance); + }, this); + } + + return ExtensionAPI; + }(); + + var coordinateSystemCreators = {}; + + var CoordinateSystemManager = + /** @class */ + function () { + function CoordinateSystemManager() { + this._coordinateSystems = []; + } + + CoordinateSystemManager.prototype.create = function (ecModel, api) { + var coordinateSystems = []; + each(coordinateSystemCreators, function (creater, type) { + var list = creater.create(ecModel, api); + coordinateSystems = coordinateSystems.concat(list || []); + }); + this._coordinateSystems = coordinateSystems; + }; + + CoordinateSystemManager.prototype.update = function (ecModel, api) { + each(this._coordinateSystems, function (coordSys) { + coordSys.update && coordSys.update(ecModel, api); + }); + }; + + CoordinateSystemManager.prototype.getCoordinateSystems = function () { + return this._coordinateSystems.slice(); + }; + + CoordinateSystemManager.register = function (type, creator) { + coordinateSystemCreators[type] = creator; + }; + + CoordinateSystemManager.get = function (type) { + return coordinateSystemCreators[type]; + }; + + return CoordinateSystemManager; + }(); + + var QUERY_REG = /^(min|max)?(.+)$/; // Key: mainType + // type FakeComponentsMap = HashMap<(MappingExistingItem & { subType: string })[]>; + + /** + * TERM EXPLANATIONS: + * See `ECOption` and `ECUnitOption` in `src/util/types.ts`. + */ + + var OptionManager = + /** @class */ + function () { + // timeline.notMerge is not supported in ec3. Firstly there is rearly + // case that notMerge is needed. Secondly supporting 'notMerge' requires + // rawOption cloned and backuped when timeline changed, which does no + // good to performance. What's more, that both timeline and setOption + // method supply 'notMerge' brings complex and some problems. + // Consider this case: + // (step1) chart.setOption({timeline: {notMerge: false}, ...}, false); + // (step2) chart.setOption({timeline: {notMerge: true}, ...}, false); + function OptionManager(api) { + this._timelineOptions = []; + this._mediaList = []; + /** + * -1, means default. + * empty means no media. + */ + + this._currentMediaIndices = []; + this._api = api; + } + + OptionManager.prototype.setOption = function (rawOption, optionPreprocessorFuncs, opt) { + if (rawOption) { + // That set dat primitive is dangerous if user reuse the data when setOption again. + each(normalizeToArray(rawOption.series), function (series) { + series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data); + }); + each(normalizeToArray(rawOption.dataset), function (dataset) { + dataset && dataset.source && isTypedArray(dataset.source) && setAsPrimitive(dataset.source); + }); + } // Caution: some series modify option data, if do not clone, + // it should ensure that the repeat modify correctly + // (create a new object when modify itself). + + + rawOption = clone(rawOption); // FIXME + // If some property is set in timeline options or media option but + // not set in baseOption, a warning should be given. + + var optionBackup = this._optionBackup; + var newParsedOption = parseRawOption(rawOption, optionPreprocessorFuncs, !optionBackup); + this._newBaseOption = newParsedOption.baseOption; // For setOption at second time (using merge mode); + + if (optionBackup) { + // FIXME + // the restore merge solution is essentially incorrect. + // the mapping can not be 100% consistent with ecModel, which probably brings + // potential bug! + // The first merge is delayed, becuase in most cases, users do not call `setOption` twice. + // let fakeCmptsMap = this._fakeCmptsMap; + // if (!fakeCmptsMap) { + // fakeCmptsMap = this._fakeCmptsMap = createHashMap(); + // mergeToBackupOption(fakeCmptsMap, null, optionBackup.baseOption, null); + // } + // mergeToBackupOption( + // fakeCmptsMap, optionBackup.baseOption, newParsedOption.baseOption, opt + // ); + // For simplicity, timeline options and media options do not support merge, + // that is, if you `setOption` twice and both has timeline options, the latter + // timeline opitons will not be merged to the formers, but just substitude them. + if (newParsedOption.timelineOptions.length) { + optionBackup.timelineOptions = newParsedOption.timelineOptions; + } + + if (newParsedOption.mediaList.length) { + optionBackup.mediaList = newParsedOption.mediaList; + } + + if (newParsedOption.mediaDefault) { + optionBackup.mediaDefault = newParsedOption.mediaDefault; + } + } else { + this._optionBackup = newParsedOption; + } + }; + + OptionManager.prototype.mountOption = function (isRecreate) { + var optionBackup = this._optionBackup; + this._timelineOptions = optionBackup.timelineOptions; + this._mediaList = optionBackup.mediaList; + this._mediaDefault = optionBackup.mediaDefault; + this._currentMediaIndices = []; + return clone(isRecreate // this._optionBackup.baseOption, which is created at the first `setOption` + // called, and is merged into every new option by inner method `mergeToBackupOption` + // each time `setOption` called, can be only used in `isRecreate`, because + // its reliability is under suspicion. In other cases option merge is + // performed by `model.mergeOption`. + ? optionBackup.baseOption : this._newBaseOption); + }; + + OptionManager.prototype.getTimelineOption = function (ecModel) { + var option; + var timelineOptions = this._timelineOptions; + + if (timelineOptions.length) { + // getTimelineOption can only be called after ecModel inited, + // so we can get currentIndex from timelineModel. + var timelineModel = ecModel.getComponent('timeline'); + + if (timelineModel) { + option = clone( // FIXME:TS as TimelineModel or quivlant interface + timelineOptions[timelineModel.getCurrentIndex()]); + } + } + + return option; + }; + + OptionManager.prototype.getMediaOption = function (ecModel) { + var ecWidth = this._api.getWidth(); + + var ecHeight = this._api.getHeight(); + + var mediaList = this._mediaList; + var mediaDefault = this._mediaDefault; + var indices = []; + var result = []; // No media defined. + + if (!mediaList.length && !mediaDefault) { + return result; + } // Multi media may be applied, the latter defined media has higher priority. + + + for (var i = 0, len = mediaList.length; i < len; i++) { + if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) { + indices.push(i); + } + } // FIXME + // Whether mediaDefault should force users to provide? Otherwise + // the change by media query can not be recorvered. + + + if (!indices.length && mediaDefault) { + indices = [-1]; + } + + if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) { + result = map(indices, function (index) { + return clone(index === -1 ? mediaDefault.option : mediaList[index].option); + }); + } // Otherwise return nothing. + + + this._currentMediaIndices = indices; + return result; + }; + + return OptionManager; + }(); + /** + * [RAW_OPTION_PATTERNS] + * (Note: "series: []" represents all other props in `ECUnitOption`) + * + * (1) No prop "baseOption" declared: + * Root option is used as "baseOption" (except prop "options" and "media"). + * ```js + * option = { + * series: [], + * timeline: {}, + * options: [], + * }; + * option = { + * series: [], + * media: {}, + * }; + * option = { + * series: [], + * timeline: {}, + * options: [], + * media: {}, + * } + * ``` + * + * (2) Prop "baseOption" declared: + * If "baseOption" declared, `ECUnitOption` props can only be declared + * inside "baseOption" except prop "timeline" (compat ec2). + * ```js + * option = { + * baseOption: { + * timeline: {}, + * series: [], + * }, + * options: [] + * }; + * option = { + * baseOption: { + * series: [], + * }, + * media: [] + * }; + * option = { + * baseOption: { + * timeline: {}, + * series: [], + * }, + * options: [] + * media: [] + * }; + * option = { + * // ec3 compat ec2: allow (only) `timeline` declared + * // outside baseOption. Keep this setting for compat. + * timeline: {}, + * baseOption: { + * series: [], + * }, + * options: [], + * media: [] + * }; + * ``` + */ + + + function parseRawOption( // `rawOption` May be modified + rawOption, optionPreprocessorFuncs, isNew) { + var mediaList = []; + var mediaDefault; + var baseOption; + var declaredBaseOption = rawOption.baseOption; // Compatible with ec2, [RAW_OPTION_PATTERNS] above. + + var timelineOnRoot = rawOption.timeline; + var timelineOptionsOnRoot = rawOption.options; + var mediaOnRoot = rawOption.media; + var hasMedia = !!rawOption.media; + var hasTimeline = !!(timelineOptionsOnRoot || timelineOnRoot || declaredBaseOption && declaredBaseOption.timeline); + + if (declaredBaseOption) { + baseOption = declaredBaseOption; // For merge option. + + if (!baseOption.timeline) { + baseOption.timeline = timelineOnRoot; + } + } // For convenience, enable to use the root option as the `baseOption`: + // `{ ...normalOptionProps, media: [{ ... }, { ... }] }` + else { + if (hasTimeline || hasMedia) { + rawOption.options = rawOption.media = null; + } + + baseOption = rawOption; + } + + if (hasMedia) { + if (isArray(mediaOnRoot)) { + each(mediaOnRoot, function (singleMedia) { + if ("development" !== 'production') { + // Real case of wrong config. + if (singleMedia && !singleMedia.option && isObject(singleMedia.query) && isObject(singleMedia.query.option)) { + error('Illegal media option. Must be like { media: [ { query: {}, option: {} } ] }'); + } + } + + if (singleMedia && singleMedia.option) { + if (singleMedia.query) { + mediaList.push(singleMedia); + } else if (!mediaDefault) { + // Use the first media default. + mediaDefault = singleMedia; + } + } + }); + } else { + if ("development" !== 'production') { + // Real case of wrong config. + error('Illegal media option. Must be an array. Like { media: [ {...}, {...} ] }'); + } + } + } + + doPreprocess(baseOption); + each(timelineOptionsOnRoot, function (option) { + return doPreprocess(option); + }); + each(mediaList, function (media) { + return doPreprocess(media.option); + }); + + function doPreprocess(option) { + each(optionPreprocessorFuncs, function (preProcess) { + preProcess(option, isNew); + }); + } + + return { + baseOption: baseOption, + timelineOptions: timelineOptionsOnRoot || [], + mediaDefault: mediaDefault, + mediaList: mediaList + }; + } + /** + * @see + * Support: width, height, aspectRatio + * Can use max or min as prefix. + */ + + + function applyMediaQuery(query, ecWidth, ecHeight) { + var realMap = { + width: ecWidth, + height: ecHeight, + aspectratio: ecWidth / ecHeight // lowser case for convenientce. + + }; + var applicatable = true; + each(query, function (value, attr) { + var matched = attr.match(QUERY_REG); + + if (!matched || !matched[1] || !matched[2]) { + return; + } + + var operator = matched[1]; + var realAttr = matched[2].toLowerCase(); + + if (!compare(realMap[realAttr], value, operator)) { + applicatable = false; + } + }); + return applicatable; + } + + function compare(real, expect, operator) { + if (operator === 'min') { + return real >= expect; + } else if (operator === 'max') { + return real <= expect; + } else { + // Equals + return real === expect; + } + } + + function indicesEquals(indices1, indices2) { + // indices is always order by asc and has only finite number. + return indices1.join(',') === indices2.join(','); + } + + var each$2 = each; + var isObject$1 = isObject; + var POSSIBLE_STYLES = ['areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle', 'chordStyle', 'label', 'labelLine']; + + function compatEC2ItemStyle(opt) { + var itemStyleOpt = opt && opt.itemStyle; + + if (!itemStyleOpt) { + return; + } + + for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) { + var styleName = POSSIBLE_STYLES[i]; + var normalItemStyleOpt = itemStyleOpt.normal; + var emphasisItemStyleOpt = itemStyleOpt.emphasis; + + if (normalItemStyleOpt && normalItemStyleOpt[styleName]) { + if ("development" !== 'production') { + deprecateReplaceLog("itemStyle.normal." + styleName, styleName); + } + + opt[styleName] = opt[styleName] || {}; + + if (!opt[styleName].normal) { + opt[styleName].normal = normalItemStyleOpt[styleName]; + } else { + merge(opt[styleName].normal, normalItemStyleOpt[styleName]); + } + + normalItemStyleOpt[styleName] = null; + } + + if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) { + if ("development" !== 'production') { + deprecateReplaceLog("itemStyle.emphasis." + styleName, "emphasis." + styleName); + } + + opt[styleName] = opt[styleName] || {}; + + if (!opt[styleName].emphasis) { + opt[styleName].emphasis = emphasisItemStyleOpt[styleName]; + } else { + merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]); + } + + emphasisItemStyleOpt[styleName] = null; + } + } + } + + function convertNormalEmphasis(opt, optType, useExtend) { + if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) { + var normalOpt = opt[optType].normal; + var emphasisOpt = opt[optType].emphasis; + + if (normalOpt) { + if ("development" !== 'production') { + // eslint-disable-next-line max-len + deprecateLog("'normal' hierarchy in " + optType + " has been removed since 4.0. All style properties are configured in " + optType + " directly now."); + } // Timeline controlStyle has other properties besides normal and emphasis + + + if (useExtend) { + opt[optType].normal = opt[optType].emphasis = null; + defaults(opt[optType], normalOpt); + } else { + opt[optType] = normalOpt; + } + } + + if (emphasisOpt) { + if ("development" !== 'production') { + deprecateLog(optType + ".emphasis has been changed to emphasis." + optType + " since 4.0"); + } + + opt.emphasis = opt.emphasis || {}; + opt.emphasis[optType] = emphasisOpt; // Also compat the case user mix the style and focus together in ec3 style + // for example: { itemStyle: { normal: {}, emphasis: {focus, shadowBlur} } } + + if (emphasisOpt.focus) { + opt.emphasis.focus = emphasisOpt.focus; + } + + if (emphasisOpt.blurScope) { + opt.emphasis.blurScope = emphasisOpt.blurScope; + } + } + } + } + + function removeEC3NormalStatus(opt) { + convertNormalEmphasis(opt, 'itemStyle'); + convertNormalEmphasis(opt, 'lineStyle'); + convertNormalEmphasis(opt, 'areaStyle'); + convertNormalEmphasis(opt, 'label'); + convertNormalEmphasis(opt, 'labelLine'); // treemap + + convertNormalEmphasis(opt, 'upperLabel'); // graph + + convertNormalEmphasis(opt, 'edgeLabel'); + } + + function compatTextStyle(opt, propName) { + // Check whether is not object (string\null\undefined ...) + var labelOptSingle = isObject$1(opt) && opt[propName]; + var textStyle = isObject$1(labelOptSingle) && labelOptSingle.textStyle; + + if (textStyle) { + if ("development" !== 'production') { + // eslint-disable-next-line max-len + deprecateLog("textStyle hierarchy in " + propName + " has been removed since 4.0. All textStyle properties are configured in " + propName + " directly now."); + } + + for (var i = 0, len = TEXT_STYLE_OPTIONS.length; i < len; i++) { + var textPropName = TEXT_STYLE_OPTIONS[i]; + + if (textStyle.hasOwnProperty(textPropName)) { + labelOptSingle[textPropName] = textStyle[textPropName]; + } + } + } + } + + function compatEC3CommonStyles(opt) { + if (opt) { + removeEC3NormalStatus(opt); + compatTextStyle(opt, 'label'); + opt.emphasis && compatTextStyle(opt.emphasis, 'label'); + } + } + + function processSeries(seriesOpt) { + if (!isObject$1(seriesOpt)) { + return; + } + + compatEC2ItemStyle(seriesOpt); + removeEC3NormalStatus(seriesOpt); + compatTextStyle(seriesOpt, 'label'); // treemap + + compatTextStyle(seriesOpt, 'upperLabel'); // graph + + compatTextStyle(seriesOpt, 'edgeLabel'); + + if (seriesOpt.emphasis) { + compatTextStyle(seriesOpt.emphasis, 'label'); // treemap + + compatTextStyle(seriesOpt.emphasis, 'upperLabel'); // graph + + compatTextStyle(seriesOpt.emphasis, 'edgeLabel'); + } + + var markPoint = seriesOpt.markPoint; + + if (markPoint) { + compatEC2ItemStyle(markPoint); + compatEC3CommonStyles(markPoint); + } + + var markLine = seriesOpt.markLine; + + if (markLine) { + compatEC2ItemStyle(markLine); + compatEC3CommonStyles(markLine); + } + + var markArea = seriesOpt.markArea; + + if (markArea) { + compatEC3CommonStyles(markArea); + } + + var data = seriesOpt.data; // Break with ec3: if `setOption` again, there may be no `type` in option, + // then the backward compat based on option type will not be performed. + + if (seriesOpt.type === 'graph') { + data = data || seriesOpt.nodes; + var edgeData = seriesOpt.links || seriesOpt.edges; + + if (edgeData && !isTypedArray(edgeData)) { + for (var i = 0; i < edgeData.length; i++) { + compatEC3CommonStyles(edgeData[i]); + } + } + + each(seriesOpt.categories, function (opt) { + removeEC3NormalStatus(opt); + }); + } + + if (data && !isTypedArray(data)) { + for (var i = 0; i < data.length; i++) { + compatEC3CommonStyles(data[i]); + } + } // mark point data + + + markPoint = seriesOpt.markPoint; + + if (markPoint && markPoint.data) { + var mpData = markPoint.data; + + for (var i = 0; i < mpData.length; i++) { + compatEC3CommonStyles(mpData[i]); + } + } // mark line data + + + markLine = seriesOpt.markLine; + + if (markLine && markLine.data) { + var mlData = markLine.data; + + for (var i = 0; i < mlData.length; i++) { + if (isArray(mlData[i])) { + compatEC3CommonStyles(mlData[i][0]); + compatEC3CommonStyles(mlData[i][1]); + } else { + compatEC3CommonStyles(mlData[i]); + } + } + } // Series + + + if (seriesOpt.type === 'gauge') { + compatTextStyle(seriesOpt, 'axisLabel'); + compatTextStyle(seriesOpt, 'title'); + compatTextStyle(seriesOpt, 'detail'); + } else if (seriesOpt.type === 'treemap') { + convertNormalEmphasis(seriesOpt.breadcrumb, 'itemStyle'); + each(seriesOpt.levels, function (opt) { + removeEC3NormalStatus(opt); + }); + } else if (seriesOpt.type === 'tree') { + removeEC3NormalStatus(seriesOpt.leaves); + } // sunburst starts from ec4, so it does not need to compat levels. + + } + + function toArr(o) { + return isArray(o) ? o : o ? [o] : []; + } + + function toObj(o) { + return (isArray(o) ? o[0] : o) || {}; + } + + function globalCompatStyle(option, isTheme) { + each$2(toArr(option.series), function (seriesOpt) { + isObject$1(seriesOpt) && processSeries(seriesOpt); + }); + var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar']; + isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis'); + each$2(axes, function (axisName) { + each$2(toArr(option[axisName]), function (axisOpt) { + if (axisOpt) { + compatTextStyle(axisOpt, 'axisLabel'); + compatTextStyle(axisOpt.axisPointer, 'label'); + } + }); + }); + each$2(toArr(option.parallel), function (parallelOpt) { + var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault; + compatTextStyle(parallelAxisDefault, 'axisLabel'); + compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label'); + }); + each$2(toArr(option.calendar), function (calendarOpt) { + convertNormalEmphasis(calendarOpt, 'itemStyle'); + compatTextStyle(calendarOpt, 'dayLabel'); + compatTextStyle(calendarOpt, 'monthLabel'); + compatTextStyle(calendarOpt, 'yearLabel'); + }); // radar.name.textStyle + + each$2(toArr(option.radar), function (radarOpt) { + compatTextStyle(radarOpt, 'name'); // Use axisName instead of name because component has name property + + if (radarOpt.name && radarOpt.axisName == null) { + radarOpt.axisName = radarOpt.name; + delete radarOpt.name; + + if ("development" !== 'production') { + deprecateLog('name property in radar component has been changed to axisName'); + } + } + + if (radarOpt.nameGap != null && radarOpt.axisNameGap == null) { + radarOpt.axisNameGap = radarOpt.nameGap; + delete radarOpt.nameGap; + + if ("development" !== 'production') { + deprecateLog('nameGap property in radar component has been changed to axisNameGap'); + } + } + }); + each$2(toArr(option.geo), function (geoOpt) { + if (isObject$1(geoOpt)) { + compatEC3CommonStyles(geoOpt); + each$2(toArr(geoOpt.regions), function (regionObj) { + compatEC3CommonStyles(regionObj); + }); + } + }); + each$2(toArr(option.timeline), function (timelineOpt) { + compatEC3CommonStyles(timelineOpt); + convertNormalEmphasis(timelineOpt, 'label'); + convertNormalEmphasis(timelineOpt, 'itemStyle'); + convertNormalEmphasis(timelineOpt, 'controlStyle', true); + var data = timelineOpt.data; + isArray(data) && each(data, function (item) { + if (isObject(item)) { + convertNormalEmphasis(item, 'label'); + convertNormalEmphasis(item, 'itemStyle'); + } + }); + }); + each$2(toArr(option.toolbox), function (toolboxOpt) { + convertNormalEmphasis(toolboxOpt, 'iconStyle'); + each$2(toolboxOpt.feature, function (featureOpt) { + convertNormalEmphasis(featureOpt, 'iconStyle'); + }); + }); + compatTextStyle(toObj(option.axisPointer), 'label'); + compatTextStyle(toObj(option.tooltip).axisPointer, 'label'); // Clean logs + // storedLogs = {}; + } + + function get(opt, path) { + var pathArr = path.split(','); + var obj = opt; + + for (var i = 0; i < pathArr.length; i++) { + obj = obj && obj[pathArr[i]]; + + if (obj == null) { + break; + } + } + + return obj; + } + + function set$1(opt, path, val, overwrite) { + var pathArr = path.split(','); + var obj = opt; + var key; + var i = 0; + + for (; i < pathArr.length - 1; i++) { + key = pathArr[i]; + + if (obj[key] == null) { + obj[key] = {}; + } + + obj = obj[key]; + } + + if (overwrite || obj[pathArr[i]] == null) { + obj[pathArr[i]] = val; + } + } + + function compatLayoutProperties(option) { + option && each(LAYOUT_PROPERTIES, function (prop) { + if (prop[0] in option && !(prop[1] in option)) { + option[prop[1]] = option[prop[0]]; + } + }); + } + + var LAYOUT_PROPERTIES = [['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom']]; + var COMPATITABLE_COMPONENTS = ['grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline']; + var BAR_ITEM_STYLE_MAP = [['borderRadius', 'barBorderRadius'], ['borderColor', 'barBorderColor'], ['borderWidth', 'barBorderWidth']]; + + function compatBarItemStyle(option) { + var itemStyle = option && option.itemStyle; + + if (itemStyle) { + for (var i = 0; i < BAR_ITEM_STYLE_MAP.length; i++) { + var oldName = BAR_ITEM_STYLE_MAP[i][1]; + var newName = BAR_ITEM_STYLE_MAP[i][0]; + + if (itemStyle[oldName] != null) { + itemStyle[newName] = itemStyle[oldName]; + + if ("development" !== 'production') { + deprecateReplaceLog(oldName, newName); + } + } + } + } + } + + function compatPieLabel(option) { + if (!option) { + return; + } + + if (option.alignTo === 'edge' && option.margin != null && option.edgeDistance == null) { + if ("development" !== 'production') { + deprecateReplaceLog('label.margin', 'label.edgeDistance', 'pie'); + } + + option.edgeDistance = option.margin; + } + } + + function compatSunburstState(option) { + if (!option) { + return; + } + + if (option.downplay && !option.blur) { + option.blur = option.downplay; + + if ("development" !== 'production') { + deprecateReplaceLog('downplay', 'blur', 'sunburst'); + } + } + } + + function compatGraphFocus(option) { + if (!option) { + return; + } + + if (option.focusNodeAdjacency != null) { + option.emphasis = option.emphasis || {}; + + if (option.emphasis.focus == null) { + if ("development" !== 'production') { + deprecateReplaceLog('focusNodeAdjacency', 'emphasis: { focus: \'adjacency\'}', 'graph/sankey'); + } + + option.emphasis.focus = 'adjacency'; + } + } + } + + function traverseTree(data, cb) { + if (data) { + for (var i = 0; i < data.length; i++) { + cb(data[i]); + data[i] && traverseTree(data[i].children, cb); + } + } + } + + function globalBackwardCompat(option, isTheme) { + globalCompatStyle(option, isTheme); // Make sure series array for model initialization. + + option.series = normalizeToArray(option.series); + each(option.series, function (seriesOpt) { + if (!isObject(seriesOpt)) { + return; + } + + var seriesType = seriesOpt.type; + + if (seriesType === 'line') { + if (seriesOpt.clipOverflow != null) { + seriesOpt.clip = seriesOpt.clipOverflow; + + if ("development" !== 'production') { + deprecateReplaceLog('clipOverflow', 'clip', 'line'); + } + } + } else if (seriesType === 'pie' || seriesType === 'gauge') { + if (seriesOpt.clockWise != null) { + seriesOpt.clockwise = seriesOpt.clockWise; + + if ("development" !== 'production') { + deprecateReplaceLog('clockWise', 'clockwise'); + } + } + + compatPieLabel(seriesOpt.label); + var data = seriesOpt.data; + + if (data && !isTypedArray(data)) { + for (var i = 0; i < data.length; i++) { + compatPieLabel(data[i]); + } + } + + if (seriesOpt.hoverOffset != null) { + seriesOpt.emphasis = seriesOpt.emphasis || {}; + + if (seriesOpt.emphasis.scaleSize = null) { + if ("development" !== 'production') { + deprecateReplaceLog('hoverOffset', 'emphasis.scaleSize'); + } + + seriesOpt.emphasis.scaleSize = seriesOpt.hoverOffset; + } + } + } else if (seriesType === 'gauge') { + var pointerColor = get(seriesOpt, 'pointer.color'); + pointerColor != null && set$1(seriesOpt, 'itemStyle.color', pointerColor); + } else if (seriesType === 'bar') { + compatBarItemStyle(seriesOpt); + compatBarItemStyle(seriesOpt.backgroundStyle); + compatBarItemStyle(seriesOpt.emphasis); + var data = seriesOpt.data; + + if (data && !isTypedArray(data)) { + for (var i = 0; i < data.length; i++) { + if (typeof data[i] === 'object') { + compatBarItemStyle(data[i]); + compatBarItemStyle(data[i] && data[i].emphasis); + } + } + } + } else if (seriesType === 'sunburst') { + var highlightPolicy = seriesOpt.highlightPolicy; + + if (highlightPolicy) { + seriesOpt.emphasis = seriesOpt.emphasis || {}; + + if (!seriesOpt.emphasis.focus) { + seriesOpt.emphasis.focus = highlightPolicy; + + if ("development" !== 'production') { + deprecateReplaceLog('highlightPolicy', 'emphasis.focus', 'sunburst'); + } + } + } + + compatSunburstState(seriesOpt); + traverseTree(seriesOpt.data, compatSunburstState); + } else if (seriesType === 'graph' || seriesType === 'sankey') { + compatGraphFocus(seriesOpt); // TODO nodes, edges? + } else if (seriesType === 'map') { + if (seriesOpt.mapType && !seriesOpt.map) { + if ("development" !== 'production') { + deprecateReplaceLog('mapType', 'map', 'map'); + } + + seriesOpt.map = seriesOpt.mapType; + } + + if (seriesOpt.mapLocation) { + if ("development" !== 'production') { + deprecateLog('`mapLocation` is not used anymore.'); + } + + defaults(seriesOpt, seriesOpt.mapLocation); + } + } + + if (seriesOpt.hoverAnimation != null) { + seriesOpt.emphasis = seriesOpt.emphasis || {}; + + if (seriesOpt.emphasis && seriesOpt.emphasis.scale == null) { + if ("development" !== 'production') { + deprecateReplaceLog('hoverAnimation', 'emphasis.scale'); + } + + seriesOpt.emphasis.scale = seriesOpt.hoverAnimation; + } + } + + compatLayoutProperties(seriesOpt); + }); // dataRange has changed to visualMap + + if (option.dataRange) { + option.visualMap = option.dataRange; + } + + each(COMPATITABLE_COMPONENTS, function (componentName) { + var options = option[componentName]; + + if (options) { + if (!isArray(options)) { + options = [options]; + } + + each(options, function (option) { + compatLayoutProperties(option); + }); + } + }); + } + + // data processing stage is blocked in stream. + // See + // (2) Only register once when import repeatly. + // Should be executed after series filtered and before stack calculation. + + function dataStack(ecModel) { + var stackInfoMap = createHashMap(); + ecModel.eachSeries(function (seriesModel) { + var stack = seriesModel.get('stack'); // Compatibal: when `stack` is set as '', do not stack. + + if (stack) { + var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []); + var data = seriesModel.getData(); + var stackInfo = { + // Used for calculate axis extent automatically. + // TODO: Type getCalculationInfo return more specific type? + stackResultDimension: data.getCalculationInfo('stackResultDimension'), + stackedOverDimension: data.getCalculationInfo('stackedOverDimension'), + stackedDimension: data.getCalculationInfo('stackedDimension'), + stackedByDimension: data.getCalculationInfo('stackedByDimension'), + isStackedByIndex: data.getCalculationInfo('isStackedByIndex'), + data: data, + seriesModel: seriesModel + }; // If stacked on axis that do not support data stack. + + if (!stackInfo.stackedDimension || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)) { + return; + } + + stackInfoList.length && data.setCalculationInfo('stackedOnSeries', stackInfoList[stackInfoList.length - 1].seriesModel); + stackInfoList.push(stackInfo); + } + }); + stackInfoMap.each(calculateStack); + } + + function calculateStack(stackInfoList) { + each(stackInfoList, function (targetStackInfo, idxInStack) { + var resultVal = []; + var resultNaN = [NaN, NaN]; + var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension]; + var targetData = targetStackInfo.data; + var isStackedByIndex = targetStackInfo.isStackedByIndex; // Should not write on raw data, because stack series model list changes + // depending on legend selection. + + targetData.modify(dims, function (v0, v1, dataIndex) { + var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex); // Consider `connectNulls` of line area, if value is NaN, stackedOver + // should also be NaN, to draw a appropriate belt area. + + if (isNaN(sum)) { + return resultNaN; + } + + var byValue; + var stackedDataRawIndex; + + if (isStackedByIndex) { + stackedDataRawIndex = targetData.getRawIndex(dataIndex); + } else { + byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex); + } // If stackOver is NaN, chart view will render point on value start. + + + var stackedOver = NaN; + + for (var j = idxInStack - 1; j >= 0; j--) { + var stackInfo = stackInfoList[j]; // Has been optimized by inverted indices on `stackedByDimension`. + + if (!isStackedByIndex) { + stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue); + } + + if (stackedDataRawIndex >= 0) { + var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex); // Considering positive stack, negative stack and empty data + + if (sum >= 0 && val > 0 || // Positive stack + sum <= 0 && val < 0 // Negative stack + ) { + // The sum should be as less as possible to be effected + // by floating arithmetic problem. A wrong result probably + // filtered incorrectly by axis min/max. + sum = addSafe(sum, val); + stackedOver = val; + break; + } + } + } + + resultVal[0] = sum; + resultVal[1] = stackedOver; + return resultVal; + }); + }); + } + + var SourceImpl = + /** @class */ + function () { + function SourceImpl(fields) { + this.data = fields.data || (fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []); + this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN; // Visit config + + this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN; + this.startIndex = fields.startIndex || 0; + this.dimensionsDetectedCount = fields.dimensionsDetectedCount; + this.metaRawOption = fields.metaRawOption; + var dimensionsDefine = this.dimensionsDefine = fields.dimensionsDefine; + + if (dimensionsDefine) { + for (var i = 0; i < dimensionsDefine.length; i++) { + var dim = dimensionsDefine[i]; + + if (dim.type == null) { + if (guessOrdinal(this, i) === BE_ORDINAL.Must) { + dim.type = 'ordinal'; + } + } + } + } + } + + return SourceImpl; + }(); + + function isSourceInstance(val) { + return val instanceof SourceImpl; + } + /** + * Create a source from option. + * NOTE: Created source is immutable. Don't change any properties in it. + */ + + function createSource(sourceData, thisMetaRawOption, // can be null. If not provided, auto detect it from `sourceData`. + sourceFormat) { + sourceFormat = sourceFormat || detectSourceFormat(sourceData); + var seriesLayoutBy = thisMetaRawOption.seriesLayoutBy; + var determined = determineSourceDimensions(sourceData, sourceFormat, seriesLayoutBy, thisMetaRawOption.sourceHeader, thisMetaRawOption.dimensions); + var source = new SourceImpl({ + data: sourceData, + sourceFormat: sourceFormat, + seriesLayoutBy: seriesLayoutBy, + dimensionsDefine: determined.dimensionsDefine, + startIndex: determined.startIndex, + dimensionsDetectedCount: determined.dimensionsDetectedCount, + metaRawOption: clone(thisMetaRawOption) + }); + return source; + } + /** + * Wrap original series data for some compatibility cases. + */ + + function createSourceFromSeriesDataOption(data) { + return new SourceImpl({ + data: data, + sourceFormat: isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL + }); + } + /** + * Clone source but excludes source data. + */ + + function cloneSourceShallow(source) { + return new SourceImpl({ + data: source.data, + sourceFormat: source.sourceFormat, + seriesLayoutBy: source.seriesLayoutBy, + dimensionsDefine: clone(source.dimensionsDefine), + startIndex: source.startIndex, + dimensionsDetectedCount: source.dimensionsDetectedCount + }); + } + /** + * Note: An empty array will be detected as `SOURCE_FORMAT_ARRAY_ROWS`. + */ + + function detectSourceFormat(data) { + var sourceFormat = SOURCE_FORMAT_UNKNOWN; + + if (isTypedArray(data)) { + sourceFormat = SOURCE_FORMAT_TYPED_ARRAY; + } else if (isArray(data)) { + // FIXME Whether tolerate null in top level array? + if (data.length === 0) { + sourceFormat = SOURCE_FORMAT_ARRAY_ROWS; + } + + for (var i = 0, len = data.length; i < len; i++) { + var item = data[i]; + + if (item == null) { + continue; + } else if (isArray(item)) { + sourceFormat = SOURCE_FORMAT_ARRAY_ROWS; + break; + } else if (isObject(item)) { + sourceFormat = SOURCE_FORMAT_OBJECT_ROWS; + break; + } + } + } else if (isObject(data)) { + for (var key in data) { + if (hasOwn(data, key) && isArrayLike(data[key])) { + sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS; + break; + } + } + } + + return sourceFormat; + } + /** + * Determine the source definitions from data standalone dimensions definitions + * are not specified. + */ + + function determineSourceDimensions(data, sourceFormat, seriesLayoutBy, sourceHeader, // standalone raw dimensions definition, like: + // { + // dimensions: ['aa', 'bb', { name: 'cc', type: 'time' }] + // } + // in `dataset` or `series` + dimensionsDefine) { + var dimensionsDetectedCount; + var startIndex; // PEDING: could data be null/undefined here? + // currently, if `dataset.source` not specified, error thrown. + // if `series.data` not specified, nothing rendered without error thrown. + // Should test these cases. + + if (!data) { + return { + dimensionsDefine: normalizeDimensionsOption(dimensionsDefine), + startIndex: startIndex, + dimensionsDetectedCount: dimensionsDetectedCount + }; + } + + if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) { + var dataArrayRows = data; // Rule: Most of the first line are string: it is header. + // Caution: consider a line with 5 string and 1 number, + // it still can not be sure it is a head, because the + // 5 string may be 5 values of category columns. + + if (sourceHeader === 'auto' || sourceHeader == null) { + arrayRowsTravelFirst(function (val) { + // '-' is regarded as null/undefined. + if (val != null && val !== '-') { + if (isString(val)) { + startIndex == null && (startIndex = 1); + } else { + startIndex = 0; + } + } // 10 is an experience number, avoid long loop. + + }, seriesLayoutBy, dataArrayRows, 10); + } else { + startIndex = isNumber(sourceHeader) ? sourceHeader : sourceHeader ? 1 : 0; + } + + if (!dimensionsDefine && startIndex === 1) { + dimensionsDefine = []; + arrayRowsTravelFirst(function (val, index) { + dimensionsDefine[index] = val != null ? val + '' : ''; + }, seriesLayoutBy, dataArrayRows, Infinity); + } + + dimensionsDetectedCount = dimensionsDefine ? dimensionsDefine.length : seriesLayoutBy === SERIES_LAYOUT_BY_ROW ? dataArrayRows.length : dataArrayRows[0] ? dataArrayRows[0].length : null; + } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) { + if (!dimensionsDefine) { + dimensionsDefine = objectRowsCollectDimensions(data); + } + } else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) { + if (!dimensionsDefine) { + dimensionsDefine = []; + each(data, function (colArr, key) { + dimensionsDefine.push(key); + }); + } + } else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) { + var value0 = getDataItemValue(data[0]); + dimensionsDetectedCount = isArray(value0) && value0.length || 1; + } else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) { + if ("development" !== 'production') { + assert(!!dimensionsDefine, 'dimensions must be given if data is TypedArray.'); + } + } + + return { + startIndex: startIndex, + dimensionsDefine: normalizeDimensionsOption(dimensionsDefine), + dimensionsDetectedCount: dimensionsDetectedCount + }; + } + + function objectRowsCollectDimensions(data) { + var firstIndex = 0; + var obj; + + while (firstIndex < data.length && !(obj = data[firstIndex++])) {} // jshint ignore: line + + + if (obj) { + var dimensions_1 = []; + each(obj, function (value, key) { + dimensions_1.push(key); + }); + return dimensions_1; + } + } // Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'], + // which is reasonable. But dimension name is duplicated. + // Returns undefined or an array contains only object without null/undefiend or string. + + + function normalizeDimensionsOption(dimensionsDefine) { + if (!dimensionsDefine) { + // The meaning of null/undefined is different from empty array. + return; + } + + var nameMap = createHashMap(); + return map(dimensionsDefine, function (rawItem, index) { + rawItem = isObject(rawItem) ? rawItem : { + name: rawItem + }; // Other fields will be discarded. + + var item = { + name: rawItem.name, + displayName: rawItem.displayName, + type: rawItem.type + }; // User can set null in dimensions. + // We dont auto specify name, othewise a given name may + // cause it be refered unexpectedly. + + if (item.name == null) { + return item; + } // Also consider number form like 2012. + + + item.name += ''; // User may also specify displayName. + // displayName will always exists except user not + // specified or dim name is not specified or detected. + // (A auto generated dim name will not be used as + // displayName). + + if (item.displayName == null) { + item.displayName = item.name; + } + + var exist = nameMap.get(item.name); + + if (!exist) { + nameMap.set(item.name, { + count: 1 + }); + } else { + item.name += '-' + exist.count++; + } + + return item; + }); + } + + function arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) { + if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) { + for (var i = 0; i < data.length && i < maxLoop; i++) { + cb(data[i] ? data[i][0] : null, i); + } + } else { + var value0 = data[0] || []; + + for (var i = 0; i < value0.length && i < maxLoop; i++) { + cb(value0[i], i); + } + } + } + + function shouldRetrieveDataByName(source) { + var sourceFormat = source.sourceFormat; + return sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS; + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var _a, _b, _c; // TODO + var providerMethods; + var mountMethods; + /** + * If normal array used, mutable chunk size is supported. + * If typed array used, chunk size must be fixed. + */ + + var DefaultDataProvider = + /** @class */ + function () { + function DefaultDataProvider(sourceParam, dimSize) { + // let source: Source; + var source = !isSourceInstance(sourceParam) ? createSourceFromSeriesDataOption(sourceParam) : sourceParam; // declare source is Source; + + this._source = source; + var data = this._data = source.data; // Typed array. TODO IE10+? + + if (source.sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) { + if ("development" !== 'production') { + if (dimSize == null) { + throw new Error('Typed array data must specify dimension size'); + } + } + + this._offset = 0; + this._dimSize = dimSize; + this._data = data; + } + + mountMethods(this, data, source); + } + + DefaultDataProvider.prototype.getSource = function () { + return this._source; + }; + + DefaultDataProvider.prototype.count = function () { + return 0; + }; + + DefaultDataProvider.prototype.getItem = function (idx, out) { + return; + }; + + DefaultDataProvider.prototype.appendData = function (newData) {}; + + DefaultDataProvider.prototype.clean = function () {}; + + DefaultDataProvider.protoInitialize = function () { + // PENDING: To avoid potential incompat (e.g., prototype + // is visited somewhere), still init them on prototype. + var proto = DefaultDataProvider.prototype; + proto.pure = false; + proto.persistent = true; + }(); + + DefaultDataProvider.internalField = function () { + var _a; + + mountMethods = function (provider, data, source) { + var sourceFormat = source.sourceFormat; + var seriesLayoutBy = source.seriesLayoutBy; + var startIndex = source.startIndex; + var dimsDef = source.dimensionsDefine; + var methods = providerMethods[getMethodMapKey(sourceFormat, seriesLayoutBy)]; + + if ("development" !== 'production') { + assert(methods, 'Invalide sourceFormat: ' + sourceFormat); + } + + extend(provider, methods); + + if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) { + provider.getItem = getItemForTypedArray; + provider.count = countForTypedArray; + provider.fillStorage = fillStorageForTypedArray; + } else { + var rawItemGetter = getRawSourceItemGetter(sourceFormat, seriesLayoutBy); + provider.getItem = bind(rawItemGetter, null, data, startIndex, dimsDef); + var rawCounter = getRawSourceDataCounter(sourceFormat, seriesLayoutBy); + provider.count = bind(rawCounter, null, data, startIndex, dimsDef); + } + }; + + var getItemForTypedArray = function (idx, out) { + idx = idx - this._offset; + out = out || []; + var data = this._data; + var dimSize = this._dimSize; + var offset = dimSize * idx; + + for (var i = 0; i < dimSize; i++) { + out[i] = data[offset + i]; + } + + return out; + }; + + var fillStorageForTypedArray = function (start, end, storage, extent) { + var data = this._data; + var dimSize = this._dimSize; + + for (var dim = 0; dim < dimSize; dim++) { + var dimExtent = extent[dim]; + var min = dimExtent[0] == null ? Infinity : dimExtent[0]; + var max = dimExtent[1] == null ? -Infinity : dimExtent[1]; + var count = end - start; + var arr = storage[dim]; + + for (var i = 0; i < count; i++) { + // appendData with TypedArray will always do replace in provider. + var val = data[i * dimSize + dim]; + arr[start + i] = val; + val < min && (min = val); + val > max && (max = val); + } + + dimExtent[0] = min; + dimExtent[1] = max; + } + }; + + var countForTypedArray = function () { + return this._data ? this._data.length / this._dimSize : 0; + }; + + providerMethods = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = { + pure: true, + appendData: appendDataSimply + }, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = { + pure: true, + appendData: function () { + throw new Error('Do not support appendData when set seriesLayoutBy: "row".'); + } + }, _a[SOURCE_FORMAT_OBJECT_ROWS] = { + pure: true, + appendData: appendDataSimply + }, _a[SOURCE_FORMAT_KEYED_COLUMNS] = { + pure: true, + appendData: function (newData) { + var data = this._data; + each(newData, function (newCol, key) { + var oldCol = data[key] || (data[key] = []); + + for (var i = 0; i < (newCol || []).length; i++) { + oldCol.push(newCol[i]); + } + }); + } + }, _a[SOURCE_FORMAT_ORIGINAL] = { + appendData: appendDataSimply + }, _a[SOURCE_FORMAT_TYPED_ARRAY] = { + persistent: false, + pure: true, + appendData: function (newData) { + if ("development" !== 'production') { + assert(isTypedArray(newData), 'Added data must be TypedArray if data in initialization is TypedArray'); + } + + this._data = newData; + }, + // Clean self if data is already used. + clean: function () { + // PENDING + this._offset += this.count(); + this._data = null; + } + }, _a); + + function appendDataSimply(newData) { + for (var i = 0; i < newData.length; i++) { + this._data.push(newData[i]); + } + } + }(); + + return DefaultDataProvider; + }(); + + var getItemSimply = function (rawData, startIndex, dimsDef, idx) { + return rawData[idx]; + }; + + var rawSourceItemGetterMap = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = function (rawData, startIndex, dimsDef, idx) { + return rawData[idx + startIndex]; + }, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = function (rawData, startIndex, dimsDef, idx, out) { + idx += startIndex; + var item = out || []; + var data = rawData; + + for (var i = 0; i < data.length; i++) { + var row = data[i]; + item[i] = row ? row[idx] : null; + } + + return item; + }, _a[SOURCE_FORMAT_OBJECT_ROWS] = getItemSimply, _a[SOURCE_FORMAT_KEYED_COLUMNS] = function (rawData, startIndex, dimsDef, idx, out) { + var item = out || []; + + for (var i = 0; i < dimsDef.length; i++) { + var dimName = dimsDef[i].name; + + if ("development" !== 'production') { + if (dimName == null) { + throw new Error(); + } + } + + var col = rawData[dimName]; + item[i] = col ? col[idx] : null; + } + + return item; + }, _a[SOURCE_FORMAT_ORIGINAL] = getItemSimply, _a); + function getRawSourceItemGetter(sourceFormat, seriesLayoutBy) { + var method = rawSourceItemGetterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)]; + + if ("development" !== 'production') { + assert(method, 'Do not support get item on "' + sourceFormat + '", "' + seriesLayoutBy + '".'); + } + + return method; + } + + var countSimply = function (rawData, startIndex, dimsDef) { + return rawData.length; + }; + + var rawSourceDataCounterMap = (_b = {}, _b[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = function (rawData, startIndex, dimsDef) { + return Math.max(0, rawData.length - startIndex); + }, _b[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = function (rawData, startIndex, dimsDef) { + var row = rawData[0]; + return row ? Math.max(0, row.length - startIndex) : 0; + }, _b[SOURCE_FORMAT_OBJECT_ROWS] = countSimply, _b[SOURCE_FORMAT_KEYED_COLUMNS] = function (rawData, startIndex, dimsDef) { + var dimName = dimsDef[0].name; + + if ("development" !== 'production') { + if (dimName == null) { + throw new Error(); + } + } + + var col = rawData[dimName]; + return col ? col.length : 0; + }, _b[SOURCE_FORMAT_ORIGINAL] = countSimply, _b); + function getRawSourceDataCounter(sourceFormat, seriesLayoutBy) { + var method = rawSourceDataCounterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)]; + + if ("development" !== 'production') { + assert(method, 'Do not suppport count on "' + sourceFormat + '", "' + seriesLayoutBy + '".'); + } + + return method; + } + + var getRawValueSimply = function (dataItem, dimIndex, property) { + return dataItem[dimIndex]; + }; + + var rawSourceValueGetterMap = (_c = {}, _c[SOURCE_FORMAT_ARRAY_ROWS] = getRawValueSimply, _c[SOURCE_FORMAT_OBJECT_ROWS] = function (dataItem, dimIndex, property) { + return dataItem[property]; + }, _c[SOURCE_FORMAT_KEYED_COLUMNS] = getRawValueSimply, _c[SOURCE_FORMAT_ORIGINAL] = function (dataItem, dimIndex, property) { + // FIXME: In some case (markpoint in geo (geo-map.html)), + // dataItem is {coord: [...]} + var value = getDataItemValue(dataItem); + return !(value instanceof Array) ? value : value[dimIndex]; + }, _c[SOURCE_FORMAT_TYPED_ARRAY] = getRawValueSimply, _c); + function getRawSourceValueGetter(sourceFormat) { + var method = rawSourceValueGetterMap[sourceFormat]; + + if ("development" !== 'production') { + assert(method, 'Do not suppport get value on "' + sourceFormat + '".'); + } + + return method; + } + + function getMethodMapKey(sourceFormat, seriesLayoutBy) { + return sourceFormat === SOURCE_FORMAT_ARRAY_ROWS ? sourceFormat + '_' + seriesLayoutBy : sourceFormat; + } // ??? FIXME can these logic be more neat: getRawValue, getRawDataItem, + // Consider persistent. + // Caution: why use raw value to display on label or tooltip? + // A reason is to avoid format. For example time value we do not know + // how to format is expected. More over, if stack is used, calculated + // value may be 0.91000000001, which have brings trouble to display. + // TODO: consider how to treat null/undefined/NaN when display? + + + function retrieveRawValue(data, dataIndex, // If dimIndex is null/undefined, return OptionDataItem. + // Otherwise, return OptionDataValue. + dim) { + if (!data) { + return; + } // Consider data may be not persistent. + + + var dataItem = data.getRawDataItem(dataIndex); + + if (dataItem == null) { + return; + } + + var store = data.getStore(); + var sourceFormat = store.getSource().sourceFormat; + + if (dim != null) { + var dimIndex = data.getDimensionIndex(dim); + var property = store.getDimensionProperty(dimIndex); + return getRawSourceValueGetter(sourceFormat)(dataItem, dimIndex, property); + } else { + var result = dataItem; + + if (sourceFormat === SOURCE_FORMAT_ORIGINAL) { + result = getDataItemValue(dataItem); + } + + return result; + } + } + + var DIMENSION_LABEL_REG = /\{@(.+?)\}/g; + + var DataFormatMixin = + /** @class */ + function () { + function DataFormatMixin() {} + /** + * Get params for formatter + */ + + + DataFormatMixin.prototype.getDataParams = function (dataIndex, dataType) { + var data = this.getData(dataType); + var rawValue = this.getRawValue(dataIndex, dataType); + var rawDataIndex = data.getRawIndex(dataIndex); + var name = data.getName(dataIndex); + var itemOpt = data.getRawDataItem(dataIndex); + var style = data.getItemVisual(dataIndex, 'style'); + var color = style && style[data.getItemVisual(dataIndex, 'drawType') || 'fill']; + var borderColor = style && style.stroke; + var mainType = this.mainType; + var isSeries = mainType === 'series'; + var userOutput = data.userOutput && data.userOutput.get(); + return { + componentType: mainType, + componentSubType: this.subType, + componentIndex: this.componentIndex, + seriesType: isSeries ? this.subType : null, + seriesIndex: this.seriesIndex, + seriesId: isSeries ? this.id : null, + seriesName: isSeries ? this.name : null, + name: name, + dataIndex: rawDataIndex, + data: itemOpt, + dataType: dataType, + value: rawValue, + color: color, + borderColor: borderColor, + dimensionNames: userOutput ? userOutput.fullDimensions : null, + encode: userOutput ? userOutput.encode : null, + // Param name list for mapping `a`, `b`, `c`, `d`, `e` + $vars: ['seriesName', 'name', 'value'] + }; + }; + /** + * Format label + * @param dataIndex + * @param status 'normal' by default + * @param dataType + * @param labelDimIndex Only used in some chart that + * use formatter in different dimensions, like radar. + * @param formatter Formatter given outside. + * @return return null/undefined if no formatter + */ + + + DataFormatMixin.prototype.getFormattedLabel = function (dataIndex, status, dataType, labelDimIndex, formatter, extendParams) { + status = status || 'normal'; + var data = this.getData(dataType); + var params = this.getDataParams(dataIndex, dataType); + + if (extendParams) { + params.value = extendParams.interpolatedValue; + } + + if (labelDimIndex != null && isArray(params.value)) { + params.value = params.value[labelDimIndex]; + } + + if (!formatter) { + var itemModel = data.getItemModel(dataIndex); // @ts-ignore + + formatter = itemModel.get(status === 'normal' ? ['label', 'formatter'] : [status, 'label', 'formatter']); + } + + if (typeof formatter === 'function') { + params.status = status; + params.dimensionIndex = labelDimIndex; + return formatter(params); + } else if (typeof formatter === 'string') { + var str = formatTpl(formatter, params); // Support 'aaa{@[3]}bbb{@product}ccc'. + // Do not support '}' in dim name util have to. + + return str.replace(DIMENSION_LABEL_REG, function (origin, dimStr) { + var len = dimStr.length; + var dimLoose = dimStr; + + if (dimLoose.charAt(0) === '[' && dimLoose.charAt(len - 1) === ']') { + dimLoose = +dimLoose.slice(1, len - 1); // Also support: '[]' => 0 + + if ("development" !== 'production') { + if (isNaN(dimLoose)) { + error("Invalide label formatter: @" + dimStr + ", only support @[0], @[1], @[2], ..."); + } + } + } + + var val = retrieveRawValue(data, dataIndex, dimLoose); + + if (extendParams && isArray(extendParams.interpolatedValue)) { + var dimIndex = data.getDimensionIndex(dimLoose); + + if (dimIndex >= 0) { + val = extendParams.interpolatedValue[dimIndex]; + } + } + + return val != null ? val + '' : ''; + }); + } + }; + /** + * Get raw value in option + */ + + + DataFormatMixin.prototype.getRawValue = function (idx, dataType) { + return retrieveRawValue(this.getData(dataType), idx); + }; + /** + * Should be implemented. + * @param {number} dataIndex + * @param {boolean} [multipleSeries=false] + * @param {string} [dataType] + */ + + + DataFormatMixin.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + // Empty function + return; + }; + + return DataFormatMixin; + }(); + // but guess little chance has been used outside. Do we need to backward + // compat it? + // type TooltipFormatResultLegacyObject = { + // // `html` means the markup language text, either in 'html' or 'richText'. + // // The name `html` is not appropriate becuase in 'richText' it is not a HTML + // // string. But still support it for backward compat. + // html: string; + // markers: Dictionary; + // }; + + /** + * For backward compat, normalize the return from `formatTooltip`. + */ + + function normalizeTooltipFormatResult(result // markersExisting: Dictionary + ) { + var markupText; // let markers: Dictionary; + + var markupFragment; + + if (isObject(result)) { + if (result.type) { + markupFragment = result; + } else { + if ("development" !== 'production') { + console.warn('The return type of `formatTooltip` is not supported: ' + makePrintable(result)); + } + } // else { + // markupText = (result as TooltipFormatResultLegacyObject).html; + // markers = (result as TooltipFormatResultLegacyObject).markers; + // if (markersExisting) { + // markers = zrUtil.merge(markersExisting, markers); + // } + // } + + } else { + markupText = result; + } + + return { + markupText: markupText, + // markers: markers || markersExisting, + markupFragment: markupFragment + }; + } + + /** + * @param {Object} define + * @return See the return of `createTask`. + */ + + function createTask(define) { + return new Task(define); + } + + var Task = + /** @class */ + function () { + function Task(define) { + define = define || {}; + this._reset = define.reset; + this._plan = define.plan; + this._count = define.count; + this._onDirty = define.onDirty; + this._dirty = true; + } + /** + * @param step Specified step. + * @param skip Skip customer perform call. + * @param modBy Sampling window size. + * @param modDataCount Sampling count. + * @return whether unfinished. + */ + + + Task.prototype.perform = function (performArgs) { + var upTask = this._upstream; + var skip = performArgs && performArgs.skip; // TODO some refactor. + // Pull data. Must pull data each time, because context.data + // may be updated by Series.setData. + + if (this._dirty && upTask) { + var context = this.context; + context.data = context.outputData = upTask.context.outputData; + } + + if (this.__pipeline) { + this.__pipeline.currentTask = this; + } + + var planResult; + + if (this._plan && !skip) { + planResult = this._plan(this.context); + } // Support sharding by mod, which changes the render sequence and makes the rendered graphic + // elements uniformed distributed when progress, especially when moving or zooming. + + + var lastModBy = normalizeModBy(this._modBy); + var lastModDataCount = this._modDataCount || 0; + var modBy = normalizeModBy(performArgs && performArgs.modBy); + var modDataCount = performArgs && performArgs.modDataCount || 0; + + if (lastModBy !== modBy || lastModDataCount !== modDataCount) { + planResult = 'reset'; + } + + function normalizeModBy(val) { + !(val >= 1) && (val = 1); // jshint ignore:line + + return val; + } + + var forceFirstProgress; + + if (this._dirty || planResult === 'reset') { + this._dirty = false; + forceFirstProgress = this._doReset(skip); + } + + this._modBy = modBy; + this._modDataCount = modDataCount; + var step = performArgs && performArgs.step; + + if (upTask) { + if ("development" !== 'production') { + assert(upTask._outputDueEnd != null); + } + + this._dueEnd = upTask._outputDueEnd; + } // DataTask or overallTask + else { + if ("development" !== 'production') { + assert(!this._progress || this._count); + } + + this._dueEnd = this._count ? this._count(this.context) : Infinity; + } // Note: Stubs, that its host overall task let it has progress, has progress. + // If no progress, pass index from upstream to downstream each time plan called. + + + if (this._progress) { + var start = this._dueIndex; + var end = Math.min(step != null ? this._dueIndex + step : Infinity, this._dueEnd); + + if (!skip && (forceFirstProgress || start < end)) { + var progress = this._progress; + + if (isArray(progress)) { + for (var i = 0; i < progress.length; i++) { + this._doProgress(progress[i], start, end, modBy, modDataCount); + } + } else { + this._doProgress(progress, start, end, modBy, modDataCount); + } + } + + this._dueIndex = end; // If no `outputDueEnd`, assume that output data and + // input data is the same, so use `dueIndex` as `outputDueEnd`. + + var outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : end; + + if ("development" !== 'production') { + // ??? Can not rollback. + assert(outputDueEnd >= this._outputDueEnd); + } + + this._outputDueEnd = outputDueEnd; + } else { + // (1) Some overall task has no progress. + // (2) Stubs, that its host overall task do not let it has progress, has no progress. + // This should always be performed so it can be passed to downstream. + this._dueIndex = this._outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : this._dueEnd; + } + + return this.unfinished(); + }; + + Task.prototype.dirty = function () { + this._dirty = true; + this._onDirty && this._onDirty(this.context); + }; + + Task.prototype._doProgress = function (progress, start, end, modBy, modDataCount) { + iterator.reset(start, end, modBy, modDataCount); + this._callingProgress = progress; + + this._callingProgress({ + start: start, + end: end, + count: end - start, + next: iterator.next + }, this.context); + }; + + Task.prototype._doReset = function (skip) { + this._dueIndex = this._outputDueEnd = this._dueEnd = 0; + this._settedOutputEnd = null; + var progress; + var forceFirstProgress; + + if (!skip && this._reset) { + progress = this._reset(this.context); + + if (progress && progress.progress) { + forceFirstProgress = progress.forceFirstProgress; + progress = progress.progress; + } // To simplify no progress checking, array must has item. + + + if (isArray(progress) && !progress.length) { + progress = null; + } + } + + this._progress = progress; + this._modBy = this._modDataCount = null; + var downstream = this._downstream; + downstream && downstream.dirty(); + return forceFirstProgress; + }; + + Task.prototype.unfinished = function () { + return this._progress && this._dueIndex < this._dueEnd; + }; + /** + * @param downTask The downstream task. + * @return The downstream task. + */ + + + Task.prototype.pipe = function (downTask) { + if ("development" !== 'production') { + assert(downTask && !downTask._disposed && downTask !== this); + } // If already downstream, do not dirty downTask. + + + if (this._downstream !== downTask || this._dirty) { + this._downstream = downTask; + downTask._upstream = this; + downTask.dirty(); + } + }; + + Task.prototype.dispose = function () { + if (this._disposed) { + return; + } + + this._upstream && (this._upstream._downstream = null); + this._downstream && (this._downstream._upstream = null); + this._dirty = false; + this._disposed = true; + }; + + Task.prototype.getUpstream = function () { + return this._upstream; + }; + + Task.prototype.getDownstream = function () { + return this._downstream; + }; + + Task.prototype.setOutputEnd = function (end) { + // This only happend in dataTask, dataZoom, map, currently. + // where dataZoom do not set end each time, but only set + // when reset. So we should record the setted end, in case + // that the stub of dataZoom perform again and earse the + // setted end by upstream. + this._outputDueEnd = this._settedOutputEnd = end; + }; + + return Task; + }(); + + var iterator = function () { + var end; + var current; + var modBy; + var modDataCount; + var winCount; + var it = { + reset: function (s, e, sStep, sCount) { + current = s; + end = e; + modBy = sStep; + modDataCount = sCount; + winCount = Math.ceil(modDataCount / modBy); + it.next = modBy > 1 && modDataCount > 0 ? modNext : sequentialNext; + } + }; + return it; + + function sequentialNext() { + return current < end ? current++ : null; + } + + function modNext() { + var dataIndex = current % winCount * modBy + Math.ceil(current / winCount); + var result = current >= end ? null : dataIndex < modDataCount ? dataIndex // If modDataCount is smaller than data.count() (consider `appendData` case), + // Use normal linear rendering mode. + : current; + current++; + return result; + } + }(); /////////////////////////////////////////////////////////// + // For stream debug (Should be commented out after used!) + // @usage: printTask(this, 'begin'); + // @usage: printTask(this, null, {someExtraProp}); + // @usage: Use `__idxInPipeline` as conditional breakpiont. + // + // window.printTask = function (task: any, prefix: string, extra: { [key: string]: unknown }): void { + // window.ecTaskUID == null && (window.ecTaskUID = 0); + // task.uidDebug == null && (task.uidDebug = `task_${window.ecTaskUID++}`); + // task.agent && task.agent.uidDebug == null && (task.agent.uidDebug = `task_${window.ecTaskUID++}`); + // let props = []; + // if (task.__pipeline) { + // let val = `${task.__idxInPipeline}/${task.__pipeline.tail.__idxInPipeline} ${task.agent ? '(stub)' : ''}`; + // props.push({text: '__idxInPipeline/total', value: val}); + // } else { + // let stubCount = 0; + // task.agentStubMap.each(() => stubCount++); + // props.push({text: 'idx', value: `overall (stubs: ${stubCount})`}); + // } + // props.push({text: 'uid', value: task.uidDebug}); + // if (task.__pipeline) { + // props.push({text: 'pipelineId', value: task.__pipeline.id}); + // task.agent && props.push( + // {text: 'stubFor', value: task.agent.uidDebug} + // ); + // } + // props.push( + // {text: 'dirty', value: task._dirty}, + // {text: 'dueIndex', value: task._dueIndex}, + // {text: 'dueEnd', value: task._dueEnd}, + // {text: 'outputDueEnd', value: task._outputDueEnd} + // ); + // if (extra) { + // Object.keys(extra).forEach(key => { + // props.push({text: key, value: extra[key]}); + // }); + // } + // let args = ['color: blue']; + // let msg = `%c[${prefix || 'T'}] %c` + props.map(item => ( + // args.push('color: green', 'color: red'), + // `${item.text}: %c${item.value}` + // )).join('%c, '); + // console.log.apply(console, [msg].concat(args)); + // // console.log(this); + // }; + // window.printPipeline = function (task: any, prefix: string) { + // const pipeline = task.__pipeline; + // let currTask = pipeline.head; + // while (currTask) { + // window.printTask(currTask, prefix); + // currTask = currTask._downstream; + // } + // }; + // window.showChain = function (chainHeadTask) { + // var chain = []; + // var task = chainHeadTask; + // while (task) { + // chain.push({ + // task: task, + // up: task._upstream, + // down: task._downstream, + // idxInPipeline: task.__idxInPipeline + // }); + // task = task._downstream; + // } + // return chain; + // }; + // window.findTaskInChain = function (task, chainHeadTask) { + // let chain = window.showChain(chainHeadTask); + // let result = []; + // for (let i = 0; i < chain.length; i++) { + // let chainItem = chain[i]; + // if (chainItem.task === task) { + // result.push(i); + // } + // } + // return result; + // }; + // window.printChainAEachInChainB = function (chainHeadTaskA, chainHeadTaskB) { + // let chainA = window.showChain(chainHeadTaskA); + // for (let i = 0; i < chainA.length; i++) { + // console.log('chainAIdx:', i, 'inChainB:', window.findTaskInChain(chainA[i].task, chainHeadTaskB)); + // } + // }; + + /** + * Convert raw the value in to inner value in List. + * + * [Performance sensitive] + * + * [Caution]: this is the key logic of user value parser. + * For backward compatibiliy, do not modify it until have to! + */ + + function parseDataValue(value, // For high performance, do not omit the second param. + opt) { + // Performance sensitive. + var dimType = opt && opt.type; + + if (dimType === 'ordinal') { + // If given value is a category string + return value; + } + + if (dimType === 'time' // spead up when using timestamp + && typeof value !== 'number' && value != null && value !== '-') { + value = +parseDate(value); + } // dimType defaults 'number'. + // If dimType is not ordinal and value is null or undefined or NaN or '-', + // parse to NaN. + // number-like string (like ' 123 ') can be converted to a number. + // where null/undefined or other string will be converted to NaN. + + + return value == null || value === '' ? NaN // If string (like '-'), using '+' parse to NaN + // If object, also parse to NaN + : +value; + } + var valueParserMap = createHashMap({ + 'number': function (val) { + // Do not use `numericToNumber` here. We have by defualt `numericToNumber`. + // Here the number parser can have loose rule: + // enable to cut suffix: "120px" => 120, "14%" => 14. + return parseFloat(val); + }, + 'time': function (val) { + // return timestamp. + return +parseDate(val); + }, + 'trim': function (val) { + return typeof val === 'string' ? trim(val) : val; + } + }); + function getRawValueParser(type) { + return valueParserMap.get(type); + } + var ORDER_COMPARISON_OP_MAP = { + lt: function (lval, rval) { + return lval < rval; + }, + lte: function (lval, rval) { + return lval <= rval; + }, + gt: function (lval, rval) { + return lval > rval; + }, + gte: function (lval, rval) { + return lval >= rval; + } + }; + + var FilterOrderComparator = + /** @class */ + function () { + function FilterOrderComparator(op, rval) { + if (typeof rval !== 'number') { + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = 'rvalue of "<", ">", "<=", ">=" can only be number in filter.'; + } + + throwError(errMsg); + } + + this._opFn = ORDER_COMPARISON_OP_MAP[op]; + this._rvalFloat = numericToNumber(rval); + } // Performance sensitive. + + + FilterOrderComparator.prototype.evaluate = function (lval) { + // Most cases is 'number', and typeof maybe 10 times faseter than parseFloat. + return typeof lval === 'number' ? this._opFn(lval, this._rvalFloat) : this._opFn(numericToNumber(lval), this._rvalFloat); + }; + + return FilterOrderComparator; + }(); + + var SortOrderComparator = + /** @class */ + function () { + /** + * @param order by defualt: 'asc' + * @param incomparable by defualt: Always on the tail. + * That is, if 'asc' => 'max', if 'desc' => 'min' + * See the definition of "incomparable" in [SORT_COMPARISON_RULE] + */ + function SortOrderComparator(order, incomparable) { + var isDesc = order === 'desc'; + this._resultLT = isDesc ? 1 : -1; + + if (incomparable == null) { + incomparable = isDesc ? 'min' : 'max'; + } + + this._incomparable = incomparable === 'min' ? -Infinity : Infinity; + } // See [SORT_COMPARISON_RULE]. + // Performance sensitive. + + + SortOrderComparator.prototype.evaluate = function (lval, rval) { + // Most cases is 'number', and typeof maybe 10 times faseter than parseFloat. + var lvalTypeof = typeof lval; + var rvalTypeof = typeof rval; + var lvalFloat = lvalTypeof === 'number' ? lval : numericToNumber(lval); + var rvalFloat = rvalTypeof === 'number' ? rval : numericToNumber(rval); + var lvalNotNumeric = isNaN(lvalFloat); + var rvalNotNumeric = isNaN(rvalFloat); + + if (lvalNotNumeric) { + lvalFloat = this._incomparable; + } + + if (rvalNotNumeric) { + rvalFloat = this._incomparable; + } + + if (lvalNotNumeric && rvalNotNumeric) { + var lvalIsStr = lvalTypeof === 'string'; + var rvalIsStr = rvalTypeof === 'string'; + + if (lvalIsStr) { + lvalFloat = rvalIsStr ? lval : 0; + } + + if (rvalIsStr) { + rvalFloat = lvalIsStr ? rval : 0; + } + } + + return lvalFloat < rvalFloat ? this._resultLT : lvalFloat > rvalFloat ? -this._resultLT : 0; + }; + + return SortOrderComparator; + }(); + + var FilterEqualityComparator = + /** @class */ + function () { + function FilterEqualityComparator(isEq, rval) { + this._rval = rval; + this._isEQ = isEq; + this._rvalTypeof = typeof rval; + this._rvalFloat = numericToNumber(rval); + } // Performance sensitive. + + + FilterEqualityComparator.prototype.evaluate = function (lval) { + var eqResult = lval === this._rval; + + if (!eqResult) { + var lvalTypeof = typeof lval; + + if (lvalTypeof !== this._rvalTypeof && (lvalTypeof === 'number' || this._rvalTypeof === 'number')) { + eqResult = numericToNumber(lval) === this._rvalFloat; + } + } + + return this._isEQ ? eqResult : !eqResult; + }; + + return FilterEqualityComparator; + }(); + /** + * [FILTER_COMPARISON_RULE] + * `lt`|`lte`|`gt`|`gte`: + * + rval must be a number. And lval will be converted to number (`numericToNumber`) to compare. + * `eq`: + * + If same type, compare with `===`. + * + If there is one number, convert to number (`numericToNumber`) to compare. + * + Else return `false`. + * `ne`: + * + Not `eq`. + * + * + * [SORT_COMPARISON_RULE] + * All the values are grouped into three categories: + * + "numeric" (number and numeric string) + * + "non-numeric-string" (string that excluding numeric string) + * + "others" + * "numeric" vs "numeric": values are ordered by number order. + * "non-numeric-string" vs "non-numeric-string": values are ordered by ES spec (#sec-abstract-relational-comparison). + * "others" vs "others": do not change order (always return 0). + * "numeric" vs "non-numeric-string": "non-numeric-string" is treated as "incomparable". + * "number" vs "others": "others" is treated as "incomparable". + * "non-numeric-string" vs "others": "others" is treated as "incomparable". + * "incomparable" will be seen as -Infinity or Infinity (depends on the settings). + * MEMO: + * non-numeric string sort make sence when need to put the items with the same tag together. + * But if we support string sort, we still need to avoid the misleading like `'2' > '12'`, + * So we treat "numeric-string" sorted by number order rather than string comparison. + * + * + * [CHECK_LIST_OF_THE_RULE_DESIGN] + * + Do not support string comparison until required. And also need to + * void the misleading of "2" > "12". + * + Should avoid the misleading case: + * `" 22 " gte "22"` is `true` but `" 22 " eq "22"` is `false`. + * + JS bad case should be avoided: null <= 0, [] <= 0, ' ' <= 0, ... + * + Only "numeric" can be converted to comparable number, otherwise converted to NaN. + * See `util/number.ts#numericToNumber`. + * + * @return If `op` is not `RelationalOperator`, return null; + */ + + + function createFilterComparator(op, rval) { + return op === 'eq' || op === 'ne' ? new FilterEqualityComparator(op === 'eq', rval) : hasOwn(ORDER_COMPARISON_OP_MAP, op) ? new FilterOrderComparator(op, rval) : null; + } + + /** + * TODO: disable writable. + * This structure will be exposed to users. + */ + + var ExternalSource = + /** @class */ + function () { + function ExternalSource() {} + + ExternalSource.prototype.getRawData = function () { + // Only built-in transform available. + throw new Error('not supported'); + }; + + ExternalSource.prototype.getRawDataItem = function (dataIndex) { + // Only built-in transform available. + throw new Error('not supported'); + }; + + ExternalSource.prototype.cloneRawData = function () { + return; + }; + /** + * @return If dimension not found, return null/undefined. + */ + + + ExternalSource.prototype.getDimensionInfo = function (dim) { + return; + }; + /** + * dimensions defined if and only if either: + * (a) dataset.dimensions are declared. + * (b) dataset data include dimensions definitions in data (detected or via specified `sourceHeader`). + * If dimensions are defined, `dimensionInfoAll` is corresponding to + * the defined dimensions. + * Otherwise, `dimensionInfoAll` is determined by data columns. + * @return Always return an array (even empty array). + */ + + + ExternalSource.prototype.cloneAllDimensionInfo = function () { + return; + }; + + ExternalSource.prototype.count = function () { + return; + }; + /** + * Only support by dimension index. + * No need to support by dimension name in transform function, + * becuase transform function is not case-specific, no need to use name literally. + */ + + + ExternalSource.prototype.retrieveValue = function (dataIndex, dimIndex) { + return; + }; + + ExternalSource.prototype.retrieveValueFromItem = function (dataItem, dimIndex) { + return; + }; + + ExternalSource.prototype.convertValue = function (rawVal, dimInfo) { + return parseDataValue(rawVal, dimInfo); + }; + + return ExternalSource; + }(); + + function createExternalSource(internalSource, externalTransform) { + var extSource = new ExternalSource(); + var data = internalSource.data; + var sourceFormat = extSource.sourceFormat = internalSource.sourceFormat; + var sourceHeaderCount = internalSource.startIndex; + var errMsg = ''; + + if (internalSource.seriesLayoutBy !== SERIES_LAYOUT_BY_COLUMN) { + // For the logic simplicity in transformer, only 'culumn' is + // supported in data transform. Otherwise, the `dimensionsDefine` + // might be detected by 'row', which probably confuses users. + if ("development" !== 'production') { + errMsg = '`seriesLayoutBy` of upstream dataset can only be "column" in data transform.'; + } + + throwError(errMsg); + } // [MEMO] + // Create a new dimensions structure for exposing. + // Do not expose all dimension info to users directly. + // Becuase the dimension is probably auto detected from data and not might reliable. + // Should not lead the transformers to think that is relialbe and return it. + // See [DIMENSION_INHERIT_RULE] in `sourceManager.ts`. + + + var dimensions = []; + var dimsByName = {}; + var dimsDef = internalSource.dimensionsDefine; + + if (dimsDef) { + each(dimsDef, function (dimDef, idx) { + var name = dimDef.name; + var dimDefExt = { + index: idx, + name: name, + displayName: dimDef.displayName + }; + dimensions.push(dimDefExt); // Users probably not sepcify dimension name. For simplicity, data transform + // do not generate dimension name. + + if (name != null) { + // Dimension name should not be duplicated. + // For simplicity, data transform forbid name duplication, do not generate + // new name like module `completeDimensions.ts` did, but just tell users. + var errMsg_1 = ''; + + if (hasOwn(dimsByName, name)) { + if ("development" !== 'production') { + errMsg_1 = 'dimension name "' + name + '" duplicated.'; + } + + throwError(errMsg_1); + } + + dimsByName[name] = dimDefExt; + } + }); + } // If dimension definitions are not defined and can not be detected. + // e.g., pure data `[[11, 22], ...]`. + else { + for (var i = 0; i < internalSource.dimensionsDetectedCount || 0; i++) { + // Do not generete name or anything others. The consequence process in + // `transform` or `series` probably have there own name generation strategry. + dimensions.push({ + index: i + }); + } + } // Implement public methods: + + + var rawItemGetter = getRawSourceItemGetter(sourceFormat, SERIES_LAYOUT_BY_COLUMN); + + if (externalTransform.__isBuiltIn) { + extSource.getRawDataItem = function (dataIndex) { + return rawItemGetter(data, sourceHeaderCount, dimensions, dataIndex); + }; + + extSource.getRawData = bind(getRawData, null, internalSource); + } + + extSource.cloneRawData = bind(cloneRawData, null, internalSource); + var rawCounter = getRawSourceDataCounter(sourceFormat, SERIES_LAYOUT_BY_COLUMN); + extSource.count = bind(rawCounter, null, data, sourceHeaderCount, dimensions); + var rawValueGetter = getRawSourceValueGetter(sourceFormat); + + extSource.retrieveValue = function (dataIndex, dimIndex) { + var rawItem = rawItemGetter(data, sourceHeaderCount, dimensions, dataIndex); + return retrieveValueFromItem(rawItem, dimIndex); + }; + + var retrieveValueFromItem = extSource.retrieveValueFromItem = function (dataItem, dimIndex) { + if (dataItem == null) { + return; + } + + var dimDef = dimensions[dimIndex]; // When `dimIndex` is `null`, `rawValueGetter` return the whole item. + + if (dimDef) { + return rawValueGetter(dataItem, dimIndex, dimDef.name); + } + }; + + extSource.getDimensionInfo = bind(getDimensionInfo, null, dimensions, dimsByName); + extSource.cloneAllDimensionInfo = bind(cloneAllDimensionInfo, null, dimensions); + return extSource; + } + + function getRawData(upstream) { + var sourceFormat = upstream.sourceFormat; + + if (!isSupportedSourceFormat(sourceFormat)) { + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = '`getRawData` is not supported in source format ' + sourceFormat; + } + + throwError(errMsg); + } + + return upstream.data; + } + + function cloneRawData(upstream) { + var sourceFormat = upstream.sourceFormat; + var data = upstream.data; + + if (!isSupportedSourceFormat(sourceFormat)) { + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = '`cloneRawData` is not supported in source format ' + sourceFormat; + } + + throwError(errMsg); + } + + if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) { + var result = []; + + for (var i = 0, len = data.length; i < len; i++) { + // Not strictly clone for performance + result.push(data[i].slice()); + } + + return result; + } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) { + var result = []; + + for (var i = 0, len = data.length; i < len; i++) { + // Not strictly clone for performance + result.push(extend({}, data[i])); + } + + return result; + } + } + + function getDimensionInfo(dimensions, dimsByName, dim) { + if (dim == null) { + return; + } // Keep the same logic as `List::getDimension` did. + + + if (typeof dim === 'number' // If being a number-like string but not being defined a dimension name. + || !isNaN(dim) && !hasOwn(dimsByName, dim)) { + return dimensions[dim]; + } else if (hasOwn(dimsByName, dim)) { + return dimsByName[dim]; + } + } + + function cloneAllDimensionInfo(dimensions) { + return clone(dimensions); + } + + var externalTransformMap = createHashMap(); + function registerExternalTransform(externalTransform) { + externalTransform = clone(externalTransform); + var type = externalTransform.type; + var errMsg = ''; + + if (!type) { + if ("development" !== 'production') { + errMsg = 'Must have a `type` when `registerTransform`.'; + } + + throwError(errMsg); + } + + var typeParsed = type.split(':'); + + if (typeParsed.length !== 2) { + if ("development" !== 'production') { + errMsg = 'Name must include namespace like "ns:regression".'; + } + + throwError(errMsg); + } // Namespace 'echarts:xxx' is official namespace, where the transforms should + // be called directly via 'xxx' rather than 'echarts:xxx'. + + + var isBuiltIn = false; + + if (typeParsed[0] === 'echarts') { + type = typeParsed[1]; + isBuiltIn = true; + } + + externalTransform.__isBuiltIn = isBuiltIn; + externalTransformMap.set(type, externalTransform); + } + function applyDataTransform(rawTransOption, sourceList, infoForPrint) { + var pipedTransOption = normalizeToArray(rawTransOption); + var pipeLen = pipedTransOption.length; + var errMsg = ''; + + if (!pipeLen) { + if ("development" !== 'production') { + errMsg = 'If `transform` declared, it should at least contain one transform.'; + } + + throwError(errMsg); + } + + for (var i = 0, len = pipeLen; i < len; i++) { + var transOption = pipedTransOption[i]; + sourceList = applySingleDataTransform(transOption, sourceList, infoForPrint, pipeLen === 1 ? null : i); // piped transform only support single input, except the fist one. + // piped transform only support single output, except the last one. + + if (i !== len - 1) { + sourceList.length = Math.max(sourceList.length, 1); + } + } + + return sourceList; + } + + function applySingleDataTransform(transOption, upSourceList, infoForPrint, // If `pipeIndex` is null/undefined, no piped transform. + pipeIndex) { + var errMsg = ''; + + if (!upSourceList.length) { + if ("development" !== 'production') { + errMsg = 'Must have at least one upstream dataset.'; + } + + throwError(errMsg); + } + + if (!isObject(transOption)) { + if ("development" !== 'production') { + errMsg = 'transform declaration must be an object rather than ' + typeof transOption + '.'; + } + + throwError(errMsg); + } + + var transType = transOption.type; + var externalTransform = externalTransformMap.get(transType); + + if (!externalTransform) { + if ("development" !== 'production') { + errMsg = 'Can not find transform on type "' + transType + '".'; + } + + throwError(errMsg); + } // Prepare source + + + var extUpSourceList = map(upSourceList, function (upSource) { + return createExternalSource(upSource, externalTransform); + }); + var resultList = normalizeToArray(externalTransform.transform({ + upstream: extUpSourceList[0], + upstreamList: extUpSourceList, + config: clone(transOption.config) + })); + + if ("development" !== 'production') { + if (transOption.print) { + var printStrArr = map(resultList, function (extSource) { + var pipeIndexStr = pipeIndex != null ? ' === pipe index: ' + pipeIndex : ''; + return ['=== dataset index: ' + infoForPrint.datasetIndex + pipeIndexStr + ' ===', '- transform result data:', makePrintable(extSource.data), '- transform result dimensions:', makePrintable(extSource.dimensions)].join('\n'); + }).join('\n'); + consoleLog(printStrArr); + } + } + + return map(resultList, function (result, resultIndex) { + var errMsg = ''; + + if (!isObject(result)) { + if ("development" !== 'production') { + errMsg = 'A transform should not return some empty results.'; + } + + throwError(errMsg); + } + + if (!result.data) { + if ("development" !== 'production') { + errMsg = 'Transform result data should be not be null or undefined'; + } + + throwError(errMsg); + } + + var sourceFormat = detectSourceFormat(result.data); + + if (!isSupportedSourceFormat(sourceFormat)) { + if ("development" !== 'production') { + errMsg = 'Transform result data should be array rows or object rows.'; + } + + throwError(errMsg); + } + + var resultMetaRawOption; + var firstUpSource = upSourceList[0]; + /** + * Intuitively, the end users known the content of the original `dataset.source`, + * calucating the transform result in mind. + * Suppose the original `dataset.source` is: + * ```js + * [ + * ['product', '2012', '2013', '2014', '2015'], + * ['AAA', 41.1, 30.4, 65.1, 53.3], + * ['BBB', 86.5, 92.1, 85.7, 83.1], + * ['CCC', 24.1, 67.2, 79.5, 86.4] + * ] + * ``` + * The dimension info have to be detected from the source data. + * Some of the transformers (like filter, sort) will follow the dimension info + * of upstream, while others use new dimensions (like aggregate). + * Transformer can output a field `dimensions` to define the its own output dimensions. + * We also allow transformers to ignore the output `dimensions` field, and + * inherit the upstream dimensions definition. It can reduce the burden of handling + * dimensions in transformers. + * + * See also [DIMENSION_INHERIT_RULE] in `sourceManager.ts`. + */ + + if (firstUpSource && resultIndex === 0 // If transformer returns `dimensions`, it means that the transformer has different + // dimensions definitions. We do not inherit anything from upstream. + && !result.dimensions) { + var startIndex = firstUpSource.startIndex; // We copy the header of upstream to the result becuase: + // (1) The returned data always does not contain header line and can not be used + // as dimension-detection. In this case we can not use "detected dimensions" of + // upstream directly, because it might be detected based on different `seriesLayoutBy`. + // (2) We should support that the series read the upstream source in `seriesLayoutBy: 'row'`. + // So the original detected header should be add to the result, otherwise they can not be read. + + if (startIndex) { + result.data = firstUpSource.data.slice(0, startIndex).concat(result.data); + } + + resultMetaRawOption = { + seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN, + sourceHeader: startIndex, + dimensions: firstUpSource.metaRawOption.dimensions + }; + } else { + resultMetaRawOption = { + seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN, + sourceHeader: 0, + dimensions: result.dimensions + }; + } + + return createSource(result.data, resultMetaRawOption, null); + }); + } + + function isSupportedSourceFormat(sourceFormat) { + return sourceFormat === SOURCE_FORMAT_ARRAY_ROWS || sourceFormat === SOURCE_FORMAT_OBJECT_ROWS; + } + + var UNDEFINED = 'undefined'; + /* global Float64Array, Int32Array, Uint32Array, Uint16Array */ + // Caution: MUST not use `new CtorUint32Array(arr, 0, len)`, because the Ctor of array is + // different from the Ctor of typed array. + + var CtorUint32Array = typeof Uint32Array === UNDEFINED ? Array : Uint32Array; + var CtorUint16Array = typeof Uint16Array === UNDEFINED ? Array : Uint16Array; + var CtorInt32Array = typeof Int32Array === UNDEFINED ? Array : Int32Array; + var CtorFloat64Array = typeof Float64Array === UNDEFINED ? Array : Float64Array; + /** + * Multi dimensional data store + */ + + var dataCtors = { + 'float': CtorFloat64Array, + 'int': CtorInt32Array, + // Ordinal data type can be string or int + 'ordinal': Array, + 'number': Array, + 'time': CtorFloat64Array + }; + var defaultDimValueGetters; + + function getIndicesCtor(rawCount) { + // The possible max value in this._indicies is always this._rawCount despite of filtering. + return rawCount > 65535 ? CtorUint32Array : CtorUint16Array; + } + + function getInitialExtent() { + return [Infinity, -Infinity]; + } + + function cloneChunk(originalChunk) { + var Ctor = originalChunk.constructor; // Only shallow clone is enough when Array. + + return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk); + } + + function prepareStore(store, dimIdx, dimType, end, append) { + var DataCtor = dataCtors[dimType || 'float']; + + if (append) { + var oldStore = store[dimIdx]; + var oldLen = oldStore && oldStore.length; + + if (!(oldLen === end)) { + var newStore = new DataCtor(end); // The cost of the copy is probably inconsiderable + // within the initial chunkSize. + + for (var j = 0; j < oldLen; j++) { + newStore[j] = oldStore[j]; + } + + store[dimIdx] = newStore; + } + } else { + store[dimIdx] = new DataCtor(end); + } + } + /** + * Basically, DataStore API keep immutable. + */ + + var DataStore = + /** @class */ + function () { + function DataStore() { + this._chunks = []; // It will not be calculated util needed. + + this._rawExtent = []; + this._extent = []; + this._count = 0; + this._rawCount = 0; + this._calcDimNameToIdx = createHashMap(); + } + /** + * Initialize from data + */ + + + DataStore.prototype.initData = function (provider, inputDimensions, dimValueGetter) { + if ("development" !== 'production') { + assert(isFunction(provider.getItem) && isFunction(provider.count), 'Inavlid data provider.'); + } + + this._provider = provider; // Clear + + this._chunks = []; + this._indices = null; + this.getRawIndex = this._getRawIdxIdentity; + var source = provider.getSource(); + var defaultGetter = this.defaultDimValueGetter = defaultDimValueGetters[source.sourceFormat]; // Default dim value getter + + this._dimValueGetter = dimValueGetter || defaultGetter; // Reset raw extent. + + this._rawExtent = []; + var willRetrieveDataByName = shouldRetrieveDataByName(source); + this._dimensions = map(inputDimensions, function (dim) { + if ("development" !== 'production') { + if (willRetrieveDataByName) { + assert(dim.property != null); + } + } + + return { + // Only pick these two props. Not leak other properties like orderMeta. + type: dim.type, + property: dim.property + }; + }); + + this._initDataFromProvider(0, provider.count()); + }; + + DataStore.prototype.getProvider = function () { + return this._provider; + }; + /** + * Caution: even when a `source` instance owned by a series, the created data store + * may still be shared by different sereis (the source hash does not use all `source` + * props, see `sourceManager`). In this case, the `source` props that are not used in + * hash (like `source.dimensionDefine`) probably only belongs to a certain series and + * thus should not be fetch here. + */ + + + DataStore.prototype.getSource = function () { + return this._provider.getSource(); + }; + /** + * @caution Only used in dataStack. + */ + + + DataStore.prototype.ensureCalculationDimension = function (dimName, type) { + var calcDimNameToIdx = this._calcDimNameToIdx; + var dimensions = this._dimensions; + var calcDimIdx = calcDimNameToIdx.get(dimName); + + if (calcDimIdx != null) { + if (dimensions[calcDimIdx].type === type) { + return calcDimIdx; + } + } else { + calcDimIdx = dimensions.length; + } + + dimensions[calcDimIdx] = { + type: type + }; + calcDimNameToIdx.set(dimName, calcDimIdx); + this._chunks[calcDimIdx] = new dataCtors[type || 'float'](this._rawCount); + this._rawExtent[calcDimIdx] = getInitialExtent(); + return calcDimIdx; + }; + + DataStore.prototype.collectOrdinalMeta = function (dimIdx, ordinalMeta) { + var chunk = this._chunks[dimIdx]; + var dim = this._dimensions[dimIdx]; + var rawExtents = this._rawExtent; + var offset = dim.ordinalOffset || 0; + var len = chunk.length; + + if (offset === 0) { + // We need to reset the rawExtent if collect is from start. + // Because this dimension may be guessed as number and calcuating a wrong extent. + rawExtents[dimIdx] = getInitialExtent(); + } + + var dimRawExtent = rawExtents[dimIdx]; // Parse from previous data offset. len may be changed after appendData + + for (var i = offset; i < len; i++) { + var val = chunk[i] = ordinalMeta.parseAndCollect(chunk[i]); + dimRawExtent[0] = Math.min(val, dimRawExtent[0]); + dimRawExtent[1] = Math.max(val, dimRawExtent[1]); + } + + dim.ordinalMeta = ordinalMeta; + dim.ordinalOffset = len; + dim.type = 'ordinal'; // Force to be ordinal + }; + + DataStore.prototype.getOrdinalMeta = function (dimIdx) { + var dimInfo = this._dimensions[dimIdx]; + var ordinalMeta = dimInfo.ordinalMeta; + return ordinalMeta; + }; + + DataStore.prototype.getDimensionProperty = function (dimIndex) { + var item = this._dimensions[dimIndex]; + return item && item.property; + }; + /** + * Caution: Can be only called on raw data (before `this._indices` created). + */ + + + DataStore.prototype.appendData = function (data) { + if ("development" !== 'production') { + assert(!this._indices, 'appendData can only be called on raw data.'); + } + + var provider = this._provider; + var start = this.count(); + provider.appendData(data); + var end = provider.count(); + + if (!provider.persistent) { + end += start; + } + + if (start < end) { + this._initDataFromProvider(start, end, true); + } + + return [start, end]; + }; + + DataStore.prototype.appendValues = function (values, minFillLen) { + var chunks = this._chunks; + var dimensions = this._dimensions; + var dimLen = dimensions.length; + var rawExtent = this._rawExtent; + var start = this.count(); + var end = start + Math.max(values.length, minFillLen || 0); + + for (var i = 0; i < dimLen; i++) { + var dim = dimensions[i]; + prepareStore(chunks, i, dim.type, end, true); + } + + var emptyDataItem = []; + + for (var idx = start; idx < end; idx++) { + var sourceIdx = idx - start; // Store the data by dimensions + + for (var dimIdx = 0; dimIdx < dimLen; dimIdx++) { + var dim = dimensions[dimIdx]; + var val = defaultDimValueGetters.arrayRows.call(this, values[sourceIdx] || emptyDataItem, dim.property, sourceIdx, dimIdx); + chunks[dimIdx][idx] = val; + var dimRawExtent = rawExtent[dimIdx]; + val < dimRawExtent[0] && (dimRawExtent[0] = val); + val > dimRawExtent[1] && (dimRawExtent[1] = val); + } + } + + this._rawCount = this._count = end; + return { + start: start, + end: end + }; + }; + + DataStore.prototype._initDataFromProvider = function (start, end, append) { + var provider = this._provider; + var chunks = this._chunks; + var dimensions = this._dimensions; + var dimLen = dimensions.length; + var rawExtent = this._rawExtent; + var dimNames = map(dimensions, function (dim) { + return dim.property; + }); + + for (var i = 0; i < dimLen; i++) { + var dim = dimensions[i]; + + if (!rawExtent[i]) { + rawExtent[i] = getInitialExtent(); + } + + prepareStore(chunks, i, dim.type, end, append); + } + + if (provider.fillStorage) { + provider.fillStorage(start, end, chunks, rawExtent); + } else { + var dataItem = []; + + for (var idx = start; idx < end; idx++) { + // NOTICE: Try not to write things into dataItem + dataItem = provider.getItem(idx, dataItem); // Each data item is value + // [1, 2] + // 2 + // Bar chart, line chart which uses category axis + // only gives the 'y' value. 'x' value is the indices of category + // Use a tempValue to normalize the value to be a (x, y) value + // Store the data by dimensions + + for (var dimIdx = 0; dimIdx < dimLen; dimIdx++) { + var dimStorage = chunks[dimIdx]; // PENDING NULL is empty or zero + + var val = this._dimValueGetter(dataItem, dimNames[dimIdx], idx, dimIdx); + + dimStorage[idx] = val; + var dimRawExtent = rawExtent[dimIdx]; + val < dimRawExtent[0] && (dimRawExtent[0] = val); + val > dimRawExtent[1] && (dimRawExtent[1] = val); + } + } + } + + if (!provider.persistent && provider.clean) { + // Clean unused data if data source is typed array. + provider.clean(); + } + + this._rawCount = this._count = end; // Reset data extent + + this._extent = []; + }; + + DataStore.prototype.count = function () { + return this._count; + }; + /** + * Get value. Return NaN if idx is out of range. + */ + + + DataStore.prototype.get = function (dim, idx) { + if (!(idx >= 0 && idx < this._count)) { + return NaN; + } + + var dimStore = this._chunks[dim]; + return dimStore ? dimStore[this.getRawIndex(idx)] : NaN; + }; + + DataStore.prototype.getValues = function (dimensions, idx) { + var values = []; + var dimArr = []; + + if (idx == null) { + idx = dimensions; // TODO get all from store? + + dimensions = []; // All dimensions + + for (var i = 0; i < this._dimensions.length; i++) { + dimArr.push(i); + } + } else { + dimArr = dimensions; + } + + for (var i = 0, len = dimArr.length; i < len; i++) { + values.push(this.get(dimArr[i], idx)); + } + + return values; + }; + /** + * @param dim concrete dim + */ + + + DataStore.prototype.getByRawIndex = function (dim, rawIdx) { + if (!(rawIdx >= 0 && rawIdx < this._rawCount)) { + return NaN; + } + + var dimStore = this._chunks[dim]; + return dimStore ? dimStore[rawIdx] : NaN; + }; + /** + * Get sum of data in one dimension + */ + + + DataStore.prototype.getSum = function (dim) { + var dimData = this._chunks[dim]; + var sum = 0; + + if (dimData) { + for (var i = 0, len = this.count(); i < len; i++) { + var value = this.get(dim, i); + + if (!isNaN(value)) { + sum += value; + } + } + } + + return sum; + }; + /** + * Get median of data in one dimension + */ + + + DataStore.prototype.getMedian = function (dim) { + var dimDataArray = []; // map all data of one dimension + + this.each([dim], function (val) { + if (!isNaN(val)) { + dimDataArray.push(val); + } + }); // TODO + // Use quick select? + + var sortedDimDataArray = dimDataArray.sort(function (a, b) { + return a - b; + }); + var len = this.count(); // calculate median + + return len === 0 ? 0 : len % 2 === 1 ? sortedDimDataArray[(len - 1) / 2] : (sortedDimDataArray[len / 2] + sortedDimDataArray[len / 2 - 1]) / 2; + }; + /** + * Retreive the index with given raw data index + */ + + + DataStore.prototype.indexOfRawIndex = function (rawIndex) { + if (rawIndex >= this._rawCount || rawIndex < 0) { + return -1; + } + + if (!this._indices) { + return rawIndex; + } // Indices are ascending + + + var indices = this._indices; // If rawIndex === dataIndex + + var rawDataIndex = indices[rawIndex]; + + if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) { + return rawIndex; + } + + var left = 0; + var right = this._count - 1; + + while (left <= right) { + var mid = (left + right) / 2 | 0; + + if (indices[mid] < rawIndex) { + left = mid + 1; + } else if (indices[mid] > rawIndex) { + right = mid - 1; + } else { + return mid; + } + } + + return -1; + }; + /** + * Retreive the index of nearest value + * @param dim + * @param value + * @param [maxDistance=Infinity] + * @return If and only if multiple indices has + * the same value, they are put to the result. + */ + + + DataStore.prototype.indicesOfNearest = function (dim, value, maxDistance) { + var chunks = this._chunks; + var dimData = chunks[dim]; + var nearestIndices = []; + + if (!dimData) { + return nearestIndices; + } + + if (maxDistance == null) { + maxDistance = Infinity; + } + + var minDist = Infinity; + var minDiff = -1; + var nearestIndicesLen = 0; // Check the test case of `test/ut/spec/data/SeriesData.js`. + + for (var i = 0, len = this.count(); i < len; i++) { + var dataIndex = this.getRawIndex(i); + var diff = value - dimData[dataIndex]; + var dist = Math.abs(diff); + + if (dist <= maxDistance) { + // When the `value` is at the middle of `this.get(dim, i)` and `this.get(dim, i+1)`, + // we'd better not push both of them to `nearestIndices`, otherwise it is easy to + // get more than one item in `nearestIndices` (more specifically, in `tooltip`). + // So we chose the one that `diff >= 0` in this csae. + // But if `this.get(dim, i)` and `this.get(dim, j)` get the same value, both of them + // should be push to `nearestIndices`. + if (dist < minDist || dist === minDist && diff >= 0 && minDiff < 0) { + minDist = dist; + minDiff = diff; + nearestIndicesLen = 0; + } + + if (diff === minDiff) { + nearestIndices[nearestIndicesLen++] = i; + } + } + } + + nearestIndices.length = nearestIndicesLen; + return nearestIndices; + }; + + DataStore.prototype.getIndices = function () { + var newIndices; + var indices = this._indices; + + if (indices) { + var Ctor = indices.constructor; + var thisCount = this._count; // `new Array(a, b, c)` is different from `new Uint32Array(a, b, c)`. + + if (Ctor === Array) { + newIndices = new Ctor(thisCount); + + for (var i = 0; i < thisCount; i++) { + newIndices[i] = indices[i]; + } + } else { + newIndices = new Ctor(indices.buffer, 0, thisCount); + } + } else { + var Ctor = getIndicesCtor(this._rawCount); + newIndices = new Ctor(this.count()); + + for (var i = 0; i < newIndices.length; i++) { + newIndices[i] = i; + } + } + + return newIndices; + }; + /** + * Data filter. + */ + + + DataStore.prototype.filter = function (dims, cb) { + if (!this._count) { + return this; + } + + var newStore = this.clone(); + var count = newStore.count(); + var Ctor = getIndicesCtor(newStore._rawCount); + var newIndices = new Ctor(count); + var value = []; + var dimSize = dims.length; + var offset = 0; + var dim0 = dims[0]; + var chunks = newStore._chunks; + + for (var i = 0; i < count; i++) { + var keep = void 0; + var rawIdx = newStore.getRawIndex(i); // Simple optimization + + if (dimSize === 0) { + keep = cb(i); + } else if (dimSize === 1) { + var val = chunks[dim0][rawIdx]; + keep = cb(val, i); + } else { + var k = 0; + + for (; k < dimSize; k++) { + value[k] = chunks[dims[k]][rawIdx]; + } + + value[k] = i; + keep = cb.apply(null, value); + } + + if (keep) { + newIndices[offset++] = rawIdx; + } + } // Set indices after filtered. + + + if (offset < count) { + newStore._indices = newIndices; + } + + newStore._count = offset; // Reset data extent + + newStore._extent = []; + + newStore._updateGetRawIdx(); + + return newStore; + }; + /** + * Select data in range. (For optimization of filter) + * (Manually inline code, support 5 million data filtering in data zoom.) + */ + + + DataStore.prototype.selectRange = function (range) { + var newStore = this.clone(); + var len = newStore._count; + + if (!len) { + return this; + } + + var dims = keys(range); + var dimSize = dims.length; + + if (!dimSize) { + return this; + } + + var originalCount = newStore.count(); + var Ctor = getIndicesCtor(newStore._rawCount); + var newIndices = new Ctor(originalCount); + var offset = 0; + var dim0 = dims[0]; + var min = range[dim0][0]; + var max = range[dim0][1]; + var storeArr = newStore._chunks; + var quickFinished = false; + + if (!newStore._indices) { + // Extreme optimization for common case. About 2x faster in chrome. + var idx = 0; + + if (dimSize === 1) { + var dimStorage = storeArr[dims[0]]; + + for (var i = 0; i < len; i++) { + var val = dimStorage[i]; // NaN will not be filtered. Consider the case, in line chart, empty + // value indicates the line should be broken. But for the case like + // scatter plot, a data item with empty value will not be rendered, + // but the axis extent may be effected if some other dim of the data + // item has value. Fortunately it is not a significant negative effect. + + if (val >= min && val <= max || isNaN(val)) { + newIndices[offset++] = idx; + } + + idx++; + } + + quickFinished = true; + } else if (dimSize === 2) { + var dimStorage = storeArr[dims[0]]; + var dimStorage2 = storeArr[dims[1]]; + var min2 = range[dims[1]][0]; + var max2 = range[dims[1]][1]; + + for (var i = 0; i < len; i++) { + var val = dimStorage[i]; + var val2 = dimStorage2[i]; // Do not filter NaN, see comment above. + + if ((val >= min && val <= max || isNaN(val)) && (val2 >= min2 && val2 <= max2 || isNaN(val2))) { + newIndices[offset++] = idx; + } + + idx++; + } + + quickFinished = true; + } + } + + if (!quickFinished) { + if (dimSize === 1) { + for (var i = 0; i < originalCount; i++) { + var rawIndex = newStore.getRawIndex(i); + var val = storeArr[dims[0]][rawIndex]; // Do not filter NaN, see comment above. + + if (val >= min && val <= max || isNaN(val)) { + newIndices[offset++] = rawIndex; + } + } + } else { + for (var i = 0; i < originalCount; i++) { + var keep = true; + var rawIndex = newStore.getRawIndex(i); + + for (var k = 0; k < dimSize; k++) { + var dimk = dims[k]; + var val = storeArr[dimk][rawIndex]; // Do not filter NaN, see comment above. + + if (val < range[dimk][0] || val > range[dimk][1]) { + keep = false; + } + } + + if (keep) { + newIndices[offset++] = newStore.getRawIndex(i); + } + } + } + } // Set indices after filtered. + + + if (offset < originalCount) { + newStore._indices = newIndices; + } + + newStore._count = offset; // Reset data extent + + newStore._extent = []; + + newStore._updateGetRawIdx(); + + return newStore; + }; // /** + // * Data mapping to a plain array + // */ + // mapArray(dims: DimensionIndex[], cb: MapArrayCb): any[] { + // const result: any[] = []; + // this.each(dims, function () { + // result.push(cb && (cb as MapArrayCb).apply(null, arguments)); + // }); + // return result; + // } + + /** + * Data mapping to a new List with given dimensions + */ + + + DataStore.prototype.map = function (dims, cb) { + // TODO only clone picked chunks. + var target = this.clone(dims); + + this._updateDims(target, dims, cb); + + return target; + }; + /** + * @caution Danger!! Only used in dataStack. + */ + + + DataStore.prototype.modify = function (dims, cb) { + this._updateDims(this, dims, cb); + }; + + DataStore.prototype._updateDims = function (target, dims, cb) { + var targetChunks = target._chunks; + var tmpRetValue = []; + var dimSize = dims.length; + var dataCount = target.count(); + var values = []; + var rawExtent = target._rawExtent; + + for (var i = 0; i < dims.length; i++) { + rawExtent[dims[i]] = getInitialExtent(); + } + + for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) { + var rawIndex = target.getRawIndex(dataIndex); + + for (var k = 0; k < dimSize; k++) { + values[k] = targetChunks[dims[k]][rawIndex]; + } + + values[dimSize] = dataIndex; + var retValue = cb && cb.apply(null, values); + + if (retValue != null) { + // a number or string (in oridinal dimension)? + if (typeof retValue !== 'object') { + tmpRetValue[0] = retValue; + retValue = tmpRetValue; + } + + for (var i = 0; i < retValue.length; i++) { + var dim = dims[i]; + var val = retValue[i]; + var rawExtentOnDim = rawExtent[dim]; + var dimStore = targetChunks[dim]; + + if (dimStore) { + dimStore[rawIndex] = val; + } + + if (val < rawExtentOnDim[0]) { + rawExtentOnDim[0] = val; + } + + if (val > rawExtentOnDim[1]) { + rawExtentOnDim[1] = val; + } + } + } + } + }; + /** + * Large data down sampling using largest-triangle-three-buckets + * @param {string} valueDimension + * @param {number} targetCount + */ + + + DataStore.prototype.lttbDownSample = function (valueDimension, rate) { + var target = this.clone([valueDimension], true); + var targetStorage = target._chunks; + var dimStore = targetStorage[valueDimension]; + var len = this.count(); + var sampledIndex = 0; + var frameSize = Math.floor(1 / rate); + var currentRawIndex = this.getRawIndex(0); + var maxArea; + var area; + var nextRawIndex; + var newIndices = new (getIndicesCtor(this._rawCount))(Math.ceil(len / frameSize) + 2); // First frame use the first data. + + newIndices[sampledIndex++] = currentRawIndex; + + for (var i = 1; i < len - 1; i += frameSize) { + var nextFrameStart = Math.min(i + frameSize, len - 1); + var nextFrameEnd = Math.min(i + frameSize * 2, len); + var avgX = (nextFrameEnd + nextFrameStart) / 2; + var avgY = 0; + + for (var idx = nextFrameStart; idx < nextFrameEnd; idx++) { + var rawIndex = this.getRawIndex(idx); + var y = dimStore[rawIndex]; + + if (isNaN(y)) { + continue; + } + + avgY += y; + } + + avgY /= nextFrameEnd - nextFrameStart; + var frameStart = i; + var frameEnd = Math.min(i + frameSize, len); + var pointAX = i - 1; + var pointAY = dimStore[currentRawIndex]; + maxArea = -1; + nextRawIndex = frameStart; // Find a point from current frame that construct a triangel with largest area with previous selected point + // And the average of next frame. + + for (var idx = frameStart; idx < frameEnd; idx++) { + var rawIndex = this.getRawIndex(idx); + var y = dimStore[rawIndex]; + + if (isNaN(y)) { + continue; + } // Calculate triangle area over three buckets + + + area = Math.abs((pointAX - avgX) * (y - pointAY) - (pointAX - idx) * (avgY - pointAY)); + + if (area > maxArea) { + maxArea = area; + nextRawIndex = rawIndex; // Next a is this b + } + } + + newIndices[sampledIndex++] = nextRawIndex; + currentRawIndex = nextRawIndex; // This a is the next a (chosen b) + } // First frame use the last data. + + + newIndices[sampledIndex++] = this.getRawIndex(len - 1); + target._count = sampledIndex; + target._indices = newIndices; + target.getRawIndex = this._getRawIdx; + return target; + }; + /** + * Large data down sampling on given dimension + * @param sampleIndex Sample index for name and id + */ + + + DataStore.prototype.downSample = function (dimension, rate, sampleValue, sampleIndex) { + var target = this.clone([dimension], true); + var targetStorage = target._chunks; + var frameValues = []; + var frameSize = Math.floor(1 / rate); + var dimStore = targetStorage[dimension]; + var len = this.count(); + var rawExtentOnDim = target._rawExtent[dimension] = getInitialExtent(); + var newIndices = new (getIndicesCtor(this._rawCount))(Math.ceil(len / frameSize)); + var offset = 0; + + for (var i = 0; i < len; i += frameSize) { + // Last frame + if (frameSize > len - i) { + frameSize = len - i; + frameValues.length = frameSize; + } + + for (var k = 0; k < frameSize; k++) { + var dataIdx = this.getRawIndex(i + k); + frameValues[k] = dimStore[dataIdx]; + } + + var value = sampleValue(frameValues); + var sampleFrameIdx = this.getRawIndex(Math.min(i + sampleIndex(frameValues, value) || 0, len - 1)); // Only write value on the filtered data + + dimStore[sampleFrameIdx] = value; + + if (value < rawExtentOnDim[0]) { + rawExtentOnDim[0] = value; + } + + if (value > rawExtentOnDim[1]) { + rawExtentOnDim[1] = value; + } + + newIndices[offset++] = sampleFrameIdx; + } + + target._count = offset; + target._indices = newIndices; + + target._updateGetRawIdx(); + + return target; + }; + /** + * Data iteration + * @param ctx default this + * @example + * list.each('x', function (x, idx) {}); + * list.each(['x', 'y'], function (x, y, idx) {}); + * list.each(function (idx) {}) + */ + + + DataStore.prototype.each = function (dims, cb) { + if (!this._count) { + return; + } + + var dimSize = dims.length; + var chunks = this._chunks; + + for (var i = 0, len = this.count(); i < len; i++) { + var rawIdx = this.getRawIndex(i); // Simple optimization + + switch (dimSize) { + case 0: + cb(i); + break; + + case 1: + cb(chunks[dims[0]][rawIdx], i); + break; + + case 2: + cb(chunks[dims[0]][rawIdx], chunks[dims[1]][rawIdx], i); + break; + + default: + var k = 0; + var value = []; + + for (; k < dimSize; k++) { + value[k] = chunks[dims[k]][rawIdx]; + } // Index + + + value[k] = i; + cb.apply(null, value); + } + } + }; + /** + * Get extent of data in one dimension + */ + + + DataStore.prototype.getDataExtent = function (dim) { + // Make sure use concrete dim as cache name. + var dimData = this._chunks[dim]; + var initialExtent = getInitialExtent(); + + if (!dimData) { + return initialExtent; + } // Make more strict checkings to ensure hitting cache. + + + var currEnd = this.count(); // Consider the most cases when using data zoom, `getDataExtent` + // happened before filtering. We cache raw extent, which is not + // necessary to be cleared and recalculated when restore data. + + var useRaw = !this._indices; + var dimExtent; + + if (useRaw) { + return this._rawExtent[dim].slice(); + } + + dimExtent = this._extent[dim]; + + if (dimExtent) { + return dimExtent.slice(); + } + + dimExtent = initialExtent; + var min = dimExtent[0]; + var max = dimExtent[1]; + + for (var i = 0; i < currEnd; i++) { + var rawIdx = this.getRawIndex(i); + var value = dimData[rawIdx]; + value < min && (min = value); + value > max && (max = value); + } + + dimExtent = [min, max]; + this._extent[dim] = dimExtent; + return dimExtent; + }; + /** + * Get raw data item + */ + + + DataStore.prototype.getRawDataItem = function (idx) { + var rawIdx = this.getRawIndex(idx); + + if (!this._provider.persistent) { + var val = []; + var chunks = this._chunks; + + for (var i = 0; i < chunks.length; i++) { + val.push(chunks[i][rawIdx]); + } + + return val; + } else { + return this._provider.getItem(rawIdx); + } + }; + /** + * Clone shallow. + * + * @param clonedDims Determine which dims to clone. Will share the data if not specified. + */ + + + DataStore.prototype.clone = function (clonedDims, ignoreIndices) { + var target = new DataStore(); + var chunks = this._chunks; + var clonedDimsMap = clonedDims && reduce(clonedDims, function (obj, dimIdx) { + obj[dimIdx] = true; + return obj; + }, {}); + + if (clonedDimsMap) { + for (var i = 0; i < chunks.length; i++) { + // Not clone if dim is not picked. + target._chunks[i] = !clonedDimsMap[i] ? chunks[i] : cloneChunk(chunks[i]); + } + } else { + target._chunks = chunks; + } + + this._copyCommonProps(target); + + if (!ignoreIndices) { + target._indices = this._cloneIndices(); + } + + target._updateGetRawIdx(); + + return target; + }; + + DataStore.prototype._copyCommonProps = function (target) { + target._count = this._count; + target._rawCount = this._rawCount; + target._provider = this._provider; + target._dimensions = this._dimensions; + target._extent = clone(this._extent); + target._rawExtent = clone(this._rawExtent); + }; + + DataStore.prototype._cloneIndices = function () { + if (this._indices) { + var Ctor = this._indices.constructor; + var indices = void 0; + + if (Ctor === Array) { + var thisCount = this._indices.length; + indices = new Ctor(thisCount); + + for (var i = 0; i < thisCount; i++) { + indices[i] = this._indices[i]; + } + } else { + indices = new Ctor(this._indices); + } + + return indices; + } + + return null; + }; + + DataStore.prototype._getRawIdxIdentity = function (idx) { + return idx; + }; + + DataStore.prototype._getRawIdx = function (idx) { + if (idx < this._count && idx >= 0) { + return this._indices[idx]; + } + + return -1; + }; + + DataStore.prototype._updateGetRawIdx = function () { + this.getRawIndex = this._indices ? this._getRawIdx : this._getRawIdxIdentity; + }; + + DataStore.internalField = function () { + function getDimValueSimply(dataItem, property, dataIndex, dimIndex) { + return parseDataValue(dataItem[dimIndex], this._dimensions[dimIndex]); + } + + defaultDimValueGetters = { + arrayRows: getDimValueSimply, + objectRows: function (dataItem, property, dataIndex, dimIndex) { + return parseDataValue(dataItem[property], this._dimensions[dimIndex]); + }, + keyedColumns: getDimValueSimply, + original: function (dataItem, property, dataIndex, dimIndex) { + // Performance sensitive, do not use modelUtil.getDataItemValue. + // If dataItem is an plain object with no value field, the let `value` + // will be assigned with the object, but it will be tread correctly + // in the `convertValue`. + var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value); + return parseDataValue(value instanceof Array ? value[dimIndex] // If value is a single number or something else not array. + : value, this._dimensions[dimIndex]); + }, + typedArray: function (dataItem, property, dataIndex, dimIndex) { + return dataItem[dimIndex]; + } + }; + }(); + + return DataStore; + }(); + + /** + * [REQUIREMENT_MEMO]: + * (0) `metaRawOption` means `dimensions`/`sourceHeader`/`seriesLayoutBy` in raw option. + * (1) Keep support the feature: `metaRawOption` can be specified both on `series` and + * `root-dataset`. Them on `series` has higher priority. + * (2) Do not support to set `metaRawOption` on a `non-root-dataset`, because it might + * confuse users: whether those props indicate how to visit the upstream source or visit + * the transform result source, and some transforms has nothing to do with these props, + * and some transforms might have multiple upstream. + * (3) Transforms should specify `metaRawOption` in each output, just like they can be + * declared in `root-dataset`. + * (4) At present only support visit source in `SERIES_LAYOUT_BY_COLUMN` in transforms. + * That is for reducing complexity in transfroms. + * PENDING: Whether to provide transposition transform? + * + * [IMPLEMENTAION_MEMO]: + * "sourceVisitConfig" are calculated from `metaRawOption` and `data`. + * They will not be calculated until `source` is about to be visited (to prevent from + * duplicate calcuation). `source` is visited only in series and input to transforms. + * + * [DIMENSION_INHERIT_RULE]: + * By default the dimensions are inherited from ancestors, unless a transform return + * a new dimensions definition. + * Consider the case: + * ```js + * dataset: [{ + * source: [ ['Product', 'Sales', 'Prise'], ['Cookies', 321, 44.21], ...] + * }, { + * transform: { type: 'filter', ... } + * }] + * dataset: [{ + * dimension: ['Product', 'Sales', 'Prise'], + * source: [ ['Cookies', 321, 44.21], ...] + * }, { + * transform: { type: 'filter', ... } + * }] + * ``` + * The two types of option should have the same behavior after transform. + * + * + * [SCENARIO]: + * (1) Provide source data directly: + * ```js + * series: { + * encode: {...}, + * dimensions: [...] + * seriesLayoutBy: 'row', + * data: [[...]] + * } + * ``` + * (2) Series refer to dataset. + * ```js + * series: [{ + * encode: {...} + * // Ignore datasetIndex means `datasetIndex: 0` + * // and the dimensions defination in dataset is used + * }, { + * encode: {...}, + * seriesLayoutBy: 'column', + * datasetIndex: 1 + * }] + * ``` + * (3) dataset transform + * ```js + * dataset: [{ + * source: [...] + * }, { + * source: [...] + * }, { + * // By default from 0. + * transform: { type: 'filter', config: {...} } + * }, { + * // Piped. + * transform: [ + * { type: 'filter', config: {...} }, + * { type: 'sort', config: {...} } + * ] + * }, { + * id: 'regressionData', + * fromDatasetIndex: 1, + * // Third-party transform + * transform: { type: 'ecStat:regression', config: {...} } + * }, { + * // retrieve the extra result. + * id: 'regressionFormula', + * fromDatasetId: 'regressionData', + * fromTransformResult: 1 + * }] + * ``` + */ + + var SourceManager = + /** @class */ + function () { + function SourceManager(sourceHost) { + // Cached source. Do not repeat calculating if not dirty. + this._sourceList = []; + this._storeList = []; // version sign of each upstream source manager. + + this._upstreamSignList = []; + this._versionSignBase = 0; + this._dirty = true; + this._sourceHost = sourceHost; + } + /** + * Mark dirty. + */ + + + SourceManager.prototype.dirty = function () { + this._setLocalSource([], []); + + this._storeList = []; + this._dirty = true; + }; + + SourceManager.prototype._setLocalSource = function (sourceList, upstreamSignList) { + this._sourceList = sourceList; + this._upstreamSignList = upstreamSignList; + this._versionSignBase++; + + if (this._versionSignBase > 9e10) { + this._versionSignBase = 0; + } + }; + /** + * For detecting whether the upstream source is dirty, so that + * the local cached source (in `_sourceList`) should be discarded. + */ + + + SourceManager.prototype._getVersionSign = function () { + return this._sourceHost.uid + '_' + this._versionSignBase; + }; + /** + * Always return a source instance. Otherwise throw error. + */ + + + SourceManager.prototype.prepareSource = function () { + // For the case that call `setOption` multiple time but no data changed, + // cache the result source to prevent from repeating transform. + if (this._isDirty()) { + this._createSource(); + + this._dirty = false; + } + }; + + SourceManager.prototype._createSource = function () { + this._setLocalSource([], []); + + var sourceHost = this._sourceHost; + + var upSourceMgrList = this._getUpstreamSourceManagers(); + + var hasUpstream = !!upSourceMgrList.length; + var resultSourceList; + var upstreamSignList; + + if (isSeries(sourceHost)) { + var seriesModel = sourceHost; + var data = void 0; + var sourceFormat = void 0; + var upSource = void 0; // Has upstream dataset + + if (hasUpstream) { + var upSourceMgr = upSourceMgrList[0]; + upSourceMgr.prepareSource(); + upSource = upSourceMgr.getSource(); + data = upSource.data; + sourceFormat = upSource.sourceFormat; + upstreamSignList = [upSourceMgr._getVersionSign()]; + } // Series data is from own. + else { + data = seriesModel.get('data', true); + sourceFormat = isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL; + upstreamSignList = []; + } // See [REQUIREMENT_MEMO], merge settings on series and parent dataset if it is root. + + + var newMetaRawOption = this._getSourceMetaRawOption() || {}; + var upMetaRawOption = upSource && upSource.metaRawOption || {}; + var seriesLayoutBy = retrieve2(newMetaRawOption.seriesLayoutBy, upMetaRawOption.seriesLayoutBy) || null; + var sourceHeader = retrieve2(newMetaRawOption.sourceHeader, upMetaRawOption.sourceHeader) || null; // Note here we should not use `upSource.dimensionsDefine`. Consider the case: + // `upSource.dimensionsDefine` is detected by `seriesLayoutBy: 'column'`, + // but series need `seriesLayoutBy: 'row'`. + + var dimensions = retrieve2(newMetaRawOption.dimensions, upMetaRawOption.dimensions); // We share source with dataset as much as possible + // to avoid extra memroy cost of high dimensional data. + + var needsCreateSource = seriesLayoutBy !== upMetaRawOption.seriesLayoutBy || !!sourceHeader !== !!upMetaRawOption.sourceHeader || dimensions; + resultSourceList = needsCreateSource ? [createSource(data, { + seriesLayoutBy: seriesLayoutBy, + sourceHeader: sourceHeader, + dimensions: dimensions + }, sourceFormat)] : []; + } else { + var datasetModel = sourceHost; // Has upstream dataset. + + if (hasUpstream) { + var result = this._applyTransform(upSourceMgrList); + + resultSourceList = result.sourceList; + upstreamSignList = result.upstreamSignList; + } // Is root dataset. + else { + var sourceData = datasetModel.get('source', true); + resultSourceList = [createSource(sourceData, this._getSourceMetaRawOption(), null)]; + upstreamSignList = []; + } + } + + if ("development" !== 'production') { + assert(resultSourceList && upstreamSignList); + } + + this._setLocalSource(resultSourceList, upstreamSignList); + }; + + SourceManager.prototype._applyTransform = function (upMgrList) { + var datasetModel = this._sourceHost; + var transformOption = datasetModel.get('transform', true); + var fromTransformResult = datasetModel.get('fromTransformResult', true); + + if ("development" !== 'production') { + assert(fromTransformResult != null || transformOption != null); + } + + if (fromTransformResult != null) { + var errMsg = ''; + + if (upMgrList.length !== 1) { + if ("development" !== 'production') { + errMsg = 'When using `fromTransformResult`, there should be only one upstream dataset'; + } + + doThrow(errMsg); + } + } + + var sourceList; + var upSourceList = []; + var upstreamSignList = []; + each(upMgrList, function (upMgr) { + upMgr.prepareSource(); + var upSource = upMgr.getSource(fromTransformResult || 0); + var errMsg = ''; + + if (fromTransformResult != null && !upSource) { + if ("development" !== 'production') { + errMsg = 'Can not retrieve result by `fromTransformResult`: ' + fromTransformResult; + } + + doThrow(errMsg); + } + + upSourceList.push(upSource); + upstreamSignList.push(upMgr._getVersionSign()); + }); + + if (transformOption) { + sourceList = applyDataTransform(transformOption, upSourceList, { + datasetIndex: datasetModel.componentIndex + }); + } else if (fromTransformResult != null) { + sourceList = [cloneSourceShallow(upSourceList[0])]; + } + + return { + sourceList: sourceList, + upstreamSignList: upstreamSignList + }; + }; + + SourceManager.prototype._isDirty = function () { + if (this._dirty) { + return true; + } // All sourceList is from the some upsteam. + + + var upSourceMgrList = this._getUpstreamSourceManagers(); + + for (var i = 0; i < upSourceMgrList.length; i++) { + var upSrcMgr = upSourceMgrList[i]; + + if ( // Consider the case that there is ancestor diry, call it recursively. + // The performance is probably not an issue because usually the chain is not long. + upSrcMgr._isDirty() || this._upstreamSignList[i] !== upSrcMgr._getVersionSign()) { + return true; + } + } + }; + /** + * @param sourceIndex By defualt 0, means "main source". + * Most cases there is only one source. + */ + + + SourceManager.prototype.getSource = function (sourceIndex) { + sourceIndex = sourceIndex || 0; + var source = this._sourceList[sourceIndex]; + + if (!source) { + // Series may share source instance with dataset. + var upSourceMgrList = this._getUpstreamSourceManagers(); + + return upSourceMgrList[0] && upSourceMgrList[0].getSource(sourceIndex); + } + + return source; + }; + /** + * + * Get a data store which can be shared across series. + * Only available for series. + * + * @param seriesDimRequest Dimensions that are generated in series. + * Should have been sorted by `storeDimIndex` asc. + */ + + + SourceManager.prototype.getSharedDataStore = function (seriesDimRequest) { + if ("development" !== 'production') { + assert(isSeries(this._sourceHost), 'Can only call getDataStore on series source manager.'); + } + + var schema = seriesDimRequest.makeStoreSchema(); + return this._innerGetDataStore(schema.dimensions, seriesDimRequest.source, schema.hash); + }; + + SourceManager.prototype._innerGetDataStore = function (storeDims, seriesSource, sourceReadKey) { + // TODO Can use other sourceIndex? + var sourceIndex = 0; + var storeList = this._storeList; + var cachedStoreMap = storeList[sourceIndex]; + + if (!cachedStoreMap) { + cachedStoreMap = storeList[sourceIndex] = {}; + } + + var cachedStore = cachedStoreMap[sourceReadKey]; + + if (!cachedStore) { + var upSourceMgr = this._getUpstreamSourceManagers()[0]; + + if (isSeries(this._sourceHost) && upSourceMgr) { + cachedStore = upSourceMgr._innerGetDataStore(storeDims, seriesSource, sourceReadKey); + } else { + cachedStore = new DataStore(); // Always create store from source of series. + + cachedStore.initData(new DefaultDataProvider(seriesSource, storeDims.length), storeDims); + } + + cachedStoreMap[sourceReadKey] = cachedStore; + } + + return cachedStore; + }; + /** + * PEDING: Is it fast enough? + * If no upstream, return empty array. + */ + + + SourceManager.prototype._getUpstreamSourceManagers = function () { + // Always get the relationship from the raw option. + // Do not cache the link of the dependency graph, so that + // no need to update them when change happen. + var sourceHost = this._sourceHost; + + if (isSeries(sourceHost)) { + var datasetModel = querySeriesUpstreamDatasetModel(sourceHost); + return !datasetModel ? [] : [datasetModel.getSourceManager()]; + } else { + return map(queryDatasetUpstreamDatasetModels(sourceHost), function (datasetModel) { + return datasetModel.getSourceManager(); + }); + } + }; + + SourceManager.prototype._getSourceMetaRawOption = function () { + var sourceHost = this._sourceHost; + var seriesLayoutBy; + var sourceHeader; + var dimensions; + + if (isSeries(sourceHost)) { + seriesLayoutBy = sourceHost.get('seriesLayoutBy', true); + sourceHeader = sourceHost.get('sourceHeader', true); + dimensions = sourceHost.get('dimensions', true); + } // See [REQUIREMENT_MEMO], `non-root-dataset` do not support them. + else if (!this._getUpstreamSourceManagers().length) { + var model = sourceHost; + seriesLayoutBy = model.get('seriesLayoutBy', true); + sourceHeader = model.get('sourceHeader', true); + dimensions = model.get('dimensions', true); + } + + return { + seriesLayoutBy: seriesLayoutBy, + sourceHeader: sourceHeader, + dimensions: dimensions + }; + }; + + return SourceManager; + }(); + // disable the transform merge, but do not disable transfrom clone from rawOption. + + function disableTransformOptionMerge(datasetModel) { + var transformOption = datasetModel.option.transform; + transformOption && setAsPrimitive(datasetModel.option.transform); + } + + function isSeries(sourceHost) { + // Avoid circular dependency with Series.ts + return sourceHost.mainType === 'series'; + } + + function doThrow(errMsg) { + throw new Error(errMsg); + } + + var TOOLTIP_LINE_HEIGHT_CSS = 'line-height:1'; // TODO: more textStyle option + + function getTooltipTextStyle(textStyle, renderMode) { + var nameFontColor = textStyle.color || '#6e7079'; + var nameFontSize = textStyle.fontSize || 12; + var nameFontWeight = textStyle.fontWeight || '400'; + var valueFontColor = textStyle.color || '#464646'; + var valueFontSize = textStyle.fontSize || 14; + var valueFontWeight = textStyle.fontWeight || '900'; + + if (renderMode === 'html') { + // `textStyle` is probably from user input, should be encoded to reduce security risk. + return { + // eslint-disable-next-line max-len + nameStyle: "font-size:" + encodeHTML(nameFontSize + '') + "px;color:" + encodeHTML(nameFontColor) + ";font-weight:" + encodeHTML(nameFontWeight + ''), + // eslint-disable-next-line max-len + valueStyle: "font-size:" + encodeHTML(valueFontSize + '') + "px;color:" + encodeHTML(valueFontColor) + ";font-weight:" + encodeHTML(valueFontWeight + '') + }; + } else { + return { + nameStyle: { + fontSize: nameFontSize, + fill: nameFontColor, + fontWeight: nameFontWeight + }, + valueStyle: { + fontSize: valueFontSize, + fill: valueFontColor, + fontWeight: valueFontWeight + } + }; + } + } // See `TooltipMarkupLayoutIntent['innerGapLevel']`. + // (value from UI design) + + + var HTML_GAPS = [0, 10, 20, 30]; + var RICH_TEXT_GAPS = ['', '\n', '\n\n', '\n\n\n']; // eslint-disable-next-line max-len + + function createTooltipMarkup(type, option) { + option.type = type; + return option; + } + + function getBuilder(fragment) { + return hasOwn(builderMap, fragment.type) && builderMap[fragment.type]; + } + + var builderMap = { + /** + * A `section` block is like: + * ``` + * header + * subBlock + * subBlock + * ... + * ``` + */ + section: { + planLayout: function (fragment) { + var subBlockLen = fragment.blocks.length; + var thisBlockHasInnerGap = subBlockLen > 1 || subBlockLen > 0 && !fragment.noHeader; + var thisGapLevelBetweenSubBlocks = 0; + each(fragment.blocks, function (subBlock) { + getBuilder(subBlock).planLayout(subBlock); + var subGapLevel = subBlock.__gapLevelBetweenSubBlocks; // If the some of the sub-blocks have some gaps (like 10px) inside, this block + // should use a larger gap (like 20px) to distinguish those sub-blocks. + + if (subGapLevel >= thisGapLevelBetweenSubBlocks) { + thisGapLevelBetweenSubBlocks = subGapLevel + (thisBlockHasInnerGap && ( // 0 always can not be readable gap level. + !subGapLevel // If no header, always keep the sub gap level. Otherwise + // look weird in case `multipleSeries`. + || subBlock.type === 'section' && !subBlock.noHeader) ? 1 : 0); + } + }); + fragment.__gapLevelBetweenSubBlocks = thisGapLevelBetweenSubBlocks; + }, + build: function (ctx, fragment, topMarginForOuterGap, toolTipTextStyle) { + var noHeader = fragment.noHeader; + var gaps = getGap(fragment); + var subMarkupText = buildSubBlocks(ctx, fragment, noHeader ? topMarginForOuterGap : gaps.html, toolTipTextStyle); + + if (noHeader) { + return subMarkupText; + } + + var displayableHeader = makeValueReadable(fragment.header, 'ordinal', ctx.useUTC); + var nameStyle = getTooltipTextStyle(toolTipTextStyle, ctx.renderMode).nameStyle; + + if (ctx.renderMode === 'richText') { + return wrapInlineNameRichText(ctx, displayableHeader, nameStyle) + gaps.richText + subMarkupText; + } else { + return wrapBlockHTML("
" + encodeHTML(displayableHeader) + '
' + subMarkupText, topMarginForOuterGap); + } + } + }, + + /** + * A `nameValue` block is like: + * ``` + * marker name value + * ``` + */ + nameValue: { + planLayout: function (fragment) { + fragment.__gapLevelBetweenSubBlocks = 0; + }, + build: function (ctx, fragment, topMarginForOuterGap, toolTipTextStyle) { + var renderMode = ctx.renderMode; + var noName = fragment.noName; + var noValue = fragment.noValue; + var noMarker = !fragment.markerType; + var name = fragment.name; + var value = fragment.value; + var useUTC = ctx.useUTC; + + if (noName && noValue) { + return; + } + + var markerStr = noMarker ? '' : ctx.markupStyleCreator.makeTooltipMarker(fragment.markerType, fragment.markerColor || '#333', renderMode); + var readableName = noName ? '' : makeValueReadable(name, 'ordinal', useUTC); + var valueTypeOption = fragment.valueType; + var readableValueList = noValue ? [] : isArray(value) ? map(value, function (val, idx) { + return makeValueReadable(val, isArray(valueTypeOption) ? valueTypeOption[idx] : valueTypeOption, useUTC); + }) : [makeValueReadable(value, isArray(valueTypeOption) ? valueTypeOption[0] : valueTypeOption, useUTC)]; + var valueAlignRight = !noMarker || !noName; // It little weird if only value next to marker but far from marker. + + var valueCloseToMarker = !noMarker && noName; + + var _a = getTooltipTextStyle(toolTipTextStyle, renderMode), + nameStyle = _a.nameStyle, + valueStyle = _a.valueStyle; + + return renderMode === 'richText' ? (noMarker ? '' : markerStr) + (noName ? '' : wrapInlineNameRichText(ctx, readableName, nameStyle)) // Value has commas inside, so use ' ' as delimiter for multiple values. + + (noValue ? '' : wrapInlineValueRichText(ctx, readableValueList, valueAlignRight, valueCloseToMarker, valueStyle)) : wrapBlockHTML((noMarker ? '' : markerStr) + (noName ? '' : wrapInlineNameHTML(readableName, !noMarker, nameStyle)) + (noValue ? '' : wrapInlineValueHTML(readableValueList, valueAlignRight, valueCloseToMarker, valueStyle)), topMarginForOuterGap); + } + } + }; + + function buildSubBlocks(ctx, fragment, topMarginForOuterGap, tooltipTextStyle) { + var subMarkupTextList = []; + var subBlocks = fragment.blocks || []; + assert(!subBlocks || isArray(subBlocks)); + subBlocks = subBlocks || []; + var orderMode = ctx.orderMode; + + if (fragment.sortBlocks && orderMode) { + subBlocks = subBlocks.slice(); + var orderMap = { + valueAsc: 'asc', + valueDesc: 'desc' + }; + + if (hasOwn(orderMap, orderMode)) { + var comparator_1 = new SortOrderComparator(orderMap[orderMode], null); + subBlocks.sort(function (a, b) { + return comparator_1.evaluate(a.sortParam, b.sortParam); + }); + } // FIXME 'seriesDesc' necessary? + else if (orderMode === 'seriesDesc') { + subBlocks.reverse(); + } + } + + var gaps = getGap(fragment); + each(subBlocks, function (subBlock, idx) { + var subMarkupText = getBuilder(subBlock).build(ctx, subBlock, idx > 0 ? gaps.html : 0, tooltipTextStyle); + subMarkupText != null && subMarkupTextList.push(subMarkupText); + }); + + if (!subMarkupTextList.length) { + return; + } + + return ctx.renderMode === 'richText' ? subMarkupTextList.join(gaps.richText) : wrapBlockHTML(subMarkupTextList.join(''), topMarginForOuterGap); + } + /** + * @return markupText. null/undefined means no content. + */ + + + function buildTooltipMarkup(fragment, markupStyleCreator, renderMode, orderMode, useUTC, toolTipTextStyle) { + if (!fragment) { + return; + } + + var builder = getBuilder(fragment); + builder.planLayout(fragment); + var ctx = { + useUTC: useUTC, + renderMode: renderMode, + orderMode: orderMode, + markupStyleCreator: markupStyleCreator + }; + return builder.build(ctx, fragment, 0, toolTipTextStyle); + } + + function getGap(fragment) { + var gapLevelBetweenSubBlocks = fragment.__gapLevelBetweenSubBlocks; + return { + html: HTML_GAPS[gapLevelBetweenSubBlocks], + richText: RICH_TEXT_GAPS[gapLevelBetweenSubBlocks] + }; + } + + function wrapBlockHTML(encodedContent, topGap) { + var clearfix = '
'; + var marginCSS = "margin: " + topGap + "px 0 0"; + return "
" + encodedContent + clearfix + '
'; + } + + function wrapInlineNameHTML(name, leftHasMarker, style) { + var marginCss = leftHasMarker ? 'margin-left:2px' : ''; + return "" + encodeHTML(name) + ''; + } + + function wrapInlineValueHTML(valueList, alignRight, valueCloseToMarker, style) { + // Do not too close to marker, considering there are multiple values separated by spaces. + var paddingStr = valueCloseToMarker ? '10px' : '20px'; + var alignCSS = alignRight ? "float:right;margin-left:" + paddingStr : ''; + return "" // Value has commas inside, so use ' ' as delimiter for multiple values. + + map(valueList, function (value) { + return encodeHTML(value); + }).join('  ') + ''; + } + + function wrapInlineNameRichText(ctx, name, style) { + return ctx.markupStyleCreator.wrapRichTextStyle(name, style); + } + + function wrapInlineValueRichText(ctx, valueList, alignRight, valueCloseToMarker, style) { + var styles = [style]; + var paddingLeft = valueCloseToMarker ? 10 : 20; + alignRight && styles.push({ + padding: [0, 0, 0, paddingLeft], + align: 'right' + }); // Value has commas inside, so use ' ' as delimiter for multiple values. + + return ctx.markupStyleCreator.wrapRichTextStyle(valueList.join(' '), styles); + } + + function retrieveVisualColorForTooltipMarker(series, dataIndex) { + var style = series.getData().getItemVisual(dataIndex, 'style'); + var color = style[series.visualDrawType]; + return convertToColorString(color); + } + function getPaddingFromTooltipModel(model, renderMode) { + var padding = model.get('padding'); + return padding != null ? padding // We give slightly different to look pretty. + : renderMode === 'richText' ? [8, 10] : 10; + } + /** + * The major feature is generate styles for `renderMode: 'richText'`. + * But it also serves `renderMode: 'html'` to provide + * "renderMode-independent" API. + */ + + var TooltipMarkupStyleCreator = + /** @class */ + function () { + function TooltipMarkupStyleCreator() { + this.richTextStyles = {}; // Notice that "generate a style name" usuall happens repeatly when mouse moving and + // displaying a tooltip. So we put the `_nextStyleNameId` as a member of each creator + // rather than static shared by all creators (which will cause it increase to fast). + + this._nextStyleNameId = getRandomIdBase(); + } + + TooltipMarkupStyleCreator.prototype._generateStyleName = function () { + return '__EC_aUTo_' + this._nextStyleNameId++; + }; + + TooltipMarkupStyleCreator.prototype.makeTooltipMarker = function (markerType, colorStr, renderMode) { + var markerId = renderMode === 'richText' ? this._generateStyleName() : null; + var marker = getTooltipMarker({ + color: colorStr, + type: markerType, + renderMode: renderMode, + markerId: markerId + }); + + if (isString(marker)) { + return marker; + } else { + if ("development" !== 'production') { + assert(markerId); + } + + this.richTextStyles[markerId] = marker.style; + return marker.content; + } + }; + /** + * @usage + * ```ts + * const styledText = markupStyleCreator.wrapRichTextStyle([ + * // The styles will be auto merged. + * { + * fontSize: 12, + * color: 'blue' + * }, + * { + * padding: 20 + * } + * ]); + * ``` + */ + + + TooltipMarkupStyleCreator.prototype.wrapRichTextStyle = function (text, styles) { + var finalStl = {}; + + if (isArray(styles)) { + each(styles, function (stl) { + return extend(finalStl, stl); + }); + } else { + extend(finalStl, styles); + } + + var styleName = this._generateStyleName(); + + this.richTextStyles[styleName] = finalStl; + return "{" + styleName + "|" + text + "}"; + }; + + return TooltipMarkupStyleCreator; + }(); + + function defaultSeriesFormatTooltip(opt) { + var series = opt.series; + var dataIndex = opt.dataIndex; + var multipleSeries = opt.multipleSeries; + var data = series.getData(); + var tooltipDims = data.mapDimensionsAll('defaultedTooltip'); + var tooltipDimLen = tooltipDims.length; + var value = series.getRawValue(dataIndex); + var isValueArr = isArray(value); + var markerColor = retrieveVisualColorForTooltipMarker(series, dataIndex); // Complicated rule for pretty tooltip. + + var inlineValue; + var inlineValueType; + var subBlocks; + var sortParam; + + if (tooltipDimLen > 1 || isValueArr && !tooltipDimLen) { + var formatArrResult = formatTooltipArrayValue(value, series, dataIndex, tooltipDims, markerColor); + inlineValue = formatArrResult.inlineValues; + inlineValueType = formatArrResult.inlineValueTypes; + subBlocks = formatArrResult.blocks; // Only support tooltip sort by the first inline value. It's enough in most cases. + + sortParam = formatArrResult.inlineValues[0]; + } else if (tooltipDimLen) { + var dimInfo = data.getDimensionInfo(tooltipDims[0]); + sortParam = inlineValue = retrieveRawValue(data, dataIndex, tooltipDims[0]); + inlineValueType = dimInfo.type; + } else { + sortParam = inlineValue = isValueArr ? value[0] : value; + } // Do not show generated series name. It might not be readable. + + + var seriesNameSpecified = isNameSpecified(series); + var seriesName = seriesNameSpecified && series.name || ''; + var itemName = data.getName(dataIndex); + var inlineName = multipleSeries ? seriesName : itemName; + return createTooltipMarkup('section', { + header: seriesName, + // When series name not specified, do not show a header line with only '-'. + // This case alway happen in tooltip.trigger: 'item'. + noHeader: multipleSeries || !seriesNameSpecified, + sortParam: sortParam, + blocks: [createTooltipMarkup('nameValue', { + markerType: 'item', + markerColor: markerColor, + // Do not mix display seriesName and itemName in one tooltip, + // which might confuses users. + name: inlineName, + // name dimension might be auto assigned, where the name might + // be not readable. So we check trim here. + noName: !trim(inlineName), + value: inlineValue, + valueType: inlineValueType + })].concat(subBlocks || []) + }); + } + + function formatTooltipArrayValue(value, series, dataIndex, tooltipDims, colorStr) { + // check: category-no-encode-has-axis-data in dataset.html + var data = series.getData(); + var isValueMultipleLine = reduce(value, function (isValueMultipleLine, val, idx) { + var dimItem = data.getDimensionInfo(idx); + return isValueMultipleLine = isValueMultipleLine || dimItem && dimItem.tooltip !== false && dimItem.displayName != null; + }, false); + var inlineValues = []; + var inlineValueTypes = []; + var blocks = []; + tooltipDims.length ? each(tooltipDims, function (dim) { + setEachItem(retrieveRawValue(data, dataIndex, dim), dim); + }) // By default, all dims is used on tooltip. + : each(value, setEachItem); + + function setEachItem(val, dim) { + var dimInfo = data.getDimensionInfo(dim); // If `dimInfo.tooltip` is not set, show tooltip. + + if (!dimInfo || dimInfo.otherDims.tooltip === false) { + return; + } + + if (isValueMultipleLine) { + blocks.push(createTooltipMarkup('nameValue', { + markerType: 'subItem', + markerColor: colorStr, + name: dimInfo.displayName, + value: val, + valueType: dimInfo.type + })); + } else { + inlineValues.push(val); + inlineValueTypes.push(dimInfo.type); + } + } + + return { + inlineValues: inlineValues, + inlineValueTypes: inlineValueTypes, + blocks: blocks + }; + } + + var inner$1 = makeInner(); + + function getSelectionKey(data, dataIndex) { + return data.getName(dataIndex) || data.getId(dataIndex); + } + + var SERIES_UNIVERSAL_TRANSITION_PROP = '__universalTransitionEnabled'; + + var SeriesModel = + /** @class */ + function (_super) { + __extends(SeriesModel, _super); + + function SeriesModel() { + // [Caution]: Becuase this class or desecendants can be used as `XXX.extend(subProto)`, + // the class members must not be initialized in constructor or declaration place. + // Otherwise there is bad case: + // class A {xxx = 1;} + // enableClassExtend(A); + // class B extends A {} + // var C = B.extend({xxx: 5}); + // var c = new C(); + // console.log(c.xxx); // expect 5 but always 1. + var _this = _super !== null && _super.apply(this, arguments) || this; // --------------------------------------- + // Props about data selection + // --------------------------------------- + + + _this._selectedDataIndicesMap = {}; + return _this; + } + + SeriesModel.prototype.init = function (option, parentModel, ecModel) { + this.seriesIndex = this.componentIndex; + this.dataTask = createTask({ + count: dataTaskCount, + reset: dataTaskReset + }); + this.dataTask.context = { + model: this + }; + this.mergeDefaultAndTheme(option, ecModel); + var sourceManager = inner$1(this).sourceManager = new SourceManager(this); + sourceManager.prepareSource(); + var data = this.getInitialData(option, ecModel); + wrapData(data, this); + this.dataTask.context.data = data; + + if ("development" !== 'production') { + assert(data, 'getInitialData returned invalid data.'); + } + + inner$1(this).dataBeforeProcessed = data; // If we reverse the order (make data firstly, and then make + // dataBeforeProcessed by cloneShallow), cloneShallow will + // cause data.graph.data !== data when using + // module:echarts/data/Graph or module:echarts/data/Tree. + // See module:echarts/data/helper/linkSeriesData + // Theoretically, it is unreasonable to call `seriesModel.getData()` in the model + // init or merge stage, because the data can be restored. So we do not `restoreData` + // and `setData` here, which forbids calling `seriesModel.getData()` in this stage. + // Call `seriesModel.getRawData()` instead. + // this.restoreData(); + + autoSeriesName(this); + + this._initSelectedMapFromData(data); + }; + /** + * Util for merge default and theme to option + */ + + + SeriesModel.prototype.mergeDefaultAndTheme = function (option, ecModel) { + var layoutMode = fetchLayoutMode(this); + var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; // Backward compat: using subType on theme. + // But if name duplicate between series subType + // (for example: parallel) add component mainType, + // add suffix 'Series'. + + var themeSubType = this.subType; + + if (ComponentModel.hasClass(themeSubType)) { + themeSubType += 'Series'; + } + + merge(option, ecModel.getTheme().get(this.subType)); + merge(option, this.getDefaultOption()); // Default label emphasis `show` + + defaultEmphasis(option, 'label', ['show']); + this.fillDataTextStyle(option.data); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }; + + SeriesModel.prototype.mergeOption = function (newSeriesOption, ecModel) { + // this.settingTask.dirty(); + newSeriesOption = merge(this.option, newSeriesOption, true); + this.fillDataTextStyle(newSeriesOption.data); + var layoutMode = fetchLayoutMode(this); + + if (layoutMode) { + mergeLayoutParam(this.option, newSeriesOption, layoutMode); + } + + var sourceManager = inner$1(this).sourceManager; + sourceManager.dirty(); + sourceManager.prepareSource(); + var data = this.getInitialData(newSeriesOption, ecModel); + wrapData(data, this); + this.dataTask.dirty(); + this.dataTask.context.data = data; + inner$1(this).dataBeforeProcessed = data; + autoSeriesName(this); + + this._initSelectedMapFromData(data); + }; + + SeriesModel.prototype.fillDataTextStyle = function (data) { + // Default data label emphasis `show` + // FIXME Tree structure data ? + // FIXME Performance ? + if (data && !isTypedArray(data)) { + var props = ['show']; + + for (var i = 0; i < data.length; i++) { + if (data[i] && data[i].label) { + defaultEmphasis(data[i], 'label', props); + } + } + } + }; + /** + * Init a data structure from data related option in series + * Must be overriden. + */ + + + SeriesModel.prototype.getInitialData = function (option, ecModel) { + return; + }; + /** + * Append data to list + */ + + + SeriesModel.prototype.appendData = function (params) { + // FIXME ??? + // (1) If data from dataset, forbidden append. + // (2) support append data of dataset. + var data = this.getRawData(); + data.appendData(params.data); + }; + /** + * Consider some method like `filter`, `map` need make new data, + * We should make sure that `seriesModel.getData()` get correct + * data in the stream procedure. So we fetch data from upstream + * each time `task.perform` called. + */ + + + SeriesModel.prototype.getData = function (dataType) { + var task = getCurrentTask(this); + + if (task) { + var data = task.context.data; + return dataType == null ? data : data.getLinkedData(dataType); + } else { + // When series is not alive (that may happen when click toolbox + // restore or setOption with not merge mode), series data may + // be still need to judge animation or something when graphic + // elements want to know whether fade out. + return inner$1(this).data; + } + }; + + SeriesModel.prototype.getAllData = function () { + var mainData = this.getData(); + return mainData && mainData.getLinkedDataAll ? mainData.getLinkedDataAll() : [{ + data: mainData + }]; + }; + + SeriesModel.prototype.setData = function (data) { + var task = getCurrentTask(this); + + if (task) { + var context = task.context; // Consider case: filter, data sample. + // FIXME:TS never used, so comment it + // if (context.data !== data && task.modifyOutputEnd) { + // task.setOutputEnd(data.count()); + // } + + context.outputData = data; // Caution: setData should update context.data, + // Because getData may be called multiply in a + // single stage and expect to get the data just + // set. (For example, AxisProxy, x y both call + // getData and setDate sequentially). + // So the context.data should be fetched from + // upstream each time when a stage starts to be + // performed. + + if (task !== this.dataTask) { + context.data = data; + } + } + + inner$1(this).data = data; + }; + + SeriesModel.prototype.getEncode = function () { + var encode = this.get('encode', true); + + if (encode) { + return createHashMap(encode); + } + }; + + SeriesModel.prototype.getSourceManager = function () { + return inner$1(this).sourceManager; + }; + + SeriesModel.prototype.getSource = function () { + return this.getSourceManager().getSource(); + }; + /** + * Get data before processed + */ + + + SeriesModel.prototype.getRawData = function () { + return inner$1(this).dataBeforeProcessed; + }; + + SeriesModel.prototype.getColorBy = function () { + var colorBy = this.get('colorBy'); + return colorBy || 'series'; + }; + + SeriesModel.prototype.isColorBySeries = function () { + return this.getColorBy() === 'series'; + }; + /** + * Get base axis if has coordinate system and has axis. + * By default use coordSys.getBaseAxis(); + * Can be overrided for some chart. + * @return {type} description + */ + + + SeriesModel.prototype.getBaseAxis = function () { + var coordSys = this.coordinateSystem; // @ts-ignore + + return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis(); + }; + /** + * Default tooltip formatter + * + * @param dataIndex + * @param multipleSeries + * @param dataType + * @param renderMode valid values: 'html'(by default) and 'richText'. + * 'html' is used for rendering tooltip in extra DOM form, and the result + * string is used as DOM HTML content. + * 'richText' is used for rendering tooltip in rich text form, for those where + * DOM operation is not supported. + * @return formatted tooltip with `html` and `markers` + * Notice: The override method can also return string + */ + + + SeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + return defaultSeriesFormatTooltip({ + series: this, + dataIndex: dataIndex, + multipleSeries: multipleSeries + }); + }; + + SeriesModel.prototype.isAnimationEnabled = function () { + if (env.node) { + return false; + } + + var animationEnabled = this.getShallow('animation'); + + if (animationEnabled) { + if (this.getData().count() > this.getShallow('animationThreshold')) { + animationEnabled = false; + } + } + + return !!animationEnabled; + }; + + SeriesModel.prototype.restoreData = function () { + this.dataTask.dirty(); + }; + + SeriesModel.prototype.getColorFromPalette = function (name, scope, requestColorNum) { + var ecModel = this.ecModel; // PENDING + + var color = PaletteMixin.prototype.getColorFromPalette.call(this, name, scope, requestColorNum); + + if (!color) { + color = ecModel.getColorFromPalette(name, scope, requestColorNum); + } + + return color; + }; + /** + * Use `data.mapDimensionsAll(coordDim)` instead. + * @deprecated + */ + + + SeriesModel.prototype.coordDimToDataDim = function (coordDim) { + return this.getRawData().mapDimensionsAll(coordDim); + }; + /** + * Get progressive rendering count each step + */ + + + SeriesModel.prototype.getProgressive = function () { + return this.get('progressive'); + }; + /** + * Get progressive rendering count each step + */ + + + SeriesModel.prototype.getProgressiveThreshold = function () { + return this.get('progressiveThreshold'); + }; // PENGING If selectedMode is null ? + + + SeriesModel.prototype.select = function (innerDataIndices, dataType) { + this._innerSelect(this.getData(dataType), innerDataIndices); + }; + + SeriesModel.prototype.unselect = function (innerDataIndices, dataType) { + var selectedMap = this.option.selectedMap; + + if (!selectedMap) { + return; + } + + var data = this.getData(dataType); + + for (var i = 0; i < innerDataIndices.length; i++) { + var dataIndex = innerDataIndices[i]; + var nameOrId = getSelectionKey(data, dataIndex); + selectedMap[nameOrId] = false; + this._selectedDataIndicesMap[nameOrId] = -1; + } + }; + + SeriesModel.prototype.toggleSelect = function (innerDataIndices, dataType) { + var tmpArr = []; + + for (var i = 0; i < innerDataIndices.length; i++) { + tmpArr[0] = innerDataIndices[i]; + this.isSelected(innerDataIndices[i], dataType) ? this.unselect(tmpArr, dataType) : this.select(tmpArr, dataType); + } + }; + + SeriesModel.prototype.getSelectedDataIndices = function () { + var selectedDataIndicesMap = this._selectedDataIndicesMap; + var nameOrIds = keys(selectedDataIndicesMap); + var dataIndices = []; + + for (var i = 0; i < nameOrIds.length; i++) { + var dataIndex = selectedDataIndicesMap[nameOrIds[i]]; + + if (dataIndex >= 0) { + dataIndices.push(dataIndex); + } + } + + return dataIndices; + }; + + SeriesModel.prototype.isSelected = function (dataIndex, dataType) { + var selectedMap = this.option.selectedMap; + + if (!selectedMap) { + return false; + } + + var data = this.getData(dataType); + var nameOrId = getSelectionKey(data, dataIndex); + return selectedMap[nameOrId] || false; + }; + + SeriesModel.prototype.isUniversalTransitionEnabled = function () { + if (this[SERIES_UNIVERSAL_TRANSITION_PROP]) { + return true; + } + + var universalTransitionOpt = this.option.universalTransition; // Quick reject + + if (!universalTransitionOpt) { + return false; + } + + if (universalTransitionOpt === true) { + return true; + } // Can be simply 'universalTransition: true' + + + return universalTransitionOpt && universalTransitionOpt.enabled; + }; + + SeriesModel.prototype._innerSelect = function (data, innerDataIndices) { + var _a, _b; + + var selectedMode = this.option.selectedMode; + var len = innerDataIndices.length; + + if (!selectedMode || !len) { + return; + } + + if (selectedMode === 'multiple') { + var selectedMap = this.option.selectedMap || (this.option.selectedMap = {}); + + for (var i = 0; i < len; i++) { + var dataIndex = innerDataIndices[i]; // TODO diffrent types of data share same object. + + var nameOrId = getSelectionKey(data, dataIndex); + selectedMap[nameOrId] = true; + this._selectedDataIndicesMap[nameOrId] = data.getRawIndex(dataIndex); + } + } else if (selectedMode === 'single' || selectedMode === true) { + var lastDataIndex = innerDataIndices[len - 1]; + var nameOrId = getSelectionKey(data, lastDataIndex); + this.option.selectedMap = (_a = {}, _a[nameOrId] = true, _a); + this._selectedDataIndicesMap = (_b = {}, _b[nameOrId] = data.getRawIndex(lastDataIndex), _b); + } + }; + + SeriesModel.prototype._initSelectedMapFromData = function (data) { + // Ignore select info in data if selectedMap exists. + // NOTE It's only for legacy usage. edge data is not supported. + if (this.option.selectedMap) { + return; + } + + var dataIndices = []; + + if (data.hasItemOption) { + data.each(function (idx) { + var rawItem = data.getRawDataItem(idx); + + if (rawItem && rawItem.selected) { + dataIndices.push(idx); + } + }); + } + + if (dataIndices.length > 0) { + this._innerSelect(data, dataIndices); + } + }; // /** + // * @see {module:echarts/stream/Scheduler} + // */ + // abstract pipeTask: null + + + SeriesModel.registerClass = function (clz) { + return ComponentModel.registerClass(clz); + }; + + SeriesModel.protoInitialize = function () { + var proto = SeriesModel.prototype; + proto.type = 'series.__base__'; + proto.seriesIndex = 0; + proto.ignoreStyleOnData = false; + proto.hasSymbolVisual = false; + proto.defaultSymbol = 'circle'; // Make sure the values can be accessed! + + proto.visualStyleAccessPath = 'itemStyle'; + proto.visualDrawType = 'fill'; + }(); + + return SeriesModel; + }(ComponentModel); + + mixin(SeriesModel, DataFormatMixin); + mixin(SeriesModel, PaletteMixin); + mountExtend(SeriesModel, ComponentModel); + /** + * MUST be called after `prepareSource` called + * Here we need to make auto series, especially for auto legend. But we + * do not modify series.name in option to avoid side effects. + */ + + function autoSeriesName(seriesModel) { + // User specified name has higher priority, otherwise it may cause + // series can not be queried unexpectedly. + var name = seriesModel.name; + + if (!isNameSpecified(seriesModel)) { + seriesModel.name = getSeriesAutoName(seriesModel) || name; + } + } + + function getSeriesAutoName(seriesModel) { + var data = seriesModel.getRawData(); + var dataDims = data.mapDimensionsAll('seriesName'); + var nameArr = []; + each(dataDims, function (dataDim) { + var dimInfo = data.getDimensionInfo(dataDim); + dimInfo.displayName && nameArr.push(dimInfo.displayName); + }); + return nameArr.join(' '); + } + + function dataTaskCount(context) { + return context.model.getRawData().count(); + } + + function dataTaskReset(context) { + var seriesModel = context.model; + seriesModel.setData(seriesModel.getRawData().cloneShallow()); + return dataTaskProgress; + } + + function dataTaskProgress(param, context) { + // Avoid repead cloneShallow when data just created in reset. + if (context.outputData && param.end > context.outputData.count()) { + context.model.getRawData().cloneShallow(context.outputData); + } + } // TODO refactor + + + function wrapData(data, seriesModel) { + each(concatArray(data.CHANGABLE_METHODS, data.DOWNSAMPLE_METHODS), function (methodName) { + data.wrapMethod(methodName, curry(onDataChange, seriesModel)); + }); + } + + function onDataChange(seriesModel, newList) { + var task = getCurrentTask(seriesModel); + + if (task) { + // Consider case: filter, selectRange + task.setOutputEnd((newList || this).count()); + } + + return newList; + } + + function getCurrentTask(seriesModel) { + var scheduler = (seriesModel.ecModel || {}).scheduler; + var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid); + + if (pipeline) { + // When pipline finished, the currrentTask keep the last + // task (renderTask). + var task = pipeline.currentTask; + + if (task) { + var agentStubMap = task.agentStubMap; + + if (agentStubMap) { + task = agentStubMap.get(seriesModel.uid); + } + } + + return task; + } + } + + var ComponentView = + /** @class */ + function () { + function ComponentView() { + this.group = new Group(); + this.uid = getUID('viewComponent'); + } + + ComponentView.prototype.init = function (ecModel, api) {}; + + ComponentView.prototype.render = function (model, ecModel, api, payload) {}; + + ComponentView.prototype.dispose = function (ecModel, api) {}; + + ComponentView.prototype.updateView = function (model, ecModel, api, payload) {// Do nothing; + }; + + ComponentView.prototype.updateLayout = function (model, ecModel, api, payload) {// Do nothing; + }; + + ComponentView.prototype.updateVisual = function (model, ecModel, api, payload) {// Do nothing; + }; + /** + * Hook for blur target series. + * Can be used in marker for blur the markers + */ + + + ComponentView.prototype.blurSeries = function (seriesModels, ecModel) {// Do nothing; + }; + + return ComponentView; + }(); + enableClassExtend(ComponentView); + enableClassManagement(ComponentView); + + /** + * @return {string} If large mode changed, return string 'reset'; + */ + + function createRenderPlanner() { + var inner = makeInner(); + return function (seriesModel) { + var fields = inner(seriesModel); + var pipelineContext = seriesModel.pipelineContext; + var originalLarge = !!fields.large; + var originalProgressive = !!fields.progressiveRender; // FIXME: if the planner works on a filtered series, `pipelineContext` does not + // exists. See #11611 . Probably we need to modify this structure, see the comment + // on `performRawSeries` in `Schedular.js`. + + var large = fields.large = !!(pipelineContext && pipelineContext.large); + var progressive = fields.progressiveRender = !!(pipelineContext && pipelineContext.progressiveRender); + return !!(originalLarge !== large || originalProgressive !== progressive) && 'reset'; + }; + } + + var inner$2 = makeInner(); + var renderPlanner = createRenderPlanner(); + + var ChartView = + /** @class */ + function () { + function ChartView() { + this.group = new Group(); + this.uid = getUID('viewChart'); + this.renderTask = createTask({ + plan: renderTaskPlan, + reset: renderTaskReset + }); + this.renderTask.context = { + view: this + }; + } + + ChartView.prototype.init = function (ecModel, api) {}; + + ChartView.prototype.render = function (seriesModel, ecModel, api, payload) {}; + /** + * Highlight series or specified data item. + */ + + + ChartView.prototype.highlight = function (seriesModel, ecModel, api, payload) { + toggleHighlight(seriesModel.getData(), payload, 'emphasis'); + }; + /** + * Downplay series or specified data item. + */ + + + ChartView.prototype.downplay = function (seriesModel, ecModel, api, payload) { + toggleHighlight(seriesModel.getData(), payload, 'normal'); + }; + /** + * Remove self. + */ + + + ChartView.prototype.remove = function (ecModel, api) { + this.group.removeAll(); + }; + /** + * Dispose self. + */ + + + ChartView.prototype.dispose = function (ecModel, api) {}; + + ChartView.prototype.updateView = function (seriesModel, ecModel, api, payload) { + this.render(seriesModel, ecModel, api, payload); + }; // FIXME never used? + + + ChartView.prototype.updateLayout = function (seriesModel, ecModel, api, payload) { + this.render(seriesModel, ecModel, api, payload); + }; // FIXME never used? + + + ChartView.prototype.updateVisual = function (seriesModel, ecModel, api, payload) { + this.render(seriesModel, ecModel, api, payload); + }; + + ChartView.markUpdateMethod = function (payload, methodName) { + inner$2(payload).updateMethod = methodName; + }; + + ChartView.protoInitialize = function () { + var proto = ChartView.prototype; + proto.type = 'chart'; + }(); + + return ChartView; + }(); + /** + * Set state of single element + */ + + function elSetState(el, state, highlightDigit) { + if (el) { + (state === 'emphasis' ? enterEmphasis : leaveEmphasis)(el, highlightDigit); + } + } + + function toggleHighlight(data, payload, state) { + var dataIndex = queryDataIndex(data, payload); + var highlightDigit = payload && payload.highlightKey != null ? getHighlightDigit(payload.highlightKey) : null; + + if (dataIndex != null) { + each(normalizeToArray(dataIndex), function (dataIdx) { + elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit); + }); + } else { + data.eachItemGraphicEl(function (el) { + elSetState(el, state, highlightDigit); + }); + } + } + + enableClassExtend(ChartView, ['dispose']); + enableClassManagement(ChartView); + + function renderTaskPlan(context) { + return renderPlanner(context.model); + } + + function renderTaskReset(context) { + var seriesModel = context.model; + var ecModel = context.ecModel; + var api = context.api; + var payload = context.payload; // FIXME: remove updateView updateVisual + + var progressiveRender = seriesModel.pipelineContext.progressiveRender; + var view = context.view; + var updateMethod = payload && inner$2(payload).updateMethod; + var methodName = progressiveRender ? 'incrementalPrepareRender' : updateMethod && view[updateMethod] ? updateMethod // `appendData` is also supported when data amount + // is less than progressive threshold. + : 'render'; + + if (methodName !== 'render') { + view[methodName](seriesModel, ecModel, api, payload); + } + + return progressMethodMap[methodName]; + } + + var progressMethodMap = { + incrementalPrepareRender: { + progress: function (params, context) { + context.view.incrementalRender(params, context.model, context.ecModel, context.api, context.payload); + } + }, + render: { + // Put view.render in `progress` to support appendData. But in this case + // view.render should not be called in reset, otherwise it will be called + // twise. Use `forceFirstProgress` to make sure that view.render is called + // in any cases. + forceFirstProgress: true, + progress: function (params, context) { + context.view.render(context.model, context.ecModel, context.api, context.payload); + } + } + }; + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var ORIGIN_METHOD = '\0__throttleOriginMethod'; + var RATE = '\0__throttleRate'; + var THROTTLE_TYPE = '\0__throttleType'; + /** + * @public + * @param {(Function)} fn + * @param {number} [delay=0] Unit: ms. + * @param {boolean} [debounce=false] + * true: If call interval less than `delay`, only the last call works. + * false: If call interval less than `delay, call works on fixed rate. + * @return {(Function)} throttled fn. + */ + + function throttle(fn, delay, debounce) { + var currCall; + var lastCall = 0; + var lastExec = 0; + var timer = null; + var diff; + var scope; + var args; + var debounceNextCall; + delay = delay || 0; + + function exec() { + lastExec = new Date().getTime(); + timer = null; + fn.apply(scope, args || []); + } + + var cb = function () { + var cbArgs = []; + + for (var _i = 0; _i < arguments.length; _i++) { + cbArgs[_i] = arguments[_i]; + } + + currCall = new Date().getTime(); + scope = this; + args = cbArgs; + var thisDelay = debounceNextCall || delay; + var thisDebounce = debounceNextCall || debounce; + debounceNextCall = null; + diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay; + clearTimeout(timer); // Here we should make sure that: the `exec` SHOULD NOT be called later + // than a new call of `cb`, that is, preserving the command order. Consider + // calculating "scale rate" when roaming as an example. When a call of `cb` + // happens, either the `exec` is called dierectly, or the call is delayed. + // But the delayed call should never be later than next call of `cb`. Under + // this assurance, we can simply update view state each time `dispatchAction` + // triggered by user roaming, but not need to add extra code to avoid the + // state being "rolled-back". + + if (thisDebounce) { + timer = setTimeout(exec, thisDelay); + } else { + if (diff >= 0) { + exec(); + } else { + timer = setTimeout(exec, -diff); + } + } + + lastCall = currCall; + }; + /** + * Clear throttle. + * @public + */ + + + cb.clear = function () { + if (timer) { + clearTimeout(timer); + timer = null; + } + }; + /** + * Enable debounce once. + */ + + + cb.debounceNextCall = function (debounceDelay) { + debounceNextCall = debounceDelay; + }; + + return cb; + } + /** + * Create throttle method or update throttle rate. + * + * @example + * ComponentView.prototype.render = function () { + * ... + * throttle.createOrUpdate( + * this, + * '_dispatchAction', + * this.model.get('throttle'), + * 'fixRate' + * ); + * }; + * ComponentView.prototype.remove = function () { + * throttle.clear(this, '_dispatchAction'); + * }; + * ComponentView.prototype.dispose = function () { + * throttle.clear(this, '_dispatchAction'); + * }; + * + */ + + function createOrUpdate(obj, fnAttr, rate, throttleType) { + var fn = obj[fnAttr]; + + if (!fn) { + return; + } + + var originFn = fn[ORIGIN_METHOD] || fn; + var lastThrottleType = fn[THROTTLE_TYPE]; + var lastRate = fn[RATE]; + + if (lastRate !== rate || lastThrottleType !== throttleType) { + if (rate == null || !throttleType) { + return obj[fnAttr] = originFn; + } + + fn = obj[fnAttr] = throttle(originFn, rate, throttleType === 'debounce'); + fn[ORIGIN_METHOD] = originFn; + fn[THROTTLE_TYPE] = throttleType; + fn[RATE] = rate; + } + + return fn; + } + /** + * Clear throttle. Example see throttle.createOrUpdate. + */ + + function clear(obj, fnAttr) { + var fn = obj[fnAttr]; + + if (fn && fn[ORIGIN_METHOD]) { + obj[fnAttr] = fn[ORIGIN_METHOD]; + } + } + + var inner$3 = makeInner(); + var defaultStyleMappers = { + itemStyle: makeStyleMapper(ITEM_STYLE_KEY_MAP, true), + lineStyle: makeStyleMapper(LINE_STYLE_KEY_MAP, true) + }; + var defaultColorKey = { + lineStyle: 'stroke', + itemStyle: 'fill' + }; + + function getStyleMapper(seriesModel, stylePath) { + var styleMapper = seriesModel.visualStyleMapper || defaultStyleMappers[stylePath]; + + if (!styleMapper) { + console.warn("Unkown style type '" + stylePath + "'."); + return defaultStyleMappers.itemStyle; + } + + return styleMapper; + } + + function getDefaultColorKey(seriesModel, stylePath) { + // return defaultColorKey[stylePath] || + var colorKey = seriesModel.visualDrawType || defaultColorKey[stylePath]; + + if (!colorKey) { + console.warn("Unkown style type '" + stylePath + "'."); + return 'fill'; + } + + return colorKey; + } + + var seriesStyleTask = { + createOnAllSeries: true, + performRawSeries: true, + reset: function (seriesModel, ecModel) { + var data = seriesModel.getData(); + var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; // Set in itemStyle + + var styleModel = seriesModel.getModel(stylePath); + var getStyle = getStyleMapper(seriesModel, stylePath); + var globalStyle = getStyle(styleModel); + var decalOption = styleModel.getShallow('decal'); + + if (decalOption) { + data.setVisual('decal', decalOption); + decalOption.dirty = true; + } // TODO + + + var colorKey = getDefaultColorKey(seriesModel, stylePath); + var color = globalStyle[colorKey]; // TODO style callback + + var colorCallback = isFunction(color) ? color : null; + var hasAutoColor = globalStyle.fill === 'auto' || globalStyle.stroke === 'auto'; // Get from color palette by default. + + if (!globalStyle[colorKey] || colorCallback || hasAutoColor) { + // Note: if some series has color specified (e.g., by itemStyle.color), we DO NOT + // make it effect palette. Bacause some scenarios users need to make some series + // transparent or as background, which should better not effect the palette. + var colorPalette = seriesModel.getColorFromPalette( // TODO series count changed. + seriesModel.name, null, ecModel.getSeriesCount()); + + if (!globalStyle[colorKey]) { + globalStyle[colorKey] = colorPalette; + data.setVisual('colorFromPalette', true); + } + + globalStyle.fill = globalStyle.fill === 'auto' || typeof globalStyle.fill === 'function' ? colorPalette : globalStyle.fill; + globalStyle.stroke = globalStyle.stroke === 'auto' || typeof globalStyle.stroke === 'function' ? colorPalette : globalStyle.stroke; + } + + data.setVisual('style', globalStyle); + data.setVisual('drawType', colorKey); // Only visible series has each data be visual encoded + + if (!ecModel.isSeriesFiltered(seriesModel) && colorCallback) { + data.setVisual('colorFromPalette', false); + return { + dataEach: function (data, idx) { + var dataParams = seriesModel.getDataParams(idx); + var itemStyle = extend({}, globalStyle); + itemStyle[colorKey] = colorCallback(dataParams); + data.setItemVisual(idx, 'style', itemStyle); + } + }; + } + } + }; + var sharedModel = new Model(); + var dataStyleTask = { + createOnAllSeries: true, + performRawSeries: true, + reset: function (seriesModel, ecModel) { + if (seriesModel.ignoreStyleOnData || ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + var data = seriesModel.getData(); + var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; // Set in itemStyle + + var getStyle = getStyleMapper(seriesModel, stylePath); + var colorKey = data.getVisual('drawType'); + return { + dataEach: data.hasItemOption ? function (data, idx) { + // Not use getItemModel for performance considuration + var rawItem = data.getRawDataItem(idx); + + if (rawItem && rawItem[stylePath]) { + sharedModel.option = rawItem[stylePath]; + var style = getStyle(sharedModel); + var existsStyle = data.ensureUniqueItemVisual(idx, 'style'); + extend(existsStyle, style); + + if (sharedModel.option.decal) { + data.setItemVisual(idx, 'decal', sharedModel.option.decal); + sharedModel.option.decal.dirty = true; + } + + if (colorKey in style) { + data.setItemVisual(idx, 'colorFromPalette', false); + } + } + } : null + }; + } + }; // Pick color from palette for the data which has not been set with color yet. + // Note: do not support stream rendering. No such cases yet. + + var dataColorPaletteTask = { + performRawSeries: true, + overallReset: function (ecModel) { + // Each type of series use one scope. + // Pie and funnel are using diferrent scopes + var paletteScopeGroupByType = createHashMap(); + ecModel.eachSeries(function (seriesModel) { + var colorBy = seriesModel.getColorBy(); + + if (seriesModel.isColorBySeries()) { + return; + } + + var key = seriesModel.type + '-' + colorBy; + var colorScope = paletteScopeGroupByType.get(key); + + if (!colorScope) { + colorScope = {}; + paletteScopeGroupByType.set(key, colorScope); + } + + inner$3(seriesModel).scope = colorScope; + }); + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.isColorBySeries() || ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + var dataAll = seriesModel.getRawData(); + var idxMap = {}; + var data = seriesModel.getData(); + var colorScope = inner$3(seriesModel).scope; + var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; + var colorKey = getDefaultColorKey(seriesModel, stylePath); + data.each(function (idx) { + var rawIdx = data.getRawIndex(idx); + idxMap[rawIdx] = idx; + }); // Iterate on data before filtered. To make sure color from palette can be + // Consistent when toggling legend. + + dataAll.each(function (rawIdx) { + var idx = idxMap[rawIdx]; + var fromPalette = data.getItemVisual(idx, 'colorFromPalette'); // Get color from palette for each data only when the color is inherited from series color, which is + // also picked from color palette. So following situation is not in the case: + // 1. series.itemStyle.color is set + // 2. color is encoded by visualMap + + if (fromPalette) { + var itemStyle = data.ensureUniqueItemVisual(idx, 'style'); + var name_1 = dataAll.getName(rawIdx) || rawIdx + ''; + var dataCount = dataAll.count(); + itemStyle[colorKey] = seriesModel.getColorFromPalette(name_1, colorScope, dataCount); + } + }); + }); + } + }; + + var PI$3 = Math.PI; + /** + * @param {module:echarts/ExtensionAPI} api + * @param {Object} [opts] + * @param {string} [opts.text] + * @param {string} [opts.color] + * @param {string} [opts.textColor] + * @return {module:zrender/Element} + */ + + function defaultLoading(api, opts) { + opts = opts || {}; + defaults(opts, { + text: 'loading', + textColor: '#000', + fontSize: 12, + fontWeight: 'normal', + fontStyle: 'normal', + fontFamily: 'sans-serif', + maskColor: 'rgba(255, 255, 255, 0.8)', + showSpinner: true, + color: '#5470c6', + spinnerRadius: 10, + lineWidth: 5, + zlevel: 0 + }); + var group = new Group(); + var mask = new Rect({ + style: { + fill: opts.maskColor + }, + zlevel: opts.zlevel, + z: 10000 + }); + group.add(mask); + var textContent = new ZRText({ + style: { + text: opts.text, + fill: opts.textColor, + fontSize: opts.fontSize, + fontWeight: opts.fontWeight, + fontStyle: opts.fontStyle, + fontFamily: opts.fontFamily + }, + zlevel: opts.zlevel, + z: 10001 + }); + var labelRect = new Rect({ + style: { + fill: 'none' + }, + textContent: textContent, + textConfig: { + position: 'right', + distance: 10 + }, + zlevel: opts.zlevel, + z: 10001 + }); + group.add(labelRect); + var arc; + + if (opts.showSpinner) { + arc = new Arc({ + shape: { + startAngle: -PI$3 / 2, + endAngle: -PI$3 / 2 + 0.1, + r: opts.spinnerRadius + }, + style: { + stroke: opts.color, + lineCap: 'round', + lineWidth: opts.lineWidth + }, + zlevel: opts.zlevel, + z: 10001 + }); + arc.animateShape(true).when(1000, { + endAngle: PI$3 * 3 / 2 + }).start('circularInOut'); + arc.animateShape(true).when(1000, { + startAngle: PI$3 * 3 / 2 + }).delay(300).start('circularInOut'); + group.add(arc); + } // Inject resize + + + group.resize = function () { + var textWidth = textContent.getBoundingRect().width; + var r = opts.showSpinner ? opts.spinnerRadius : 0; // cx = (containerWidth - arcDiameter - textDistance - textWidth) / 2 + // textDistance needs to be calculated when both animation and text exist + + var cx = (api.getWidth() - r * 2 - (opts.showSpinner && textWidth ? 10 : 0) - textWidth) / 2 - (opts.showSpinner && textWidth ? 0 : 5 + textWidth / 2) // only show the text + + (opts.showSpinner ? 0 : textWidth / 2) // only show the spinner + + (textWidth ? 0 : r); + var cy = api.getHeight() / 2; + opts.showSpinner && arc.setShape({ + cx: cx, + cy: cy + }); + labelRect.setShape({ + x: cx - r, + y: cy - r, + width: r * 2, + height: r * 2 + }); + mask.setShape({ + x: 0, + y: 0, + width: api.getWidth(), + height: api.getHeight() + }); + }; + + group.resize(); + return group; + } + + var Scheduler = + /** @class */ + function () { + function Scheduler(ecInstance, api, dataProcessorHandlers, visualHandlers) { + // key: handlerUID + this._stageTaskMap = createHashMap(); + this.ecInstance = ecInstance; + this.api = api; // Fix current processors in case that in some rear cases that + // processors might be registered after echarts instance created. + // Register processors incrementally for a echarts instance is + // not supported by this stream architecture. + + dataProcessorHandlers = this._dataProcessorHandlers = dataProcessorHandlers.slice(); + visualHandlers = this._visualHandlers = visualHandlers.slice(); + this._allHandlers = dataProcessorHandlers.concat(visualHandlers); + } + + Scheduler.prototype.restoreData = function (ecModel, payload) { + // TODO: Only restore needed series and components, but not all components. + // Currently `restoreData` of all of the series and component will be called. + // But some independent components like `title`, `legend`, `graphic`, `toolbox`, + // `tooltip`, `axisPointer`, etc, do not need series refresh when `setOption`, + // and some components like coordinate system, axes, dataZoom, visualMap only + // need their target series refresh. + // (1) If we are implementing this feature some day, we should consider these cases: + // if a data processor depends on a component (e.g., dataZoomProcessor depends + // on the settings of `dataZoom`), it should be re-performed if the component + // is modified by `setOption`. + // (2) If a processor depends on sevral series, speicified by its `getTargetSeries`, + // it should be re-performed when the result array of `getTargetSeries` changed. + // We use `dependencies` to cover these issues. + // (3) How to update target series when coordinate system related components modified. + // TODO: simply the dirty mechanism? Check whether only the case here can set tasks dirty, + // and this case all of the tasks will be set as dirty. + ecModel.restoreData(payload); // Theoretically an overall task not only depends on each of its target series, but also + // depends on all of the series. + // The overall task is not in pipeline, and `ecModel.restoreData` only set pipeline tasks + // dirty. If `getTargetSeries` of an overall task returns nothing, we should also ensure + // that the overall task is set as dirty and to be performed, otherwise it probably cause + // state chaos. So we have to set dirty of all of the overall tasks manually, otherwise it + // probably cause state chaos (consider `dataZoomProcessor`). + + this._stageTaskMap.each(function (taskRecord) { + var overallTask = taskRecord.overallTask; + overallTask && overallTask.dirty(); + }); + }; // If seriesModel provided, incremental threshold is check by series data. + + + Scheduler.prototype.getPerformArgs = function (task, isBlock) { + // For overall task + if (!task.__pipeline) { + return; + } + + var pipeline = this._pipelineMap.get(task.__pipeline.id); + + var pCtx = pipeline.context; + var incremental = !isBlock && pipeline.progressiveEnabled && (!pCtx || pCtx.progressiveRender) && task.__idxInPipeline > pipeline.blockIndex; + var step = incremental ? pipeline.step : null; + var modDataCount = pCtx && pCtx.modDataCount; + var modBy = modDataCount != null ? Math.ceil(modDataCount / step) : null; + return { + step: step, + modBy: modBy, + modDataCount: modDataCount + }; + }; + + Scheduler.prototype.getPipeline = function (pipelineId) { + return this._pipelineMap.get(pipelineId); + }; + /** + * Current, progressive rendering starts from visual and layout. + * Always detect render mode in the same stage, avoiding that incorrect + * detection caused by data filtering. + * Caution: + * `updateStreamModes` use `seriesModel.getData()`. + */ + + + Scheduler.prototype.updateStreamModes = function (seriesModel, view) { + var pipeline = this._pipelineMap.get(seriesModel.uid); + + var data = seriesModel.getData(); + var dataLen = data.count(); // `progressiveRender` means that can render progressively in each + // animation frame. Note that some types of series do not provide + // `view.incrementalPrepareRender` but support `chart.appendData`. We + // use the term `incremental` but not `progressive` to describe the + // case that `chart.appendData`. + + var progressiveRender = pipeline.progressiveEnabled && view.incrementalPrepareRender && dataLen >= pipeline.threshold; + var large = seriesModel.get('large') && dataLen >= seriesModel.get('largeThreshold'); // TODO: modDataCount should not updated if `appendData`, otherwise cause whole repaint. + // see `test/candlestick-large3.html` + + var modDataCount = seriesModel.get('progressiveChunkMode') === 'mod' ? dataLen : null; + seriesModel.pipelineContext = pipeline.context = { + progressiveRender: progressiveRender, + modDataCount: modDataCount, + large: large + }; + }; + + Scheduler.prototype.restorePipelines = function (ecModel) { + var scheduler = this; + var pipelineMap = scheduler._pipelineMap = createHashMap(); + ecModel.eachSeries(function (seriesModel) { + var progressive = seriesModel.getProgressive(); + var pipelineId = seriesModel.uid; + pipelineMap.set(pipelineId, { + id: pipelineId, + head: null, + tail: null, + threshold: seriesModel.getProgressiveThreshold(), + progressiveEnabled: progressive && !(seriesModel.preventIncremental && seriesModel.preventIncremental()), + blockIndex: -1, + step: Math.round(progressive || 700), + count: 0 + }); + + scheduler._pipe(seriesModel, seriesModel.dataTask); + }); + }; + + Scheduler.prototype.prepareStageTasks = function () { + var stageTaskMap = this._stageTaskMap; + var ecModel = this.api.getModel(); + var api = this.api; + each(this._allHandlers, function (handler) { + var record = stageTaskMap.get(handler.uid) || stageTaskMap.set(handler.uid, {}); + var errMsg = ''; + + if ("development" !== 'production') { + // Currently do not need to support to sepecify them both. + errMsg = '"reset" and "overallReset" must not be both specified.'; + } + + assert(!(handler.reset && handler.overallReset), errMsg); + handler.reset && this._createSeriesStageTask(handler, record, ecModel, api); + handler.overallReset && this._createOverallStageTask(handler, record, ecModel, api); + }, this); + }; + + Scheduler.prototype.prepareView = function (view, model, ecModel, api) { + var renderTask = view.renderTask; + var context = renderTask.context; + context.model = model; + context.ecModel = ecModel; + context.api = api; + renderTask.__block = !view.incrementalPrepareRender; + + this._pipe(model, renderTask); + }; + + Scheduler.prototype.performDataProcessorTasks = function (ecModel, payload) { + // If we do not use `block` here, it should be considered when to update modes. + this._performStageTasks(this._dataProcessorHandlers, ecModel, payload, { + block: true + }); + }; + + Scheduler.prototype.performVisualTasks = function (ecModel, payload, opt) { + this._performStageTasks(this._visualHandlers, ecModel, payload, opt); + }; + + Scheduler.prototype._performStageTasks = function (stageHandlers, ecModel, payload, opt) { + opt = opt || {}; + var unfinished = false; + var scheduler = this; + each(stageHandlers, function (stageHandler, idx) { + if (opt.visualType && opt.visualType !== stageHandler.visualType) { + return; + } + + var stageHandlerRecord = scheduler._stageTaskMap.get(stageHandler.uid); + + var seriesTaskMap = stageHandlerRecord.seriesTaskMap; + var overallTask = stageHandlerRecord.overallTask; + + if (overallTask) { + var overallNeedDirty_1; + var agentStubMap = overallTask.agentStubMap; + agentStubMap.each(function (stub) { + if (needSetDirty(opt, stub)) { + stub.dirty(); + overallNeedDirty_1 = true; + } + }); + overallNeedDirty_1 && overallTask.dirty(); + scheduler.updatePayload(overallTask, payload); + var performArgs_1 = scheduler.getPerformArgs(overallTask, opt.block); // Execute stubs firstly, which may set the overall task dirty, + // then execute the overall task. And stub will call seriesModel.setData, + // which ensures that in the overallTask seriesModel.getData() will not + // return incorrect data. + + agentStubMap.each(function (stub) { + stub.perform(performArgs_1); + }); + + if (overallTask.perform(performArgs_1)) { + unfinished = true; + } + } else if (seriesTaskMap) { + seriesTaskMap.each(function (task, pipelineId) { + if (needSetDirty(opt, task)) { + task.dirty(); + } + + var performArgs = scheduler.getPerformArgs(task, opt.block); // FIXME + // if intending to decalare `performRawSeries` in handlers, only + // stream-independent (specifically, data item independent) operations can be + // performed. Because is a series is filtered, most of the tasks will not + // be performed. A stream-dependent operation probably cause wrong biz logic. + // Perhaps we should not provide a separate callback for this case instead + // of providing the config `performRawSeries`. The stream-dependent operaions + // and stream-independent operations should better not be mixed. + + performArgs.skip = !stageHandler.performRawSeries && ecModel.isSeriesFiltered(task.context.model); + scheduler.updatePayload(task, payload); + + if (task.perform(performArgs)) { + unfinished = true; + } + }); + } + }); + + function needSetDirty(opt, task) { + return opt.setDirty && (!opt.dirtyMap || opt.dirtyMap.get(task.__pipeline.id)); + } + + this.unfinished = unfinished || this.unfinished; + }; + + Scheduler.prototype.performSeriesTasks = function (ecModel) { + var unfinished; + ecModel.eachSeries(function (seriesModel) { + // Progress to the end for dataInit and dataRestore. + unfinished = seriesModel.dataTask.perform() || unfinished; + }); + this.unfinished = unfinished || this.unfinished; + }; + + Scheduler.prototype.plan = function () { + // Travel pipelines, check block. + this._pipelineMap.each(function (pipeline) { + var task = pipeline.tail; + + do { + if (task.__block) { + pipeline.blockIndex = task.__idxInPipeline; + break; + } + + task = task.getUpstream(); + } while (task); + }); + }; + + Scheduler.prototype.updatePayload = function (task, payload) { + payload !== 'remain' && (task.context.payload = payload); + }; + + Scheduler.prototype._createSeriesStageTask = function (stageHandler, stageHandlerRecord, ecModel, api) { + var scheduler = this; + var oldSeriesTaskMap = stageHandlerRecord.seriesTaskMap; // The count of stages are totally about only several dozen, so + // do not need to reuse the map. + + var newSeriesTaskMap = stageHandlerRecord.seriesTaskMap = createHashMap(); + var seriesType = stageHandler.seriesType; + var getTargetSeries = stageHandler.getTargetSeries; // If a stageHandler should cover all series, `createOnAllSeries` should be declared mandatorily, + // to avoid some typo or abuse. Otherwise if an extension do not specify a `seriesType`, + // it works but it may cause other irrelevant charts blocked. + + if (stageHandler.createOnAllSeries) { + ecModel.eachRawSeries(create); + } else if (seriesType) { + ecModel.eachRawSeriesByType(seriesType, create); + } else if (getTargetSeries) { + getTargetSeries(ecModel, api).each(create); + } + + function create(seriesModel) { + var pipelineId = seriesModel.uid; // Init tasks for each seriesModel only once. + // Reuse original task instance. + + var task = newSeriesTaskMap.set(pipelineId, oldSeriesTaskMap && oldSeriesTaskMap.get(pipelineId) || createTask({ + plan: seriesTaskPlan, + reset: seriesTaskReset, + count: seriesTaskCount + })); + task.context = { + model: seriesModel, + ecModel: ecModel, + api: api, + // PENDING: `useClearVisual` not used? + useClearVisual: stageHandler.isVisual && !stageHandler.isLayout, + plan: stageHandler.plan, + reset: stageHandler.reset, + scheduler: scheduler + }; + + scheduler._pipe(seriesModel, task); + } + }; + + Scheduler.prototype._createOverallStageTask = function (stageHandler, stageHandlerRecord, ecModel, api) { + var scheduler = this; + var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask // For overall task, the function only be called on reset stage. + || createTask({ + reset: overallTaskReset + }); + overallTask.context = { + ecModel: ecModel, + api: api, + overallReset: stageHandler.overallReset, + scheduler: scheduler + }; + var oldAgentStubMap = overallTask.agentStubMap; // The count of stages are totally about only several dozen, so + // do not need to reuse the map. + + var newAgentStubMap = overallTask.agentStubMap = createHashMap(); + var seriesType = stageHandler.seriesType; + var getTargetSeries = stageHandler.getTargetSeries; + var overallProgress = true; + var shouldOverallTaskDirty = false; // FIXME:TS never used, so comment it + // let modifyOutputEnd = stageHandler.modifyOutputEnd; + // An overall task with seriesType detected or has `getTargetSeries`, we add + // stub in each pipelines, it will set the overall task dirty when the pipeline + // progress. Moreover, to avoid call the overall task each frame (too frequent), + // we set the pipeline block. + + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = '"createOnAllSeries" do not supported for "overallReset", ' + 'becuase it will block all streams.'; + } + + assert(!stageHandler.createOnAllSeries, errMsg); + + if (seriesType) { + ecModel.eachRawSeriesByType(seriesType, createStub); + } else if (getTargetSeries) { + getTargetSeries(ecModel, api).each(createStub); + } // Otherwise, (usually it is legancy case), the overall task will only be + // executed when upstream dirty. Otherwise the progressive rendering of all + // pipelines will be disabled unexpectedly. But it still needs stubs to receive + // dirty info from upsteam. + else { + overallProgress = false; + each(ecModel.getSeries(), createStub); + } + + function createStub(seriesModel) { + var pipelineId = seriesModel.uid; + var stub = newAgentStubMap.set(pipelineId, oldAgentStubMap && oldAgentStubMap.get(pipelineId) || ( // When the result of `getTargetSeries` changed, the overallTask + // should be set as dirty and re-performed. + shouldOverallTaskDirty = true, createTask({ + reset: stubReset, + onDirty: stubOnDirty + }))); + stub.context = { + model: seriesModel, + overallProgress: overallProgress // FIXME:TS never used, so comment it + // modifyOutputEnd: modifyOutputEnd + + }; + stub.agent = overallTask; + stub.__block = overallProgress; + + scheduler._pipe(seriesModel, stub); + } + + if (shouldOverallTaskDirty) { + overallTask.dirty(); + } + }; + + Scheduler.prototype._pipe = function (seriesModel, task) { + var pipelineId = seriesModel.uid; + + var pipeline = this._pipelineMap.get(pipelineId); + + !pipeline.head && (pipeline.head = task); + pipeline.tail && pipeline.tail.pipe(task); + pipeline.tail = task; + task.__idxInPipeline = pipeline.count++; + task.__pipeline = pipeline; + }; + + Scheduler.wrapStageHandler = function (stageHandler, visualType) { + if (isFunction(stageHandler)) { + stageHandler = { + overallReset: stageHandler, + seriesType: detectSeriseType(stageHandler) + }; + } + + stageHandler.uid = getUID('stageHandler'); + visualType && (stageHandler.visualType = visualType); + return stageHandler; + }; + return Scheduler; + }(); + + function overallTaskReset(context) { + context.overallReset(context.ecModel, context.api, context.payload); + } + + function stubReset(context) { + return context.overallProgress && stubProgress; + } + + function stubProgress() { + this.agent.dirty(); + this.getDownstream().dirty(); + } + + function stubOnDirty() { + this.agent && this.agent.dirty(); + } + + function seriesTaskPlan(context) { + return context.plan ? context.plan(context.model, context.ecModel, context.api, context.payload) : null; + } + + function seriesTaskReset(context) { + if (context.useClearVisual) { + context.data.clearAllVisual(); + } + + var resetDefines = context.resetDefines = normalizeToArray(context.reset(context.model, context.ecModel, context.api, context.payload)); + return resetDefines.length > 1 ? map(resetDefines, function (v, idx) { + return makeSeriesTaskProgress(idx); + }) : singleSeriesTaskProgress; + } + + var singleSeriesTaskProgress = makeSeriesTaskProgress(0); + + function makeSeriesTaskProgress(resetDefineIdx) { + return function (params, context) { + var data = context.data; + var resetDefine = context.resetDefines[resetDefineIdx]; + + if (resetDefine && resetDefine.dataEach) { + for (var i = params.start; i < params.end; i++) { + resetDefine.dataEach(data, i); + } + } else if (resetDefine && resetDefine.progress) { + resetDefine.progress(params, data); + } + }; + } + + function seriesTaskCount(context) { + return context.data.count(); + } + /** + * Only some legacy stage handlers (usually in echarts extensions) are pure function. + * To ensure that they can work normally, they should work in block mode, that is, + * they should not be started util the previous tasks finished. So they cause the + * progressive rendering disabled. We try to detect the series type, to narrow down + * the block range to only the series type they concern, but not all series. + */ + + + function detectSeriseType(legacyFunc) { + seriesType = null; + + try { + // Assume there is no async when calling `eachSeriesByType`. + legacyFunc(ecModelMock, apiMock); + } catch (e) {} + + return seriesType; + } + + var ecModelMock = {}; + var apiMock = {}; + var seriesType; + mockMethods(ecModelMock, GlobalModel); + mockMethods(apiMock, ExtensionAPI); + + ecModelMock.eachSeriesByType = ecModelMock.eachRawSeriesByType = function (type) { + seriesType = type; + }; + + ecModelMock.eachComponent = function (cond) { + if (cond.mainType === 'series' && cond.subType) { + seriesType = cond.subType; + } + }; + + function mockMethods(target, Clz) { + /* eslint-disable */ + for (var name_1 in Clz.prototype) { + // Do not use hasOwnProperty + target[name_1] = noop; + } + /* eslint-enable */ + + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var colorAll = ['#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF']; + var lightTheme = { + color: colorAll, + colorLayer: [['#37A2DA', '#ffd85c', '#fd7b5f'], ['#37A2DA', '#67E0E3', '#FFDB5C', '#ff9f7f', '#E062AE', '#9d96f5'], ['#37A2DA', '#32C5E9', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#e7bcf3', '#8378EA', '#96BFFF'], colorAll] + }; + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var contrastColor = '#B9B8CE'; + var backgroundColor = '#100C2A'; + + var axisCommon = function () { + return { + axisLine: { + lineStyle: { + color: contrastColor + } + }, + splitLine: { + lineStyle: { + color: '#484753' + } + }, + splitArea: { + areaStyle: { + color: ['rgba(255,255,255,0.02)', 'rgba(255,255,255,0.05)'] + } + }, + minorSplitLine: { + lineStyle: { + color: '#20203B' + } + } + }; + }; + + var colorPalette = ['#4992ff', '#7cffb2', '#fddd60', '#ff6e76', '#58d9f9', '#05c091', '#ff8a45', '#8d48e3', '#dd79ff']; + var theme = { + darkMode: true, + color: colorPalette, + backgroundColor: backgroundColor, + axisPointer: { + lineStyle: { + color: '#817f91' + }, + crossStyle: { + color: '#817f91' + }, + label: { + // TODO Contrast of label backgorundColor + color: '#fff' + } + }, + legend: { + textStyle: { + color: contrastColor + } + }, + textStyle: { + color: contrastColor + }, + title: { + textStyle: { + color: '#EEF1FA' + }, + subtextStyle: { + color: '#B9B8CE' + } + }, + toolbox: { + iconStyle: { + borderColor: contrastColor + } + }, + dataZoom: { + borderColor: '#71708A', + textStyle: { + color: contrastColor + }, + brushStyle: { + color: 'rgba(135,163,206,0.3)' + }, + handleStyle: { + color: '#353450', + borderColor: '#C5CBE3' + }, + moveHandleStyle: { + color: '#B0B6C3', + opacity: 0.3 + }, + fillerColor: 'rgba(135,163,206,0.2)', + emphasis: { + handleStyle: { + borderColor: '#91B7F2', + color: '#4D587D' + }, + moveHandleStyle: { + color: '#636D9A', + opacity: 0.7 + } + }, + dataBackground: { + lineStyle: { + color: '#71708A', + width: 1 + }, + areaStyle: { + color: '#71708A' + } + }, + selectedDataBackground: { + lineStyle: { + color: '#87A3CE' + }, + areaStyle: { + color: '#87A3CE' + } + } + }, + visualMap: { + textStyle: { + color: contrastColor + } + }, + timeline: { + lineStyle: { + color: contrastColor + }, + label: { + color: contrastColor + }, + controlStyle: { + color: contrastColor, + borderColor: contrastColor + } + }, + calendar: { + itemStyle: { + color: backgroundColor + }, + dayLabel: { + color: contrastColor + }, + monthLabel: { + color: contrastColor + }, + yearLabel: { + color: contrastColor + } + }, + timeAxis: axisCommon(), + logAxis: axisCommon(), + valueAxis: axisCommon(), + categoryAxis: axisCommon(), + line: { + symbol: 'circle' + }, + graph: { + color: colorPalette + }, + gauge: { + title: { + color: contrastColor + }, + axisLine: { + lineStyle: { + color: [[1, 'rgba(207,212,219,0.2)']] + } + }, + axisLabel: { + color: contrastColor + }, + detail: { + color: '#EEF1FA' + } + }, + candlestick: { + itemStyle: { + color: '#f64e56', + color0: '#54ea92', + borderColor: '#f64e56', + borderColor0: '#54ea92' // borderColor: '#ca2824', + // borderColor0: '#09a443' + + } + } + }; + theme.categoryAxis.splitLine.show = false; + + /** + * Usage of query: + * `chart.on('click', query, handler);` + * The `query` can be: + * + The component type query string, only `mainType` or `mainType.subType`, + * like: 'xAxis', 'series', 'xAxis.category' or 'series.line'. + * + The component query object, like: + * `{seriesIndex: 2}`, `{seriesName: 'xx'}`, `{seriesId: 'some'}`, + * `{xAxisIndex: 2}`, `{xAxisName: 'xx'}`, `{xAxisId: 'some'}`. + * + The data query object, like: + * `{dataIndex: 123}`, `{dataType: 'link'}`, `{name: 'some'}`. + * + The other query object (cmponent customized query), like: + * `{element: 'some'}` (only available in custom series). + * + * Caveat: If a prop in the `query` object is `null/undefined`, it is the + * same as there is no such prop in the `query` object. + */ + + var ECEventProcessor = + /** @class */ + function () { + function ECEventProcessor() {} + + ECEventProcessor.prototype.normalizeQuery = function (query) { + var cptQuery = {}; + var dataQuery = {}; + var otherQuery = {}; // `query` is `mainType` or `mainType.subType` of component. + + if (isString(query)) { + var condCptType = parseClassType(query); // `.main` and `.sub` may be ''. + + cptQuery.mainType = condCptType.main || null; + cptQuery.subType = condCptType.sub || null; + } // `query` is an object, convert to {mainType, index, name, id}. + else { + // `xxxIndex`, `xxxName`, `xxxId`, `name`, `dataIndex`, `dataType` is reserved, + // can not be used in `compomentModel.filterForExposedEvent`. + var suffixes_1 = ['Index', 'Name', 'Id']; + var dataKeys_1 = { + name: 1, + dataIndex: 1, + dataType: 1 + }; + each(query, function (val, key) { + var reserved = false; + + for (var i = 0; i < suffixes_1.length; i++) { + var propSuffix = suffixes_1[i]; + var suffixPos = key.lastIndexOf(propSuffix); + + if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) { + var mainType = key.slice(0, suffixPos); // Consider `dataIndex`. + + if (mainType !== 'data') { + cptQuery.mainType = mainType; + cptQuery[propSuffix.toLowerCase()] = val; + reserved = true; + } + } + } + + if (dataKeys_1.hasOwnProperty(key)) { + dataQuery[key] = val; + reserved = true; + } + + if (!reserved) { + otherQuery[key] = val; + } + }); + } + + return { + cptQuery: cptQuery, + dataQuery: dataQuery, + otherQuery: otherQuery + }; + }; + + ECEventProcessor.prototype.filter = function (eventType, query) { + // They should be assigned before each trigger call. + var eventInfo = this.eventInfo; + + if (!eventInfo) { + return true; + } + + var targetEl = eventInfo.targetEl; + var packedEvent = eventInfo.packedEvent; + var model = eventInfo.model; + var view = eventInfo.view; // For event like 'globalout'. + + if (!model || !view) { + return true; + } + + var cptQuery = query.cptQuery; + var dataQuery = query.dataQuery; + return check(cptQuery, model, 'mainType') && check(cptQuery, model, 'subType') && check(cptQuery, model, 'index', 'componentIndex') && check(cptQuery, model, 'name') && check(cptQuery, model, 'id') && check(dataQuery, packedEvent, 'name') && check(dataQuery, packedEvent, 'dataIndex') && check(dataQuery, packedEvent, 'dataType') && (!view.filterForExposedEvent || view.filterForExposedEvent(eventType, query.otherQuery, targetEl, packedEvent)); + + function check(query, host, prop, propOnHost) { + return query[prop] == null || host[propOnHost || prop] === query[prop]; + } + }; + + ECEventProcessor.prototype.afterTrigger = function () { + // Make sure the eventInfo wont be used in next trigger. + this.eventInfo = null; + }; + + return ECEventProcessor; + }(); + + var seriesSymbolTask = { + createOnAllSeries: true, + // For legend. + performRawSeries: true, + reset: function (seriesModel, ecModel) { + var data = seriesModel.getData(); + + if (seriesModel.legendIcon) { + data.setVisual('legendIcon', seriesModel.legendIcon); + } + + if (!seriesModel.hasSymbolVisual) { + return; + } + + var symbolType = seriesModel.get('symbol'); + var symbolSize = seriesModel.get('symbolSize'); + var keepAspect = seriesModel.get('symbolKeepAspect'); + var symbolRotate = seriesModel.get('symbolRotate'); + var symbolOffset = seriesModel.get('symbolOffset'); + var hasSymbolTypeCallback = isFunction(symbolType); + var hasSymbolSizeCallback = isFunction(symbolSize); + var hasSymbolRotateCallback = isFunction(symbolRotate); + var hasSymbolOffsetCallback = isFunction(symbolOffset); + var hasCallback = hasSymbolTypeCallback || hasSymbolSizeCallback || hasSymbolRotateCallback || hasSymbolOffsetCallback; + var seriesSymbol = !hasSymbolTypeCallback && symbolType ? symbolType : seriesModel.defaultSymbol; + var seriesSymbolSize = !hasSymbolSizeCallback ? symbolSize : null; + var seriesSymbolRotate = !hasSymbolRotateCallback ? symbolRotate : null; + var seriesSymbolOffset = !hasSymbolOffsetCallback ? symbolOffset : null; + data.setVisual({ + legendIcon: seriesModel.legendIcon || seriesSymbol, + // If seting callback functions on `symbol` or `symbolSize`, for simplicity and avoiding + // to bring trouble, we do not pick a reuslt from one of its calling on data item here, + // but just use the default value. Callback on `symbol` or `symbolSize` is convenient in + // some cases but generally it is not recommanded. + symbol: seriesSymbol, + symbolSize: seriesSymbolSize, + symbolKeepAspect: keepAspect, + symbolRotate: seriesSymbolRotate, + symbolOffset: seriesSymbolOffset + }); // Only visible series has each data be visual encoded + + if (ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + function dataEach(data, idx) { + var rawValue = seriesModel.getRawValue(idx); + var params = seriesModel.getDataParams(idx); + hasSymbolTypeCallback && data.setItemVisual(idx, 'symbol', symbolType(rawValue, params)); + hasSymbolSizeCallback && data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue, params)); + hasSymbolRotateCallback && data.setItemVisual(idx, 'symbolRotate', symbolRotate(rawValue, params)); + hasSymbolOffsetCallback && data.setItemVisual(idx, 'symbolOffset', symbolOffset(rawValue, params)); + } + + return { + dataEach: hasCallback ? dataEach : null + }; + } + }; + var dataSymbolTask = { + createOnAllSeries: true, + // For legend. + performRawSeries: true, + reset: function (seriesModel, ecModel) { + if (!seriesModel.hasSymbolVisual) { + return; + } // Only visible series has each data be visual encoded + + + if (ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + var data = seriesModel.getData(); + + function dataEach(data, idx) { + var itemModel = data.getItemModel(idx); + var itemSymbolType = itemModel.getShallow('symbol', true); + var itemSymbolSize = itemModel.getShallow('symbolSize', true); + var itemSymbolRotate = itemModel.getShallow('symbolRotate', true); + var itemSymbolOffset = itemModel.getShallow('symbolOffset', true); + var itemSymbolKeepAspect = itemModel.getShallow('symbolKeepAspect', true); // If has item symbol + + if (itemSymbolType != null) { + data.setItemVisual(idx, 'symbol', itemSymbolType); + } + + if (itemSymbolSize != null) { + // PENDING Transform symbolSize ? + data.setItemVisual(idx, 'symbolSize', itemSymbolSize); + } + + if (itemSymbolRotate != null) { + data.setItemVisual(idx, 'symbolRotate', itemSymbolRotate); + } + + if (itemSymbolOffset != null) { + data.setItemVisual(idx, 'symbolOffset', itemSymbolOffset); + } + + if (itemSymbolKeepAspect != null) { + data.setItemVisual(idx, 'symbolKeepAspect', itemSymbolKeepAspect); + } + } + + return { + dataEach: data.hasItemOption ? dataEach : null + }; + } + }; + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function getItemVisualFromData(data, dataIndex, key) { + switch (key) { + case 'color': + var style = data.getItemVisual(dataIndex, 'style'); + return style[data.getVisual('drawType')]; + + case 'opacity': + return data.getItemVisual(dataIndex, 'style').opacity; + + case 'symbol': + case 'symbolSize': + case 'liftZ': + return data.getItemVisual(dataIndex, key); + + default: + if ("development" !== 'production') { + console.warn("Unknown visual type " + key); + } + + } + } + function getVisualFromData(data, key) { + switch (key) { + case 'color': + var style = data.getVisual('style'); + return style[data.getVisual('drawType')]; + + case 'opacity': + return data.getVisual('style').opacity; + + case 'symbol': + case 'symbolSize': + case 'liftZ': + return data.getVisual(key); + + default: + if ("development" !== 'production') { + console.warn("Unknown visual type " + key); + } + + } + } + function setItemVisualFromData(data, dataIndex, key, value) { + switch (key) { + case 'color': + // Make sure not sharing style object. + var style = data.ensureUniqueItemVisual(dataIndex, 'style'); + style[data.getVisual('drawType')] = value; // Mark the color has been changed, not from palette anymore + + data.setItemVisual(dataIndex, 'colorFromPalette', false); + break; + + case 'opacity': + data.ensureUniqueItemVisual(dataIndex, 'style').opacity = value; + break; + + case 'symbol': + case 'symbolSize': + case 'liftZ': + data.setItemVisual(dataIndex, key, value); + break; + + default: + if ("development" !== 'production') { + console.warn("Unknown visual type " + key); + } + + } + } + + // Inlucdes: pieSelect, pieUnSelect, pieToggleSelect, mapSelect, mapUnSelect, mapToggleSelect + + function createLegacyDataSelectAction(seriesType, ecRegisterAction) { + function getSeriesIndices(ecModel, payload) { + var seriesIndices = []; + ecModel.eachComponent({ + mainType: 'series', + subType: seriesType, + query: payload + }, function (seriesModel) { + seriesIndices.push(seriesModel.seriesIndex); + }); + return seriesIndices; + } + + each([[seriesType + 'ToggleSelect', 'toggleSelect'], [seriesType + 'Select', 'select'], [seriesType + 'UnSelect', 'unselect']], function (eventsMap) { + ecRegisterAction(eventsMap[0], function (payload, ecModel, api) { + payload = extend({}, payload); + + if ("development" !== 'production') { + deprecateReplaceLog(payload.type, eventsMap[1]); + } + + api.dispatchAction(extend(payload, { + type: eventsMap[1], + seriesIndex: getSeriesIndices(ecModel, payload) + })); + }); + }); + } + + function handleSeriesLegacySelectEvents(type, eventPostfix, ecIns, ecModel, payload) { + var legacyEventName = type + eventPostfix; + + if (!ecIns.isSilent(legacyEventName)) { + if ("development" !== 'production') { + deprecateLog("event " + legacyEventName + " is deprecated."); + } + + ecModel.eachComponent({ + mainType: 'series', + subType: 'pie' + }, function (seriesModel) { + var seriesIndex = seriesModel.seriesIndex; + var selected = payload.selected; + + for (var i = 0; i < selected.length; i++) { + if (selected[i].seriesIndex === seriesIndex) { + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, payload.fromActionPayload); + ecIns.trigger(legacyEventName, { + type: legacyEventName, + seriesId: seriesModel.id, + name: isArray(dataIndex) ? data.getName(dataIndex[0]) : data.getName(dataIndex), + selected: extend({}, seriesModel.option.selectedMap) + }); + } + } + }); + } + } + + function handleLegacySelectEvents(messageCenter, ecIns, api) { + messageCenter.on('selectchanged', function (params) { + var ecModel = api.getModel(); + + if (params.isFromClick) { + handleSeriesLegacySelectEvents('map', 'selectchanged', ecIns, ecModel, params); + handleSeriesLegacySelectEvents('pie', 'selectchanged', ecIns, ecModel, params); + } else if (params.fromAction === 'select') { + handleSeriesLegacySelectEvents('map', 'selected', ecIns, ecModel, params); + handleSeriesLegacySelectEvents('pie', 'selected', ecIns, ecModel, params); + } else if (params.fromAction === 'unselect') { + handleSeriesLegacySelectEvents('map', 'unselected', ecIns, ecModel, params); + handleSeriesLegacySelectEvents('pie', 'unselected', ecIns, ecModel, params); + } + }); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function findEventDispatcher(target, det, returnFirstMatch) { + var found; + + while (target) { + if (det(target)) { + found = target; + + if (returnFirstMatch) { + break; + } + } + + target = target.__hostTarget || target.parent; + } + + return found; + } + + var wmUniqueIndex = Math.round(Math.random() * 9); + var supportDefineProperty = typeof Object.defineProperty === 'function'; + var WeakMap = (function () { + function WeakMap() { + this._id = '__ec_inner_' + wmUniqueIndex++; + } + WeakMap.prototype.get = function (key) { + return this._guard(key)[this._id]; + }; + WeakMap.prototype.set = function (key, value) { + var target = this._guard(key); + if (supportDefineProperty) { + Object.defineProperty(target, this._id, { + value: value, + enumerable: false, + configurable: true + }); + } + else { + target[this._id] = value; + } + return this; + }; + WeakMap.prototype["delete"] = function (key) { + if (this.has(key)) { + delete this._guard(key)[this._id]; + return true; + } + return false; + }; + WeakMap.prototype.has = function (key) { + return !!this._guard(key)[this._id]; + }; + WeakMap.prototype._guard = function (key) { + if (key !== Object(key)) { + throw TypeError('Value of WeakMap is not a non-null object.'); + } + return key; + }; + return WeakMap; + }()); + + /** + * Triangle shape + * @inner + */ + + var Triangle = Path.extend({ + type: 'triangle', + shape: { + cx: 0, + cy: 0, + width: 0, + height: 0 + }, + buildPath: function (path, shape) { + var cx = shape.cx; + var cy = shape.cy; + var width = shape.width / 2; + var height = shape.height / 2; + path.moveTo(cx, cy - height); + path.lineTo(cx + width, cy + height); + path.lineTo(cx - width, cy + height); + path.closePath(); + } + }); + /** + * Diamond shape + * @inner + */ + + var Diamond = Path.extend({ + type: 'diamond', + shape: { + cx: 0, + cy: 0, + width: 0, + height: 0 + }, + buildPath: function (path, shape) { + var cx = shape.cx; + var cy = shape.cy; + var width = shape.width / 2; + var height = shape.height / 2; + path.moveTo(cx, cy - height); + path.lineTo(cx + width, cy); + path.lineTo(cx, cy + height); + path.lineTo(cx - width, cy); + path.closePath(); + } + }); + /** + * Pin shape + * @inner + */ + + var Pin = Path.extend({ + type: 'pin', + shape: { + // x, y on the cusp + x: 0, + y: 0, + width: 0, + height: 0 + }, + buildPath: function (path, shape) { + var x = shape.x; + var y = shape.y; + var w = shape.width / 5 * 3; // Height must be larger than width + + var h = Math.max(w, shape.height); + var r = w / 2; // Dist on y with tangent point and circle center + + var dy = r * r / (h - r); + var cy = y - h + r + dy; + var angle = Math.asin(dy / r); // Dist on x with tangent point and circle center + + var dx = Math.cos(angle) * r; + var tanX = Math.sin(angle); + var tanY = Math.cos(angle); + var cpLen = r * 0.6; + var cpLen2 = r * 0.7; + path.moveTo(x - dx, cy + dy); + path.arc(x, cy, r, Math.PI - angle, Math.PI * 2 + angle); + path.bezierCurveTo(x + dx - tanX * cpLen, cy + dy + tanY * cpLen, x, y - cpLen2, x, y); + path.bezierCurveTo(x, y - cpLen2, x - dx + tanX * cpLen, cy + dy + tanY * cpLen, x - dx, cy + dy); + path.closePath(); + } + }); + /** + * Arrow shape + * @inner + */ + + var Arrow = Path.extend({ + type: 'arrow', + shape: { + x: 0, + y: 0, + width: 0, + height: 0 + }, + buildPath: function (ctx, shape) { + var height = shape.height; + var width = shape.width; + var x = shape.x; + var y = shape.y; + var dx = width / 3 * 2; + ctx.moveTo(x, y); + ctx.lineTo(x + dx, y + height); + ctx.lineTo(x, y + height / 4 * 3); + ctx.lineTo(x - dx, y + height); + ctx.lineTo(x, y); + ctx.closePath(); + } + }); + /** + * Map of path contructors + */ + // TODO Use function to build symbol path. + + var symbolCtors = { + line: Line, + rect: Rect, + roundRect: Rect, + square: Rect, + circle: Circle, + diamond: Diamond, + pin: Pin, + arrow: Arrow, + triangle: Triangle + }; + var symbolShapeMakers = { + line: function (x, y, w, h, shape) { + shape.x1 = x; + shape.y1 = y + h / 2; + shape.x2 = x + w; + shape.y2 = y + h / 2; + }, + rect: function (x, y, w, h, shape) { + shape.x = x; + shape.y = y; + shape.width = w; + shape.height = h; + }, + roundRect: function (x, y, w, h, shape) { + shape.x = x; + shape.y = y; + shape.width = w; + shape.height = h; + shape.r = Math.min(w, h) / 4; + }, + square: function (x, y, w, h, shape) { + var size = Math.min(w, h); + shape.x = x; + shape.y = y; + shape.width = size; + shape.height = size; + }, + circle: function (x, y, w, h, shape) { + // Put circle in the center of square + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.r = Math.min(w, h) / 2; + }, + diamond: function (x, y, w, h, shape) { + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.width = w; + shape.height = h; + }, + pin: function (x, y, w, h, shape) { + shape.x = x + w / 2; + shape.y = y + h / 2; + shape.width = w; + shape.height = h; + }, + arrow: function (x, y, w, h, shape) { + shape.x = x + w / 2; + shape.y = y + h / 2; + shape.width = w; + shape.height = h; + }, + triangle: function (x, y, w, h, shape) { + shape.cx = x + w / 2; + shape.cy = y + h / 2; + shape.width = w; + shape.height = h; + } + }; + var symbolBuildProxies = {}; + each(symbolCtors, function (Ctor, name) { + symbolBuildProxies[name] = new Ctor(); + }); + var SymbolClz = Path.extend({ + type: 'symbol', + shape: { + symbolType: '', + x: 0, + y: 0, + width: 0, + height: 0 + }, + calculateTextPosition: function (out, config, rect) { + var res = calculateTextPosition(out, config, rect); + var shape = this.shape; + + if (shape && shape.symbolType === 'pin' && config.position === 'inside') { + res.y = rect.y + rect.height * 0.4; + } + + return res; + }, + buildPath: function (ctx, shape, inBundle) { + var symbolType = shape.symbolType; + + if (symbolType !== 'none') { + var proxySymbol = symbolBuildProxies[symbolType]; + + if (!proxySymbol) { + // Default rect + symbolType = 'rect'; + proxySymbol = symbolBuildProxies[symbolType]; + } + + symbolShapeMakers[symbolType](shape.x, shape.y, shape.width, shape.height, proxySymbol.shape); + proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle); + } + } + }); // Provide setColor helper method to avoid determine if set the fill or stroke outside + + function symbolPathSetColor(color, innerColor) { + if (this.type !== 'image') { + var symbolStyle = this.style; + + if (this.__isEmptyBrush) { + symbolStyle.stroke = color; + symbolStyle.fill = innerColor || '#fff'; // TODO Same width with lineStyle in LineView + + symbolStyle.lineWidth = 2; + } else if (this.shape.symbolType === 'line') { + symbolStyle.stroke = color; + } else { + symbolStyle.fill = color; + } + + this.markRedraw(); + } + } + /** + * Create a symbol element with given symbol configuration: shape, x, y, width, height, color + */ + + + function createSymbol(symbolType, x, y, w, h, color, // whether to keep the ratio of w/h, + keepAspect) { + // TODO Support image object, DynamicImage. + var isEmpty = symbolType.indexOf('empty') === 0; + + if (isEmpty) { + symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6); + } + + var symbolPath; + + if (symbolType.indexOf('image://') === 0) { + symbolPath = makeImage(symbolType.slice(8), new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover'); + } else if (symbolType.indexOf('path://') === 0) { + symbolPath = makePath(symbolType.slice(7), {}, new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover'); + } else { + symbolPath = new SymbolClz({ + shape: { + symbolType: symbolType, + x: x, + y: y, + width: w, + height: h + } + }); + } + + symbolPath.__isEmptyBrush = isEmpty; // TODO Should deprecate setColor + + symbolPath.setColor = symbolPathSetColor; + + if (color) { + symbolPath.setColor(color); + } + + return symbolPath; + } + function normalizeSymbolSize(symbolSize) { + if (!isArray(symbolSize)) { + symbolSize = [+symbolSize, +symbolSize]; + } + + return [symbolSize[0] || 0, symbolSize[1] || 0]; + } + function normalizeSymbolOffset(symbolOffset, symbolSize) { + if (symbolOffset == null) { + return; + } + + if (!isArray(symbolOffset)) { + symbolOffset = [symbolOffset, symbolOffset]; + } + + return [parsePercent$1(symbolOffset[0], symbolSize[0]) || 0, parsePercent$1(retrieve2(symbolOffset[1], symbolOffset[0]), symbolSize[1]) || 0]; + } + + function createLinearGradient(ctx, obj, rect) { + var x = obj.x == null ? 0 : obj.x; + var x2 = obj.x2 == null ? 1 : obj.x2; + var y = obj.y == null ? 0 : obj.y; + var y2 = obj.y2 == null ? 0 : obj.y2; + if (!obj.global) { + x = x * rect.width + rect.x; + x2 = x2 * rect.width + rect.x; + y = y * rect.height + rect.y; + y2 = y2 * rect.height + rect.y; + } + x = isNaN(x) ? 0 : x; + x2 = isNaN(x2) ? 1 : x2; + y = isNaN(y) ? 0 : y; + y2 = isNaN(y2) ? 0 : y2; + var canvasGradient = ctx.createLinearGradient(x, y, x2, y2); + return canvasGradient; + } + function createRadialGradient(ctx, obj, rect) { + var width = rect.width; + var height = rect.height; + var min = Math.min(width, height); + var x = obj.x == null ? 0.5 : obj.x; + var y = obj.y == null ? 0.5 : obj.y; + var r = obj.r == null ? 0.5 : obj.r; + if (!obj.global) { + x = x * width + rect.x; + y = y * height + rect.y; + r = r * min; + } + var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r); + return canvasGradient; + } + function getCanvasGradient(ctx, obj, rect) { + var canvasGradient = obj.type === 'radial' + ? createRadialGradient(ctx, obj, rect) + : createLinearGradient(ctx, obj, rect); + var colorStops = obj.colorStops; + for (var i = 0; i < colorStops.length; i++) { + canvasGradient.addColorStop(colorStops[i].offset, colorStops[i].color); + } + return canvasGradient; + } + function isClipPathChanged(clipPaths, prevClipPaths) { + if (clipPaths === prevClipPaths || (!clipPaths && !prevClipPaths)) { + return false; + } + if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) { + return true; + } + for (var i = 0; i < clipPaths.length; i++) { + if (clipPaths[i] !== prevClipPaths[i]) { + return true; + } + } + return false; + } + + function normalizeLineDash(lineType, lineWidth) { + if (!lineType || lineType === 'solid' || !(lineWidth > 0)) { + return null; + } + lineWidth = lineWidth || 1; + return lineType === 'dashed' + ? [4 * lineWidth, 2 * lineWidth] + : lineType === 'dotted' + ? [lineWidth] + : isNumber(lineType) + ? [lineType] : isArray(lineType) ? lineType : null; + } + + var pathProxyForDraw = new PathProxy(true); + function styleHasStroke(style) { + var stroke = style.stroke; + return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0)); + } + function isValidStrokeFillStyle(strokeOrFill) { + return typeof strokeOrFill === 'string' && strokeOrFill !== 'none'; + } + function styleHasFill(style) { + var fill = style.fill; + return fill != null && fill !== 'none'; + } + function doFillPath(ctx, style) { + if (style.fillOpacity != null && style.fillOpacity !== 1) { + var originalGlobalAlpha = ctx.globalAlpha; + ctx.globalAlpha = style.fillOpacity * style.opacity; + ctx.fill(); + ctx.globalAlpha = originalGlobalAlpha; + } + else { + ctx.fill(); + } + } + function doStrokePath(ctx, style) { + if (style.strokeOpacity != null && style.strokeOpacity !== 1) { + var originalGlobalAlpha = ctx.globalAlpha; + ctx.globalAlpha = style.strokeOpacity * style.opacity; + ctx.stroke(); + ctx.globalAlpha = originalGlobalAlpha; + } + else { + ctx.stroke(); + } + } + function createCanvasPattern(ctx, pattern, el) { + var image = createOrUpdateImage(pattern.image, pattern.__image, el); + if (isImageReady(image)) { + var canvasPattern = ctx.createPattern(image, pattern.repeat || 'repeat'); + if (typeof DOMMatrix === 'function' + && canvasPattern.setTransform) { + var matrix = new DOMMatrix(); + matrix.rotateSelf(0, 0, (pattern.rotation || 0) / Math.PI * 180); + matrix.scaleSelf((pattern.scaleX || 1), (pattern.scaleY || 1)); + matrix.translateSelf((pattern.x || 0), (pattern.y || 0)); + canvasPattern.setTransform(matrix); + } + return canvasPattern; + } + } + function brushPath(ctx, el, style, inBatch) { + var hasStroke = styleHasStroke(style); + var hasFill = styleHasFill(style); + var strokePercent = style.strokePercent; + var strokePart = strokePercent < 1; + var firstDraw = !el.path; + if ((!el.silent || strokePart) && firstDraw) { + el.createPathProxy(); + } + var path = el.path || pathProxyForDraw; + if (!inBatch) { + var fill = style.fill; + var stroke = style.stroke; + var hasFillGradient = hasFill && !!fill.colorStops; + var hasStrokeGradient = hasStroke && !!stroke.colorStops; + var hasFillPattern = hasFill && !!fill.image; + var hasStrokePattern = hasStroke && !!stroke.image; + var fillGradient = void 0; + var strokeGradient = void 0; + var fillPattern = void 0; + var strokePattern = void 0; + var rect = void 0; + if (hasFillGradient || hasStrokeGradient) { + rect = el.getBoundingRect(); + } + if (hasFillGradient) { + fillGradient = el.__dirty + ? getCanvasGradient(ctx, fill, rect) + : el.__canvasFillGradient; + el.__canvasFillGradient = fillGradient; + } + if (hasStrokeGradient) { + strokeGradient = el.__dirty + ? getCanvasGradient(ctx, stroke, rect) + : el.__canvasStrokeGradient; + el.__canvasStrokeGradient = strokeGradient; + } + if (hasFillPattern) { + fillPattern = (el.__dirty || !el.__canvasFillPattern) + ? createCanvasPattern(ctx, fill, el) + : el.__canvasFillPattern; + el.__canvasFillPattern = fillPattern; + } + if (hasStrokePattern) { + strokePattern = (el.__dirty || !el.__canvasStrokePattern) + ? createCanvasPattern(ctx, stroke, el) + : el.__canvasStrokePattern; + el.__canvasStrokePattern = fillPattern; + } + if (hasFillGradient) { + ctx.fillStyle = fillGradient; + } + else if (hasFillPattern) { + if (fillPattern) { + ctx.fillStyle = fillPattern; + } + else { + hasFill = false; + } + } + if (hasStrokeGradient) { + ctx.strokeStyle = strokeGradient; + } + else if (hasStrokePattern) { + if (strokePattern) { + ctx.strokeStyle = strokePattern; + } + else { + hasStroke = false; + } + } + } + var lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth); + var lineDashOffset = style.lineDashOffset; + var ctxLineDash = !!ctx.setLineDash; + var scale = el.getGlobalScale(); + path.setScale(scale[0], scale[1], el.segmentIgnoreThreshold); + if (lineDash) { + var lineScale_1 = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1; + if (lineScale_1 && lineScale_1 !== 1) { + lineDash = map(lineDash, function (rawVal) { + return rawVal / lineScale_1; + }); + lineDashOffset /= lineScale_1; + } + } + var needsRebuild = true; + if (firstDraw || (el.__dirty & SHAPE_CHANGED_BIT) + || (lineDash && !ctxLineDash && hasStroke)) { + path.setDPR(ctx.dpr); + if (strokePart) { + path.setContext(null); + } + else { + path.setContext(ctx); + needsRebuild = false; + } + path.reset(); + if (lineDash && !ctxLineDash) { + path.setLineDash(lineDash); + path.setLineDashOffset(lineDashOffset); + } + el.buildPath(path, el.shape, inBatch); + path.toStatic(); + el.pathUpdated(); + } + if (needsRebuild) { + path.rebuildPath(ctx, strokePart ? strokePercent : 1); + } + if (lineDash && ctxLineDash) { + ctx.setLineDash(lineDash); + ctx.lineDashOffset = lineDashOffset; + } + if (!inBatch) { + if (style.strokeFirst) { + if (hasStroke) { + doStrokePath(ctx, style); + } + if (hasFill) { + doFillPath(ctx, style); + } + } + else { + if (hasFill) { + doFillPath(ctx, style); + } + if (hasStroke) { + doStrokePath(ctx, style); + } + } + } + if (lineDash && ctxLineDash) { + ctx.setLineDash([]); + } + } + function brushImage(ctx, el, style) { + var image = el.__image = createOrUpdateImage(style.image, el.__image, el, el.onload); + if (!image || !isImageReady(image)) { + return; + } + var x = style.x || 0; + var y = style.y || 0; + var width = el.getWidth(); + var height = el.getHeight(); + var aspect = image.width / image.height; + if (width == null && height != null) { + width = height * aspect; + } + else if (height == null && width != null) { + height = width / aspect; + } + else if (width == null && height == null) { + width = image.width; + height = image.height; + } + if (style.sWidth && style.sHeight) { + var sx = style.sx || 0; + var sy = style.sy || 0; + ctx.drawImage(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height); + } + else if (style.sx && style.sy) { + var sx = style.sx; + var sy = style.sy; + var sWidth = width - sx; + var sHeight = height - sy; + ctx.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height); + } + else { + ctx.drawImage(image, x, y, width, height); + } + } + function brushText(ctx, el, style) { + var text = style.text; + text != null && (text += ''); + if (text) { + ctx.font = style.font || DEFAULT_FONT; + ctx.textAlign = style.textAlign; + ctx.textBaseline = style.textBaseline; + var hasLineDash = void 0; + if (ctx.setLineDash) { + var lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth); + var lineDashOffset = style.lineDashOffset; + if (lineDash) { + var lineScale_2 = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1; + if (lineScale_2 && lineScale_2 !== 1) { + lineDash = map(lineDash, function (rawVal) { + return rawVal / lineScale_2; + }); + lineDashOffset /= lineScale_2; + } + ctx.setLineDash(lineDash); + ctx.lineDashOffset = lineDashOffset; + hasLineDash = true; + } + } + if (style.strokeFirst) { + if (styleHasStroke(style)) { + ctx.strokeText(text, style.x, style.y); + } + if (styleHasFill(style)) { + ctx.fillText(text, style.x, style.y); + } + } + else { + if (styleHasFill(style)) { + ctx.fillText(text, style.x, style.y); + } + if (styleHasStroke(style)) { + ctx.strokeText(text, style.x, style.y); + } + } + if (hasLineDash) { + ctx.setLineDash([]); + } + } + } + var SHADOW_NUMBER_PROPS = ['shadowBlur', 'shadowOffsetX', 'shadowOffsetY']; + var STROKE_PROPS = [ + ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10] + ]; + function bindCommonProps(ctx, style, prevStyle, forceSetAll, scope) { + var styleChanged = false; + if (!forceSetAll) { + prevStyle = prevStyle || {}; + if (style === prevStyle) { + return false; + } + } + if (forceSetAll || style.opacity !== prevStyle.opacity) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + var opacity = Math.max(Math.min(style.opacity, 1), 0); + ctx.globalAlpha = isNaN(opacity) ? DEFAULT_COMMON_STYLE.opacity : opacity; + } + if (forceSetAll || style.blend !== prevStyle.blend) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + ctx.globalCompositeOperation = style.blend || DEFAULT_COMMON_STYLE.blend; + } + for (var i = 0; i < SHADOW_NUMBER_PROPS.length; i++) { + var propName = SHADOW_NUMBER_PROPS[i]; + if (forceSetAll || style[propName] !== prevStyle[propName]) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + ctx[propName] = ctx.dpr * (style[propName] || 0); + } + } + if (forceSetAll || style.shadowColor !== prevStyle.shadowColor) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + ctx.shadowColor = style.shadowColor || DEFAULT_COMMON_STYLE.shadowColor; + } + return styleChanged; + } + function bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetAll, scope) { + var style = getStyle(el, scope.inHover); + var prevStyle = forceSetAll + ? null + : (prevEl && getStyle(prevEl, scope.inHover) || {}); + if (style === prevStyle) { + return false; + } + var styleChanged = bindCommonProps(ctx, style, prevStyle, forceSetAll, scope); + if (forceSetAll || style.fill !== prevStyle.fill) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + isValidStrokeFillStyle(style.fill) && (ctx.fillStyle = style.fill); + } + if (forceSetAll || style.stroke !== prevStyle.stroke) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + isValidStrokeFillStyle(style.stroke) && (ctx.strokeStyle = style.stroke); + } + if (forceSetAll || style.opacity !== prevStyle.opacity) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + ctx.globalAlpha = style.opacity == null ? 1 : style.opacity; + } + if (el.hasStroke()) { + var lineWidth = style.lineWidth; + var newLineWidth = lineWidth / ((style.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1); + if (ctx.lineWidth !== newLineWidth) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + ctx.lineWidth = newLineWidth; + } + } + for (var i = 0; i < STROKE_PROPS.length; i++) { + var prop = STROKE_PROPS[i]; + var propName = prop[0]; + if (forceSetAll || style[propName] !== prevStyle[propName]) { + if (!styleChanged) { + flushPathDrawn(ctx, scope); + styleChanged = true; + } + ctx[propName] = style[propName] || prop[1]; + } + } + return styleChanged; + } + function bindImageStyle(ctx, el, prevEl, forceSetAll, scope) { + return bindCommonProps(ctx, getStyle(el, scope.inHover), prevEl && getStyle(prevEl, scope.inHover), forceSetAll, scope); + } + function setContextTransform(ctx, el) { + var m = el.transform; + var dpr = ctx.dpr || 1; + if (m) { + ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]); + } + else { + ctx.setTransform(dpr, 0, 0, dpr, 0, 0); + } + } + function updateClipStatus(clipPaths, ctx, scope) { + var allClipped = false; + for (var i = 0; i < clipPaths.length; i++) { + var clipPath = clipPaths[i]; + allClipped = allClipped || clipPath.isZeroArea(); + setContextTransform(ctx, clipPath); + ctx.beginPath(); + clipPath.buildPath(ctx, clipPath.shape); + ctx.clip(); + } + scope.allClipped = allClipped; + } + function isTransformChanged(m0, m1) { + if (m0 && m1) { + return m0[0] !== m1[0] + || m0[1] !== m1[1] + || m0[2] !== m1[2] + || m0[3] !== m1[3] + || m0[4] !== m1[4] + || m0[5] !== m1[5]; + } + else if (!m0 && !m1) { + return false; + } + return true; + } + var DRAW_TYPE_PATH = 1; + var DRAW_TYPE_IMAGE = 2; + var DRAW_TYPE_TEXT = 3; + var DRAW_TYPE_INCREMENTAL = 4; + function canPathBatch(style) { + var hasFill = styleHasFill(style); + var hasStroke = styleHasStroke(style); + return !(style.lineDash + || !(+hasFill ^ +hasStroke) + || (hasFill && typeof style.fill !== 'string') + || (hasStroke && typeof style.stroke !== 'string') + || style.strokePercent < 1 + || style.strokeOpacity < 1 + || style.fillOpacity < 1); + } + function flushPathDrawn(ctx, scope) { + scope.batchFill && ctx.fill(); + scope.batchStroke && ctx.stroke(); + scope.batchFill = ''; + scope.batchStroke = ''; + } + function getStyle(el, inHover) { + return inHover ? (el.__hoverStyle || el.style) : el.style; + } + function brushSingle(ctx, el) { + brush(ctx, el, { inHover: false, viewWidth: 0, viewHeight: 0 }, true); + } + function brush(ctx, el, scope, isLast) { + var m = el.transform; + if (!el.shouldBePainted(scope.viewWidth, scope.viewHeight, false, false)) { + el.__dirty &= ~REDRAW_BIT; + el.__isRendered = false; + return; + } + var clipPaths = el.__clipPaths; + var prevElClipPaths = scope.prevElClipPaths; + var forceSetTransform = false; + var forceSetStyle = false; + if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) { + if (prevElClipPaths && prevElClipPaths.length) { + flushPathDrawn(ctx, scope); + ctx.restore(); + forceSetStyle = forceSetTransform = true; + scope.prevElClipPaths = null; + scope.allClipped = false; + scope.prevEl = null; + } + if (clipPaths && clipPaths.length) { + flushPathDrawn(ctx, scope); + ctx.save(); + updateClipStatus(clipPaths, ctx, scope); + forceSetTransform = true; + } + scope.prevElClipPaths = clipPaths; + } + if (scope.allClipped) { + el.__isRendered = false; + return; + } + el.beforeBrush && el.beforeBrush(); + el.innerBeforeBrush(); + var prevEl = scope.prevEl; + if (!prevEl) { + forceSetStyle = forceSetTransform = true; + } + var canBatchPath = el instanceof Path + && el.autoBatch + && canPathBatch(el.style); + if (forceSetTransform || isTransformChanged(m, prevEl.transform)) { + flushPathDrawn(ctx, scope); + setContextTransform(ctx, el); + } + else if (!canBatchPath) { + flushPathDrawn(ctx, scope); + } + var style = getStyle(el, scope.inHover); + if (el instanceof Path) { + if (scope.lastDrawType !== DRAW_TYPE_PATH) { + forceSetStyle = true; + scope.lastDrawType = DRAW_TYPE_PATH; + } + bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetStyle, scope); + if (!canBatchPath || (!scope.batchFill && !scope.batchStroke)) { + ctx.beginPath(); + } + brushPath(ctx, el, style, canBatchPath); + if (canBatchPath) { + scope.batchFill = style.fill || ''; + scope.batchStroke = style.stroke || ''; + } + } + else { + if (el instanceof TSpan) { + if (scope.lastDrawType !== DRAW_TYPE_TEXT) { + forceSetStyle = true; + scope.lastDrawType = DRAW_TYPE_TEXT; + } + bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetStyle, scope); + brushText(ctx, el, style); + } + else if (el instanceof ZRImage) { + if (scope.lastDrawType !== DRAW_TYPE_IMAGE) { + forceSetStyle = true; + scope.lastDrawType = DRAW_TYPE_IMAGE; + } + bindImageStyle(ctx, el, prevEl, forceSetStyle, scope); + brushImage(ctx, el, style); + } + else if (el instanceof IncrementalDisplayable) { + if (scope.lastDrawType !== DRAW_TYPE_INCREMENTAL) { + forceSetStyle = true; + scope.lastDrawType = DRAW_TYPE_INCREMENTAL; + } + brushIncremental(ctx, el, scope); + } + } + if (canBatchPath && isLast) { + flushPathDrawn(ctx, scope); + } + el.innerAfterBrush(); + el.afterBrush && el.afterBrush(); + scope.prevEl = el; + el.__dirty = 0; + el.__isRendered = true; + } + function brushIncremental(ctx, el, scope) { + var displayables = el.getDisplayables(); + var temporalDisplayables = el.getTemporalDisplayables(); + ctx.save(); + var innerScope = { + prevElClipPaths: null, + prevEl: null, + allClipped: false, + viewWidth: scope.viewWidth, + viewHeight: scope.viewHeight, + inHover: scope.inHover + }; + var i; + var len; + for (i = el.getCursor(), len = displayables.length; i < len; i++) { + var displayable = displayables[i]; + displayable.beforeBrush && displayable.beforeBrush(); + displayable.innerBeforeBrush(); + brush(ctx, displayable, innerScope, i === len - 1); + displayable.innerAfterBrush(); + displayable.afterBrush && displayable.afterBrush(); + innerScope.prevEl = displayable; + } + for (var i_1 = 0, len_1 = temporalDisplayables.length; i_1 < len_1; i_1++) { + var displayable = temporalDisplayables[i_1]; + displayable.beforeBrush && displayable.beforeBrush(); + displayable.innerBeforeBrush(); + brush(ctx, displayable, innerScope, i_1 === len_1 - 1); + displayable.innerAfterBrush(); + displayable.afterBrush && displayable.afterBrush(); + innerScope.prevEl = displayable; + } + el.clearTemporalDisplayables(); + el.notClear = true; + ctx.restore(); + } + + var decalMap = new WeakMap(); + var decalCache = new LRU(100); + var decalKeys = ['symbol', 'symbolSize', 'symbolKeepAspect', 'color', 'backgroundColor', 'dashArrayX', 'dashArrayY', 'maxTileWidth', 'maxTileHeight']; + /** + * Create or update pattern image from decal options + * + * @param {InnerDecalObject | 'none'} decalObject decal options, 'none' if no decal + * @return {Pattern} pattern with generated image, null if no decal + */ + + function createOrUpdatePatternFromDecal(decalObject, api) { + if (decalObject === 'none') { + return null; + } + + var dpr = api.getDevicePixelRatio(); + var zr = api.getZr(); + var isSVG = zr.painter.type === 'svg'; + + if (decalObject.dirty) { + decalMap["delete"](decalObject); + } + + var oldPattern = decalMap.get(decalObject); + + if (oldPattern) { + return oldPattern; + } + + var decalOpt = defaults(decalObject, { + symbol: 'rect', + symbolSize: 1, + symbolKeepAspect: true, + color: 'rgba(0, 0, 0, 0.2)', + backgroundColor: null, + dashArrayX: 5, + dashArrayY: 5, + rotation: 0, + maxTileWidth: 512, + maxTileHeight: 512 + }); + + if (decalOpt.backgroundColor === 'none') { + decalOpt.backgroundColor = null; + } + + var pattern = { + repeat: 'repeat' + }; + setPatternnSource(pattern); + pattern.rotation = decalOpt.rotation; + pattern.scaleX = pattern.scaleY = isSVG ? 1 : 1 / dpr; + decalMap.set(decalObject, pattern); + decalObject.dirty = false; + return pattern; + + function setPatternnSource(pattern) { + var keys = [dpr]; + var isValidKey = true; + + for (var i = 0; i < decalKeys.length; ++i) { + var value = decalOpt[decalKeys[i]]; + var valueType = typeof value; + + if (value != null && !isArray(value) && valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') { + isValidKey = false; + break; + } + + keys.push(value); + } + + var cacheKey; + + if (isValidKey) { + cacheKey = keys.join(',') + (isSVG ? '-svg' : ''); + var cache = decalCache.get(cacheKey); + + if (cache) { + isSVG ? pattern.svgElement = cache : pattern.image = cache; + } + } + + var dashArrayX = normalizeDashArrayX(decalOpt.dashArrayX); + var dashArrayY = normalizeDashArrayY(decalOpt.dashArrayY); + var symbolArray = normalizeSymbolArray(decalOpt.symbol); + var lineBlockLengthsX = getLineBlockLengthX(dashArrayX); + var lineBlockLengthY = getLineBlockLengthY(dashArrayY); + var canvas = !isSVG && createCanvas(); + var svgRoot = isSVG && zr.painter.createSVGElement('g'); + var pSize = getPatternSize(); + var ctx; + + if (canvas) { + canvas.width = pSize.width * dpr; + canvas.height = pSize.height * dpr; + ctx = canvas.getContext('2d'); + } + + brushDecal(); + + if (isValidKey) { + decalCache.put(cacheKey, canvas || svgRoot); + } + + pattern.image = canvas; + pattern.svgElement = svgRoot; + pattern.svgWidth = pSize.width; + pattern.svgHeight = pSize.height; + /** + * Get minumum length that can make a repeatable pattern. + * + * @return {Object} pattern width and height + */ + + function getPatternSize() { + /** + * For example, if dash is [[3, 2], [2, 1]] for X, it looks like + * |--- --- --- --- --- ... + * |-- -- -- -- -- -- -- -- ... + * |--- --- --- --- --- ... + * |-- -- -- -- -- -- -- -- ... + * So the minumum length of X is 15, + * which is the least common multiple of `3 + 2` and `2 + 1` + * |--- --- --- |--- --- ... + * |-- -- -- -- -- |-- -- -- ... + */ + var width = 1; + + for (var i = 0, xlen = lineBlockLengthsX.length; i < xlen; ++i) { + width = getLeastCommonMultiple(width, lineBlockLengthsX[i]); + } + + var symbolRepeats = 1; + + for (var i = 0, xlen = symbolArray.length; i < xlen; ++i) { + symbolRepeats = getLeastCommonMultiple(symbolRepeats, symbolArray[i].length); + } + + width *= symbolRepeats; + var height = lineBlockLengthY * lineBlockLengthsX.length * symbolArray.length; + + if ("development" !== 'production') { + var warn = function (attrName) { + /* eslint-disable-next-line */ + console.warn("Calculated decal size is greater than " + attrName + " due to decal option settings so " + attrName + " is used for the decal size. Please consider changing the decal option to make a smaller decal or set " + attrName + " to be larger to avoid incontinuity."); + }; + + if (width > decalOpt.maxTileWidth) { + warn('maxTileWidth'); + } + + if (height > decalOpt.maxTileHeight) { + warn('maxTileHeight'); + } + } + + return { + width: Math.max(1, Math.min(width, decalOpt.maxTileWidth)), + height: Math.max(1, Math.min(height, decalOpt.maxTileHeight)) + }; + } + + function brushDecal() { + if (ctx) { + ctx.clearRect(0, 0, canvas.width, canvas.height); + + if (decalOpt.backgroundColor) { + ctx.fillStyle = decalOpt.backgroundColor; + ctx.fillRect(0, 0, canvas.width, canvas.height); + } + } + + var ySum = 0; + + for (var i = 0; i < dashArrayY.length; ++i) { + ySum += dashArrayY[i]; + } + + if (ySum <= 0) { + // dashArrayY is 0, draw nothing + return; + } + + var y = -lineBlockLengthY; + var yId = 0; + var yIdTotal = 0; + var xId0 = 0; + + while (y < pSize.height) { + if (yId % 2 === 0) { + var symbolYId = yIdTotal / 2 % symbolArray.length; + var x = 0; + var xId1 = 0; + var xId1Total = 0; + + while (x < pSize.width * 2) { + var xSum = 0; + + for (var i = 0; i < dashArrayX[xId0].length; ++i) { + xSum += dashArrayX[xId0][i]; + } + + if (xSum <= 0) { + // Skip empty line + break; + } // E.g., [15, 5, 20, 5] draws only for 15 and 20 + + + if (xId1 % 2 === 0) { + var size = (1 - decalOpt.symbolSize) * 0.5; + var left = x + dashArrayX[xId0][xId1] * size; + var top_1 = y + dashArrayY[yId] * size; + var width = dashArrayX[xId0][xId1] * decalOpt.symbolSize; + var height = dashArrayY[yId] * decalOpt.symbolSize; + var symbolXId = xId1Total / 2 % symbolArray[symbolYId].length; + brushSymbol(left, top_1, width, height, symbolArray[symbolYId][symbolXId]); + } + + x += dashArrayX[xId0][xId1]; + ++xId1Total; + ++xId1; + + if (xId1 === dashArrayX[xId0].length) { + xId1 = 0; + } + } + + ++xId0; + + if (xId0 === dashArrayX.length) { + xId0 = 0; + } + } + + y += dashArrayY[yId]; + ++yIdTotal; + ++yId; + + if (yId === dashArrayY.length) { + yId = 0; + } + } + + function brushSymbol(x, y, width, height, symbolType) { + var scale = isSVG ? 1 : dpr; + var symbol = createSymbol(symbolType, x * scale, y * scale, width * scale, height * scale, decalOpt.color, decalOpt.symbolKeepAspect); + + if (isSVG) { + svgRoot.appendChild(zr.painter.paintOne(symbol)); + } else { + // Paint to canvas for all other renderers. + brushSingle(ctx, symbol); + } + } + } + } + } + /** + * Convert symbol array into normalized array + * + * @param {string | (string | string[])[]} symbol symbol input + * @return {string[][]} normolized symbol array + */ + + function normalizeSymbolArray(symbol) { + if (!symbol || symbol.length === 0) { + return [['rect']]; + } + + if (typeof symbol === 'string') { + return [[symbol]]; + } + + var isAllString = true; + + for (var i = 0; i < symbol.length; ++i) { + if (typeof symbol[i] !== 'string') { + isAllString = false; + break; + } + } + + if (isAllString) { + return normalizeSymbolArray([symbol]); + } + + var result = []; + + for (var i = 0; i < symbol.length; ++i) { + if (typeof symbol[i] === 'string') { + result.push([symbol[i]]); + } else { + result.push(symbol[i]); + } + } + + return result; + } + /** + * Convert dash input into dashArray + * + * @param {DecalDashArrayX} dash dash input + * @return {number[][]} normolized dash array + */ + + + function normalizeDashArrayX(dash) { + if (!dash || dash.length === 0) { + return [[0, 0]]; + } + + if (typeof dash === 'number') { + var dashValue = Math.ceil(dash); + return [[dashValue, dashValue]]; + } + /** + * [20, 5] should be normalized into [[20, 5]], + * while [20, [5, 10]] should be normalized into [[20, 20], [5, 10]] + */ + + + var isAllNumber = true; + + for (var i = 0; i < dash.length; ++i) { + if (typeof dash[i] !== 'number') { + isAllNumber = false; + break; + } + } + + if (isAllNumber) { + return normalizeDashArrayX([dash]); + } + + var result = []; + + for (var i = 0; i < dash.length; ++i) { + if (typeof dash[i] === 'number') { + var dashValue = Math.ceil(dash[i]); + result.push([dashValue, dashValue]); + } else { + var dashValue = map(dash[i], function (n) { + return Math.ceil(n); + }); + + if (dashValue.length % 2 === 1) { + // [4, 2, 1] means |---- - -- |---- - -- | + // so normalize it to be [4, 2, 1, 4, 2, 1] + result.push(dashValue.concat(dashValue)); + } else { + result.push(dashValue); + } + } + } + + return result; + } + /** + * Convert dash input into dashArray + * + * @param {DecalDashArrayY} dash dash input + * @return {number[]} normolized dash array + */ + + + function normalizeDashArrayY(dash) { + if (!dash || typeof dash === 'object' && dash.length === 0) { + return [0, 0]; + } + + if (typeof dash === 'number') { + var dashValue_1 = Math.ceil(dash); + return [dashValue_1, dashValue_1]; + } + + var dashValue = map(dash, function (n) { + return Math.ceil(n); + }); + return dash.length % 2 ? dashValue.concat(dashValue) : dashValue; + } + /** + * Get block length of each line. A block is the length of dash line and space. + * For example, a line with [4, 1] has a dash line of 4 and a space of 1 after + * that, so the block length of this line is 5. + * + * @param {number[][]} dash dash arrary of X or Y + * @return {number[]} block length of each line + */ + + + function getLineBlockLengthX(dash) { + return map(dash, function (line) { + return getLineBlockLengthY(line); + }); + } + + function getLineBlockLengthY(dash) { + var blockLength = 0; + + for (var i = 0; i < dash.length; ++i) { + blockLength += dash[i]; + } + + if (dash.length % 2 === 1) { + // [4, 2, 1] means |---- - -- |---- - -- | + // So total length is (4 + 2 + 1) * 2 + return blockLength * 2; + } + + return blockLength; + } + + function decalVisual(ecModel, api) { + ecModel.eachRawSeries(function (seriesModel) { + if (ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + var data = seriesModel.getData(); + + if (data.hasItemVisual()) { + data.each(function (idx) { + var decal = data.getItemVisual(idx, 'decal'); + + if (decal) { + var itemStyle = data.ensureUniqueItemVisual(idx, 'style'); + itemStyle.decal = createOrUpdatePatternFromDecal(decal, api); + } + }); + } + + var decal = data.getVisual('decal'); + + if (decal) { + var style = data.getVisual('style'); + style.decal = createOrUpdatePatternFromDecal(decal, api); + } + }); + } + + function parseXML(svg) { + if (isString(svg)) { + var parser = new DOMParser(); + svg = parser.parseFromString(svg, 'text/xml'); + } + var svgNode = svg; + if (svgNode.nodeType === 9) { + svgNode = svgNode.firstChild; + } + while (svgNode.nodeName.toLowerCase() !== 'svg' || svgNode.nodeType !== 1) { + svgNode = svgNode.nextSibling; + } + return svgNode; + } + + var nodeParsers; + var INHERITABLE_STYLE_ATTRIBUTES_MAP = { + 'fill': 'fill', + 'stroke': 'stroke', + 'stroke-width': 'lineWidth', + 'opacity': 'opacity', + 'fill-opacity': 'fillOpacity', + 'stroke-opacity': 'strokeOpacity', + 'stroke-dasharray': 'lineDash', + 'stroke-dashoffset': 'lineDashOffset', + 'stroke-linecap': 'lineCap', + 'stroke-linejoin': 'lineJoin', + 'stroke-miterlimit': 'miterLimit', + 'font-family': 'fontFamily', + 'font-size': 'fontSize', + 'font-style': 'fontStyle', + 'font-weight': 'fontWeight', + 'text-anchor': 'textAlign', + 'visibility': 'visibility', + 'display': 'display' + }; + var INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS = keys(INHERITABLE_STYLE_ATTRIBUTES_MAP); + var SELF_STYLE_ATTRIBUTES_MAP = { + 'alignment-baseline': 'textBaseline', + 'stop-color': 'stopColor' + }; + var SELF_STYLE_ATTRIBUTES_MAP_KEYS = keys(SELF_STYLE_ATTRIBUTES_MAP); + var SVGParser = (function () { + function SVGParser() { + this._defs = {}; + this._root = null; + } + SVGParser.prototype.parse = function (xml, opt) { + opt = opt || {}; + var svg = parseXML(xml); + if (!svg) { + throw new Error('Illegal svg'); + } + this._defsUsePending = []; + var root = new Group(); + this._root = root; + var named = []; + var viewBox = svg.getAttribute('viewBox') || ''; + var width = parseFloat((svg.getAttribute('width') || opt.width)); + var height = parseFloat((svg.getAttribute('height') || opt.height)); + isNaN(width) && (width = null); + isNaN(height) && (height = null); + parseAttributes(svg, root, null, true, false); + var child = svg.firstChild; + while (child) { + this._parseNode(child, root, named, null, false, false); + child = child.nextSibling; + } + applyDefs(this._defs, this._defsUsePending); + this._defsUsePending = []; + var viewBoxRect; + var viewBoxTransform; + if (viewBox) { + var viewBoxArr = splitNumberSequence(viewBox); + if (viewBoxArr.length >= 4) { + viewBoxRect = { + x: parseFloat((viewBoxArr[0] || 0)), + y: parseFloat((viewBoxArr[1] || 0)), + width: parseFloat(viewBoxArr[2]), + height: parseFloat(viewBoxArr[3]) + }; + } + } + if (viewBoxRect && width != null && height != null) { + viewBoxTransform = makeViewBoxTransform(viewBoxRect, { x: 0, y: 0, width: width, height: height }); + if (!opt.ignoreViewBox) { + var elRoot = root; + root = new Group(); + root.add(elRoot); + elRoot.scaleX = elRoot.scaleY = viewBoxTransform.scale; + elRoot.x = viewBoxTransform.x; + elRoot.y = viewBoxTransform.y; + } + } + if (!opt.ignoreRootClip && width != null && height != null) { + root.setClipPath(new Rect({ + shape: { x: 0, y: 0, width: width, height: height } + })); + } + return { + root: root, + width: width, + height: height, + viewBoxRect: viewBoxRect, + viewBoxTransform: viewBoxTransform, + named: named + }; + }; + SVGParser.prototype._parseNode = function (xmlNode, parentGroup, named, namedFrom, isInDefs, isInText) { + var nodeName = xmlNode.nodeName.toLowerCase(); + var el; + var namedFromForSub = namedFrom; + if (nodeName === 'defs') { + isInDefs = true; + } + if (nodeName === 'text') { + isInText = true; + } + if (nodeName === 'defs' || nodeName === 'switch') { + el = parentGroup; + } + else { + if (!isInDefs) { + var parser_1 = nodeParsers[nodeName]; + if (parser_1 && hasOwn(nodeParsers, nodeName)) { + el = parser_1.call(this, xmlNode, parentGroup); + var nameAttr = xmlNode.getAttribute('name'); + if (nameAttr) { + var newNamed = { + name: nameAttr, + namedFrom: null, + svgNodeTagLower: nodeName, + el: el + }; + named.push(newNamed); + if (nodeName === 'g') { + namedFromForSub = newNamed; + } + } + else if (namedFrom) { + named.push({ + name: namedFrom.name, + namedFrom: namedFrom, + svgNodeTagLower: nodeName, + el: el + }); + } + parentGroup.add(el); + } + } + var parser = paintServerParsers[nodeName]; + if (parser && hasOwn(paintServerParsers, nodeName)) { + var def = parser.call(this, xmlNode); + var id = xmlNode.getAttribute('id'); + if (id) { + this._defs[id] = def; + } + } + } + if (el && el.isGroup) { + var child = xmlNode.firstChild; + while (child) { + if (child.nodeType === 1) { + this._parseNode(child, el, named, namedFromForSub, isInDefs, isInText); + } + else if (child.nodeType === 3 && isInText) { + this._parseText(child, el); + } + child = child.nextSibling; + } + } + }; + SVGParser.prototype._parseText = function (xmlNode, parentGroup) { + var text = new TSpan({ + style: { + text: xmlNode.textContent + }, + silent: true, + x: this._textX || 0, + y: this._textY || 0 + }); + inheritStyle(parentGroup, text); + parseAttributes(xmlNode, text, this._defsUsePending, false, false); + applyTextAlignment(text, parentGroup); + var textStyle = text.style; + var fontSize = textStyle.fontSize; + if (fontSize && fontSize < 9) { + textStyle.fontSize = 9; + text.scaleX *= fontSize / 9; + text.scaleY *= fontSize / 9; + } + var font = (textStyle.fontSize || textStyle.fontFamily) && [ + textStyle.fontStyle, + textStyle.fontWeight, + (textStyle.fontSize || 12) + 'px', + textStyle.fontFamily || 'sans-serif' + ].join(' '); + textStyle.font = font; + var rect = text.getBoundingRect(); + this._textX += rect.width; + parentGroup.add(text); + return text; + }; + SVGParser.internalField = (function () { + nodeParsers = { + 'g': function (xmlNode, parentGroup) { + var g = new Group(); + inheritStyle(parentGroup, g); + parseAttributes(xmlNode, g, this._defsUsePending, false, false); + return g; + }, + 'rect': function (xmlNode, parentGroup) { + var rect = new Rect(); + inheritStyle(parentGroup, rect); + parseAttributes(xmlNode, rect, this._defsUsePending, false, false); + rect.setShape({ + x: parseFloat(xmlNode.getAttribute('x') || '0'), + y: parseFloat(xmlNode.getAttribute('y') || '0'), + width: parseFloat(xmlNode.getAttribute('width') || '0'), + height: parseFloat(xmlNode.getAttribute('height') || '0') + }); + rect.silent = true; + return rect; + }, + 'circle': function (xmlNode, parentGroup) { + var circle = new Circle(); + inheritStyle(parentGroup, circle); + parseAttributes(xmlNode, circle, this._defsUsePending, false, false); + circle.setShape({ + cx: parseFloat(xmlNode.getAttribute('cx') || '0'), + cy: parseFloat(xmlNode.getAttribute('cy') || '0'), + r: parseFloat(xmlNode.getAttribute('r') || '0') + }); + circle.silent = true; + return circle; + }, + 'line': function (xmlNode, parentGroup) { + var line = new Line(); + inheritStyle(parentGroup, line); + parseAttributes(xmlNode, line, this._defsUsePending, false, false); + line.setShape({ + x1: parseFloat(xmlNode.getAttribute('x1') || '0'), + y1: parseFloat(xmlNode.getAttribute('y1') || '0'), + x2: parseFloat(xmlNode.getAttribute('x2') || '0'), + y2: parseFloat(xmlNode.getAttribute('y2') || '0') + }); + line.silent = true; + return line; + }, + 'ellipse': function (xmlNode, parentGroup) { + var ellipse = new Ellipse(); + inheritStyle(parentGroup, ellipse); + parseAttributes(xmlNode, ellipse, this._defsUsePending, false, false); + ellipse.setShape({ + cx: parseFloat(xmlNode.getAttribute('cx') || '0'), + cy: parseFloat(xmlNode.getAttribute('cy') || '0'), + rx: parseFloat(xmlNode.getAttribute('rx') || '0'), + ry: parseFloat(xmlNode.getAttribute('ry') || '0') + }); + ellipse.silent = true; + return ellipse; + }, + 'polygon': function (xmlNode, parentGroup) { + var pointsStr = xmlNode.getAttribute('points'); + var pointsArr; + if (pointsStr) { + pointsArr = parsePoints(pointsStr); + } + var polygon = new Polygon({ + shape: { + points: pointsArr || [] + }, + silent: true + }); + inheritStyle(parentGroup, polygon); + parseAttributes(xmlNode, polygon, this._defsUsePending, false, false); + return polygon; + }, + 'polyline': function (xmlNode, parentGroup) { + var pointsStr = xmlNode.getAttribute('points'); + var pointsArr; + if (pointsStr) { + pointsArr = parsePoints(pointsStr); + } + var polyline = new Polyline({ + shape: { + points: pointsArr || [] + }, + silent: true + }); + inheritStyle(parentGroup, polyline); + parseAttributes(xmlNode, polyline, this._defsUsePending, false, false); + return polyline; + }, + 'image': function (xmlNode, parentGroup) { + var img = new ZRImage(); + inheritStyle(parentGroup, img); + parseAttributes(xmlNode, img, this._defsUsePending, false, false); + img.setStyle({ + image: xmlNode.getAttribute('xlink:href') || xmlNode.getAttribute('href'), + x: +xmlNode.getAttribute('x'), + y: +xmlNode.getAttribute('y'), + width: +xmlNode.getAttribute('width'), + height: +xmlNode.getAttribute('height') + }); + img.silent = true; + return img; + }, + 'text': function (xmlNode, parentGroup) { + var x = xmlNode.getAttribute('x') || '0'; + var y = xmlNode.getAttribute('y') || '0'; + var dx = xmlNode.getAttribute('dx') || '0'; + var dy = xmlNode.getAttribute('dy') || '0'; + this._textX = parseFloat(x) + parseFloat(dx); + this._textY = parseFloat(y) + parseFloat(dy); + var g = new Group(); + inheritStyle(parentGroup, g); + parseAttributes(xmlNode, g, this._defsUsePending, false, true); + return g; + }, + 'tspan': function (xmlNode, parentGroup) { + var x = xmlNode.getAttribute('x'); + var y = xmlNode.getAttribute('y'); + if (x != null) { + this._textX = parseFloat(x); + } + if (y != null) { + this._textY = parseFloat(y); + } + var dx = xmlNode.getAttribute('dx') || '0'; + var dy = xmlNode.getAttribute('dy') || '0'; + var g = new Group(); + inheritStyle(parentGroup, g); + parseAttributes(xmlNode, g, this._defsUsePending, false, true); + this._textX += parseFloat(dx); + this._textY += parseFloat(dy); + return g; + }, + 'path': function (xmlNode, parentGroup) { + var d = xmlNode.getAttribute('d') || ''; + var path = createFromString(d); + inheritStyle(parentGroup, path); + parseAttributes(xmlNode, path, this._defsUsePending, false, false); + path.silent = true; + return path; + } + }; + })(); + return SVGParser; + }()); + var paintServerParsers = { + 'lineargradient': function (xmlNode) { + var x1 = parseInt(xmlNode.getAttribute('x1') || '0', 10); + var y1 = parseInt(xmlNode.getAttribute('y1') || '0', 10); + var x2 = parseInt(xmlNode.getAttribute('x2') || '10', 10); + var y2 = parseInt(xmlNode.getAttribute('y2') || '0', 10); + var gradient = new LinearGradient(x1, y1, x2, y2); + parsePaintServerUnit(xmlNode, gradient); + parseGradientColorStops(xmlNode, gradient); + return gradient; + }, + 'radialgradient': function (xmlNode) { + var cx = parseInt(xmlNode.getAttribute('cx') || '0', 10); + var cy = parseInt(xmlNode.getAttribute('cy') || '0', 10); + var r = parseInt(xmlNode.getAttribute('r') || '0', 10); + var gradient = new RadialGradient(cx, cy, r); + parsePaintServerUnit(xmlNode, gradient); + parseGradientColorStops(xmlNode, gradient); + return gradient; + } + }; + function parsePaintServerUnit(xmlNode, gradient) { + var gradientUnits = xmlNode.getAttribute('gradientUnits'); + if (gradientUnits === 'userSpaceOnUse') { + gradient.global = true; + } + } + function parseGradientColorStops(xmlNode, gradient) { + var stop = xmlNode.firstChild; + while (stop) { + if (stop.nodeType === 1 + && stop.nodeName.toLocaleLowerCase() === 'stop') { + var offsetStr = stop.getAttribute('offset'); + var offset = void 0; + if (offsetStr && offsetStr.indexOf('%') > 0) { + offset = parseInt(offsetStr, 10) / 100; + } + else if (offsetStr) { + offset = parseFloat(offsetStr); + } + else { + offset = 0; + } + var styleVals = {}; + parseInlineStyle(stop, styleVals, styleVals); + var stopColor = styleVals.stopColor + || stop.getAttribute('stop-color') + || '#000000'; + gradient.colorStops.push({ + offset: offset, + color: stopColor + }); + } + stop = stop.nextSibling; + } + } + function inheritStyle(parent, child) { + if (parent && parent.__inheritedStyle) { + if (!child.__inheritedStyle) { + child.__inheritedStyle = {}; + } + defaults(child.__inheritedStyle, parent.__inheritedStyle); + } + } + function parsePoints(pointsString) { + var list = splitNumberSequence(pointsString); + var points = []; + for (var i = 0; i < list.length; i += 2) { + var x = parseFloat(list[i]); + var y = parseFloat(list[i + 1]); + points.push([x, y]); + } + return points; + } + function parseAttributes(xmlNode, el, defsUsePending, onlyInlineStyle, isTextGroup) { + var disp = el; + var inheritedStyle = disp.__inheritedStyle = disp.__inheritedStyle || {}; + var selfStyle = {}; + if (xmlNode.nodeType === 1) { + parseTransformAttribute(xmlNode, el); + parseInlineStyle(xmlNode, inheritedStyle, selfStyle); + if (!onlyInlineStyle) { + parseAttributeStyle(xmlNode, inheritedStyle, selfStyle); + } + } + disp.style = disp.style || {}; + if (inheritedStyle.fill != null) { + disp.style.fill = getFillStrokeStyle(disp, 'fill', inheritedStyle.fill, defsUsePending); + } + if (inheritedStyle.stroke != null) { + disp.style.stroke = getFillStrokeStyle(disp, 'stroke', inheritedStyle.stroke, defsUsePending); + } + each([ + 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize' + ], function (propName) { + if (inheritedStyle[propName] != null) { + disp.style[propName] = parseFloat(inheritedStyle[propName]); + } + }); + each([ + 'lineDashOffset', 'lineCap', 'lineJoin', 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign' + ], function (propName) { + if (inheritedStyle[propName] != null) { + disp.style[propName] = inheritedStyle[propName]; + } + }); + if (isTextGroup) { + disp.__selfStyle = selfStyle; + } + if (inheritedStyle.lineDash) { + disp.style.lineDash = map(splitNumberSequence(inheritedStyle.lineDash), function (str) { + return parseFloat(str); + }); + } + if (inheritedStyle.visibility === 'hidden' || inheritedStyle.visibility === 'collapse') { + disp.invisible = true; + } + if (inheritedStyle.display === 'none') { + disp.ignore = true; + } + } + function applyTextAlignment(text, parentGroup) { + var parentSelfStyle = parentGroup.__selfStyle; + if (parentSelfStyle) { + var textBaseline = parentSelfStyle.textBaseline; + var zrTextBaseline = textBaseline; + if (!textBaseline || textBaseline === 'auto') { + zrTextBaseline = 'alphabetic'; + } + else if (textBaseline === 'baseline') { + zrTextBaseline = 'alphabetic'; + } + else if (textBaseline === 'before-edge' || textBaseline === 'text-before-edge') { + zrTextBaseline = 'top'; + } + else if (textBaseline === 'after-edge' || textBaseline === 'text-after-edge') { + zrTextBaseline = 'bottom'; + } + else if (textBaseline === 'central' || textBaseline === 'mathematical') { + zrTextBaseline = 'middle'; + } + text.style.textBaseline = zrTextBaseline; + } + var parentInheritedStyle = parentGroup.__inheritedStyle; + if (parentInheritedStyle) { + var textAlign = parentInheritedStyle.textAlign; + var zrTextAlign = textAlign; + if (textAlign) { + if (textAlign === 'middle') { + zrTextAlign = 'center'; + } + text.style.textAlign = zrTextAlign; + } + } + } + var urlRegex = /^url\(\s*#(.*?)\)/; + function getFillStrokeStyle(el, method, str, defsUsePending) { + var urlMatch = str && str.match(urlRegex); + if (urlMatch) { + var url = trim(urlMatch[1]); + defsUsePending.push([el, method, url]); + return; + } + if (str === 'none') { + str = null; + } + return str; + } + function applyDefs(defs, defsUsePending) { + for (var i = 0; i < defsUsePending.length; i++) { + var item = defsUsePending[i]; + item[0].style[item[1]] = defs[item[2]]; + } + } + var numberReg$1 = /-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g; + function splitNumberSequence(rawStr) { + return rawStr.match(numberReg$1) || []; + } + var transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\(([\-\s0-9\.eE,]*)\)/g; + var DEGREE_TO_ANGLE = Math.PI / 180; + function parseTransformAttribute(xmlNode, node) { + var transform = xmlNode.getAttribute('transform'); + if (transform) { + transform = transform.replace(/,/g, ' '); + var transformOps_1 = []; + var mt = null; + transform.replace(transformRegex, function (str, type, value) { + transformOps_1.push(type, value); + return ''; + }); + for (var i = transformOps_1.length - 1; i > 0; i -= 2) { + var value = transformOps_1[i]; + var type = transformOps_1[i - 1]; + var valueArr = splitNumberSequence(value); + mt = mt || create$1(); + switch (type) { + case 'translate': + translate(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || '0')]); + break; + case 'scale': + scale$1(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || valueArr[0])]); + break; + case 'rotate': + rotate(mt, mt, -parseFloat(valueArr[0]) * DEGREE_TO_ANGLE); + break; + case 'skewX': + var sx = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE); + mul$1(mt, [1, 0, sx, 1, 0, 0], mt); + break; + case 'skewY': + var sy = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE); + mul$1(mt, [1, sy, 0, 1, 0, 0], mt); + break; + case 'matrix': + mt[0] = parseFloat(valueArr[0]); + mt[1] = parseFloat(valueArr[1]); + mt[2] = parseFloat(valueArr[2]); + mt[3] = parseFloat(valueArr[3]); + mt[4] = parseFloat(valueArr[4]); + mt[5] = parseFloat(valueArr[5]); + break; + } + } + node.setLocalTransform(mt); + } + } + var styleRegex = /([^\s:;]+)\s*:\s*([^:;]+)/g; + function parseInlineStyle(xmlNode, inheritableStyleResult, selfStyleResult) { + var style = xmlNode.getAttribute('style'); + if (!style) { + return; + } + styleRegex.lastIndex = 0; + var styleRegResult; + while ((styleRegResult = styleRegex.exec(style)) != null) { + var svgStlAttr = styleRegResult[1]; + var zrInheritableStlAttr = hasOwn(INHERITABLE_STYLE_ATTRIBUTES_MAP, svgStlAttr) + ? INHERITABLE_STYLE_ATTRIBUTES_MAP[svgStlAttr] + : null; + if (zrInheritableStlAttr) { + inheritableStyleResult[zrInheritableStlAttr] = styleRegResult[2]; + } + var zrSelfStlAttr = hasOwn(SELF_STYLE_ATTRIBUTES_MAP, svgStlAttr) + ? SELF_STYLE_ATTRIBUTES_MAP[svgStlAttr] + : null; + if (zrSelfStlAttr) { + selfStyleResult[zrSelfStlAttr] = styleRegResult[2]; + } + } + } + function parseAttributeStyle(xmlNode, inheritableStyleResult, selfStyleResult) { + for (var i = 0; i < INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) { + var svgAttrName = INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS[i]; + var attrValue = xmlNode.getAttribute(svgAttrName); + if (attrValue != null) { + inheritableStyleResult[INHERITABLE_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue; + } + } + for (var i = 0; i < SELF_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) { + var svgAttrName = SELF_STYLE_ATTRIBUTES_MAP_KEYS[i]; + var attrValue = xmlNode.getAttribute(svgAttrName); + if (attrValue != null) { + selfStyleResult[SELF_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue; + } + } + } + function makeViewBoxTransform(viewBoxRect, boundingRect) { + var scaleX = boundingRect.width / viewBoxRect.width; + var scaleY = boundingRect.height / viewBoxRect.height; + var scale = Math.min(scaleX, scaleY); + return { + scale: scale, + x: -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2), + y: -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2) + }; + } + function parseSVG(xml, opt) { + var parser = new SVGParser(); + return parser.parse(xml, opt); + } + + var EPSILON$3 = 1e-8; + function isAroundEqual$1(a, b) { + return Math.abs(a - b) < EPSILON$3; + } + function contain$1(points, x, y) { + var w = 0; + var p = points[0]; + if (!p) { + return false; + } + for (var i = 1; i < points.length; i++) { + var p2 = points[i]; + w += windingLine(p[0], p[1], p2[0], p2[1], x, y); + p = p2; + } + var p0 = points[0]; + if (!isAroundEqual$1(p[0], p0[0]) || !isAroundEqual$1(p[1], p0[1])) { + w += windingLine(p[0], p[1], p0[0], p0[1], x, y); + } + return w !== 0; + } + + var TMP_TRANSFORM = []; + + var Region = + /** @class */ + function () { + function Region(name) { + this.name = name; + } + /** + * Get center point in data unit. That is, + * for GeoJSONRegion, the unit is lat/lng, + * for GeoSVGRegion, the unit is SVG local coord. + */ + + + Region.prototype.getCenter = function () { + return; + }; + + return Region; + }(); + + var GeoJSONRegion = + /** @class */ + function (_super) { + __extends(GeoJSONRegion, _super); + + function GeoJSONRegion(name, geometries, cp) { + var _this = _super.call(this, name) || this; + + _this.type = 'geoJSON'; + _this.geometries = geometries; + + if (!cp) { + var rect = _this.getBoundingRect(); + + cp = [rect.x + rect.width / 2, rect.y + rect.height / 2]; + } else { + cp = [cp[0], cp[1]]; + } + + _this._center = cp; + return _this; + } + + GeoJSONRegion.prototype.getBoundingRect = function () { + var rect = this._rect; + + if (rect) { + return rect; + } + + var MAX_NUMBER = Number.MAX_VALUE; + var min$1 = [MAX_NUMBER, MAX_NUMBER]; + var max$1 = [-MAX_NUMBER, -MAX_NUMBER]; + var min2 = []; + var max2 = []; + var geometries = this.geometries; + var i = 0; + + for (; i < geometries.length; i++) { + // Only support polygon + if (geometries[i].type !== 'polygon') { + continue; + } // Doesn't consider hole + + + var exterior = geometries[i].exterior; + fromPoints(exterior, min2, max2); + min(min$1, min$1, min2); + max(max$1, max$1, max2); + } // No data + + + if (i === 0) { + min$1[0] = min$1[1] = max$1[0] = max$1[1] = 0; + } + + return this._rect = new BoundingRect(min$1[0], min$1[1], max$1[0] - min$1[0], max$1[1] - min$1[1]); + }; + + GeoJSONRegion.prototype.contain = function (coord) { + var rect = this.getBoundingRect(); + var geometries = this.geometries; + + if (!rect.contain(coord[0], coord[1])) { + return false; + } + + loopGeo: for (var i = 0, len = geometries.length; i < len; i++) { + // Only support polygon. + if (geometries[i].type !== 'polygon') { + continue; + } + + var exterior = geometries[i].exterior; + var interiors = geometries[i].interiors; + + if (contain$1(exterior, coord[0], coord[1])) { + // Not in the region if point is in the hole. + for (var k = 0; k < (interiors ? interiors.length : 0); k++) { + if (contain$1(interiors[k], coord[0], coord[1])) { + continue loopGeo; + } + } + + return true; + } + } + + return false; + }; + + GeoJSONRegion.prototype.transformTo = function (x, y, width, height) { + var rect = this.getBoundingRect(); + var aspect = rect.width / rect.height; + + if (!width) { + width = aspect * height; + } else if (!height) { + height = width / aspect; + } + + var target = new BoundingRect(x, y, width, height); + var transform = rect.calculateTransform(target); + var geometries = this.geometries; + + for (var i = 0; i < geometries.length; i++) { + // Only support polygon. + if (geometries[i].type !== 'polygon') { + continue; + } + + var exterior = geometries[i].exterior; + var interiors = geometries[i].interiors; + + for (var p = 0; p < exterior.length; p++) { + applyTransform(exterior[p], exterior[p], transform); + } + + for (var h = 0; h < (interiors ? interiors.length : 0); h++) { + for (var p = 0; p < interiors[h].length; p++) { + applyTransform(interiors[h][p], interiors[h][p], transform); + } + } + } + + rect = this._rect; + rect.copy(target); // Update center + + this._center = [rect.x + rect.width / 2, rect.y + rect.height / 2]; + }; + + GeoJSONRegion.prototype.cloneShallow = function (name) { + name == null && (name = this.name); + var newRegion = new GeoJSONRegion(name, this.geometries, this._center); + newRegion._rect = this._rect; + newRegion.transformTo = null; // Simply avoid to be called. + + return newRegion; + }; + + GeoJSONRegion.prototype.getCenter = function () { + return this._center; + }; + + GeoJSONRegion.prototype.setCenter = function (center) { + this._center = center; + }; + + return GeoJSONRegion; + }(Region); + + var GeoSVGRegion = + /** @class */ + function (_super) { + __extends(GeoSVGRegion, _super); + + function GeoSVGRegion(name, elOnlyForCalculate) { + var _this = _super.call(this, name) || this; + + _this.type = 'geoSVG'; + _this._elOnlyForCalculate = elOnlyForCalculate; + return _this; + } + + GeoSVGRegion.prototype.getCenter = function () { + var center = this._center; + + if (!center) { + // In most cases there are no need to calculate this center. + // So calculate only when called. + center = this._center = this._calculateCenter(); + } + + return center; + }; + + GeoSVGRegion.prototype._calculateCenter = function () { + var el = this._elOnlyForCalculate; + var rect = el.getBoundingRect(); + var center = [rect.x + rect.width / 2, rect.y + rect.height / 2]; + var mat = identity(TMP_TRANSFORM); + var target = el; + + while (target && !target.isGeoSVGGraphicRoot) { + mul$1(mat, target.getLocalTransform(), mat); + target = target.parent; + } + + invert(mat, mat); + applyTransform(center, center, mat); + return center; + }; + + return GeoSVGRegion; + }(Region); + + /** + * "region available" means that: enable users to set attribute `name="xxx"` on those tags + * to make it be a region. + * 1. region styles and its label styles can be defined in echarts opton: + * ```js + * geo: { + * regions: [{ + * name: 'xxx', + * itemStyle: { ... }, + * label: { ... } + * }, { + * ... + * }, + * ...] + * }; + * ``` + * 2. name can be duplicated in different SVG tag. All of the tags with the same name share + * a region option. For exampel if there are two representing two lung lobes. They have + * no common parents but both of them need to display label "lung" inside. + */ + + var REGION_AVAILABLE_SVG_TAG_MAP = createHashMap(['rect', 'circle', 'line', 'ellipse', 'polygon', 'polyline', 'path', // are also enabled becuase some SVG might paint text itself, + // but still need to trigger events or tooltip. + 'text', 'tspan', // is also enabled because this case: if multiple tags share one name + // and need label displayed, every tags will display the name, which is not + // expected. So we can put them into a . Thereby only one label + // displayed and located based on the bounding rect of the . + 'g']); + + var GeoSVGResource = + /** @class */ + function () { + function GeoSVGResource(mapName, svg) { + this.type = 'geoSVG'; // All used graphics. key: hostKey, value: root + + this._usedGraphicMap = createHashMap(); // All unused graphics. + + this._freedGraphics = []; + this._mapName = mapName; // Only perform parse to XML object here, which might be time + // consiming for large SVG. + // Although convert XML to zrender element is also time consiming, + // if we do it here, the clone of zrender elements has to be + // required. So we do it once for each geo instance, util real + // performance issues call for optimizing it. + + this._parsedXML = parseXML(svg); + } + + GeoSVGResource.prototype.load = function () + /* nameMap: NameMap */ + { + // In the "load" stage, graphic need to be built to + // get boundingRect for geo coordinate system. + var firstGraphic = this._firstGraphic; // Create the return data structure only when first graphic created. + // Because they will be used in geo coordinate system update stage, + // and `regions` will be mounted at `geo` coordinate system, + // in which there is no "view" info, so that it should better not to + // make references to graphic elements. + + if (!firstGraphic) { + firstGraphic = this._firstGraphic = this._buildGraphic(this._parsedXML); + + this._freedGraphics.push(firstGraphic); + + this._boundingRect = this._firstGraphic.boundingRect.clone(); // PENDING: `nameMap` will not be supported until some real requirement come. + // if (nameMap) { + // named = applyNameMap(named, nameMap); + // } + + var _a = createRegions(firstGraphic.named), + regions = _a.regions, + regionsMap = _a.regionsMap; + + this._regions = regions; + this._regionsMap = regionsMap; + } + + return { + boundingRect: this._boundingRect, + regions: this._regions, + regionsMap: this._regionsMap + }; + }; + + GeoSVGResource.prototype._buildGraphic = function (svgXML) { + var result; + var rootFromParse; + + try { + result = svgXML && parseSVG(svgXML, { + ignoreViewBox: true, + ignoreRootClip: true + }) || {}; + rootFromParse = result.root; + assert(rootFromParse != null); + } catch (e) { + throw new Error('Invalid svg format\n' + e.message); + } // Note: we keep the covenant that the root has no transform. So always add an extra root. + + + var root = new Group(); + root.add(rootFromParse); + root.isGeoSVGGraphicRoot = true; // [THE_RULE_OF_VIEWPORT_AND_VIEWBOX] + // + // Consider: `` + // - the `width/height` we call it `svgWidth/svgHeight` for short. + // - `(0, 0, svgWidth, svgHeight)` defines the viewport of the SVG, or say, + // "viewport boundingRect", or `boundingRect` for short. + // - `viewBox` defines the transform from the real content ot the viewport. + // `viewBox` has the same unit as the content of SVG. + // If `viewBox` exists, a transform is defined, so the unit of `svgWidth/svgHeight` become + // different from the content of SVG. Otherwise, they are the same. + // + // If both `svgWidth/svgHeight/viewBox` are specified in a SVG file, the transform rule will be: + // 0. `boundingRect` is `(0, 0, svgWidth, svgHeight)`. Set it to Geo['_rect'] (View['_rect']). + // 1. Make a transform from `viewBox` to `boundingRect`. + // Note: only suport `preserveAspectRatio 'xMidYMid'` here. That is, this transform will preserve + // the aspect ratio. + // 2. Make a transform from boundingRect to Geo['_viewRect'] (View['_viewRect']) + // (`Geo`/`View` will do this job). + // Note: this transform might not preserve aspect radio, which depending on how users specify + // viewRect in echarts option (e.g., `geo.left/top/width/height` will not preserve aspect ratio, + // but `geo.layoutCenter/layoutSize` will preserve aspect ratio). + // + // If `svgWidth/svgHeight` not specified, we use `viewBox` as the `boundingRect` to make the SVG + // layout look good. + // + // If neither `svgWidth/svgHeight` nor `viewBox` are not specified, we calculate the boundingRect + // of the SVG content and use them to make SVG layout look good. + + var svgWidth = result.width; + var svgHeight = result.height; + var viewBoxRect = result.viewBoxRect; + var boundingRect = this._boundingRect; + + if (!boundingRect) { + var bRectX = void 0; + var bRectY = void 0; + var bRectWidth = void 0; + var bRectHeight = void 0; + + if (svgWidth != null) { + bRectX = 0; + bRectWidth = svgWidth; + } else if (viewBoxRect) { + bRectX = viewBoxRect.x; + bRectWidth = viewBoxRect.width; + } + + if (svgHeight != null) { + bRectY = 0; + bRectHeight = svgHeight; + } else if (viewBoxRect) { + bRectY = viewBoxRect.y; + bRectHeight = viewBoxRect.height; + } // If both viewBox and svgWidth/svgHeight not specified, + // we have to determine how to layout those element to make them look good. + + + if (bRectX == null || bRectY == null) { + var calculatedBoundingRect = rootFromParse.getBoundingRect(); + + if (bRectX == null) { + bRectX = calculatedBoundingRect.x; + bRectWidth = calculatedBoundingRect.width; + } + + if (bRectY == null) { + bRectY = calculatedBoundingRect.y; + bRectHeight = calculatedBoundingRect.height; + } + } + + boundingRect = this._boundingRect = new BoundingRect(bRectX, bRectY, bRectWidth, bRectHeight); + } + + if (viewBoxRect) { + var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect); // Only support `preserveAspectRatio 'xMidYMid'` + + rootFromParse.scaleX = rootFromParse.scaleY = viewBoxTransform.scale; + rootFromParse.x = viewBoxTransform.x; + rootFromParse.y = viewBoxTransform.y; + } // SVG needs to clip based on `viewBox`. And some SVG files really rely on this feature. + // They do not strictly confine all of the content inside a display rect, but deliberately + // use a `viewBox` to define a displayable rect. + // PENDING: + // The drawback of the `setClipPath` here is: the region label (genereted by echarts) near the + // edge might also be clipped, because region labels are put as `textContent` of the SVG path. + + + root.setClipPath(new Rect({ + shape: boundingRect.plain() + })); + var named = []; + each(result.named, function (namedItem) { + if (REGION_AVAILABLE_SVG_TAG_MAP.get(namedItem.svgNodeTagLower) != null) { + named.push(namedItem); + setSilent(namedItem.el); + } + }); + return { + root: root, + boundingRect: boundingRect, + named: named + }; + }; + /** + * Consider: + * (1) One graphic element can not be shared by different `geoView` running simultaneously. + * Notice, also need to consider multiple echarts instances share a `mapRecord`. + * (2) Converting SVG to graphic elements is time consuming. + * (3) In the current architecture, `load` should be called frequently to get boundingRect, + * and it is called without view info. + * So we maintain graphic elements in this module, and enables `view` to use/return these + * graphics from/to the pool with it's uid. + */ + + + GeoSVGResource.prototype.useGraphic = function (hostKey + /*, nameMap: NameMap */ + ) { + var usedRootMap = this._usedGraphicMap; + var svgGraphic = usedRootMap.get(hostKey); + + if (svgGraphic) { + return svgGraphic; + } + + svgGraphic = this._freedGraphics.pop() // use the first boundingRect to avoid duplicated boundingRect calculation. + || this._buildGraphic(this._parsedXML); + usedRootMap.set(hostKey, svgGraphic); // PENDING: `nameMap` will not be supported until some real requirement come. + // `nameMap` can only be obtained from echarts option. + // The original `named` must not be modified. + // if (nameMap) { + // svgGraphic = extend({}, svgGraphic); + // svgGraphic.named = applyNameMap(svgGraphic.named, nameMap); + // } + + return svgGraphic; + }; + + GeoSVGResource.prototype.freeGraphic = function (hostKey) { + var usedRootMap = this._usedGraphicMap; + var svgGraphic = usedRootMap.get(hostKey); + + if (svgGraphic) { + usedRootMap.removeKey(hostKey); + + this._freedGraphics.push(svgGraphic); + } + }; + + return GeoSVGResource; + }(); + + function setSilent(el) { + // Only named element has silent: false, other elements should + // act as background and has no user interaction. + el.silent = false; // text|tspan will be converted to group. + + if (el.isGroup) { + el.traverse(function (child) { + child.silent = false; + }); + } + } + + function createRegions(named) { + var regions = []; + var regionsMap = createHashMap(); // Create resions only for the first graphic. + + each(named, function (namedItem) { + // Region has feature to calculate center for tooltip or other features. + // If there is a , the center should be the center of the + // bounding rect of the g. + if (namedItem.namedFrom != null) { + return; + } + + var region = new GeoSVGRegion(namedItem.name, namedItem.el); // PENDING: if `nameMap` supported, this region can not be mounted on + // `this`, but can only be created each time `load()` called. + + regions.push(region); // PENDING: if multiple tag named with the same name, only one will be + // found by `_regionsMap`. `_regionsMap` is used to find a coordinate + // by name. We use `region.getCenter()` as the coordinate. + + regionsMap.set(namedItem.name, region); + }); + return { + regions: regions, + regionsMap: regionsMap + }; + } // PENDING: `nameMap` will not be supported until some real requirement come. + // /** + // * Use the alias in geoNameMap. + // * The input `named` must not be modified. + // */ + // function applyNameMap( + // named: GeoSVGGraphicRecord['named'], + // nameMap: NameMap + // ): GeoSVGGraphicRecord['named'] { + // const result = [] as GeoSVGGraphicRecord['named']; + // for (let i = 0; i < named.length; i++) { + // let regionGraphic = named[i]; + // const name = regionGraphic.name; + // if (nameMap && nameMap.hasOwnProperty(name)) { + // regionGraphic = extend({}, regionGraphic); + // regionGraphic.name = name; + // } + // result.push(regionGraphic); + // } + // return result; + // } + + function decode(json) { + if (!json.UTF8Encoding) { + return json; + } + + var jsonCompressed = json; + var encodeScale = jsonCompressed.UTF8Scale; + + if (encodeScale == null) { + encodeScale = 1024; + } + + var features = jsonCompressed.features; + + for (var f = 0; f < features.length; f++) { + var feature = features[f]; + var geometry = feature.geometry; + + if (geometry.type === 'Polygon') { + var coordinates = geometry.coordinates; + + for (var c = 0; c < coordinates.length; c++) { + coordinates[c] = decodePolygon(coordinates[c], geometry.encodeOffsets[c], encodeScale); + } + } else if (geometry.type === 'MultiPolygon') { + var coordinates = geometry.coordinates; + + for (var c = 0; c < coordinates.length; c++) { + var coordinate = coordinates[c]; + + for (var c2 = 0; c2 < coordinate.length; c2++) { + coordinate[c2] = decodePolygon(coordinate[c2], geometry.encodeOffsets[c][c2], encodeScale); + } + } + } + } // Has been decoded + + + jsonCompressed.UTF8Encoding = false; + return jsonCompressed; + } + + function decodePolygon(coordinate, encodeOffsets, encodeScale) { + var result = []; + var prevX = encodeOffsets[0]; + var prevY = encodeOffsets[1]; + + for (var i = 0; i < coordinate.length; i += 2) { + var x = coordinate.charCodeAt(i) - 64; + var y = coordinate.charCodeAt(i + 1) - 64; // ZigZag decoding + + x = x >> 1 ^ -(x & 1); + y = y >> 1 ^ -(y & 1); // Delta deocding + + x += prevX; + y += prevY; + prevX = x; + prevY = y; // Dequantize + + result.push([x / encodeScale, y / encodeScale]); + } + + return result; + } + + function parseGeoJSON(geoJson, nameProperty) { + geoJson = decode(geoJson); + return map(filter(geoJson.features, function (featureObj) { + // Output of mapshaper may have geometry null + return featureObj.geometry && featureObj.properties && featureObj.geometry.coordinates.length > 0; + }), function (featureObj) { + var properties = featureObj.properties; + var geo = featureObj.geometry; + var geometries = []; + + if (geo.type === 'Polygon') { + var coordinates = geo.coordinates; + geometries.push({ + type: 'polygon', + // According to the GeoJSON specification. + // First must be exterior, and the rest are all interior(holes). + exterior: coordinates[0], + interiors: coordinates.slice(1) + }); + } + + if (geo.type === 'MultiPolygon') { + var coordinates = geo.coordinates; + each(coordinates, function (item) { + if (item[0]) { + geometries.push({ + type: 'polygon', + exterior: item[0], + interiors: item.slice(1) + }); + } + }); + } + + var region = new GeoJSONRegion(properties[nameProperty || 'name'], geometries, properties.cp); + region.properties = properties; + return region; + }); + } + + var geoCoord = [126, 25]; + var nanhaiName = '南海诸岛'; + var points$1 = [[[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, 0.7], [52, 0.7], [56, 7.7], [59, 0.7], [64, 0.7], [64, 0], [5, 0], [0, 3.5]], [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]], [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]], [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]], [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]], [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]], [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]], [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]], [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]], [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]], [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]], [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], [1, 92.4], [1, 3.5], [0, 3.5]]]; + + for (var i = 0; i < points$1.length; i++) { + for (var k = 0; k < points$1[i].length; k++) { + points$1[i][k][0] /= 10.5; + points$1[i][k][1] /= -10.5 / 0.75; + points$1[i][k][0] += geoCoord[0]; + points$1[i][k][1] += geoCoord[1]; + } + } + + function fixNanhai(mapType, regions) { + if (mapType === 'china') { + for (var i = 0; i < regions.length; i++) { + // Already exists. + if (regions[i].name === nanhaiName) { + return; + } + } + + regions.push(new GeoJSONRegion(nanhaiName, map(points$1, function (exterior) { + return { + type: 'polygon', + exterior: exterior + }; + }), geoCoord)); + } + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var coordsOffsetMap = { + '南海诸岛': [32, 80], + // 全国 + '广东': [0, -10], + '香港': [10, 5], + '澳门': [-10, 10], + //'北京': [-10, 0], + '天津': [5, 5] + }; + function fixTextCoords(mapType, region) { + if (mapType === 'china') { + var coordFix = coordsOffsetMap[region.name]; + + if (coordFix) { + var cp = region.getCenter(); + cp[0] += coordFix[0] / 10.5; + cp[1] += -coordFix[1] / (10.5 / 0.75); + region.setCenter(cp); + } + } + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var geoCoordMap = { + 'Russia': [100, 60], + 'United States': [-99, 38], + 'United States of America': [-99, 38] + }; + function fixGeoCoords(mapType, region) { + if (mapType === 'world') { + var geoCoord = geoCoordMap[region.name]; + + if (geoCoord) { + var cp = [geoCoord[0], geoCoord[1]]; + region.setCenter(cp); + } + } + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + // Fix for 钓鱼岛 + // let Region = require('../Region'); + // let zrUtil = require('zrender/lib/core/util'); + // let geoCoord = [126, 25]; + var points$2 = [[[123.45165252685547, 25.73527164402261], [123.49731445312499, 25.73527164402261], [123.49731445312499, 25.750734064600884], [123.45165252685547, 25.750734064600884], [123.45165252685547, 25.73527164402261]]]; + function fixDiaoyuIsland(mapType, region) { + if (mapType === 'china' && region.name === '台湾') { + region.geometries.push({ + type: 'polygon', + exterior: points$2[0] + }); + } + } + + var DEFAULT_NAME_PROPERTY = 'name'; + + var GeoJSONResource = + /** @class */ + function () { + function GeoJSONResource(mapName, geoJSON, specialAreas) { + this.type = 'geoJSON'; + this._parsedMap = createHashMap(); + this._mapName = mapName; + this._specialAreas = specialAreas; // PENDING: delay the parse to the first usage to rapid up the FMP? + + this._geoJSON = parseInput(geoJSON); + } + /** + * @param nameMap can be null/undefined + * @param nameProperty can be null/undefined + */ + + + GeoJSONResource.prototype.load = function (nameMap, nameProperty) { + nameProperty = nameProperty || DEFAULT_NAME_PROPERTY; + + var parsed = this._parsedMap.get(nameProperty); + + if (!parsed) { + var rawRegions = this._parseToRegions(nameProperty); + + parsed = this._parsedMap.set(nameProperty, { + regions: rawRegions, + boundingRect: calculateBoundingRect(rawRegions) + }); + } + + var regionsMap = createHashMap(); + var finalRegions = []; + each(parsed.regions, function (region) { + var regionName = region.name; // Try use the alias in geoNameMap + + if (nameMap && nameMap.hasOwnProperty(regionName)) { + region = region.cloneShallow(regionName = nameMap[regionName]); + } + + finalRegions.push(region); + regionsMap.set(regionName, region); + }); + return { + regions: finalRegions, + boundingRect: parsed.boundingRect || new BoundingRect(0, 0, 0, 0), + regionsMap: regionsMap + }; + }; + + GeoJSONResource.prototype._parseToRegions = function (nameProperty) { + var mapName = this._mapName; + var geoJSON = this._geoJSON; + var rawRegions; // https://jsperf.com/try-catch-performance-overhead + + try { + rawRegions = geoJSON ? parseGeoJSON(geoJSON, nameProperty) : []; + } catch (e) { + throw new Error('Invalid geoJson format\n' + e.message); + } + + fixNanhai(mapName, rawRegions); + each(rawRegions, function (region) { + var regionName = region.name; + fixTextCoords(mapName, region); + fixGeoCoords(mapName, region); + fixDiaoyuIsland(mapName, region); // Some area like Alaska in USA map needs to be tansformed + // to look better + + var specialArea = this._specialAreas && this._specialAreas[regionName]; + + if (specialArea) { + region.transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height); + } + }, this); + return rawRegions; + }; + /** + * Only for exporting to users. + * **MUST NOT** used internally. + */ + + + GeoJSONResource.prototype.getMapForUser = function () { + return { + // For backward compatibility, use geoJson + // PENDING: it has been returning them without clone. + // do we need to avoid outsite modification? + geoJson: this._geoJSON, + geoJSON: this._geoJSON, + specialAreas: this._specialAreas + }; + }; + + return GeoJSONResource; + }(); + + function calculateBoundingRect(regions) { + var rect; + + for (var i = 0; i < regions.length; i++) { + var regionRect = regions[i].getBoundingRect(); + rect = rect || regionRect.clone(); + rect.union(regionRect); + } + + return rect; + } + + function parseInput(source) { + return !isString(source) ? source : typeof JSON !== 'undefined' && JSON.parse ? JSON.parse(source) : new Function('return (' + source + ');')(); + } + + var storage = createHashMap(); + var geoSourceManager = { + /** + * Compatible with previous `echarts.registerMap`. + * + * @usage + * ```js + * + * echarts.registerMap('USA', geoJson, specialAreas); + * + * echarts.registerMap('USA', { + * geoJson: geoJson, + * specialAreas: {...} + * }); + * echarts.registerMap('USA', { + * geoJSON: geoJson, + * specialAreas: {...} + * }); + * + * echarts.registerMap('airport', { + * svg: svg + * } + * ``` + * + * Note: + * Do not support that register multiple geoJSON or SVG + * one map name. Because different geoJSON and SVG have + * different unit. It's not easy to make sure how those + * units are mapping/normalize. + * If intending to use multiple geoJSON or SVG, we can + * use multiple geo coordinate system. + */ + registerMap: function (mapName, rawDef, rawSpecialAreas) { + if (rawDef.svg) { + var resource = new GeoSVGResource(mapName, rawDef.svg); + storage.set(mapName, resource); + } else { + // Recommend: + // echarts.registerMap('eu', { geoJSON: xxx, specialAreas: xxx }); + // Backward compatibility: + // echarts.registerMap('eu', geoJSON, specialAreas); + // echarts.registerMap('eu', { geoJson: xxx, specialAreas: xxx }); + var geoJSON = rawDef.geoJson || rawDef.geoJSON; + + if (geoJSON && !rawDef.features) { + rawSpecialAreas = rawDef.specialAreas; + } else { + geoJSON = rawDef; + } + + var resource = new GeoJSONResource(mapName, geoJSON, rawSpecialAreas); + storage.set(mapName, resource); + } + }, + getGeoResource: function (mapName) { + return storage.get(mapName); + }, + + /** + * Only for exporting to users. + * **MUST NOT** used internally. + */ + getMapForUser: function (mapName) { + var resource = storage.get(mapName); // Do not support return SVG until some real requirement come. + + return resource && resource.type === 'geoJSON' && resource.getMapForUser(); + }, + load: function (mapName, nameMap, nameProperty) { + var resource = storage.get(mapName); + + if (!resource) { + if ("development" !== 'production') { + console.error('Map ' + mapName + ' not exists. The GeoJSON of the map must be provided.'); + } + + return; + } + + return resource.load(nameMap, nameProperty); + } + }; + + var lifecycle = new Eventful(); + + var hasWindow = typeof window !== 'undefined'; + var version$1 = '5.2.2'; + var dependencies = { + zrender: '5.2.1' + }; + var TEST_FRAME_REMAIN_TIME = 1; + var PRIORITY_PROCESSOR_SERIES_FILTER = 800; // Some data processors depends on the stack result dimension (to calculate data extent). + // So data stack stage should be in front of data processing stage. + + var PRIORITY_PROCESSOR_DATASTACK = 900; // "Data filter" will block the stream, so it should be + // put at the begining of data processing. + + var PRIORITY_PROCESSOR_FILTER = 1000; + var PRIORITY_PROCESSOR_DEFAULT = 2000; + var PRIORITY_PROCESSOR_STATISTIC = 5000; + var PRIORITY_VISUAL_LAYOUT = 1000; + var PRIORITY_VISUAL_PROGRESSIVE_LAYOUT = 1100; + var PRIORITY_VISUAL_GLOBAL = 2000; + var PRIORITY_VISUAL_CHART = 3000; + var PRIORITY_VISUAL_COMPONENT = 4000; // Visual property in data. Greater than `PRIORITY_VISUAL_COMPONENT` to enable to + // overwrite the viusal result of component (like `visualMap`) + // using data item specific setting (like itemStyle.xxx on data item) + + var PRIORITY_VISUAL_CHART_DATA_CUSTOM = 4500; // Greater than `PRIORITY_VISUAL_CHART_DATA_CUSTOM` to enable to layout based on + // visual result like `symbolSize`. + + var PRIORITY_VISUAL_POST_CHART_LAYOUT = 4600; + var PRIORITY_VISUAL_BRUSH = 5000; + var PRIORITY_VISUAL_ARIA = 6000; + var PRIORITY_VISUAL_DECAL = 7000; + var PRIORITY = { + PROCESSOR: { + FILTER: PRIORITY_PROCESSOR_FILTER, + SERIES_FILTER: PRIORITY_PROCESSOR_SERIES_FILTER, + STATISTIC: PRIORITY_PROCESSOR_STATISTIC + }, + VISUAL: { + LAYOUT: PRIORITY_VISUAL_LAYOUT, + PROGRESSIVE_LAYOUT: PRIORITY_VISUAL_PROGRESSIVE_LAYOUT, + GLOBAL: PRIORITY_VISUAL_GLOBAL, + CHART: PRIORITY_VISUAL_CHART, + POST_CHART_LAYOUT: PRIORITY_VISUAL_POST_CHART_LAYOUT, + COMPONENT: PRIORITY_VISUAL_COMPONENT, + BRUSH: PRIORITY_VISUAL_BRUSH, + CHART_ITEM: PRIORITY_VISUAL_CHART_DATA_CUSTOM, + ARIA: PRIORITY_VISUAL_ARIA, + DECAL: PRIORITY_VISUAL_DECAL + } + }; // Main process have three entries: `setOption`, `dispatchAction` and `resize`, + // where they must not be invoked nestedly, except the only case: invoke + // dispatchAction with updateMethod "none" in main process. + // This flag is used to carry out this rule. + // All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]). + + var IN_MAIN_PROCESS_KEY = '__flagInMainProcess'; + var PENDING_UPDATE = '__pendingUpdate'; + var STATUS_NEEDS_UPDATE_KEY = '__needsUpdateStatus'; + var ACTION_REG = /^[a-zA-Z0-9_]+$/; + var CONNECT_STATUS_KEY = '__connectUpdateStatus'; + var CONNECT_STATUS_PENDING = 0; + var CONNECT_STATUS_UPDATING = 1; + var CONNECT_STATUS_UPDATED = 2; + + function createRegisterEventWithLowercaseECharts(method) { + return function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + if (this.isDisposed()) { + disposedWarning(this.id); + return; + } + + return toLowercaseNameAndCallEventful(this, method, args); + }; + } + + function createRegisterEventWithLowercaseMessageCenter(method) { + return function () { + var args = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + + return toLowercaseNameAndCallEventful(this, method, args); + }; + } + + function toLowercaseNameAndCallEventful(host, method, args) { + // `args[0]` is event name. Event name is all lowercase. + args[0] = args[0] && args[0].toLowerCase(); + return Eventful.prototype[method].apply(host, args); + } + + var MessageCenter = + /** @class */ + function (_super) { + __extends(MessageCenter, _super); + + function MessageCenter() { + return _super !== null && _super.apply(this, arguments) || this; + } + + return MessageCenter; + }(Eventful); + + var messageCenterProto = MessageCenter.prototype; + messageCenterProto.on = createRegisterEventWithLowercaseMessageCenter('on'); + messageCenterProto.off = createRegisterEventWithLowercaseMessageCenter('off'); // --------------------------------------- + // Internal method names for class ECharts + // --------------------------------------- + + var prepare; + var prepareView; + var updateDirectly; + var updateMethods; + var doConvertPixel; + var updateStreamModes; + var doDispatchAction; + var flushPendingActions; + var triggerUpdatedEvent; + var bindRenderedEvent; + var bindMouseEvent; + var clearColorPalette; + var render; + var renderComponents; + var renderSeries; + var createExtensionAPI; + var enableConnect; + var markStatusToUpdate; + var applyChangedStates; + + var ECharts = + /** @class */ + function (_super) { + __extends(ECharts, _super); + + function ECharts(dom, // Theme name or themeOption. + theme, opts) { + var _this = _super.call(this, new ECEventProcessor()) || this; + + _this._chartsViews = []; + _this._chartsMap = {}; + _this._componentsViews = []; + _this._componentsMap = {}; // Can't dispatch action during rendering procedure + + _this._pendingActions = []; + opts = opts || {}; // Get theme by name + + if (typeof theme === 'string') { + theme = themeStorage[theme]; + } + + _this._dom = dom; + var defaultRenderer = 'canvas'; + var defaultUseDirtyRect = false; + + if ("development" !== 'production') { + var root = + /* eslint-disable-next-line */ + hasWindow ? window : global; + defaultRenderer = root.__ECHARTS__DEFAULT__RENDERER__ || defaultRenderer; + var devUseDirtyRect = root.__ECHARTS__DEFAULT__USE_DIRTY_RECT__; + defaultUseDirtyRect = devUseDirtyRect == null ? defaultUseDirtyRect : devUseDirtyRect; + } + + var zr = _this._zr = init(dom, { + renderer: opts.renderer || defaultRenderer, + devicePixelRatio: opts.devicePixelRatio, + width: opts.width, + height: opts.height, + useDirtyRect: opts.useDirtyRect == null ? defaultUseDirtyRect : opts.useDirtyRect + }); // Expect 60 fps. + + _this._throttledZrFlush = throttle(bind(zr.flush, zr), 17); + theme = clone(theme); + theme && globalBackwardCompat(theme, true); + _this._theme = theme; + _this._locale = createLocaleObject(opts.locale || SYSTEM_LANG); + _this._coordSysMgr = new CoordinateSystemManager(); + var api = _this._api = createExtensionAPI(_this); // Sort on demand + + function prioritySortFunc(a, b) { + return a.__prio - b.__prio; + } + + sort(visualFuncs, prioritySortFunc); + sort(dataProcessorFuncs, prioritySortFunc); + _this._scheduler = new Scheduler(_this, api, dataProcessorFuncs, visualFuncs); + _this._messageCenter = new MessageCenter(); // Init mouse events + + _this._initEvents(); // In case some people write `window.onresize = chart.resize` + + + _this.resize = bind(_this.resize, _this); + zr.animation.on('frame', _this._onframe, _this); + bindRenderedEvent(zr, _this); + bindMouseEvent(zr, _this); // ECharts instance can be used as value. + + setAsPrimitive(_this); + return _this; + } + + ECharts.prototype._onframe = function () { + if (this._disposed) { + return; + } + + applyChangedStates(this); + var scheduler = this._scheduler; // Lazy update + + if (this[PENDING_UPDATE]) { + var silent = this[PENDING_UPDATE].silent; + this[IN_MAIN_PROCESS_KEY] = true; + prepare(this); + updateMethods.update.call(this, null, this[PENDING_UPDATE].updateParams); // At present, in each frame, zrender performs: + // (1) animation step forward. + // (2) trigger('frame') (where this `_onframe` is called) + // (3) zrender flush (render). + // If we do nothing here, since we use `setToFinal: true`, the step (3) above + // will render the final state of the elements before the real animation started. + + this._zr.flush(); + + this[IN_MAIN_PROCESS_KEY] = false; + this[PENDING_UPDATE] = null; + flushPendingActions.call(this, silent); + triggerUpdatedEvent.call(this, silent); + } // Avoid do both lazy update and progress in one frame. + else if (scheduler.unfinished) { + // Stream progress. + var remainTime = TEST_FRAME_REMAIN_TIME; + var ecModel = this._model; + var api = this._api; + scheduler.unfinished = false; + + do { + var startTime = +new Date(); + scheduler.performSeriesTasks(ecModel); // Currently dataProcessorFuncs do not check threshold. + + scheduler.performDataProcessorTasks(ecModel); + updateStreamModes(this, ecModel); // Do not update coordinate system here. Because that coord system update in + // each frame is not a good user experience. So we follow the rule that + // the extent of the coordinate system is determin in the first frame (the + // frame is executed immedietely after task reset. + // this._coordSysMgr.update(ecModel, api); + // console.log('--- ec frame visual ---', remainTime); + + scheduler.performVisualTasks(ecModel); + renderSeries(this, this._model, api, 'remain', {}); + remainTime -= +new Date() - startTime; + } while (remainTime > 0 && scheduler.unfinished); // Call flush explicitly for trigger finished event. + + + if (!scheduler.unfinished) { + this._zr.flush(); + } // Else, zr flushing be ensue within the same frame, + // because zr flushing is after onframe event. + + } + }; + + ECharts.prototype.getDom = function () { + return this._dom; + }; + + ECharts.prototype.getId = function () { + return this.id; + }; + + ECharts.prototype.getZr = function () { + return this._zr; + }; + /* eslint-disable-next-line */ + + + ECharts.prototype.setOption = function (option, notMerge, lazyUpdate) { + if ("development" !== 'production') { + assert(!this[IN_MAIN_PROCESS_KEY], '`setOption` should not be called during main process.'); + } + + if (this._disposed) { + disposedWarning(this.id); + return; + } + + var silent; + var replaceMerge; + var transitionOpt; + + if (isObject(notMerge)) { + lazyUpdate = notMerge.lazyUpdate; + silent = notMerge.silent; + replaceMerge = notMerge.replaceMerge; + transitionOpt = notMerge.transition; + notMerge = notMerge.notMerge; + } + + this[IN_MAIN_PROCESS_KEY] = true; + + if (!this._model || notMerge) { + var optionManager = new OptionManager(this._api); + var theme = this._theme; + var ecModel = this._model = new GlobalModel(); + ecModel.scheduler = this._scheduler; + ecModel.init(null, null, null, theme, this._locale, optionManager); + } + + this._model.setOption(option, { + replaceMerge: replaceMerge + }, optionPreprocessorFuncs); + + var updateParams = { + seriesTransition: transitionOpt, + optionChanged: true + }; + + if (lazyUpdate) { + this[PENDING_UPDATE] = { + silent: silent, + updateParams: updateParams + }; + this[IN_MAIN_PROCESS_KEY] = false; // `setOption(option, {lazyMode: true})` may be called when zrender has been slept. + // It should wake it up to make sure zrender start to render at the next frame. + + this.getZr().wakeUp(); + } else { + prepare(this); + updateMethods.update.call(this, null, updateParams); // Ensure zr refresh sychronously, and then pixel in canvas can be + // fetched after `setOption`. + + this._zr.flush(); + + this[PENDING_UPDATE] = null; + this[IN_MAIN_PROCESS_KEY] = false; + flushPendingActions.call(this, silent); + triggerUpdatedEvent.call(this, silent); + } + }; + /** + * @DEPRECATED + */ + + + ECharts.prototype.setTheme = function () { + console.error('ECharts#setTheme() is DEPRECATED in ECharts 3.0'); + }; // We don't want developers to use getModel directly. + + + ECharts.prototype.getModel = function () { + return this._model; + }; + + ECharts.prototype.getOption = function () { + return this._model && this._model.getOption(); + }; + + ECharts.prototype.getWidth = function () { + return this._zr.getWidth(); + }; + + ECharts.prototype.getHeight = function () { + return this._zr.getHeight(); + }; + + ECharts.prototype.getDevicePixelRatio = function () { + return this._zr.painter.dpr + /* eslint-disable-next-line */ + || hasWindow && window.devicePixelRatio || 1; + }; + /** + * Get canvas which has all thing rendered + */ + + + ECharts.prototype.getRenderedCanvas = function (opts) { + if (!env.canvasSupported) { + return; + } + + opts = opts || {}; + return this._zr.painter.getRenderedCanvas({ + backgroundColor: opts.backgroundColor || this._model.get('backgroundColor'), + pixelRatio: opts.pixelRatio || this.getDevicePixelRatio() + }); + }; + /** + * Get svg data url + */ + + + ECharts.prototype.getSvgDataURL = function () { + if (!env.svgSupported) { + return; + } + + var zr = this._zr; + var list = zr.storage.getDisplayList(); // Stop animations + + each(list, function (el) { + el.stopAnimation(null, true); + }); + return zr.painter.toDataURL(); + }; + + ECharts.prototype.getDataURL = function (opts) { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + opts = opts || {}; + var excludeComponents = opts.excludeComponents; + var ecModel = this._model; + var excludesComponentViews = []; + var self = this; + each(excludeComponents, function (componentType) { + ecModel.eachComponent({ + mainType: componentType + }, function (component) { + var view = self._componentsMap[component.__viewId]; + + if (!view.group.ignore) { + excludesComponentViews.push(view); + view.group.ignore = true; + } + }); + }); + var url = this._zr.painter.getType() === 'svg' ? this.getSvgDataURL() : this.getRenderedCanvas(opts).toDataURL('image/' + (opts && opts.type || 'png')); + each(excludesComponentViews, function (view) { + view.group.ignore = false; + }); + return url; + }; + + ECharts.prototype.getConnectedDataURL = function (opts) { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + if (!env.canvasSupported) { + return; + } + + var isSvg = opts.type === 'svg'; + var groupId = this.group; + var mathMin = Math.min; + var mathMax = Math.max; + var MAX_NUMBER = Infinity; + + if (connectedGroups[groupId]) { + var left_1 = MAX_NUMBER; + var top_1 = MAX_NUMBER; + var right_1 = -MAX_NUMBER; + var bottom_1 = -MAX_NUMBER; + var canvasList_1 = []; + var dpr_1 = opts && opts.pixelRatio || this.getDevicePixelRatio(); + each(instances$1, function (chart, id) { + if (chart.group === groupId) { + var canvas = isSvg ? chart.getZr().painter.getSvgDom().innerHTML : chart.getRenderedCanvas(clone(opts)); + var boundingRect = chart.getDom().getBoundingClientRect(); + left_1 = mathMin(boundingRect.left, left_1); + top_1 = mathMin(boundingRect.top, top_1); + right_1 = mathMax(boundingRect.right, right_1); + bottom_1 = mathMax(boundingRect.bottom, bottom_1); + canvasList_1.push({ + dom: canvas, + left: boundingRect.left, + top: boundingRect.top + }); + } + }); + left_1 *= dpr_1; + top_1 *= dpr_1; + right_1 *= dpr_1; + bottom_1 *= dpr_1; + var width = right_1 - left_1; + var height = bottom_1 - top_1; + var targetCanvas = createCanvas(); + var zr_1 = init(targetCanvas, { + renderer: isSvg ? 'svg' : 'canvas' + }); + zr_1.resize({ + width: width, + height: height + }); + + if (isSvg) { + var content_1 = ''; + each(canvasList_1, function (item) { + var x = item.left - left_1; + var y = item.top - top_1; + content_1 += '' + item.dom + ''; + }); + zr_1.painter.getSvgRoot().innerHTML = content_1; + + if (opts.connectedBackgroundColor) { + zr_1.painter.setBackgroundColor(opts.connectedBackgroundColor); + } + + zr_1.refreshImmediately(); + return zr_1.painter.toDataURL(); + } else { + // Background between the charts + if (opts.connectedBackgroundColor) { + zr_1.add(new Rect({ + shape: { + x: 0, + y: 0, + width: width, + height: height + }, + style: { + fill: opts.connectedBackgroundColor + } + })); + } + + each(canvasList_1, function (item) { + var img = new ZRImage({ + style: { + x: item.left * dpr_1 - left_1, + y: item.top * dpr_1 - top_1, + image: item.dom + } + }); + zr_1.add(img); + }); + zr_1.refreshImmediately(); + return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png')); + } + } else { + return this.getDataURL(opts); + } + }; + + ECharts.prototype.convertToPixel = function (finder, value) { + return doConvertPixel(this, 'convertToPixel', finder, value); + }; + + ECharts.prototype.convertFromPixel = function (finder, value) { + return doConvertPixel(this, 'convertFromPixel', finder, value); + }; + /** + * Is the specified coordinate systems or components contain the given pixel point. + * @param {Array|number} value + * @return {boolean} result + */ + + + ECharts.prototype.containPixel = function (finder, value) { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + var ecModel = this._model; + var result; + var findResult = parseFinder(ecModel, finder); + each(findResult, function (models, key) { + key.indexOf('Models') >= 0 && each(models, function (model) { + var coordSys = model.coordinateSystem; + + if (coordSys && coordSys.containPoint) { + result = result || !!coordSys.containPoint(value); + } else if (key === 'seriesModels') { + var view = this._chartsMap[model.__viewId]; + + if (view && view.containPoint) { + result = result || view.containPoint(value, model); + } else { + if ("development" !== 'production') { + console.warn(key + ': ' + (view ? 'The found component do not support containPoint.' : 'No view mapping to the found component.')); + } + } + } else { + if ("development" !== 'production') { + console.warn(key + ': containPoint is not supported'); + } + } + }, this); + }, this); + return !!result; + }; + /** + * Get visual from series or data. + * @param finder + * If string, e.g., 'series', means {seriesIndex: 0}. + * If Object, could contain some of these properties below: + * { + * seriesIndex / seriesId / seriesName, + * dataIndex / dataIndexInside + * } + * If dataIndex is not specified, series visual will be fetched, + * but not data item visual. + * If all of seriesIndex, seriesId, seriesName are not specified, + * visual will be fetched from first series. + * @param visualType 'color', 'symbol', 'symbolSize' + */ + + + ECharts.prototype.getVisual = function (finder, visualType) { + var ecModel = this._model; + var parsedFinder = parseFinder(ecModel, finder, { + defaultMainType: 'series' + }); + var seriesModel = parsedFinder.seriesModel; + + if ("development" !== 'production') { + if (!seriesModel) { + console.warn('There is no specified seires model'); + } + } + + var data = seriesModel.getData(); + var dataIndexInside = parsedFinder.hasOwnProperty('dataIndexInside') ? parsedFinder.dataIndexInside : parsedFinder.hasOwnProperty('dataIndex') ? data.indexOfRawIndex(parsedFinder.dataIndex) : null; + return dataIndexInside != null ? getItemVisualFromData(data, dataIndexInside, visualType) : getVisualFromData(data, visualType); + }; + /** + * Get view of corresponding component model + */ + + + ECharts.prototype.getViewOfComponentModel = function (componentModel) { + return this._componentsMap[componentModel.__viewId]; + }; + /** + * Get view of corresponding series model + */ + + + ECharts.prototype.getViewOfSeriesModel = function (seriesModel) { + return this._chartsMap[seriesModel.__viewId]; + }; + + ECharts.prototype._initEvents = function () { + var _this = this; + + each(MOUSE_EVENT_NAMES, function (eveName) { + var handler = function (e) { + var ecModel = _this.getModel(); + + var el = e.target; + var params; + var isGlobalOut = eveName === 'globalout'; // no e.target when 'globalout'. + + if (isGlobalOut) { + params = {}; + } else { + el && findEventDispatcher(el, function (parent) { + var ecData = getECData(parent); + + if (ecData && ecData.dataIndex != null) { + var dataModel = ecData.dataModel || ecModel.getSeriesByIndex(ecData.seriesIndex); + params = dataModel && dataModel.getDataParams(ecData.dataIndex, ecData.dataType) || {}; + return true; + } // If element has custom eventData of components + else if (ecData.eventData) { + params = extend({}, ecData.eventData); + return true; + } + }, true); + } // Contract: if params prepared in mouse event, + // these properties must be specified: + // { + // componentType: string (component main type) + // componentIndex: number + // } + // Otherwise event query can not work. + + + if (params) { + var componentType = params.componentType; + var componentIndex = params.componentIndex; // Special handling for historic reason: when trigger by + // markLine/markPoint/markArea, the componentType is + // 'markLine'/'markPoint'/'markArea', but we should better + // enable them to be queried by seriesIndex, since their + // option is set in each series. + + if (componentType === 'markLine' || componentType === 'markPoint' || componentType === 'markArea') { + componentType = 'series'; + componentIndex = params.seriesIndex; + } + + var model = componentType && componentIndex != null && ecModel.getComponent(componentType, componentIndex); + var view = model && _this[model.mainType === 'series' ? '_chartsMap' : '_componentsMap'][model.__viewId]; + + if ("development" !== 'production') { + // `event.componentType` and `event[componentTpype + 'Index']` must not + // be missed, otherwise there is no way to distinguish source component. + // See `dataFormat.getDataParams`. + if (!isGlobalOut && !(model && view)) { + console.warn('model or view can not be found by params'); + } + } + + params.event = e; + params.type = eveName; + _this._$eventProcessor.eventInfo = { + targetEl: el, + packedEvent: params, + model: model, + view: view + }; + + _this.trigger(eveName, params); + } + }; // Consider that some component (like tooltip, brush, ...) + // register zr event handler, but user event handler might + // do anything, such as call `setOption` or `dispatchAction`, + // which probably update any of the content and probably + // cause problem if it is called previous other inner handlers. + + + handler.zrEventfulCallAtLast = true; + + _this._zr.on(eveName, handler, _this); + }); + each(eventActionMap, function (actionType, eventType) { + _this._messageCenter.on(eventType, function (event) { + this.trigger(eventType, event); + }, _this); + }); // Extra events + // TODO register? + + each(['selectchanged'], function (eventType) { + _this._messageCenter.on(eventType, function (event) { + this.trigger(eventType, event); + }, _this); + }); + handleLegacySelectEvents(this._messageCenter, this, this._api); + }; + + ECharts.prototype.isDisposed = function () { + return this._disposed; + }; + + ECharts.prototype.clear = function () { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + this.setOption({ + series: [] + }, true); + }; + + ECharts.prototype.dispose = function () { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + this._disposed = true; + setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, ''); + var chart = this; + var api = chart._api; + var ecModel = chart._model; + each(chart._componentsViews, function (component) { + component.dispose(ecModel, api); + }); + each(chart._chartsViews, function (chart) { + chart.dispose(ecModel, api); + }); // Dispose after all views disposed + + chart._zr.dispose(); // Set properties to null. + // To reduce the memory cost in case the top code still holds this instance unexpectedly. + + + chart._dom = chart._model = chart._chartsMap = chart._componentsMap = chart._chartsViews = chart._componentsViews = chart._scheduler = chart._api = chart._zr = chart._throttledZrFlush = chart._theme = chart._coordSysMgr = chart._messageCenter = null; + delete instances$1[chart.id]; + }; + /** + * Resize the chart + */ + + + ECharts.prototype.resize = function (opts) { + if ("development" !== 'production') { + assert(!this[IN_MAIN_PROCESS_KEY], '`resize` should not be called during main process.'); + } + + if (this._disposed) { + disposedWarning(this.id); + return; + } + + this._zr.resize(opts); + + var ecModel = this._model; // Resize loading effect + + this._loadingFX && this._loadingFX.resize(); + + if (!ecModel) { + return; + } + + var needPrepare = ecModel.resetOption('media'); + var silent = opts && opts.silent; // There is some real cases that: + // chart.setOption(option, { lazyUpdate: true }); + // chart.resize(); + + if (this[PENDING_UPDATE]) { + if (silent == null) { + silent = this[PENDING_UPDATE].silent; + } + + needPrepare = true; + this[PENDING_UPDATE] = null; + } + + this[IN_MAIN_PROCESS_KEY] = true; + needPrepare && prepare(this); + updateMethods.update.call(this, { + type: 'resize', + animation: extend({ + // Disable animation + duration: 0 + }, opts && opts.animation) + }); + this[IN_MAIN_PROCESS_KEY] = false; + flushPendingActions.call(this, silent); + triggerUpdatedEvent.call(this, silent); + }; + + ECharts.prototype.showLoading = function (name, cfg) { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + if (isObject(name)) { + cfg = name; + name = ''; + } + + name = name || 'default'; + this.hideLoading(); + + if (!loadingEffects[name]) { + if ("development" !== 'production') { + console.warn('Loading effects ' + name + ' not exists.'); + } + + return; + } + + var el = loadingEffects[name](this._api, cfg); + var zr = this._zr; + this._loadingFX = el; + zr.add(el); + }; + /** + * Hide loading effect + */ + + + ECharts.prototype.hideLoading = function () { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + this._loadingFX && this._zr.remove(this._loadingFX); + this._loadingFX = null; + }; + + ECharts.prototype.makeActionFromEvent = function (eventObj) { + var payload = extend({}, eventObj); + payload.type = eventActionMap[eventObj.type]; + return payload; + }; + /** + * @param opt If pass boolean, means opt.silent + * @param opt.silent Default `false`. Whether trigger events. + * @param opt.flush Default `undefined`. + * true: Flush immediately, and then pixel in canvas can be fetched + * immediately. Caution: it might affect performance. + * false: Not flush. + * undefined: Auto decide whether perform flush. + */ + + + ECharts.prototype.dispatchAction = function (payload, opt) { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + if (!isObject(opt)) { + opt = { + silent: !!opt + }; + } + + if (!actions[payload.type]) { + return; + } // Avoid dispatch action before setOption. Especially in `connect`. + + + if (!this._model) { + return; + } // May dispatchAction in rendering procedure + + + if (this[IN_MAIN_PROCESS_KEY]) { + this._pendingActions.push(payload); + + return; + } + + var silent = opt.silent; + doDispatchAction.call(this, payload, silent); + var flush = opt.flush; + + if (flush) { + this._zr.flush(); + } else if (flush !== false && env.browser.weChat) { + // In WeChat embeded browser, `requestAnimationFrame` and `setInterval` + // hang when sliding page (on touch event), which cause that zr does not + // refresh util user interaction finished, which is not expected. + // But `dispatchAction` may be called too frequently when pan on touch + // screen, which impacts performance if do not throttle them. + this._throttledZrFlush(); + } + + flushPendingActions.call(this, silent); + triggerUpdatedEvent.call(this, silent); + }; + + ECharts.prototype.updateLabelLayout = function () { + lifecycle.trigger('series:layoutlabels', this._model, this._api, { + // Not adding series labels. + // TODO + updatedSeries: [] + }); + }; + + ECharts.prototype.appendData = function (params) { + if (this._disposed) { + disposedWarning(this.id); + return; + } + + var seriesIndex = params.seriesIndex; + var ecModel = this.getModel(); + var seriesModel = ecModel.getSeriesByIndex(seriesIndex); + + if ("development" !== 'production') { + assert(params.data && seriesModel); + } + + seriesModel.appendData(params); // Note: `appendData` does not support that update extent of coordinate + // system, util some scenario require that. In the expected usage of + // `appendData`, the initial extent of coordinate system should better + // be fixed by axis `min`/`max` setting or initial data, otherwise if + // the extent changed while `appendData`, the location of the painted + // graphic elements have to be changed, which make the usage of + // `appendData` meaningless. + + this._scheduler.unfinished = true; + this.getZr().wakeUp(); + }; // A work around for no `internal` modifier in ts yet but + // need to strictly hide private methods to JS users. + + + ECharts.internalField = function () { + prepare = function (ecIns) { + var scheduler = ecIns._scheduler; + scheduler.restorePipelines(ecIns._model); + scheduler.prepareStageTasks(); + prepareView(ecIns, true); + prepareView(ecIns, false); + scheduler.plan(); + }; + /** + * Prepare view instances of charts and components + */ + + + prepareView = function (ecIns, isComponent) { + var ecModel = ecIns._model; + var scheduler = ecIns._scheduler; + var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews; + var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap; + var zr = ecIns._zr; + var api = ecIns._api; + + for (var i = 0; i < viewList.length; i++) { + viewList[i].__alive = false; + } + + isComponent ? ecModel.eachComponent(function (componentType, model) { + componentType !== 'series' && doPrepare(model); + }) : ecModel.eachSeries(doPrepare); + + function doPrepare(model) { + // By defaut view will be reused if possible for the case that `setOption` with "notMerge" + // mode and need to enable transition animation. (Usually, when they have the same id, or + // especially no id but have the same type & name & index. See the `model.id` generation + // rule in `makeIdAndName` and `viewId` generation rule here). + // But in `replaceMerge` mode, this feature should be able to disabled when it is clear that + // the new model has nothing to do with the old model. + var requireNewView = model.__requireNewView; // This command should not work twice. + + model.__requireNewView = false; // Consider: id same and type changed. + + var viewId = '_ec_' + model.id + '_' + model.type; + var view = !requireNewView && viewMap[viewId]; + + if (!view) { + var classType = parseClassType(model.type); + var Clazz = isComponent ? ComponentView.getClass(classType.main, classType.sub) : // FIXME:TS + // (ChartView as ChartViewConstructor).getClass('series', classType.sub) + // For backward compat, still support a chart type declared as only subType + // like "liquidfill", but recommend "series.liquidfill" + // But need a base class to make a type series. + ChartView.getClass(classType.sub); + + if ("development" !== 'production') { + assert(Clazz, classType.sub + ' does not exist.'); + } + + view = new Clazz(); + view.init(ecModel, api); + viewMap[viewId] = view; + viewList.push(view); + zr.add(view.group); + } + + model.__viewId = view.__id = viewId; + view.__alive = true; + view.__model = model; + view.group.__ecComponentInfo = { + mainType: model.mainType, + index: model.componentIndex + }; + !isComponent && scheduler.prepareView(view, model, ecModel, api); + } + + for (var i = 0; i < viewList.length;) { + var view = viewList[i]; + + if (!view.__alive) { + !isComponent && view.renderTask.dispose(); + zr.remove(view.group); + view.dispose(ecModel, api); + viewList.splice(i, 1); + + if (viewMap[view.__id] === view) { + delete viewMap[view.__id]; + } + + view.__id = view.group.__ecComponentInfo = null; + } else { + i++; + } + } + }; + + updateDirectly = function (ecIns, method, payload, mainType, subType) { + var ecModel = ecIns._model; + ecModel.setUpdatePayload(payload); // broadcast + + if (!mainType) { + // FIXME + // Chart will not be update directly here, except set dirty. + // But there is no such scenario now. + each([].concat(ecIns._componentsViews).concat(ecIns._chartsViews), callView); + return; + } + + var query = {}; + query[mainType + 'Id'] = payload[mainType + 'Id']; + query[mainType + 'Index'] = payload[mainType + 'Index']; + query[mainType + 'Name'] = payload[mainType + 'Name']; + var condition = { + mainType: mainType, + query: query + }; + subType && (condition.subType = subType); // subType may be '' by parseClassType; + + var excludeSeriesId = payload.excludeSeriesId; + var excludeSeriesIdMap; + + if (excludeSeriesId != null) { + excludeSeriesIdMap = createHashMap(); + each(normalizeToArray(excludeSeriesId), function (id) { + var modelId = convertOptionIdName(id, null); + + if (modelId != null) { + excludeSeriesIdMap.set(modelId, true); + } + }); + } + + if (isHighDownPayload(payload)) { + allLeaveBlur(ecIns._api); + } // If dispatchAction before setOption, do nothing. + + + ecModel && ecModel.eachComponent(condition, function (model) { + var isExcluded = excludeSeriesIdMap && excludeSeriesIdMap.get(model.id) !== null; + + if (isExcluded) { + return; + } + + if (isHighDownPayload(payload)) { + if (model instanceof SeriesModel) { + if (payload.type === HIGHLIGHT_ACTION_TYPE && !payload.notBlur) { + blurSeriesFromHighlightPayload(model, payload, ecIns._api); + } + } else { + var _a = findComponentHighDownDispatchers(model.mainType, model.componentIndex, payload.name, ecIns._api), + focusSelf = _a.focusSelf, + dispatchers = _a.dispatchers; + + if (payload.type === HIGHLIGHT_ACTION_TYPE && focusSelf && !payload.notBlur) { + blurComponent(model.mainType, model.componentIndex, ecIns._api); + } // PENDING: + // Whether to put this "enter emphasis" code in `ComponentView`, + // which will be the same as `ChartView` but might be not necessary + // and will be far from this logic. + + + if (dispatchers) { + each(dispatchers, function (dispatcher) { + payload.type === HIGHLIGHT_ACTION_TYPE ? enterEmphasis(dispatcher) : leaveEmphasis(dispatcher); + }); + } + } + } else if (isSelectChangePayload(payload)) { + // TODO geo + if (model instanceof SeriesModel) { + toggleSelectionFromPayload(model, payload, ecIns._api); + updateSeriesElementSelection(model); + markStatusToUpdate(ecIns); + } + } + }, ecIns); + ecModel && ecModel.eachComponent(condition, function (model) { + var isExcluded = excludeSeriesIdMap && excludeSeriesIdMap.get(model.id) !== null; + + if (isExcluded) { + return; + } + callView(ecIns[mainType === 'series' ? '_chartsMap' : '_componentsMap'][model.__viewId]); + }, ecIns); + + function callView(view) { + view && view.__alive && view[method] && view[method](view.__model, ecModel, ecIns._api, payload); + } + }; + + updateMethods = { + prepareAndUpdate: function (payload) { + prepare(this); + updateMethods.update.call(this, payload, { + // Needs to mark option changed if newOption is given. + // It's from MagicType. + // TODO If use a separate flag optionChanged in payload? + optionChanged: payload.newOption != null + }); + }, + update: function (payload, updateParams) { + var ecModel = this._model; + var api = this._api; + var zr = this._zr; + var coordSysMgr = this._coordSysMgr; + var scheduler = this._scheduler; // update before setOption + + if (!ecModel) { + return; + } + + ecModel.setUpdatePayload(payload); + scheduler.restoreData(ecModel, payload); + scheduler.performSeriesTasks(ecModel); // TODO + // Save total ecModel here for undo/redo (after restoring data and before processing data). + // Undo (restoration of total ecModel) can be carried out in 'action' or outside API call. + // Create new coordinate system each update + // In LineView may save the old coordinate system and use it to get the orignal point + + coordSysMgr.create(ecModel, api); + scheduler.performDataProcessorTasks(ecModel, payload); // Current stream render is not supported in data process. So we can update + // stream modes after data processing, where the filtered data is used to + // deteming whether use progressive rendering. + + updateStreamModes(this, ecModel); // We update stream modes before coordinate system updated, then the modes info + // can be fetched when coord sys updating (consider the barGrid extent fix). But + // the drawback is the full coord info can not be fetched. Fortunately this full + // coord is not requied in stream mode updater currently. + + coordSysMgr.update(ecModel, api); + clearColorPalette(ecModel); + scheduler.performVisualTasks(ecModel, payload); + render(this, ecModel, api, payload, updateParams); // Set background + + var backgroundColor = ecModel.get('backgroundColor') || 'transparent'; + var darkMode = ecModel.get('darkMode'); // In IE8 + + if (!env.canvasSupported) { + var colorArr = parse(backgroundColor); + backgroundColor = stringify(colorArr, 'rgb'); + + if (colorArr[3] === 0) { + backgroundColor = 'transparent'; + } + } else { + zr.setBackgroundColor(backgroundColor); // Force set dark mode. + + if (darkMode != null && darkMode !== 'auto') { + zr.setDarkMode(darkMode); + } + } + + lifecycle.trigger('afterupdate', ecModel, api); + }, + updateTransform: function (payload) { + var _this = this; + + var ecModel = this._model; + var api = this._api; // update before setOption + + if (!ecModel) { + return; + } + + ecModel.setUpdatePayload(payload); // ChartView.markUpdateMethod(payload, 'updateTransform'); + + var componentDirtyList = []; + ecModel.eachComponent(function (componentType, componentModel) { + if (componentType === 'series') { + return; + } + + var componentView = _this.getViewOfComponentModel(componentModel); + + if (componentView && componentView.__alive) { + if (componentView.updateTransform) { + var result = componentView.updateTransform(componentModel, ecModel, api, payload); + result && result.update && componentDirtyList.push(componentView); + } else { + componentDirtyList.push(componentView); + } + } + }); + var seriesDirtyMap = createHashMap(); + ecModel.eachSeries(function (seriesModel) { + var chartView = _this._chartsMap[seriesModel.__viewId]; + + if (chartView.updateTransform) { + var result = chartView.updateTransform(seriesModel, ecModel, api, payload); + result && result.update && seriesDirtyMap.set(seriesModel.uid, 1); + } else { + seriesDirtyMap.set(seriesModel.uid, 1); + } + }); + clearColorPalette(ecModel); // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline. + // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true); + + this._scheduler.performVisualTasks(ecModel, payload, { + setDirty: true, + dirtyMap: seriesDirtyMap + }); // Currently, not call render of components. Geo render cost a lot. + // renderComponents(ecIns, ecModel, api, payload, componentDirtyList); + + + renderSeries(this, ecModel, api, payload, {}, seriesDirtyMap); + lifecycle.trigger('afterupdate', ecModel, api); + }, + updateView: function (payload) { + var ecModel = this._model; // update before setOption + + if (!ecModel) { + return; + } + + ecModel.setUpdatePayload(payload); + ChartView.markUpdateMethod(payload, 'updateView'); + clearColorPalette(ecModel); // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline. + + this._scheduler.performVisualTasks(ecModel, payload, { + setDirty: true + }); + + render(this, ecModel, this._api, payload, {}); + lifecycle.trigger('afterupdate', ecModel, this._api); + }, + updateVisual: function (payload) { + // updateMethods.update.call(this, payload); + var _this = this; + + var ecModel = this._model; // update before setOption + + if (!ecModel) { + return; + } + + ecModel.setUpdatePayload(payload); // clear all visual + + ecModel.eachSeries(function (seriesModel) { + seriesModel.getData().clearAllVisual(); + }); // Perform visual + + ChartView.markUpdateMethod(payload, 'updateVisual'); + clearColorPalette(ecModel); // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline. + + this._scheduler.performVisualTasks(ecModel, payload, { + visualType: 'visual', + setDirty: true + }); + + ecModel.eachComponent(function (componentType, componentModel) { + if (componentType !== 'series') { + var componentView = _this.getViewOfComponentModel(componentModel); + + componentView && componentView.__alive && componentView.updateVisual(componentModel, ecModel, _this._api, payload); + } + }); + ecModel.eachSeries(function (seriesModel) { + var chartView = _this._chartsMap[seriesModel.__viewId]; + chartView.updateVisual(seriesModel, ecModel, _this._api, payload); + }); + lifecycle.trigger('afterupdate', ecModel, this._api); + }, + updateLayout: function (payload) { + updateMethods.update.call(this, payload); + } + }; + + doConvertPixel = function (ecIns, methodName, finder, value) { + if (ecIns._disposed) { + disposedWarning(ecIns.id); + return; + } + + var ecModel = ecIns._model; + + var coordSysList = ecIns._coordSysMgr.getCoordinateSystems(); + + var result; + var parsedFinder = parseFinder(ecModel, finder); + + for (var i = 0; i < coordSysList.length; i++) { + var coordSys = coordSysList[i]; + + if (coordSys[methodName] && (result = coordSys[methodName](ecModel, parsedFinder, value)) != null) { + return result; + } + } + + if ("development" !== 'production') { + console.warn('No coordinate system that supports ' + methodName + ' found by the given finder.'); + } + }; + + updateStreamModes = function (ecIns, ecModel) { + var chartsMap = ecIns._chartsMap; + var scheduler = ecIns._scheduler; + ecModel.eachSeries(function (seriesModel) { + scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]); + }); + }; + + doDispatchAction = function (payload, silent) { + var _this = this; + + var ecModel = this.getModel(); + var payloadType = payload.type; + var escapeConnect = payload.escapeConnect; + var actionWrap = actions[payloadType]; + var actionInfo = actionWrap.actionInfo; + var cptTypeTmp = (actionInfo.update || 'update').split(':'); + var updateMethod = cptTypeTmp.pop(); + var cptType = cptTypeTmp[0] != null && parseClassType(cptTypeTmp[0]); + this[IN_MAIN_PROCESS_KEY] = true; + var payloads = [payload]; + var batched = false; // Batch action + + if (payload.batch) { + batched = true; + payloads = map(payload.batch, function (item) { + item = defaults(extend({}, item), payload); + item.batch = null; + return item; + }); + } + + var eventObjBatch = []; + var eventObj; + var isSelectChange = isSelectChangePayload(payload); + var isHighDown = isHighDownPayload(payload); + each(payloads, function (batchItem) { + // Action can specify the event by return it. + eventObj = actionWrap.action(batchItem, _this._model, _this._api); // Emit event outside + + eventObj = eventObj || extend({}, batchItem); // Convert type to eventType + + eventObj.type = actionInfo.event || eventObj.type; + eventObjBatch.push(eventObj); // light update does not perform data process, layout and visual. + + if (isHighDown) { + var _a = preParseFinder(payload), + queryOptionMap = _a.queryOptionMap, + mainTypeSpecified = _a.mainTypeSpecified; + + var componentMainType = mainTypeSpecified ? queryOptionMap.keys()[0] : 'series'; + updateDirectly(_this, updateMethod, batchItem, componentMainType); + markStatusToUpdate(_this); + } else if (isSelectChange) { + // At present `dispatchAction({ type: 'select', ... })` is not supported on components. + // geo still use 'geoselect'. + updateDirectly(_this, updateMethod, batchItem, 'series'); + markStatusToUpdate(_this); + } else if (cptType) { + updateDirectly(_this, updateMethod, batchItem, cptType.main, cptType.sub); + } + }); + + if (updateMethod !== 'none' && !isHighDown && !isSelectChange && !cptType) { + // Still dirty + if (this[PENDING_UPDATE]) { + prepare(this); + updateMethods.update.call(this, payload); + this[PENDING_UPDATE] = null; + } else { + updateMethods[updateMethod].call(this, payload); + } + } // Follow the rule of action batch + + + if (batched) { + eventObj = { + type: actionInfo.event || payloadType, + escapeConnect: escapeConnect, + batch: eventObjBatch + }; + } else { + eventObj = eventObjBatch[0]; + } + + this[IN_MAIN_PROCESS_KEY] = false; + + if (!silent) { + var messageCenter = this._messageCenter; + messageCenter.trigger(eventObj.type, eventObj); // Extra triggered 'selectchanged' event + + if (isSelectChange) { + var newObj = { + type: 'selectchanged', + escapeConnect: escapeConnect, + selected: getAllSelectedIndices(ecModel), + isFromClick: payload.isFromClick || false, + fromAction: payload.type, + fromActionPayload: payload + }; + messageCenter.trigger(newObj.type, newObj); + } + } + }; + + flushPendingActions = function (silent) { + var pendingActions = this._pendingActions; + + while (pendingActions.length) { + var payload = pendingActions.shift(); + doDispatchAction.call(this, payload, silent); + } + }; + + triggerUpdatedEvent = function (silent) { + !silent && this.trigger('updated'); + }; + /** + * Event `rendered` is triggered when zr + * rendered. It is useful for realtime + * snapshot (reflect animation). + * + * Event `finished` is triggered when: + * (1) zrender rendering finished. + * (2) initial animation finished. + * (3) progressive rendering finished. + * (4) no pending action. + * (5) no delayed setOption needs to be processed. + */ + + + bindRenderedEvent = function (zr, ecIns) { + zr.on('rendered', function (params) { + ecIns.trigger('rendered', params); // The `finished` event should not be triggered repeatly, + // so it should only be triggered when rendering indeed happend + // in zrender. (Consider the case that dipatchAction is keep + // triggering when mouse move). + + if ( // Although zr is dirty if initial animation is not finished + // and this checking is called on frame, we also check + // animation finished for robustness. + zr.animation.isFinished() && !ecIns[PENDING_UPDATE] && !ecIns._scheduler.unfinished && !ecIns._pendingActions.length) { + ecIns.trigger('finished'); + } + }); + }; + + bindMouseEvent = function (zr, ecIns) { + zr.on('mouseover', function (e) { + var el = e.target; + var dispatcher = findEventDispatcher(el, isHighDownDispatcher); + + if (dispatcher) { + handleGlobalMouseOverForHighDown(dispatcher, e, ecIns._api); + markStatusToUpdate(ecIns); + } + }).on('mouseout', function (e) { + var el = e.target; + var dispatcher = findEventDispatcher(el, isHighDownDispatcher); + + if (dispatcher) { + handleGlboalMouseOutForHighDown(dispatcher, e, ecIns._api); + markStatusToUpdate(ecIns); + } + }).on('click', function (e) { + var el = e.target; + var dispatcher = findEventDispatcher(el, function (target) { + return getECData(target).dataIndex != null; + }, true); + + if (dispatcher) { + var actionType = dispatcher.selected ? 'unselect' : 'select'; + var ecData = getECData(dispatcher); + + ecIns._api.dispatchAction({ + type: actionType, + dataType: ecData.dataType, + dataIndexInside: ecData.dataIndex, + seriesIndex: ecData.seriesIndex, + isFromClick: true + }); + } + }); + }; + + clearColorPalette = function (ecModel) { + ecModel.clearColorPalette(); + ecModel.eachSeries(function (seriesModel) { + seriesModel.clearColorPalette(); + }); + }; + + render = function (ecIns, ecModel, api, payload, updateParams) { + renderComponents(ecIns, ecModel, api, payload, updateParams); + each(ecIns._chartsViews, function (chart) { + chart.__alive = false; + }); + renderSeries(ecIns, ecModel, api, payload, updateParams); // Remove groups of unrendered charts + + each(ecIns._chartsViews, function (chart) { + if (!chart.__alive) { + chart.remove(ecModel, api); + } + }); + }; + + renderComponents = function (ecIns, ecModel, api, payload, updateParams, dirtyList) { + each(dirtyList || ecIns._componentsViews, function (componentView) { + var componentModel = componentView.__model; + clearStates(componentModel, componentView); + componentView.render(componentModel, ecModel, api, payload); + updateZ(componentModel, componentView); + updateStates(componentModel, componentView); + }); + }; + /** + * Render each chart and component + */ + + + renderSeries = function (ecIns, ecModel, api, payload, updateParams, dirtyMap) { + // Render all charts + var scheduler = ecIns._scheduler; + updateParams = extend(updateParams || {}, { + updatedSeries: ecModel.getSeries() + }); // TODO progressive? + + lifecycle.trigger('series:beforeupdate', ecModel, api, updateParams); + var unfinished = false; + ecModel.eachSeries(function (seriesModel) { + var chartView = ecIns._chartsMap[seriesModel.__viewId]; + chartView.__alive = true; + var renderTask = chartView.renderTask; + scheduler.updatePayload(renderTask, payload); // TODO states on marker. + + clearStates(seriesModel, chartView); + + if (dirtyMap && dirtyMap.get(seriesModel.uid)) { + renderTask.dirty(); + } + + if (renderTask.perform(scheduler.getPerformArgs(renderTask))) { + unfinished = true; + } + + chartView.group.silent = !!seriesModel.get('silent'); // Should not call markRedraw on group, because it will disable zrender + // increamental render (alway render from the __startIndex each frame) + // chartView.group.markRedraw(); + + updateBlend(seriesModel, chartView); + updateSeriesElementSelection(seriesModel); + }); + scheduler.unfinished = unfinished || scheduler.unfinished; + lifecycle.trigger('series:layoutlabels', ecModel, api, updateParams); // transition after label is layouted. + + lifecycle.trigger('series:transition', ecModel, api, updateParams); + ecModel.eachSeries(function (seriesModel) { + var chartView = ecIns._chartsMap[seriesModel.__viewId]; // Update Z after labels updated. Before applying states. + + updateZ(seriesModel, chartView); // NOTE: Update states after label is updated. + // label should be in normal status when layouting. + + updateStates(seriesModel, chartView); + }); // If use hover layer + + updateHoverLayerStatus(ecIns, ecModel); + lifecycle.trigger('series:afterupdate', ecModel, api, updateParams); + }; + + markStatusToUpdate = function (ecIns) { + ecIns[STATUS_NEEDS_UPDATE_KEY] = true; // Wake up zrender if it's sleep. Let it update states in the next frame. + + ecIns.getZr().wakeUp(); + }; + + applyChangedStates = function (ecIns) { + if (!ecIns[STATUS_NEEDS_UPDATE_KEY]) { + return; + } + + ecIns.getZr().storage.traverse(function (el) { + // Not applied on removed elements, it may still in fading. + if (isElementRemoved(el)) { + return; + } + + applyElementStates(el); + }); + ecIns[STATUS_NEEDS_UPDATE_KEY] = false; + }; + + function applyElementStates(el) { + var newStates = []; + var oldStates = el.currentStates; // Keep other states. + + for (var i = 0; i < oldStates.length; i++) { + var stateName = oldStates[i]; + + if (!(stateName === 'emphasis' || stateName === 'blur' || stateName === 'select')) { + newStates.push(stateName); + } + } // Only use states when it's exists. + + + if (el.selected && el.states.select) { + newStates.push('select'); + } + + if (el.hoverState === HOVER_STATE_EMPHASIS && el.states.emphasis) { + newStates.push('emphasis'); + } else if (el.hoverState === HOVER_STATE_BLUR && el.states.blur) { + newStates.push('blur'); + } + + el.useStates(newStates); + } + + function updateHoverLayerStatus(ecIns, ecModel) { + var zr = ecIns._zr; + var storage = zr.storage; + var elCount = 0; + storage.traverse(function (el) { + if (!el.isGroup) { + elCount++; + } + }); + + if (elCount > ecModel.get('hoverLayerThreshold') && !env.node && !env.worker) { + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.preventUsingHoverLayer) { + return; + } + + var chartView = ecIns._chartsMap[seriesModel.__viewId]; + + if (chartView.__alive) { + chartView.group.traverse(function (el) { + if (el.states.emphasis) { + el.states.emphasis.hoverLayer = true; + } + }); + } + }); + } + } + /** + * Update chart and blend. + */ + + function updateBlend(seriesModel, chartView) { + var blendMode = seriesModel.get('blendMode') || null; + + if ("development" !== 'production') { + if (!env.canvasSupported && blendMode && blendMode !== 'source-over') { + console.warn('Only canvas support blendMode'); + } + } + + chartView.group.traverse(function (el) { + // FIXME marker and other components + if (!el.isGroup) { + // DONT mark the element dirty. In case element is incremental and don't wan't to rerender. + el.style.blend = blendMode; + } + + if (el.eachPendingDisplayable) { + el.eachPendingDisplayable(function (displayable) { + displayable.style.blend = blendMode; + }); + } + }); + } + + function updateZ(model, view) { + if (model.preventAutoZ) { + return; + } // Set z and zlevel + + + _updateZ(view.group, model.get('z') || 0, model.get('zlevel') || 0, -Infinity); + } + + function _updateZ(el, z, zlevel, maxZ2) { + // Group may also have textContent + var label = el.getTextContent(); + var labelLine = el.getTextGuideLine(); + var isGroup = el.isGroup; + + if (isGroup) { + // set z & zlevel of children elements of Group + // el.traverse((childEl: Element) => _updateZ(childEl, z, zlevel)); + var children = el.childrenRef(); + + for (var i = 0; i < children.length; i++) { + maxZ2 = Math.max(_updateZ(children[i], z, zlevel, maxZ2), maxZ2); + } + } else { + // not Group + el.z = z; + el.zlevel = zlevel; + maxZ2 = Math.max(el.z2, maxZ2); + } // always set z and zlevel if label/labelLine exists + + + if (label) { + label.z = z; + label.zlevel = zlevel; // lift z2 of text content + // TODO if el.emphasis.z2 is spcefied, what about textContent. + + isFinite(maxZ2) && (label.z2 = maxZ2 + 2); + } + + if (labelLine) { + var textGuideLineConfig = el.textGuideLineConfig; + labelLine.z = z; + labelLine.zlevel = zlevel; + isFinite(maxZ2) && (labelLine.z2 = maxZ2 + (textGuideLineConfig && textGuideLineConfig.showAbove ? 1 : -1)); + } + + return maxZ2; + } // Clear states without animation. + // TODO States on component. + + + function clearStates(model, view) { + view.group.traverse(function (el) { + // Not applied on removed elements, it may still in fading. + if (isElementRemoved(el)) { + return; + } + + var textContent = el.getTextContent(); + var textGuide = el.getTextGuideLine(); + + if (el.stateTransition) { + el.stateTransition = null; + } + + if (textContent && textContent.stateTransition) { + textContent.stateTransition = null; + } + + if (textGuide && textGuide.stateTransition) { + textGuide.stateTransition = null; + } // TODO If el is incremental. + + + if (el.hasState()) { + el.prevStates = el.currentStates; + el.clearStates(); + } else if (el.prevStates) { + el.prevStates = null; + } + }); + } + + function updateStates(model, view) { + var stateAnimationModel = model.getModel('stateAnimation'); + var enableAnimation = model.isAnimationEnabled(); + var duration = stateAnimationModel.get('duration'); + var stateTransition = duration > 0 ? { + duration: duration, + delay: stateAnimationModel.get('delay'), + easing: stateAnimationModel.get('easing') // additive: stateAnimationModel.get('additive') + + } : null; + view.group.traverse(function (el) { + if (el.states && el.states.emphasis) { + // Not applied on removed elements, it may still in fading. + if (isElementRemoved(el)) { + return; + } + + if (el instanceof Path) { + savePathStates(el); + } // Only updated on changed element. In case element is incremental and don't wan't to rerender. + // TODO, a more proper way? + + + if (el.__dirty) { + var prevStates = el.prevStates; // Restore states without animation + + if (prevStates) { + el.useStates(prevStates); + } + } // Update state transition and enable animation again. + + + if (enableAnimation) { + el.stateTransition = stateTransition; + var textContent = el.getTextContent(); + var textGuide = el.getTextGuideLine(); // TODO Is it necessary to animate label? + + if (textContent) { + textContent.stateTransition = stateTransition; + } + + if (textGuide) { + textGuide.stateTransition = stateTransition; + } + } // The use higlighted and selected flag to toggle states. + + + if (el.__dirty) { + applyElementStates(el); + } + } + }); + } + + createExtensionAPI = function (ecIns) { + return new ( + /** @class */ + function (_super) { + __extends(class_1, _super); + + function class_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + + class_1.prototype.getCoordinateSystems = function () { + return ecIns._coordSysMgr.getCoordinateSystems(); + }; + + class_1.prototype.getComponentByElement = function (el) { + while (el) { + var modelInfo = el.__ecComponentInfo; + + if (modelInfo != null) { + return ecIns._model.getComponent(modelInfo.mainType, modelInfo.index); + } + + el = el.parent; + } + }; + + class_1.prototype.enterEmphasis = function (el, highlightDigit) { + enterEmphasis(el, highlightDigit); + markStatusToUpdate(ecIns); + }; + + class_1.prototype.leaveEmphasis = function (el, highlightDigit) { + leaveEmphasis(el, highlightDigit); + markStatusToUpdate(ecIns); + }; + + class_1.prototype.enterBlur = function (el) { + enterBlur(el); + markStatusToUpdate(ecIns); + }; + + class_1.prototype.leaveBlur = function (el) { + leaveBlur(el); + markStatusToUpdate(ecIns); + }; + + class_1.prototype.enterSelect = function (el) { + enterSelect(el); + markStatusToUpdate(ecIns); + }; + + class_1.prototype.leaveSelect = function (el) { + leaveSelect(el); + markStatusToUpdate(ecIns); + }; + + class_1.prototype.getModel = function () { + return ecIns.getModel(); + }; + + class_1.prototype.getViewOfComponentModel = function (componentModel) { + return ecIns.getViewOfComponentModel(componentModel); + }; + + class_1.prototype.getViewOfSeriesModel = function (seriesModel) { + return ecIns.getViewOfSeriesModel(seriesModel); + }; + + return class_1; + }(ExtensionAPI))(ecIns); + }; + + enableConnect = function (chart) { + function updateConnectedChartsStatus(charts, status) { + for (var i = 0; i < charts.length; i++) { + var otherChart = charts[i]; + otherChart[CONNECT_STATUS_KEY] = status; + } + } + + each(eventActionMap, function (actionType, eventType) { + chart._messageCenter.on(eventType, function (event) { + if (connectedGroups[chart.group] && chart[CONNECT_STATUS_KEY] !== CONNECT_STATUS_PENDING) { + if (event && event.escapeConnect) { + return; + } + + var action_1 = chart.makeActionFromEvent(event); + var otherCharts_1 = []; + each(instances$1, function (otherChart) { + if (otherChart !== chart && otherChart.group === chart.group) { + otherCharts_1.push(otherChart); + } + }); + updateConnectedChartsStatus(otherCharts_1, CONNECT_STATUS_PENDING); + each(otherCharts_1, function (otherChart) { + if (otherChart[CONNECT_STATUS_KEY] !== CONNECT_STATUS_UPDATING) { + otherChart.dispatchAction(action_1); + } + }); + updateConnectedChartsStatus(otherCharts_1, CONNECT_STATUS_UPDATED); + } + }); + }); + }; + }(); + + return ECharts; + }(Eventful); + + var echartsProto = ECharts.prototype; + echartsProto.on = createRegisterEventWithLowercaseECharts('on'); + echartsProto.off = createRegisterEventWithLowercaseECharts('off'); + /** + * @deprecated + */ + // @ts-ignore + + echartsProto.one = function (eventName, cb, ctx) { + var self = this; + deprecateLog('ECharts#one is deprecated.'); + + function wrapped() { + var args2 = []; + + for (var _i = 0; _i < arguments.length; _i++) { + args2[_i] = arguments[_i]; + } + + cb && cb.apply && cb.apply(this, args2); // @ts-ignore + + self.off(eventName, wrapped); + } + + this.on.call(this, eventName, wrapped, ctx); + }; // /** + // * Encode visual infomation from data after data processing + // * + // * @param {module:echarts/model/Global} ecModel + // * @param {object} layout + // * @param {boolean} [layoutFilter] `true`: only layout, + // * `false`: only not layout, + // * `null`/`undefined`: all. + // * @param {string} taskBaseTag + // * @private + // */ + // function startVisualEncoding(ecIns, ecModel, api, payload, layoutFilter) { + // each(visualFuncs, function (visual, index) { + // let isLayout = visual.isLayout; + // if (layoutFilter == null + // || (layoutFilter === false && !isLayout) + // || (layoutFilter === true && isLayout) + // ) { + // visual.func(ecModel, api, payload); + // } + // }); + // } + + + var MOUSE_EVENT_NAMES = ['click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'mouseup', 'globalout', 'contextmenu']; + + function disposedWarning(id) { + if ("development" !== 'production') { + console.warn('Instance ' + id + ' has been disposed'); + } + } + + var actions = {}; + /** + * Map eventType to actionType + */ + + var eventActionMap = {}; + var dataProcessorFuncs = []; + var optionPreprocessorFuncs = []; + var visualFuncs = []; + var themeStorage = {}; + var loadingEffects = {}; + var instances$1 = {}; + var connectedGroups = {}; + var idBase = +new Date() - 0; + var groupIdBase = +new Date() - 0; + var DOM_ATTRIBUTE_KEY = '_echarts_instance_'; + /** + * @param opts.devicePixelRatio Use window.devicePixelRatio by default + * @param opts.renderer Can choose 'canvas' or 'svg' to render the chart. + * @param opts.width Use clientWidth of the input `dom` by default. + * Can be 'auto' (the same as null/undefined) + * @param opts.height Use clientHeight of the input `dom` by default. + * Can be 'auto' (the same as null/undefined) + * @param opts.locale Specify the locale. + * @param opts.useDirtyRect Enable dirty rectangle rendering or not. + */ + + function init$1(dom, theme, opts) { + if ("development" !== 'production') { + if (!dom) { + throw new Error('Initialize failed: invalid dom.'); + } + } + + var existInstance = getInstanceByDom(dom); + + if (existInstance) { + if ("development" !== 'production') { + console.warn('There is a chart instance already initialized on the dom.'); + } + + return existInstance; + } + + if ("development" !== 'production') { + if (isDom(dom) && dom.nodeName.toUpperCase() !== 'CANVAS' && (!dom.clientWidth && (!opts || opts.width == null) || !dom.clientHeight && (!opts || opts.height == null))) { + console.warn('Can\'t get DOM width or height. Please check ' + 'dom.clientWidth and dom.clientHeight. They should not be 0.' + 'For example, you may need to call this in the callback ' + 'of window.onload.'); + } + } + + var chart = new ECharts(dom, theme, opts); + chart.id = 'ec_' + idBase++; + instances$1[chart.id] = chart; + setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id); + enableConnect(chart); + lifecycle.trigger('afterinit', chart); + return chart; + } + /** + * @usage + * (A) + * ```js + * let chart1 = echarts.init(dom1); + * let chart2 = echarts.init(dom2); + * chart1.group = 'xxx'; + * chart2.group = 'xxx'; + * echarts.connect('xxx'); + * ``` + * (B) + * ```js + * let chart1 = echarts.init(dom1); + * let chart2 = echarts.init(dom2); + * echarts.connect('xxx', [chart1, chart2]); + * ``` + */ + + function connect(groupId) { + // Is array of charts + if (isArray(groupId)) { + var charts = groupId; + groupId = null; // If any chart has group + + each(charts, function (chart) { + if (chart.group != null) { + groupId = chart.group; + } + }); + groupId = groupId || 'g_' + groupIdBase++; + each(charts, function (chart) { + chart.group = groupId; + }); + } + + connectedGroups[groupId] = true; + return groupId; + } + /** + * @deprecated + */ + + function disConnect(groupId) { + connectedGroups[groupId] = false; + } + /** + * Alias and backword compat + */ + + var disconnect = disConnect; + /** + * Dispose a chart instance + */ + + function dispose$1(chart) { + if (typeof chart === 'string') { + chart = instances$1[chart]; + } else if (!(chart instanceof ECharts)) { + // Try to treat as dom + chart = getInstanceByDom(chart); + } + + if (chart instanceof ECharts && !chart.isDisposed()) { + chart.dispose(); + } + } + function getInstanceByDom(dom) { + return instances$1[getAttribute(dom, DOM_ATTRIBUTE_KEY)]; + } + function getInstanceById(key) { + return instances$1[key]; + } + /** + * Register theme + */ + + function registerTheme(name, theme) { + themeStorage[name] = theme; + } + /** + * Register option preprocessor + */ + + function registerPreprocessor(preprocessorFunc) { + if (indexOf(optionPreprocessorFuncs, preprocessorFunc) < 0) { + optionPreprocessorFuncs.push(preprocessorFunc); + } + } + function registerProcessor(priority, processor) { + normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_DEFAULT); + } + /** + * Register postIniter + * @param {Function} postInitFunc + */ + + function registerPostInit(postInitFunc) { + registerUpdateLifecycle('afterinit', postInitFunc); + } + /** + * Register postUpdater + * @param {Function} postUpdateFunc + */ + + function registerPostUpdate(postUpdateFunc) { + registerUpdateLifecycle('afterupdate', postUpdateFunc); + } + function registerUpdateLifecycle(name, cb) { + lifecycle.on(name, cb); + } + function registerAction(actionInfo, eventName, action) { + if (typeof eventName === 'function') { + action = eventName; + eventName = ''; + } + + var actionType = isObject(actionInfo) ? actionInfo.type : [actionInfo, actionInfo = { + event: eventName + }][0]; // Event name is all lowercase + + actionInfo.event = (actionInfo.event || actionType).toLowerCase(); + eventName = actionInfo.event; + + if (eventActionMap[eventName]) { + // Already registered. + return; + } // Validate action type and event name. + + + assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName)); + + if (!actions[actionType]) { + actions[actionType] = { + action: action, + actionInfo: actionInfo + }; + } + + eventActionMap[eventName] = actionType; + } + function registerCoordinateSystem(type, coordSysCreator) { + CoordinateSystemManager.register(type, coordSysCreator); + } + /** + * Get dimensions of specified coordinate system. + * @param {string} type + * @return {Array.} + */ + + function getCoordinateSystemDimensions(type) { + var coordSysCreator = CoordinateSystemManager.get(type); + + if (coordSysCreator) { + return coordSysCreator.getDimensionsInfo ? coordSysCreator.getDimensionsInfo() : coordSysCreator.dimensions.slice(); + } + } + + function registerLayout(priority, layoutTask) { + normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout'); + } + + function registerVisual(priority, visualTask) { + normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual'); + } + var registeredTasks = []; + + function normalizeRegister(targetList, priority, fn, defaultPriority, visualType) { + if (isFunction(priority) || isObject(priority)) { + fn = priority; + priority = defaultPriority; + } + + if ("development" !== 'production') { + if (isNaN(priority) || priority == null) { + throw new Error('Illegal priority'); + } // Check duplicate + + + each(targetList, function (wrap) { + assert(wrap.__raw !== fn); + }); + } // Already registered + + + if (indexOf(registeredTasks, fn) >= 0) { + return; + } + + registeredTasks.push(fn); + var stageHandler = Scheduler.wrapStageHandler(fn, visualType); + stageHandler.__prio = priority; + stageHandler.__raw = fn; + targetList.push(stageHandler); + } + + function registerLoading(name, loadingFx) { + loadingEffects[name] = loadingFx; + } + /** + * ZRender need a canvas context to do measureText. + * But in node environment canvas may be created by node-canvas. + * So we need to specify how to create a canvas instead of using document.createElement('canvas') + * + * Be careful of using it in the browser. + * + * @example + * let Canvas = require('canvas'); + * let echarts = require('echarts'); + * echarts.setCanvasCreator(function () { + * // Small size is enough. + * return new Canvas(32, 32); + * }); + */ + + function setCanvasCreator(creator) { + $override('createCanvas', creator); + } + /** + * The parameters and usage: see `geoSourceManager.registerMap`. + * Compatible with previous `echarts.registerMap`. + */ + + function registerMap(mapName, geoJson, specialAreas) { + geoSourceManager.registerMap(mapName, geoJson, specialAreas); + } + function getMap(mapName) { + return geoSourceManager.getMapForUser(mapName); + } + var registerTransform = registerExternalTransform; + /** + * Globa dispatchAction to a specified chart instance. + */ + // export function dispatchAction(payload: { chartId: string } & Payload, opt?: Parameters[1]) { + // if (!payload || !payload.chartId) { + // // Must have chartId to find chart + // return; + // } + // const chart = instances[payload.chartId]; + // if (chart) { + // chart.dispatchAction(payload, opt); + // } + // } + // Buitlin global visual + + registerVisual(PRIORITY_VISUAL_GLOBAL, seriesStyleTask); + registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataStyleTask); + registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataColorPaletteTask); + registerVisual(PRIORITY_VISUAL_GLOBAL, seriesSymbolTask); + registerVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataSymbolTask); + registerVisual(PRIORITY_VISUAL_DECAL, decalVisual); + registerPreprocessor(globalBackwardCompat); + registerProcessor(PRIORITY_PROCESSOR_DATASTACK, dataStack); + registerLoading('default', defaultLoading); // Default actions + + registerAction({ + type: HIGHLIGHT_ACTION_TYPE, + event: HIGHLIGHT_ACTION_TYPE, + update: HIGHLIGHT_ACTION_TYPE + }, noop); + registerAction({ + type: DOWNPLAY_ACTION_TYPE, + event: DOWNPLAY_ACTION_TYPE, + update: DOWNPLAY_ACTION_TYPE + }, noop); + registerAction({ + type: SELECT_ACTION_TYPE, + event: SELECT_ACTION_TYPE, + update: SELECT_ACTION_TYPE + }, noop); + registerAction({ + type: UNSELECT_ACTION_TYPE, + event: UNSELECT_ACTION_TYPE, + update: UNSELECT_ACTION_TYPE + }, noop); + registerAction({ + type: TOGGLE_SELECT_ACTION_TYPE, + event: TOGGLE_SELECT_ACTION_TYPE, + update: TOGGLE_SELECT_ACTION_TYPE + }, noop); // Default theme + + registerTheme('light', lightTheme); + registerTheme('dark', theme); // For backward compatibility, where the namespace `dataTool` will + // be mounted on `echarts` is the extension `dataTool` is imported. + + var dataTool = {}; + + var extensions = []; + var extensionRegisters = { + registerPreprocessor: registerPreprocessor, + registerProcessor: registerProcessor, + registerPostInit: registerPostInit, + registerPostUpdate: registerPostUpdate, + registerUpdateLifecycle: registerUpdateLifecycle, + registerAction: registerAction, + registerCoordinateSystem: registerCoordinateSystem, + registerLayout: registerLayout, + registerVisual: registerVisual, + registerTransform: registerTransform, + registerLoading: registerLoading, + registerMap: registerMap, + PRIORITY: PRIORITY, + ComponentModel: ComponentModel, + ComponentView: ComponentView, + SeriesModel: SeriesModel, + ChartView: ChartView, + // TODO Use ComponentModel and SeriesModel instead of Constructor + registerComponentModel: function (ComponentModelClass) { + ComponentModel.registerClass(ComponentModelClass); + }, + registerComponentView: function (ComponentViewClass) { + ComponentView.registerClass(ComponentViewClass); + }, + registerSeriesModel: function (SeriesModelClass) { + SeriesModel.registerClass(SeriesModelClass); + }, + registerChartView: function (ChartViewClass) { + ChartView.registerClass(ChartViewClass); + }, + registerSubTypeDefaulter: function (componentType, defaulter) { + ComponentModel.registerSubTypeDefaulter(componentType, defaulter); + }, + registerPainter: function (painterType, PainterCtor) { + registerPainter(painterType, PainterCtor); + } + }; + function use(ext) { + if (isArray(ext)) { + // use([ChartLine, ChartBar]); + each(ext, function (singleExt) { + use(singleExt); + }); + return; + } + + if (indexOf(extensions, ext) >= 0) { + return; + } + + extensions.push(ext); + + if (isFunction(ext)) { + ext = { + install: ext + }; + } + + ext.install(extensionRegisters); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function dataIndexMapValueLength(valNumOrArrLengthMoreThan2) { + return valNumOrArrLengthMoreThan2 == null ? 0 : valNumOrArrLengthMoreThan2.length || 1; + } + + function defaultKeyGetter(item) { + return item; + } + + var DataDiffer = + /** @class */ + function () { + /** + * @param context Can be visited by this.context in callback. + */ + function DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context, // By default: 'oneToOne'. + diffMode) { + this._old = oldArr; + this._new = newArr; + this._oldKeyGetter = oldKeyGetter || defaultKeyGetter; + this._newKeyGetter = newKeyGetter || defaultKeyGetter; // Visible in callback via `this.context`; + + this.context = context; + this._diffModeMultiple = diffMode === 'multiple'; + } + /** + * Callback function when add a data + */ + + + DataDiffer.prototype.add = function (func) { + this._add = func; + return this; + }; + /** + * Callback function when update a data + */ + + + DataDiffer.prototype.update = function (func) { + this._update = func; + return this; + }; + /** + * Callback function when update a data and only work in `cbMode: 'byKey'`. + */ + + + DataDiffer.prototype.updateManyToOne = function (func) { + this._updateManyToOne = func; + return this; + }; + /** + * Callback function when update a data and only work in `cbMode: 'byKey'`. + */ + + + DataDiffer.prototype.updateOneToMany = function (func) { + this._updateOneToMany = func; + return this; + }; + /** + * Callback function when update a data and only work in `cbMode: 'byKey'`. + */ + + + DataDiffer.prototype.updateManyToMany = function (func) { + this._updateManyToMany = func; + return this; + }; + /** + * Callback function when remove a data + */ + + + DataDiffer.prototype.remove = function (func) { + this._remove = func; + return this; + }; + + DataDiffer.prototype.execute = function () { + this[this._diffModeMultiple ? '_executeMultiple' : '_executeOneToOne'](); + }; + + DataDiffer.prototype._executeOneToOne = function () { + var oldArr = this._old; + var newArr = this._new; + var newDataIndexMap = {}; + var oldDataKeyArr = new Array(oldArr.length); + var newDataKeyArr = new Array(newArr.length); + + this._initIndexMap(oldArr, null, oldDataKeyArr, '_oldKeyGetter'); + + this._initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter'); + + for (var i = 0; i < oldArr.length; i++) { + var oldKey = oldDataKeyArr[i]; + var newIdxMapVal = newDataIndexMap[oldKey]; + var newIdxMapValLen = dataIndexMapValueLength(newIdxMapVal); // idx can never be empty array here. see 'set null' logic below. + + if (newIdxMapValLen > 1) { + // Consider there is duplicate key (for example, use dataItem.name as key). + // We should make sure every item in newArr and oldArr can be visited. + var newIdx = newIdxMapVal.shift(); + + if (newIdxMapVal.length === 1) { + newDataIndexMap[oldKey] = newIdxMapVal[0]; + } + + this._update && this._update(newIdx, i); + } else if (newIdxMapValLen === 1) { + newDataIndexMap[oldKey] = null; + this._update && this._update(newIdxMapVal, i); + } else { + this._remove && this._remove(i); + } + } + + this._performRestAdd(newDataKeyArr, newDataIndexMap); + }; + /** + * For example, consider the case: + * oldData: [o0, o1, o2, o3, o4, o5, o6, o7], + * newData: [n0, n1, n2, n3, n4, n5, n6, n7, n8], + * Where: + * o0, o1, n0 has key 'a' (many to one) + * o5, n4, n5, n6 has key 'b' (one to many) + * o2, n1 has key 'c' (one to one) + * n2, n3 has key 'd' (add) + * o3, o4 has key 'e' (remove) + * o6, o7, n7, n8 has key 'f' (many to many, treated as add and remove) + * Then: + * (The order of the following directives are not ensured.) + * this._updateManyToOne(n0, [o0, o1]); + * this._updateOneToMany([n4, n5, n6], o5); + * this._update(n1, o2); + * this._remove(o3); + * this._remove(o4); + * this._remove(o6); + * this._remove(o7); + * this._add(n2); + * this._add(n3); + * this._add(n7); + * this._add(n8); + */ + + + DataDiffer.prototype._executeMultiple = function () { + var oldArr = this._old; + var newArr = this._new; + var oldDataIndexMap = {}; + var newDataIndexMap = {}; + var oldDataKeyArr = []; + var newDataKeyArr = []; + + this._initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter'); + + this._initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter'); + + for (var i = 0; i < oldDataKeyArr.length; i++) { + var oldKey = oldDataKeyArr[i]; + var oldIdxMapVal = oldDataIndexMap[oldKey]; + var newIdxMapVal = newDataIndexMap[oldKey]; + var oldIdxMapValLen = dataIndexMapValueLength(oldIdxMapVal); + var newIdxMapValLen = dataIndexMapValueLength(newIdxMapVal); + + if (oldIdxMapValLen > 1 && newIdxMapValLen === 1) { + this._updateManyToOne && this._updateManyToOne(newIdxMapVal, oldIdxMapVal); + newDataIndexMap[oldKey] = null; + } else if (oldIdxMapValLen === 1 && newIdxMapValLen > 1) { + this._updateOneToMany && this._updateOneToMany(newIdxMapVal, oldIdxMapVal); + newDataIndexMap[oldKey] = null; + } else if (oldIdxMapValLen === 1 && newIdxMapValLen === 1) { + this._update && this._update(newIdxMapVal, oldIdxMapVal); + newDataIndexMap[oldKey] = null; + } else if (oldIdxMapValLen > 1 && newIdxMapValLen > 1) { + this._updateManyToMany && this._updateManyToMany(newIdxMapVal, oldIdxMapVal); + newDataIndexMap[oldKey] = null; + } else if (oldIdxMapValLen > 1) { + for (var i_1 = 0; i_1 < oldIdxMapValLen; i_1++) { + this._remove && this._remove(oldIdxMapVal[i_1]); + } + } else { + this._remove && this._remove(oldIdxMapVal); + } + } + + this._performRestAdd(newDataKeyArr, newDataIndexMap); + }; + + DataDiffer.prototype._performRestAdd = function (newDataKeyArr, newDataIndexMap) { + for (var i = 0; i < newDataKeyArr.length; i++) { + var newKey = newDataKeyArr[i]; + var newIdxMapVal = newDataIndexMap[newKey]; + var idxMapValLen = dataIndexMapValueLength(newIdxMapVal); + + if (idxMapValLen > 1) { + for (var j = 0; j < idxMapValLen; j++) { + this._add && this._add(newIdxMapVal[j]); + } + } else if (idxMapValLen === 1) { + this._add && this._add(newIdxMapVal); + } // Support both `newDataKeyArr` are duplication removed or not removed. + + + newDataIndexMap[newKey] = null; + } + }; + + DataDiffer.prototype._initIndexMap = function (arr, // Can be null. + map, // In 'byKey', the output `keyArr` is duplication removed. + // In 'byIndex', the output `keyArr` is not duplication removed and + // its indices are accurately corresponding to `arr`. + keyArr, keyGetterName) { + var cbModeMultiple = this._diffModeMultiple; + + for (var i = 0; i < arr.length; i++) { + // Add prefix to avoid conflict with Object.prototype. + var key = '_ec_' + this[keyGetterName](arr[i], i); + + if (!cbModeMultiple) { + keyArr[i] = key; + } + + if (!map) { + continue; + } + + var idxMapVal = map[key]; + var idxMapValLen = dataIndexMapValueLength(idxMapVal); + + if (idxMapValLen === 0) { + // Simple optimize: in most cases, one index has one key, + // do not need array. + map[key] = i; + + if (cbModeMultiple) { + keyArr.push(key); + } + } else if (idxMapValLen === 1) { + map[key] = [idxMapVal, i]; + } else { + idxMapVal.push(i); + } + } + }; + + return DataDiffer; + }(); + + var DimensionUserOuput = + /** @class */ + function () { + function DimensionUserOuput(encode, dimRequest) { + this._encode = encode; + this._schema = dimRequest; + } + + DimensionUserOuput.prototype.get = function () { + return { + // Do not generate full dimension name until fist used. + fullDimensions: this._getFullDimensionNames(), + encode: this._encode + }; + }; + /** + * Get all data store dimension names. + * Theoretically a series data store is defined both by series and used dataset (if any). + * If some dimensions are omitted for performance reason in `this.dimensions`, + * the dimension name may not be auto-generated if user does not specify a dimension name. + * In this case, the dimension name is `null`/`undefined`. + */ + + + DimensionUserOuput.prototype._getFullDimensionNames = function () { + if (!this._cachedDimNames) { + this._cachedDimNames = this._schema ? this._schema.makeOutputDimensionNames() : []; + } + + return this._cachedDimNames; + }; + + return DimensionUserOuput; + }(); + function summarizeDimensions(data, schema) { + var summary = {}; + var encode = summary.encode = {}; + var notExtraCoordDimMap = createHashMap(); + var defaultedLabel = []; + var defaultedTooltip = []; + var userOutputEncode = {}; + each(data.dimensions, function (dimName) { + var dimItem = data.getDimensionInfo(dimName); + var coordDim = dimItem.coordDim; + + if (coordDim) { + if ("development" !== 'production') { + assert(VISUAL_DIMENSIONS.get(coordDim) == null); + } + + var coordDimIndex = dimItem.coordDimIndex; + getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName; + + if (!dimItem.isExtraCoord) { + notExtraCoordDimMap.set(coordDim, 1); // Use the last coord dim (and label friendly) as default label, + // because when dataset is used, it is hard to guess which dimension + // can be value dimension. If both show x, y on label is not look good, + // and conventionally y axis is focused more. + + if (mayLabelDimType(dimItem.type)) { + defaultedLabel[0] = dimName; + } // User output encode do not contain generated coords. + // And it only has index. User can use index to retrieve value from the raw item array. + + + getOrCreateEncodeArr(userOutputEncode, coordDim)[coordDimIndex] = data.getDimensionIndex(dimItem.name); + } + + if (dimItem.defaultTooltip) { + defaultedTooltip.push(dimName); + } + } + + VISUAL_DIMENSIONS.each(function (v, otherDim) { + var encodeArr = getOrCreateEncodeArr(encode, otherDim); + var dimIndex = dimItem.otherDims[otherDim]; + + if (dimIndex != null && dimIndex !== false) { + encodeArr[dimIndex] = dimItem.name; + } + }); + }); + var dataDimsOnCoord = []; + var encodeFirstDimNotExtra = {}; + notExtraCoordDimMap.each(function (v, coordDim) { + var dimArr = encode[coordDim]; + encodeFirstDimNotExtra[coordDim] = dimArr[0]; // Not necessary to remove duplicate, because a data + // dim canot on more than one coordDim. + + dataDimsOnCoord = dataDimsOnCoord.concat(dimArr); + }); + summary.dataDimsOnCoord = dataDimsOnCoord; + summary.dataDimIndicesOnCoord = map(dataDimsOnCoord, function (dimName) { + return data.getDimensionInfo(dimName).storeDimIndex; + }); + summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra; + var encodeLabel = encode.label; // FIXME `encode.label` is not recommanded, because formatter can not be set + // in this way. Use label.formatter instead. May be remove this approach someday. + + if (encodeLabel && encodeLabel.length) { + defaultedLabel = encodeLabel.slice(); + } + + var encodeTooltip = encode.tooltip; + + if (encodeTooltip && encodeTooltip.length) { + defaultedTooltip = encodeTooltip.slice(); + } else if (!defaultedTooltip.length) { + defaultedTooltip = defaultedLabel.slice(); + } + + encode.defaultedLabel = defaultedLabel; + encode.defaultedTooltip = defaultedTooltip; + summary.userOutput = new DimensionUserOuput(userOutputEncode, schema); + return summary; + } + + function getOrCreateEncodeArr(encode, dim) { + if (!encode.hasOwnProperty(dim)) { + encode[dim] = []; + } + + return encode[dim]; + } // FIXME:TS should be type `AxisType` + + + function getDimensionTypeByAxis(axisType) { + return axisType === 'category' ? 'ordinal' : axisType === 'time' ? 'time' : 'float'; + } + + function mayLabelDimType(dimType) { + // In most cases, ordinal and time do not suitable for label. + // Ordinal info can be displayed on axis. Time is too long. + return !(dimType === 'ordinal' || dimType === 'time'); + } // function findTheLastDimMayLabel(data) { + // // Get last value dim + // let dimensions = data.dimensions.slice(); + // let valueType; + // let valueDim; + // while (dimensions.length && ( + // valueDim = dimensions.pop(), + // valueType = data.getDimensionInfo(valueDim).type, + // valueType === 'ordinal' || valueType === 'time' + // )) {} // jshint ignore:line + // return valueDim; + // } + + var SeriesDimensionDefine = + /** @class */ + function () { + /** + * @param opt All of the fields will be shallow copied. + */ + function SeriesDimensionDefine(opt) { + /** + * The format of `otherDims` is: + * ```js + * { + * tooltip?: number + * label?: number + * itemName?: number + * seriesName?: number + * } + * ``` + * + * A `series.encode` can specified these fields: + * ```js + * encode: { + * // "3, 1, 5" is the index of data dimension. + * tooltip: [3, 1, 5], + * label: [0, 3], + * ... + * } + * ``` + * `otherDims` is the parse result of the `series.encode` above, like: + * ```js + * // Suppose the index of this data dimension is `3`. + * this.otherDims = { + * // `3` is at the index `0` of the `encode.tooltip` + * tooltip: 0, + * // `3` is at the index `1` of the `encode.label` + * label: 1 + * }; + * ``` + * + * This prop should never be `null`/`undefined` after initialized. + */ + this.otherDims = {}; + + if (opt != null) { + extend(this, opt); + } + } + + return SeriesDimensionDefine; + }(); + + var inner$4 = makeInner(); + var dimTypeShort = { + float: 'f', + int: 'i', + ordinal: 'o', + number: 'n', + time: 't' + }; + /** + * Represents the dimension requirement of a series. + * + * NOTICE: + * When there are too many dimensions in dataset and many series, only the used dimensions + * (i.e., used by coord sys and declared in `series.encode`) are add to `dimensionDefineList`. + * But users may query data by other unused dimension names. + * In this case, users can only query data if and only if they have defined dimension names + * via ec option, so we provide `getDimensionIndexFromSource`, which only query them from + * `source` dimensions. + */ + + var SeriesDataSchema = + /** @class */ + function () { + function SeriesDataSchema(opt) { + this.dimensions = opt.dimensions; + this._dimOmitted = opt.dimensionOmitted; + this.source = opt.source; + this._fullDimCount = opt.fullDimensionCount; + + this._updateDimOmitted(opt.dimensionOmitted); + } + + SeriesDataSchema.prototype.isDimensionOmitted = function () { + return this._dimOmitted; + }; + + SeriesDataSchema.prototype._updateDimOmitted = function (dimensionOmitted) { + this._dimOmitted = dimensionOmitted; + + if (!dimensionOmitted) { + return; + } + + if (!this._dimNameMap) { + this._dimNameMap = ensureSourceDimNameMap(this.source); + } + }; + /** + * @caution Can only be used when `dimensionOmitted: true`. + * + * Get index by user defined dimension name (i.e., not internal generate name). + * That is, get index from `dimensionsDefine`. + * If no `dimensionsDefine`, or no name get, return -1. + */ + + + SeriesDataSchema.prototype.getSourceDimensionIndex = function (dimName) { + return retrieve2(this._dimNameMap.get(dimName), -1); + }; + /** + * @caution Can only be used when `dimensionOmitted: true`. + * + * Notice: may return `null`/`undefined` if user not specify dimension names. + */ + + + SeriesDataSchema.prototype.getSourceDimension = function (dimIndex) { + var dimensionsDefine = this.source.dimensionsDefine; + + if (dimensionsDefine) { + return dimensionsDefine[dimIndex]; + } + }; + + SeriesDataSchema.prototype.makeStoreSchema = function () { + var dimCount = this._fullDimCount; + var willRetrieveDataByName = shouldRetrieveDataByName(this.source); + var makeHashStrict = !shouldOmitUnusedDimensions(dimCount); // If source don't have dimensions or series don't omit unsed dimensions. + // Generate from seriesDimList directly + + var dimHash = ''; + var dims = []; + + for (var fullDimIdx = 0, seriesDimIdx = 0; fullDimIdx < dimCount; fullDimIdx++) { + var property = void 0; + var type = void 0; + var ordinalMeta = void 0; + var seriesDimDef = this.dimensions[seriesDimIdx]; // The list has been sorted by `storeDimIndex` asc. + + if (seriesDimDef && seriesDimDef.storeDimIndex === fullDimIdx) { + property = willRetrieveDataByName ? seriesDimDef.name : null; + type = seriesDimDef.type; + ordinalMeta = seriesDimDef.ordinalMeta; + seriesDimIdx++; + } else { + var sourceDimDef = this.getSourceDimension(fullDimIdx); + + if (sourceDimDef) { + property = willRetrieveDataByName ? sourceDimDef.name : null; + type = sourceDimDef.type; + } + } + + dims.push({ + property: property, + type: type, + ordinalMeta: ordinalMeta + }); // If retrieving data by index, + // use to determine whether data can be shared. + // (Becuase in this case there might be no dimension name defined in dataset, but indices always exists). + // (indices are always 0, 1, 2, ..., so we can ignore them to shorten the hash). + // Otherwise if retrieving data by property name (like `data: [{aa: 123, bb: 765}, ...]`), + // use in hash. + + if (willRetrieveDataByName && property != null // For data stack, we have make sure each series has its own dim on this store. + // So we do not add property to hash to make sure they can share this store. + && (!seriesDimDef || !seriesDimDef.isCalculationCoord)) { + dimHash += makeHashStrict // Use escape character '`' in case that property name contains '$'. + ? property.replace(/\`/g, '`1').replace(/\$/g, '`2') // For better performance, when there are large dimensions, tolerant this defects that hardly meet. + : property; + } + + dimHash += '$'; + dimHash += dimTypeShort[type] || 'f'; + + if (ordinalMeta) { + dimHash += ordinalMeta.uid; + } + + dimHash += '$'; + } // Source from endpoint(usually series) will be read differently + // when seriesLayoutBy or startIndex(which is affected by sourceHeader) are different. + // So we use this three props as key. + + + var source = this.source; + var hash = [source.seriesLayoutBy, source.startIndex, dimHash].join('$$'); + return { + dimensions: dims, + hash: hash + }; + }; + + SeriesDataSchema.prototype.makeOutputDimensionNames = function () { + var result = []; + + for (var fullDimIdx = 0, seriesDimIdx = 0; fullDimIdx < this._fullDimCount; fullDimIdx++) { + var name_1 = void 0; + var seriesDimDef = this.dimensions[seriesDimIdx]; // The list has been sorted by `storeDimIndex` asc. + + if (seriesDimDef && seriesDimDef.storeDimIndex === fullDimIdx) { + if (!seriesDimDef.isCalculationCoord) { + name_1 = seriesDimDef.name; + } + + seriesDimIdx++; + } else { + var sourceDimDef = this.getSourceDimension(fullDimIdx); + + if (sourceDimDef) { + name_1 = sourceDimDef.name; + } + } + + result.push(name_1); + } + + return result; + }; + + SeriesDataSchema.prototype.appendCalculationDimension = function (dimDef) { + this.dimensions.push(dimDef); + dimDef.isCalculationCoord = true; + this._fullDimCount++; // If append dimension on a data store, consider the store + // might be shared by different series, series dimensions not + // really map to store dimensions. + + this._updateDimOmitted(true); + }; + + return SeriesDataSchema; + }(); + function isSeriesDataSchema(schema) { + return schema instanceof SeriesDataSchema; + } + function createDimNameMap(dimsDef) { + var dataDimNameMap = createHashMap(); + + for (var i = 0; i < (dimsDef || []).length; i++) { + var dimDefItemRaw = dimsDef[i]; + var userDimName = isObject(dimDefItemRaw) ? dimDefItemRaw.name : dimDefItemRaw; + + if (userDimName != null && dataDimNameMap.get(userDimName) == null) { + dataDimNameMap.set(userDimName, i); + } + } + + return dataDimNameMap; + } + function ensureSourceDimNameMap(source) { + var innerSource = inner$4(source); + return innerSource.dimNameMap || (innerSource.dimNameMap = createDimNameMap(source.dimensionsDefine)); + } + function shouldOmitUnusedDimensions(dimCount) { + return dimCount > 30; + } + + var isObject$2 = isObject; + var map$1 = map; + var CtorInt32Array$1 = typeof Int32Array === 'undefined' ? Array : Int32Array; // Use prefix to avoid index to be the same as otherIdList[idx], + // which will cause weird udpate animation. + + var ID_PREFIX = 'e\0\0'; + var INDEX_NOT_FOUND = -1; // type SeriesDimensionIndex = DimensionIndex; + + var TRANSFERABLE_PROPERTIES = ['hasItemOption', '_nameList', '_idList', '_invertedIndicesMap', '_dimSummary', 'userOutput', '_rawData', '_dimValueGetter', '_nameDimIdx', '_idDimIdx', '_nameRepeatCount']; + var CLONE_PROPERTIES = ['_approximateExtent']; // ----------------------------- + // Internal method declarations: + // ----------------------------- + + var prepareInvertedIndex; + var getId; + var getIdNameFromStore; + var normalizeDimensions; + var transferProperties; + var cloneListForMapAndSample; + var makeIdFromName; + + var SeriesData = + /** @class */ + function () { + /** + * @param dimensionsInput.dimensions + * For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...]. + * Dimensions should be concrete names like x, y, z, lng, lat, angle, radius + */ + function SeriesData(dimensionsInput, hostModel) { + this.type = 'list'; + this._dimOmitted = false; + this._nameList = []; + this._idList = []; // Models of data option is stored sparse for optimizing memory cost + // Never used yet (not used yet). + // private _optionModels: Model[] = []; + // Global visual properties after visual coding + + this._visual = {}; // Globel layout properties. + + this._layout = {}; // Item visual properties after visual coding + + this._itemVisuals = []; // Item layout properties after layout + + this._itemLayouts = []; // Graphic elemnents + + this._graphicEls = []; // key: dim, value: extent + + this._approximateExtent = {}; + this._calculationInfo = {}; // Having detected that there is data item is non primitive type + // (in type `OptionDataItemObject`). + // Like `data: [ { value: xx, itemStyle: {...} }, ...]` + // At present it only happen in `SOURCE_FORMAT_ORIGINAL`. + + this.hasItemOption = false; // Methods that create a new list based on this list should be listed here. + // Notice that those method should `RETURN` the new list. + + this.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'lttbDownSample', 'map']; // Methods that change indices of this list should be listed here. + + this.CHANGABLE_METHODS = ['filterSelf', 'selectRange']; + this.DOWNSAMPLE_METHODS = ['downSample', 'lttbDownSample']; + var dimensions; + var assignStoreDimIdx = false; + + if (isSeriesDataSchema(dimensionsInput)) { + dimensions = dimensionsInput.dimensions; + this._dimOmitted = dimensionsInput.isDimensionOmitted(); + this._schema = dimensionsInput; + } else { + assignStoreDimIdx = true; + dimensions = dimensionsInput; + } + + dimensions = dimensions || ['x', 'y']; + var dimensionInfos = {}; + var dimensionNames = []; + var invertedIndicesMap = {}; + var needsHasOwn = false; + var emptyObj = {}; + + for (var i = 0; i < dimensions.length; i++) { + // Use the original dimensions[i], where other flag props may exists. + var dimInfoInput = dimensions[i]; + var dimensionInfo = isString(dimInfoInput) ? new SeriesDimensionDefine({ + name: dimInfoInput + }) : !(dimInfoInput instanceof SeriesDimensionDefine) ? new SeriesDimensionDefine(dimInfoInput) : dimInfoInput; + var dimensionName = dimensionInfo.name; + dimensionInfo.type = dimensionInfo.type || 'float'; + + if (!dimensionInfo.coordDim) { + dimensionInfo.coordDim = dimensionName; + dimensionInfo.coordDimIndex = 0; + } + + var otherDims = dimensionInfo.otherDims = dimensionInfo.otherDims || {}; + dimensionNames.push(dimensionName); + dimensionInfos[dimensionName] = dimensionInfo; + + if (emptyObj[dimensionName] != null) { + needsHasOwn = true; + } + + if (dimensionInfo.createInvertedIndices) { + invertedIndicesMap[dimensionName] = []; + } + + if (otherDims.itemName === 0) { + this._nameDimIdx = i; + } + + if (otherDims.itemId === 0) { + this._idDimIdx = i; + } + + if ("development" !== 'production') { + assert(assignStoreDimIdx || dimensionInfo.storeDimIndex >= 0); + } + + if (assignStoreDimIdx) { + dimensionInfo.storeDimIndex = i; + } + } + + this.dimensions = dimensionNames; + this._dimInfos = dimensionInfos; + + this._initGetDimensionInfo(needsHasOwn); + + this.hostModel = hostModel; + this._invertedIndicesMap = invertedIndicesMap; + + if (this._dimOmitted) { + var dimIdxToName_1 = this._dimIdxToName = createHashMap(); + each(dimensionNames, function (dimName) { + dimIdxToName_1.set(dimensionInfos[dimName].storeDimIndex, dimName); + }); + } + } + /** + * + * Get concrete dimension name by dimension name or dimension index. + * If input a dimension name, do not validate whether the dimension name exits. + * + * @caution + * @param dim Must make sure the dimension is `SeriesDimensionLoose`. + * Because only those dimensions will have auto-generated dimension names if not + * have a user-specified name, and other dimensions will get a return of null/undefined. + * + * @notice Becuause of this reason, should better use `getDimensionIndex` instead, for examples: + * ```js + * const val = data.getStore().get(data.getDimensionIndex(dim), dataIdx); + * ``` + * + * @return Concrete dim name. + */ + + + SeriesData.prototype.getDimension = function (dim) { + var dimIdx = this._recognizeDimIndex(dim); + + if (dimIdx == null) { + return dim; + } + + dimIdx = dim; + + if (!this._dimOmitted) { + return this.dimensions[dimIdx]; + } // Retrieve from series dimension definition becuase it probably contains + // generated dimension name (like 'x', 'y'). + + + var dimName = this._dimIdxToName.get(dimIdx); + + if (dimName != null) { + return dimName; + } + + var sourceDimDef = this._schema.getSourceDimension(dimIdx); + + if (sourceDimDef) { + return sourceDimDef.name; + } + }; + /** + * Get dimension index in data store. Return -1 if not found. + * Can be used to index value from getRawValue. + */ + + + SeriesData.prototype.getDimensionIndex = function (dim) { + var dimIdx = this._recognizeDimIndex(dim); + + if (dimIdx != null) { + return dimIdx; + } + + if (dim == null) { + return -1; + } + + var dimInfo = this._getDimInfo(dim); + + return dimInfo ? dimInfo.storeDimIndex : this._dimOmitted ? this._schema.getSourceDimensionIndex(dim) : -1; + }; + /** + * The meanings of the input parameter `dim`: + * + * + If dim is a number (e.g., `1`), it means the index of the dimension. + * For example, `getDimension(0)` will return 'x' or 'lng' or 'radius'. + * + If dim is a number-like string (e.g., `"1"`): + * + If there is the same concrete dim name defined in `series.dimensions` or `dataset.dimensions`, + * it means that concrete name. + * + If not, it will be converted to a number, which means the index of the dimension. + * (why? because of the backward compatbility. We have been tolerating number-like string in + * dimension setting, although now it seems that it is not a good idea.) + * For example, `visualMap[i].dimension: "1"` is the same meaning as `visualMap[i].dimension: 1`, + * if no dimension name is defined as `"1"`. + * + If dim is a not-number-like string, it means the concrete dim name. + * For example, it can be be default name `"x"`, `"y"`, `"z"`, `"lng"`, `"lat"`, `"angle"`, `"radius"`, + * or customized in `dimensions` property of option like `"age"`. + * + * @return recogonized `DimensionIndex`. Otherwise return null/undefined (means that dim is `DimensionName`). + */ + + + SeriesData.prototype._recognizeDimIndex = function (dim) { + if (typeof dim === 'number' // If being a number-like string but not being defined as a dimension name. + || dim != null && !isNaN(dim) && !this._getDimInfo(dim) && (!this._dimOmitted || this._schema.getSourceDimensionIndex(dim) < 0)) { + return +dim; + } + }; + + SeriesData.prototype._getStoreDimIndex = function (dim) { + var dimIdx = this.getDimensionIndex(dim); + + if ("development" !== 'production') { + if (dimIdx == null) { + throw new Error('Unkown dimension ' + dim); + } + } + + return dimIdx; + }; + /** + * Get type and calculation info of particular dimension + * @param dim + * Dimension can be concrete names like x, y, z, lng, lat, angle, radius + * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius' + */ + + + SeriesData.prototype.getDimensionInfo = function (dim) { + // Do not clone, because there may be categories in dimInfo. + return this._getDimInfo(this.getDimension(dim)); + }; + + SeriesData.prototype._initGetDimensionInfo = function (needsHasOwn) { + var dimensionInfos = this._dimInfos; + this._getDimInfo = needsHasOwn ? function (dimName) { + return dimensionInfos.hasOwnProperty(dimName) ? dimensionInfos[dimName] : undefined; + } : function (dimName) { + return dimensionInfos[dimName]; + }; + }; + /** + * concrete dimension name list on coord. + */ + + + SeriesData.prototype.getDimensionsOnCoord = function () { + return this._dimSummary.dataDimsOnCoord.slice(); + }; + + SeriesData.prototype.mapDimension = function (coordDim, idx) { + var dimensionsSummary = this._dimSummary; + + if (idx == null) { + return dimensionsSummary.encodeFirstDimNotExtra[coordDim]; + } + + var dims = dimensionsSummary.encode[coordDim]; + return dims ? dims[idx] : null; + }; + + SeriesData.prototype.mapDimensionsAll = function (coordDim) { + var dimensionsSummary = this._dimSummary; + var dims = dimensionsSummary.encode[coordDim]; + return (dims || []).slice(); + }; + + SeriesData.prototype.getStore = function () { + return this._store; + }; + /** + * Initialize from data + * @param data source or data or data store. + * @param nameList The name of a datum is used on data diff and + * default label/tooltip. + * A name can be specified in encode.itemName, + * or dataItem.name (only for series option data), + * or provided in nameList from outside. + */ + + + SeriesData.prototype.initData = function (data, nameList, dimValueGetter) { + var _this = this; + + var store; + + if (data instanceof DataStore) { + store = data; + } + + if (!store) { + var dimensions = this.dimensions; + var provider = isSourceInstance(data) || isArrayLike(data) ? new DefaultDataProvider(data, dimensions.length) : data; + store = new DataStore(); + var dimensionInfos = map$1(dimensions, function (dimName) { + return { + type: _this._dimInfos[dimName].type, + property: dimName + }; + }); + store.initData(provider, dimensionInfos, dimValueGetter); + } + + this._store = store; // Reset + + this._nameList = (nameList || []).slice(); + this._idList = []; + this._nameRepeatCount = {}; + + this._doInit(0, store.count()); // Cache summary info for fast visit. See "dimensionHelper". + // Needs to be initialized after store is prepared. + + + this._dimSummary = summarizeDimensions(this, this._schema); + this.userOutput = this._dimSummary.userOutput; + }; + /** + * Caution: Can be only called on raw data (before `this._indices` created). + */ + + + SeriesData.prototype.appendData = function (data) { + var range = this._store.appendData(data); + + this._doInit(range[0], range[1]); + }; + /** + * Caution: Can be only called on raw data (before `this._indices` created). + * This method does not modify `rawData` (`dataProvider`), but only + * add values to store. + * + * The final count will be increased by `Math.max(values.length, names.length)`. + * + * @param values That is the SourceType: 'arrayRows', like + * [ + * [12, 33, 44], + * [NaN, 43, 1], + * ['-', 'asdf', 0] + * ] + * Each item is exaclty cooresponding to a dimension. + */ + + + SeriesData.prototype.appendValues = function (values, names) { + var _a = this._store.appendValues(values, names.length), + start = _a.start, + end = _a.end; + + var shouldMakeIdFromName = this._shouldMakeIdFromName(); + + this._updateOrdinalMeta(); + + if (names) { + for (var idx = start; idx < end; idx++) { + var sourceIdx = idx - start; + this._nameList[idx] = names[sourceIdx]; + + if (shouldMakeIdFromName) { + makeIdFromName(this, idx); + } + } + } + }; + + SeriesData.prototype._updateOrdinalMeta = function () { + var store = this._store; + var dimensions = this.dimensions; + + for (var i = 0; i < dimensions.length; i++) { + var dimInfo = this._dimInfos[dimensions[i]]; + + if (dimInfo.ordinalMeta) { + store.collectOrdinalMeta(dimInfo.storeDimIndex, dimInfo.ordinalMeta); + } + } + }; + + SeriesData.prototype._shouldMakeIdFromName = function () { + var provider = this._store.getProvider(); + + return this._idDimIdx == null && provider.getSource().sourceFormat !== SOURCE_FORMAT_TYPED_ARRAY && !provider.fillStorage; + }; + + SeriesData.prototype._doInit = function (start, end) { + if (start >= end) { + return; + } + + var store = this._store; + var provider = store.getProvider(); + + this._updateOrdinalMeta(); + + var nameList = this._nameList; + var idList = this._idList; + var sourceFormat = provider.getSource().sourceFormat; + var isFormatOriginal = sourceFormat === SOURCE_FORMAT_ORIGINAL; // Each data item is value + // [1, 2] + // 2 + // Bar chart, line chart which uses category axis + // only gives the 'y' value. 'x' value is the indices of category + // Use a tempValue to normalize the value to be a (x, y) value + // If dataItem is {name: ...} or {id: ...}, it has highest priority. + // This kind of ids and names are always stored `_nameList` and `_idList`. + + if (isFormatOriginal && !provider.pure) { + var sharedDataItem = []; + + for (var idx = start; idx < end; idx++) { + // NOTICE: Try not to write things into dataItem + var dataItem = provider.getItem(idx, sharedDataItem); + + if (!this.hasItemOption && isDataItemOption(dataItem)) { + this.hasItemOption = true; + } + + if (dataItem) { + var itemName = dataItem.name; + + if (nameList[idx] == null && itemName != null) { + nameList[idx] = convertOptionIdName(itemName, null); + } + + var itemId = dataItem.id; + + if (idList[idx] == null && itemId != null) { + idList[idx] = convertOptionIdName(itemId, null); + } + } + } + } + + if (this._shouldMakeIdFromName()) { + for (var idx = start; idx < end; idx++) { + makeIdFromName(this, idx); + } + } + + prepareInvertedIndex(this); + }; + /** + * PENDING: In fact currently this function is only used to short-circuit + * the calling of `scale.unionExtentFromData` when data have been filtered by modules + * like "dataZoom". `scale.unionExtentFromData` is used to calculate data extent for series on + * an axis, but if a "axis related data filter module" is used, the extent of the axis have + * been fixed and no need to calling `scale.unionExtentFromData` actually. + * But if we add "custom data filter" in future, which is not "axis related", this method may + * be still needed. + * + * Optimize for the scenario that data is filtered by a given extent. + * Consider that if data amount is more than hundreds of thousand, + * extent calculation will cost more than 10ms and the cache will + * be erased because of the filtering. + */ + + + SeriesData.prototype.getApproximateExtent = function (dim) { + return this._approximateExtent[dim] || this._store.getDataExtent(this._getStoreDimIndex(dim)); + }; + /** + * Calculate extent on a filtered data might be time consuming. + * Approximate extent is only used for: calculte extent of filtered data outside. + */ + + + SeriesData.prototype.setApproximateExtent = function (extent, dim) { + dim = this.getDimension(dim); + this._approximateExtent[dim] = extent.slice(); + }; + + SeriesData.prototype.getCalculationInfo = function (key) { + return this._calculationInfo[key]; + }; + + SeriesData.prototype.setCalculationInfo = function (key, value) { + isObject$2(key) ? extend(this._calculationInfo, key) : this._calculationInfo[key] = value; + }; + /** + * @return Never be null/undefined. `number` will be converted to string. Becuase: + * In most cases, name is used in display, where returning a string is more convenient. + * In other cases, name is used in query (see `indexOfName`), where we can keep the + * rule that name `2` equals to name `'2'`. + */ + + + SeriesData.prototype.getName = function (idx) { + var rawIndex = this.getRawIndex(idx); + var name = this._nameList[rawIndex]; + + if (name == null && this._nameDimIdx != null) { + name = getIdNameFromStore(this, this._nameDimIdx, rawIndex); + } + + if (name == null) { + name = ''; + } + + return name; + }; + + SeriesData.prototype._getCategory = function (dimIdx, idx) { + var ordinal = this._store.get(dimIdx, idx); + + var ordinalMeta = this._store.getOrdinalMeta(dimIdx); + + if (ordinalMeta) { + return ordinalMeta.categories[ordinal]; + } + + return ordinal; + }; + /** + * @return Never null/undefined. `number` will be converted to string. Becuase: + * In all cases having encountered at present, id is used in making diff comparison, which + * are usually based on hash map. We can keep the rule that the internal id are always string + * (treat `2` is the same as `'2'`) to make the related logic simple. + */ + + + SeriesData.prototype.getId = function (idx) { + return getId(this, this.getRawIndex(idx)); + }; + + SeriesData.prototype.count = function () { + return this._store.count(); + }; + /** + * Get value. Return NaN if idx is out of range. + * + * @notice Should better to use `data.getStore().get(dimIndex, dataIdx)` instead. + */ + + + SeriesData.prototype.get = function (dim, idx) { + var store = this._store; + var dimInfo = this._dimInfos[dim]; + + if (dimInfo) { + return store.get(dimInfo.storeDimIndex, idx); + } + }; + /** + * @notice Should better to use `data.getStore().getByRawIndex(dimIndex, dataIdx)` instead. + */ + + + SeriesData.prototype.getByRawIndex = function (dim, rawIdx) { + var store = this._store; + var dimInfo = this._dimInfos[dim]; + + if (dimInfo) { + return store.getByRawIndex(dimInfo.storeDimIndex, rawIdx); + } + }; + + SeriesData.prototype.getIndices = function () { + return this._store.getIndices(); + }; + + SeriesData.prototype.getDataExtent = function (dim) { + return this._store.getDataExtent(this._getStoreDimIndex(dim)); + }; + + SeriesData.prototype.getSum = function (dim) { + return this._store.getSum(this._getStoreDimIndex(dim)); + }; + + SeriesData.prototype.getMedian = function (dim) { + return this._store.getMedian(this._getStoreDimIndex(dim)); + }; + + SeriesData.prototype.getValues = function (dimensions, idx) { + var _this = this; + + var store = this._store; + return isArray(dimensions) ? store.getValues(map$1(dimensions, function (dim) { + return _this._getStoreDimIndex(dim); + }), idx) : store.getValues(dimensions); + }; + /** + * If value is NaN. Inlcuding '-' + * Only check the coord dimensions. + */ + + + SeriesData.prototype.hasValue = function (idx) { + var dataDimIndicesOnCoord = this._dimSummary.dataDimIndicesOnCoord; + + for (var i = 0, len = dataDimIndicesOnCoord.length; i < len; i++) { + // Ordinal type originally can be string or number. + // But when an ordinal type is used on coord, it can + // not be string but only number. So we can also use isNaN. + if (isNaN(this._store.get(dataDimIndicesOnCoord[i], idx))) { + return false; + } + } + + return true; + }; + /** + * Retreive the index with given name + */ + + + SeriesData.prototype.indexOfName = function (name) { + for (var i = 0, len = this._store.count(); i < len; i++) { + if (this.getName(i) === name) { + return i; + } + } + + return -1; + }; + + SeriesData.prototype.getRawIndex = function (idx) { + return this._store.getRawIndex(idx); + }; + + SeriesData.prototype.indexOfRawIndex = function (rawIndex) { + return this._store.indexOfRawIndex(rawIndex); + }; + /** + * Only support the dimension which inverted index created. + * Do not support other cases until required. + * @param dim concrete dim + * @param value ordinal index + * @return rawIndex + */ + + + SeriesData.prototype.rawIndexOf = function (dim, value) { + var invertedIndices = dim && this._invertedIndicesMap[dim]; + + if ("development" !== 'production') { + if (!invertedIndices) { + throw new Error('Do not supported yet'); + } + } + + var rawIndex = invertedIndices[value]; + + if (rawIndex == null || isNaN(rawIndex)) { + return INDEX_NOT_FOUND; + } + + return rawIndex; + }; + /** + * Retreive the index of nearest value + * @param dim + * @param value + * @param [maxDistance=Infinity] + * @return If and only if multiple indices has + * the same value, they are put to the result. + */ + + + SeriesData.prototype.indicesOfNearest = function (dim, value, maxDistance) { + return this._store.indicesOfNearest(this._getStoreDimIndex(dim), value, maxDistance); + }; + + SeriesData.prototype.each = function (dims, cb, ctx) { + + if (typeof dims === 'function') { + ctx = cb; + cb = dims; + dims = []; + } // ctxCompat just for compat echarts3 + + + var fCtx = ctx || this; + var dimIndices = map$1(normalizeDimensions(dims), this._getStoreDimIndex, this); + + this._store.each(dimIndices, fCtx ? bind(cb, fCtx) : cb); + }; + + SeriesData.prototype.filterSelf = function (dims, cb, ctx) { + + if (typeof dims === 'function') { + ctx = cb; + cb = dims; + dims = []; + } // ctxCompat just for compat echarts3 + + + var fCtx = ctx || this; + var dimIndices = map$1(normalizeDimensions(dims), this._getStoreDimIndex, this); + this._store = this._store.filter(dimIndices, fCtx ? bind(cb, fCtx) : cb); + return this; + }; + /** + * Select data in range. (For optimization of filter) + * (Manually inline code, support 5 million data filtering in data zoom.) + */ + + + SeriesData.prototype.selectRange = function (range) { + + var _this = this; + + var innerRange = {}; + var dims = keys(range); + each(dims, function (dim) { + var dimIdx = _this._getStoreDimIndex(dim); + + innerRange[dimIdx] = range[dim]; + }); + this._store = this._store.selectRange(innerRange); + return this; + }; + /* eslint-enable max-len */ + + + SeriesData.prototype.mapArray = function (dims, cb, ctx) { + + if (typeof dims === 'function') { + ctx = cb; + cb = dims; + dims = []; + } // ctxCompat just for compat echarts3 + + + ctx = ctx || this; + var result = []; + this.each(dims, function () { + result.push(cb && cb.apply(this, arguments)); + }, ctx); + return result; + }; + + SeriesData.prototype.map = function (dims, cb, ctx, ctxCompat) { + + var fCtx = ctx || ctxCompat || this; + var dimIndices = map$1(normalizeDimensions(dims), this._getStoreDimIndex, this); + var list = cloneListForMapAndSample(this); + list._store = this._store.map(dimIndices, fCtx ? bind(cb, fCtx) : cb); + return list; + }; + + SeriesData.prototype.modify = function (dims, cb, ctx, ctxCompat) { + var _this = this; // ctxCompat just for compat echarts3 + + + var fCtx = ctx || ctxCompat || this; + + if ("development" !== 'production') { + each(normalizeDimensions(dims), function (dim) { + var dimInfo = _this.getDimensionInfo(dim); + + if (!dimInfo.isCalculationCoord) { + console.error('Danger: only stack dimension can be modified'); + } + }); + } + + var dimIndices = map$1(normalizeDimensions(dims), this._getStoreDimIndex, this); // If do shallow clone here, if there are too many stacked series, + // it still cost lots of memory, becuase `_store.dimensions` are not shared. + // We should consider there probably be shallow clone happen in each sereis + // in consequent filter/map. + + this._store.modify(dimIndices, fCtx ? bind(cb, fCtx) : cb); + }; + /** + * Large data down sampling on given dimension + * @param sampleIndex Sample index for name and id + */ + + + SeriesData.prototype.downSample = function (dimension, rate, sampleValue, sampleIndex) { + var list = cloneListForMapAndSample(this); + list._store = this._store.downSample(this._getStoreDimIndex(dimension), rate, sampleValue, sampleIndex); + return list; + }; + /** + * Large data down sampling using largest-triangle-three-buckets + * @param {string} valueDimension + * @param {number} targetCount + */ + + + SeriesData.prototype.lttbDownSample = function (valueDimension, rate) { + var list = cloneListForMapAndSample(this); + list._store = this._store.lttbDownSample(this._getStoreDimIndex(valueDimension), rate); + return list; + }; + + SeriesData.prototype.getRawDataItem = function (idx) { + return this._store.getRawDataItem(idx); + }; + /** + * Get model of one data item. + */ + // TODO: Type of data item + + + SeriesData.prototype.getItemModel = function (idx) { + var hostModel = this.hostModel; + var dataItem = this.getRawDataItem(idx); + return new Model(dataItem, hostModel, hostModel && hostModel.ecModel); + }; + /** + * Create a data differ + */ + + + SeriesData.prototype.diff = function (otherList) { + var thisList = this; + return new DataDiffer(otherList ? otherList.getStore().getIndices() : [], this.getStore().getIndices(), function (idx) { + return getId(otherList, idx); + }, function (idx) { + return getId(thisList, idx); + }); + }; + /** + * Get visual property. + */ + + + SeriesData.prototype.getVisual = function (key) { + var visual = this._visual; + return visual && visual[key]; + }; + + SeriesData.prototype.setVisual = function (kvObj, val) { + this._visual = this._visual || {}; + + if (isObject$2(kvObj)) { + extend(this._visual, kvObj); + } else { + this._visual[kvObj] = val; + } + }; + /** + * Get visual property of single data item + */ + // eslint-disable-next-line + + + SeriesData.prototype.getItemVisual = function (idx, key) { + var itemVisual = this._itemVisuals[idx]; + var val = itemVisual && itemVisual[key]; + + if (val == null) { + // Use global visual property + return this.getVisual(key); + } + + return val; + }; + /** + * If exists visual property of single data item + */ + + + SeriesData.prototype.hasItemVisual = function () { + return this._itemVisuals.length > 0; + }; + /** + * Make sure itemVisual property is unique + */ + // TODO: use key to save visual to reduce memory. + + + SeriesData.prototype.ensureUniqueItemVisual = function (idx, key) { + var itemVisuals = this._itemVisuals; + var itemVisual = itemVisuals[idx]; + + if (!itemVisual) { + itemVisual = itemVisuals[idx] = {}; + } + + var val = itemVisual[key]; + + if (val == null) { + val = this.getVisual(key); // TODO Performance? + + if (isArray(val)) { + val = val.slice(); + } else if (isObject$2(val)) { + val = extend({}, val); + } + + itemVisual[key] = val; + } + + return val; + }; // eslint-disable-next-line + + + SeriesData.prototype.setItemVisual = function (idx, key, value) { + var itemVisual = this._itemVisuals[idx] || {}; + this._itemVisuals[idx] = itemVisual; + + if (isObject$2(key)) { + extend(itemVisual, key); + } else { + itemVisual[key] = value; + } + }; + /** + * Clear itemVisuals and list visual. + */ + + + SeriesData.prototype.clearAllVisual = function () { + this._visual = {}; + this._itemVisuals = []; + }; + + SeriesData.prototype.setLayout = function (key, val) { + if (isObject$2(key)) { + for (var name_1 in key) { + if (key.hasOwnProperty(name_1)) { + this.setLayout(name_1, key[name_1]); + } + } + + return; + } + + this._layout[key] = val; + }; + /** + * Get layout property. + */ + + + SeriesData.prototype.getLayout = function (key) { + return this._layout[key]; + }; + /** + * Get layout of single data item + */ + + + SeriesData.prototype.getItemLayout = function (idx) { + return this._itemLayouts[idx]; + }; + /** + * Set layout of single data item + */ + + + SeriesData.prototype.setItemLayout = function (idx, layout, merge) { + this._itemLayouts[idx] = merge ? extend(this._itemLayouts[idx] || {}, layout) : layout; + }; + /** + * Clear all layout of single data item + */ + + + SeriesData.prototype.clearItemLayouts = function () { + this._itemLayouts.length = 0; + }; + /** + * Set graphic element relative to data. It can be set as null + */ + + + SeriesData.prototype.setItemGraphicEl = function (idx, el) { + var seriesIndex = this.hostModel && this.hostModel.seriesIndex; + setCommonECData(seriesIndex, this.dataType, idx, el); + this._graphicEls[idx] = el; + }; + + SeriesData.prototype.getItemGraphicEl = function (idx) { + return this._graphicEls[idx]; + }; + + SeriesData.prototype.eachItemGraphicEl = function (cb, context) { + each(this._graphicEls, function (el, idx) { + if (el) { + cb && cb.call(context, el, idx); + } + }); + }; + /** + * Shallow clone a new list except visual and layout properties, and graph elements. + * New list only change the indices. + */ + + + SeriesData.prototype.cloneShallow = function (list) { + if (!list) { + list = new SeriesData(this._schema ? this._schema : map$1(this.dimensions, this._getDimInfo, this), this.hostModel); + } + + transferProperties(list, this); + list._store = this._store; + return list; + }; + /** + * Wrap some method to add more feature + */ + + + SeriesData.prototype.wrapMethod = function (methodName, injectFunction) { + var originalMethod = this[methodName]; + + if (typeof originalMethod !== 'function') { + return; + } + + this.__wrappedMethods = this.__wrappedMethods || []; + + this.__wrappedMethods.push(methodName); + + this[methodName] = function () { + var res = originalMethod.apply(this, arguments); + return injectFunction.apply(this, [res].concat(slice(arguments))); + }; + }; // ---------------------------------------------------------- + // A work around for internal method visiting private member. + // ---------------------------------------------------------- + + + SeriesData.internalField = function () { + prepareInvertedIndex = function (data) { + var invertedIndicesMap = data._invertedIndicesMap; + each(invertedIndicesMap, function (invertedIndices, dim) { + var dimInfo = data._dimInfos[dim]; // Currently, only dimensions that has ordinalMeta can create inverted indices. + + var ordinalMeta = dimInfo.ordinalMeta; + var store = data._store; + + if (ordinalMeta) { + invertedIndices = invertedIndicesMap[dim] = new CtorInt32Array$1(ordinalMeta.categories.length); // The default value of TypedArray is 0. To avoid miss + // mapping to 0, we should set it as INDEX_NOT_FOUND. + + for (var i = 0; i < invertedIndices.length; i++) { + invertedIndices[i] = INDEX_NOT_FOUND; + } + + for (var i = 0; i < store.count(); i++) { + // Only support the case that all values are distinct. + invertedIndices[store.get(dimInfo.storeDimIndex, i)] = i; + } + } + }); + }; + + getIdNameFromStore = function (data, dimIdx, idx) { + return convertOptionIdName(data._getCategory(dimIdx, idx), null); + }; + /** + * @see the comment of `List['getId']`. + */ + + + getId = function (data, rawIndex) { + var id = data._idList[rawIndex]; + + if (id == null && data._idDimIdx != null) { + id = getIdNameFromStore(data, data._idDimIdx, rawIndex); + } + + if (id == null) { + id = ID_PREFIX + rawIndex; + } + + return id; + }; + + normalizeDimensions = function (dimensions) { + if (!isArray(dimensions)) { + dimensions = dimensions != null ? [dimensions] : []; + } + + return dimensions; + }; + /** + * Data in excludeDimensions is copied, otherwise transfered. + */ + + + cloneListForMapAndSample = function (original) { + var list = new SeriesData(original._schema ? original._schema : map$1(original.dimensions, original._getDimInfo, original), original.hostModel); // FIXME If needs stackedOn, value may already been stacked + + transferProperties(list, original); + return list; + }; + + transferProperties = function (target, source) { + each(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function (propName) { + if (source.hasOwnProperty(propName)) { + target[propName] = source[propName]; + } + }); + target.__wrappedMethods = source.__wrappedMethods; + each(CLONE_PROPERTIES, function (propName) { + target[propName] = clone(source[propName]); + }); + target._calculationInfo = extend({}, source._calculationInfo); + }; + + makeIdFromName = function (data, idx) { + var nameList = data._nameList; + var idList = data._idList; + var nameDimIdx = data._nameDimIdx; + var idDimIdx = data._idDimIdx; + var name = nameList[idx]; + var id = idList[idx]; + + if (name == null && nameDimIdx != null) { + nameList[idx] = name = getIdNameFromStore(data, nameDimIdx, idx); + } + + if (id == null && idDimIdx != null) { + idList[idx] = id = getIdNameFromStore(data, idDimIdx, idx); + } + + if (id == null && name != null) { + var nameRepeatCount = data._nameRepeatCount; + var nmCnt = nameRepeatCount[name] = (nameRepeatCount[name] || 0) + 1; + id = name; + + if (nmCnt > 1) { + id += '__ec__' + nmCnt; + } + + idList[idx] = id; + } + }; + }(); + + return SeriesData; + }(); + + /** + * For outside usage compat (like echarts-gl are using it). + */ + + function createDimensions(source, opt) { + return prepareSeriesDataSchema(source, opt).dimensions; + } + /** + * This method builds the relationship between: + * + "what the coord sys or series requires (see `coordDimensions`)", + * + "what the user defines (in `encode` and `dimensions`, see `opt.dimensionsDefine` and `opt.encodeDefine`)" + * + "what the data source provids (see `source`)". + * + * Some guess strategy will be adapted if user does not define something. + * If no 'value' dimension specified, the first no-named dimension will be + * named as 'value'. + * + * @return The results are always sorted by `storeDimIndex` asc. + */ + + function prepareSeriesDataSchema( // TODO: TYPE completeDimensions type + source, opt) { + if (!isSourceInstance(source)) { + source = createSourceFromSeriesDataOption(source); + } + + opt = opt || {}; + var sysDims = opt.coordDimensions || []; + var dimsDef = opt.dimensionsDefine || source.dimensionsDefine || []; + var coordDimNameMap = createHashMap(); + var resultList = []; + var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimensionsCount); // Try to ignore unsed dimensions if sharing a high dimension datastore + // 30 is an experience value. + + var omitUnusedDimensions = opt.canOmitUnusedDimensions && shouldOmitUnusedDimensions(dimCount); + var isUsingSourceDimensionsDef = dimsDef === source.dimensionsDefine; + var dataDimNameMap = isUsingSourceDimensionsDef ? ensureSourceDimNameMap(source) : createDimNameMap(dimsDef); + var encodeDef = opt.encodeDefine; + + if (!encodeDef && opt.encodeDefaulter) { + encodeDef = opt.encodeDefaulter(source, dimCount); + } + + var encodeDefMap = createHashMap(encodeDef); + var indicesMap = new CtorInt32Array(dimCount); + + for (var i = 0; i < indicesMap.length; i++) { + indicesMap[i] = -1; + } + + function getResultItem(dimIdx) { + var idx = indicesMap[dimIdx]; + + if (idx < 0) { + var dimDefItemRaw = dimsDef[dimIdx]; + var dimDefItem = isObject(dimDefItemRaw) ? dimDefItemRaw : { + name: dimDefItemRaw + }; + var resultItem = new SeriesDimensionDefine(); + var userDimName = dimDefItem.name; + + if (userDimName != null && dataDimNameMap.get(userDimName) != null) { + // Only if `series.dimensions` is defined in option + // displayName, will be set, and dimension will be diplayed vertically in + // tooltip by default. + resultItem.name = resultItem.displayName = userDimName; + } + + dimDefItem.type != null && (resultItem.type = dimDefItem.type); + dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName); + var newIdx = resultList.length; + indicesMap[dimIdx] = newIdx; + resultItem.storeDimIndex = dimIdx; + resultList.push(resultItem); + return resultItem; + } + + return resultList[idx]; + } + + if (!omitUnusedDimensions) { + for (var i = 0; i < dimCount; i++) { + getResultItem(i); + } + } // Set `coordDim` and `coordDimIndex` by `encodeDefMap` and normalize `encodeDefMap`. + + + encodeDefMap.each(function (dataDimsRaw, coordDim) { + var dataDims = normalizeToArray(dataDimsRaw).slice(); // Note: It is allowed that `dataDims.length` is `0`, e.g., options is + // `{encode: {x: -1, y: 1}}`. Should not filter anything in + // this case. + + if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) { + encodeDefMap.set(coordDim, false); + return; + } + + var validDataDims = encodeDefMap.set(coordDim, []); + each(dataDims, function (resultDimIdxOrName, idx) { + // The input resultDimIdx can be dim name or index. + var resultDimIdx = isString(resultDimIdxOrName) ? dataDimNameMap.get(resultDimIdxOrName) : resultDimIdxOrName; + + if (resultDimIdx != null && resultDimIdx < dimCount) { + validDataDims[idx] = resultDimIdx; + applyDim(getResultItem(resultDimIdx), coordDim, idx); + } + }); + }); // Apply templetes and default order from `sysDims`. + + var availDimIdx = 0; + each(sysDims, function (sysDimItemRaw) { + var coordDim; + var sysDimItemDimsDef; + var sysDimItemOtherDims; + var sysDimItem; + + if (isString(sysDimItemRaw)) { + coordDim = sysDimItemRaw; + sysDimItem = {}; + } else { + sysDimItem = sysDimItemRaw; + coordDim = sysDimItem.name; + var ordinalMeta = sysDimItem.ordinalMeta; + sysDimItem.ordinalMeta = null; + sysDimItem = extend({}, sysDimItem); + sysDimItem.ordinalMeta = ordinalMeta; // `coordDimIndex` should not be set directly. + + sysDimItemDimsDef = sysDimItem.dimsDef; + sysDimItemOtherDims = sysDimItem.otherDims; + sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex = sysDimItem.dimsDef = sysDimItem.otherDims = null; + } + + var dataDims = encodeDefMap.get(coordDim); // negative resultDimIdx means no need to mapping. + + if (dataDims === false) { + return; + } + + dataDims = normalizeToArray(dataDims); // dimensions provides default dim sequences. + + if (!dataDims.length) { + for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) { + while (availDimIdx < dimCount && getResultItem(availDimIdx).coordDim != null) { + availDimIdx++; + } + + availDimIdx < dimCount && dataDims.push(availDimIdx++); + } + } // Apply templates. + + + each(dataDims, function (resultDimIdx, coordDimIndex) { + var resultItem = getResultItem(resultDimIdx); // Coordinate system has a higher priority on dim type than source. + + if (isUsingSourceDimensionsDef && sysDimItem.type != null) { + resultItem.type = sysDimItem.type; + } + + applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex); + + if (resultItem.name == null && sysDimItemDimsDef) { + var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex]; + !isObject(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = { + name: sysDimItemDimsDefItem + }); + resultItem.name = resultItem.displayName = sysDimItemDimsDefItem.name; + resultItem.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip; + } // FIXME refactor, currently only used in case: {otherDims: {tooltip: false}} + + + sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims); + }); + }); + + function applyDim(resultItem, coordDim, coordDimIndex) { + if (VISUAL_DIMENSIONS.get(coordDim) != null) { + resultItem.otherDims[coordDim] = coordDimIndex; + } else { + resultItem.coordDim = coordDim; + resultItem.coordDimIndex = coordDimIndex; + coordDimNameMap.set(coordDim, true); + } + } // Make sure the first extra dim is 'value'. + + + var generateCoord = opt.generateCoord; + var generateCoordCount = opt.generateCoordCount; + var fromZero = generateCoordCount != null; + generateCoordCount = generateCoord ? generateCoordCount || 1 : 0; + var extra = generateCoord || 'value'; + + function ifNoNameFillWithCoordName(resultItem) { + if (resultItem.name == null) { + // Duplication will be removed in the next step. + resultItem.name = resultItem.coordDim; + } + } // Set dim `name` and other `coordDim` and other props. + + + if (!omitUnusedDimensions) { + for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) { + var resultItem = getResultItem(resultDimIdx); + var coordDim = resultItem.coordDim; + + if (coordDim == null) { + // TODO no need to generate coordDim for isExtraCoord? + resultItem.coordDim = genCoordDimName(extra, coordDimNameMap, fromZero); + resultItem.coordDimIndex = 0; // Series specified generateCoord is using out. + + if (!generateCoord || generateCoordCount <= 0) { + resultItem.isExtraCoord = true; + } + + generateCoordCount--; + } + + ifNoNameFillWithCoordName(resultItem); + + if (resultItem.type == null && (guessOrdinal(source, resultDimIdx) === BE_ORDINAL.Must // Consider the case: + // { + // dataset: {source: [ + // ['2001', 123], + // ['2002', 456], + // ... + // ['The others', 987], + // ]}, + // series: {type: 'pie'} + // } + // The first colum should better be treated as a "ordinal" although it + // might not able to be detected as an "ordinal" by `guessOrdinal`. + || resultItem.isExtraCoord && (resultItem.otherDims.itemName != null || resultItem.otherDims.seriesName != null))) { + resultItem.type = 'ordinal'; + } + } + } else { + each(resultList, function (resultItem) { + // PENDING: guessOrdinal or let user specify type: 'ordinal' manually? + ifNoNameFillWithCoordName(resultItem); + }); // Sort dimensions: there are some rule that use the last dim as label, + // and for some latter travel process easier. + + resultList.sort(function (item0, item1) { + return item0.storeDimIndex - item1.storeDimIndex; + }); + } + + removeDuplication(resultList); + return new SeriesDataSchema({ + source: source, + dimensions: resultList, + fullDimensionCount: dimCount, + dimensionOmitted: omitUnusedDimensions + }); + } + + function removeDuplication(result) { + var duplicationMap = createHashMap(); + + for (var i = 0; i < result.length; i++) { + var dim = result[i]; + var dimOriginalName = dim.name; + var count = duplicationMap.get(dimOriginalName) || 0; + + if (count > 0) { + // Starts from 0. + dim.name = dimOriginalName + (count - 1); + } + + count++; + duplicationMap.set(dimOriginalName, count); + } + } // ??? TODO + // Originally detect dimCount by data[0]. Should we + // optimize it to only by sysDims and dimensions and encode. + // So only necessary dims will be initialized. + // But + // (1) custom series should be considered. where other dims + // may be visited. + // (2) sometimes user need to calcualte bubble size or use visualMap + // on other dimensions besides coordSys needed. + // So, dims that is not used by system, should be shared in data store? + + + function getDimCount(source, sysDims, dimsDef, optDimCount) { + // Note that the result dimCount should not small than columns count + // of data, otherwise `dataDimNameMap` checking will be incorrect. + var dimCount = Math.max(source.dimensionsDetectedCount || 1, sysDims.length, dimsDef.length, optDimCount || 0); + each(sysDims, function (sysDimItem) { + var sysDimItemDimsDef; + + if (isObject(sysDimItem) && (sysDimItemDimsDef = sysDimItem.dimsDef)) { + dimCount = Math.max(dimCount, sysDimItemDimsDef.length); + } + }); + return dimCount; + } + + function genCoordDimName(name, map, fromZero) { + var mapData = map.data; + + if (fromZero || mapData.hasOwnProperty(name)) { + var i = 0; + + while (mapData.hasOwnProperty(name + i)) { + i++; + } + + name += i; + } + + map.set(name, true); + return name; + } + + /** + * @class + * For example: + * { + * coordSysName: 'cartesian2d', + * coordSysDims: ['x', 'y', ...], + * axisMap: HashMap({ + * x: xAxisModel, + * y: yAxisModel + * }), + * categoryAxisMap: HashMap({ + * x: xAxisModel, + * y: undefined + * }), + * // The index of the first category axis in `coordSysDims`. + * // `null/undefined` means no category axis exists. + * firstCategoryDimIndex: 1, + * // To replace user specified encode. + * } + */ + + var CoordSysInfo = + /** @class */ + function () { + function CoordSysInfo(coordSysName) { + this.coordSysDims = []; + this.axisMap = createHashMap(); + this.categoryAxisMap = createHashMap(); + this.coordSysName = coordSysName; + } + + return CoordSysInfo; + }(); + + function getCoordSysInfoBySeries(seriesModel) { + var coordSysName = seriesModel.get('coordinateSystem'); + var result = new CoordSysInfo(coordSysName); + var fetch = fetchers[coordSysName]; + + if (fetch) { + fetch(seriesModel, result, result.axisMap, result.categoryAxisMap); + return result; + } + } + var fetchers = { + cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) { + var xAxisModel = seriesModel.getReferringComponents('xAxis', SINGLE_REFERRING).models[0]; + var yAxisModel = seriesModel.getReferringComponents('yAxis', SINGLE_REFERRING).models[0]; + + if ("development" !== 'production') { + if (!xAxisModel) { + throw new Error('xAxis "' + retrieve(seriesModel.get('xAxisIndex'), seriesModel.get('xAxisId'), 0) + '" not found'); + } + + if (!yAxisModel) { + throw new Error('yAxis "' + retrieve(seriesModel.get('xAxisIndex'), seriesModel.get('yAxisId'), 0) + '" not found'); + } + } + + result.coordSysDims = ['x', 'y']; + axisMap.set('x', xAxisModel); + axisMap.set('y', yAxisModel); + + if (isCategory(xAxisModel)) { + categoryAxisMap.set('x', xAxisModel); + result.firstCategoryDimIndex = 0; + } + + if (isCategory(yAxisModel)) { + categoryAxisMap.set('y', yAxisModel); + result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1); + } + }, + singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) { + var singleAxisModel = seriesModel.getReferringComponents('singleAxis', SINGLE_REFERRING).models[0]; + + if ("development" !== 'production') { + if (!singleAxisModel) { + throw new Error('singleAxis should be specified.'); + } + } + + result.coordSysDims = ['single']; + axisMap.set('single', singleAxisModel); + + if (isCategory(singleAxisModel)) { + categoryAxisMap.set('single', singleAxisModel); + result.firstCategoryDimIndex = 0; + } + }, + polar: function (seriesModel, result, axisMap, categoryAxisMap) { + var polarModel = seriesModel.getReferringComponents('polar', SINGLE_REFERRING).models[0]; + var radiusAxisModel = polarModel.findAxisModel('radiusAxis'); + var angleAxisModel = polarModel.findAxisModel('angleAxis'); + + if ("development" !== 'production') { + if (!angleAxisModel) { + throw new Error('angleAxis option not found'); + } + + if (!radiusAxisModel) { + throw new Error('radiusAxis option not found'); + } + } + + result.coordSysDims = ['radius', 'angle']; + axisMap.set('radius', radiusAxisModel); + axisMap.set('angle', angleAxisModel); + + if (isCategory(radiusAxisModel)) { + categoryAxisMap.set('radius', radiusAxisModel); + result.firstCategoryDimIndex = 0; + } + + if (isCategory(angleAxisModel)) { + categoryAxisMap.set('angle', angleAxisModel); + result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1); + } + }, + geo: function (seriesModel, result, axisMap, categoryAxisMap) { + result.coordSysDims = ['lng', 'lat']; + }, + parallel: function (seriesModel, result, axisMap, categoryAxisMap) { + var ecModel = seriesModel.ecModel; + var parallelModel = ecModel.getComponent('parallel', seriesModel.get('parallelIndex')); + var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice(); + each(parallelModel.parallelAxisIndex, function (axisIndex, index) { + var axisModel = ecModel.getComponent('parallelAxis', axisIndex); + var axisDim = coordSysDims[index]; + axisMap.set(axisDim, axisModel); + + if (isCategory(axisModel)) { + categoryAxisMap.set(axisDim, axisModel); + + if (result.firstCategoryDimIndex == null) { + result.firstCategoryDimIndex = index; + } + } + }); + } + }; + + function isCategory(axisModel) { + return axisModel.get('type') === 'category'; + } + + /** + * Note that it is too complicated to support 3d stack by value + * (have to create two-dimension inverted index), so in 3d case + * we just support that stacked by index. + * + * @param seriesModel + * @param dimensionsInput The same as the input of . + * The input will be modified. + * @param opt + * @param opt.stackedCoordDimension Specify a coord dimension if needed. + * @param opt.byIndex=false + * @return calculationInfo + * { + * stackedDimension: string + * stackedByDimension: string + * isStackedByIndex: boolean + * stackedOverDimension: string + * stackResultDimension: string + * } + */ + + function enableDataStack(seriesModel, dimensionsInput, opt) { + opt = opt || {}; + var byIndex = opt.byIndex; + var stackedCoordDimension = opt.stackedCoordDimension; + var dimensionDefineList; + var schema; + var store; + + if (isLegacyDimensionsInput(dimensionsInput)) { + dimensionDefineList = dimensionsInput; + } else { + schema = dimensionsInput.schema; + dimensionDefineList = schema.dimensions; + store = dimensionsInput.store; + } // Compatibal: when `stack` is set as '', do not stack. + + + var mayStack = !!(seriesModel && seriesModel.get('stack')); + var stackedByDimInfo; + var stackedDimInfo; + var stackResultDimension; + var stackedOverDimension; + each(dimensionDefineList, function (dimensionInfo, index) { + if (isString(dimensionInfo)) { + dimensionDefineList[index] = dimensionInfo = { + name: dimensionInfo + }; + } + + if (mayStack && !dimensionInfo.isExtraCoord) { + // Find the first ordinal dimension as the stackedByDimInfo. + if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) { + stackedByDimInfo = dimensionInfo; + } // Find the first stackable dimension as the stackedDimInfo. + + + if (!stackedDimInfo && dimensionInfo.type !== 'ordinal' && dimensionInfo.type !== 'time' && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)) { + stackedDimInfo = dimensionInfo; + } + } + }); + + if (stackedDimInfo && !byIndex && !stackedByDimInfo) { + // Compatible with previous design, value axis (time axis) only stack by index. + // It may make sense if the user provides elaborately constructed data. + byIndex = true; + } // Add stack dimension, they can be both calculated by coordinate system in `unionExtent`. + // That put stack logic in List is for using conveniently in echarts extensions, but it + // might not be a good way. + + + if (stackedDimInfo) { + // Use a weird name that not duplicated with other names. + // Also need to use seriesModel.id as postfix because different + // series may share same data store. The stack dimension needs to be distinguished. + stackResultDimension = '__\0ecstackresult_' + seriesModel.id; + stackedOverDimension = '__\0ecstackedover_' + seriesModel.id; // Create inverted index to fast query index by value. + + if (stackedByDimInfo) { + stackedByDimInfo.createInvertedIndices = true; + } + + var stackedDimCoordDim_1 = stackedDimInfo.coordDim; + var stackedDimType = stackedDimInfo.type; + var stackedDimCoordIndex_1 = 0; + each(dimensionDefineList, function (dimensionInfo) { + if (dimensionInfo.coordDim === stackedDimCoordDim_1) { + stackedDimCoordIndex_1++; + } + }); + var stackedOverDimensionDefine = { + name: stackResultDimension, + coordDim: stackedDimCoordDim_1, + coordDimIndex: stackedDimCoordIndex_1, + type: stackedDimType, + isExtraCoord: true, + isCalculationCoord: true, + storeDimIndex: dimensionDefineList.length + }; + var stackResultDimensionDefine = { + name: stackedOverDimension, + // This dimension contains stack base (generally, 0), so do not set it as + // `stackedDimCoordDim` to avoid extent calculation, consider log scale. + coordDim: stackedOverDimension, + coordDimIndex: stackedDimCoordIndex_1 + 1, + type: stackedDimType, + isExtraCoord: true, + isCalculationCoord: true, + storeDimIndex: dimensionDefineList.length + 1 + }; + + if (schema) { + if (store) { + stackedOverDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackedOverDimension, stackedDimType); + stackResultDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackResultDimension, stackedDimType); + } + + schema.appendCalculationDimension(stackedOverDimensionDefine); + schema.appendCalculationDimension(stackResultDimensionDefine); + } else { + dimensionDefineList.push(stackedOverDimensionDefine); + dimensionDefineList.push(stackResultDimensionDefine); + } + } + + return { + stackedDimension: stackedDimInfo && stackedDimInfo.name, + stackedByDimension: stackedByDimInfo && stackedByDimInfo.name, + isStackedByIndex: byIndex, + stackedOverDimension: stackedOverDimension, + stackResultDimension: stackResultDimension + }; + } + + function isLegacyDimensionsInput(dimensionsInput) { + return !isSeriesDataSchema(dimensionsInput.schema); + } + + function isDimensionStacked(data, stackedDim) { + // Each single series only maps to one pair of axis. So we do not need to + // check stackByDim, whatever stacked by a dimension or stacked by index. + return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension'); + } + function getStackedDimension(data, targetDim) { + return isDimensionStacked(data, targetDim) ? data.getCalculationInfo('stackResultDimension') : targetDim; + } + + function getCoordSysDimDefs(seriesModel, coordSysInfo) { + var coordSysName = seriesModel.get('coordinateSystem'); + var registeredCoordSys = CoordinateSystemManager.get(coordSysName); + var coordSysDimDefs; + + if (coordSysInfo && coordSysInfo.coordSysDims) { + coordSysDimDefs = map(coordSysInfo.coordSysDims, function (dim) { + var dimInfo = { + name: dim + }; + var axisModel = coordSysInfo.axisMap.get(dim); + + if (axisModel) { + var axisType = axisModel.get('type'); + dimInfo.type = getDimensionTypeByAxis(axisType); + } + + return dimInfo; + }); + } + + if (!coordSysDimDefs) { + // Get dimensions from registered coordinate system + coordSysDimDefs = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ['x', 'y']; + } + + return coordSysDimDefs; + } + + function injectOrdinalMeta(dimInfoList, createInvertedIndices, coordSysInfo) { + var firstCategoryDimIndex; + var hasNameEncode; + coordSysInfo && each(dimInfoList, function (dimInfo, dimIndex) { + var coordDim = dimInfo.coordDim; + var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim); + + if (categoryAxisModel) { + if (firstCategoryDimIndex == null) { + firstCategoryDimIndex = dimIndex; + } + + dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta(); + + if (createInvertedIndices) { + dimInfo.createInvertedIndices = true; + } + } + + if (dimInfo.otherDims.itemName != null) { + hasNameEncode = true; + } + }); + + if (!hasNameEncode && firstCategoryDimIndex != null) { + dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0; + } + + return firstCategoryDimIndex; + } + /** + * Caution: there are side effects to `sourceManager` in this method. + * Should better only be called in `Series['getInitialData']`. + */ + + + function createSeriesData(sourceRaw, seriesModel, opt) { + opt = opt || {}; + var sourceManager = seriesModel.getSourceManager(); + var source; + var isOriginalSource = false; + + if (sourceRaw) { + isOriginalSource = true; + source = createSourceFromSeriesDataOption(sourceRaw); + } else { + source = sourceManager.getSource(); // Is series.data. not dataset. + + isOriginalSource = source.sourceFormat === SOURCE_FORMAT_ORIGINAL; + } + + var coordSysInfo = getCoordSysInfoBySeries(seriesModel); + var coordSysDimDefs = getCoordSysDimDefs(seriesModel, coordSysInfo); + var useEncodeDefaulter = opt.useEncodeDefaulter; + var encodeDefaulter = isFunction(useEncodeDefaulter) ? useEncodeDefaulter : useEncodeDefaulter ? curry(makeSeriesEncodeForAxisCoordSys, coordSysDimDefs, seriesModel) : null; + var createDimensionOptions = { + coordDimensions: coordSysDimDefs, + generateCoord: opt.generateCoord, + encodeDefine: seriesModel.getEncode(), + encodeDefaulter: encodeDefaulter, + canOmitUnusedDimensions: !isOriginalSource + }; + var schema = prepareSeriesDataSchema(source, createDimensionOptions); + var firstCategoryDimIndex = injectOrdinalMeta(schema.dimensions, opt.createInvertedIndices, coordSysInfo); + var store = !isOriginalSource ? sourceManager.getSharedDataStore(schema) : null; + var stackCalculationInfo = enableDataStack(seriesModel, { + schema: schema, + store: store + }); + var data = new SeriesData(schema, seriesModel); + data.setCalculationInfo(stackCalculationInfo); + var dimValueGetter = firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source) ? function (itemOpt, dimName, dataIndex, dimIndex) { + // Use dataIndex as ordinal value in categoryAxis + return dimIndex === firstCategoryDimIndex ? dataIndex : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex); + } : null; + data.hasItemOption = false; + data.initData( // Try to reuse the data store in sourceManager if using dataset. + isOriginalSource ? source : store, null, dimValueGetter); + return data; + } + + function isNeedCompleteOrdinalData(source) { + if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) { + var sampleItem = firstDataNotNull(source.data || []); + return sampleItem != null && !isArray(getDataItemValue(sampleItem)); + } + } + + function firstDataNotNull(arr) { + var i = 0; + + while (i < arr.length && arr[i] == null) { + i++; + } + + return arr[i]; + } + + var Scale = + /** @class */ + function () { + function Scale(setting) { + this._setting = setting || {}; + this._extent = [Infinity, -Infinity]; + } + + Scale.prototype.getSetting = function (name) { + return this._setting[name]; + }; + /** + * Set extent from data + */ + + + Scale.prototype.unionExtent = function (other) { + var extent = this._extent; + other[0] < extent[0] && (extent[0] = other[0]); + other[1] > extent[1] && (extent[1] = other[1]); // not setExtent because in log axis it may transformed to power + // this.setExtent(extent[0], extent[1]); + }; + /** + * Set extent from data + */ + + + Scale.prototype.unionExtentFromData = function (data, dim) { + this.unionExtent(data.getApproximateExtent(dim)); + }; + /** + * Get extent + * + * Extent is always in increase order. + */ + + + Scale.prototype.getExtent = function () { + return this._extent.slice(); + }; + /** + * Set extent + */ + + + Scale.prototype.setExtent = function (start, end) { + var thisExtent = this._extent; + + if (!isNaN(start)) { + thisExtent[0] = start; + } + + if (!isNaN(end)) { + thisExtent[1] = end; + } + }; + /** + * If value is in extent range + */ + + + Scale.prototype.isInExtentRange = function (value) { + return this._extent[0] <= value && this._extent[1] >= value; + }; + /** + * When axis extent depends on data and no data exists, + * axis ticks should not be drawn, which is named 'blank'. + */ + + + Scale.prototype.isBlank = function () { + return this._isBlank; + }; + /** + * When axis extent depends on data and no data exists, + * axis ticks should not be drawn, which is named 'blank'. + */ + + + Scale.prototype.setBlank = function (isBlank) { + this._isBlank = isBlank; + }; + + return Scale; + }(); + + enableClassManagement(Scale); + + var uidBase = 0; + + var OrdinalMeta = + /** @class */ + function () { + function OrdinalMeta(opt) { + this.categories = opt.categories || []; + this._needCollect = opt.needCollect; + this._deduplication = opt.deduplication; + this.uid = ++uidBase; + } + + OrdinalMeta.createByAxisModel = function (axisModel) { + var option = axisModel.option; + var data = option.data; + var categories = data && map(data, getName); + return new OrdinalMeta({ + categories: categories, + needCollect: !categories, + // deduplication is default in axis. + deduplication: option.dedplication !== false + }); + }; + + OrdinalMeta.prototype.getOrdinal = function (category) { + // @ts-ignore + return this._getOrCreateMap().get(category); + }; + /** + * @return The ordinal. If not found, return NaN. + */ + + + OrdinalMeta.prototype.parseAndCollect = function (category) { + var index; + var needCollect = this._needCollect; // The value of category dim can be the index of the given category set. + // This feature is only supported when !needCollect, because we should + // consider a common case: a value is 2017, which is a number but is + // expected to be tread as a category. This case usually happen in dataset, + // where it happent to be no need of the index feature. + + if (typeof category !== 'string' && !needCollect) { + return category; + } // Optimize for the scenario: + // category is ['2012-01-01', '2012-01-02', ...], where the input + // data has been ensured not duplicate and is large data. + // Notice, if a dataset dimension provide categroies, usually echarts + // should remove duplication except user tell echarts dont do that + // (set axis.deduplication = false), because echarts do not know whether + // the values in the category dimension has duplication (consider the + // parallel-aqi example) + + + if (needCollect && !this._deduplication) { + index = this.categories.length; + this.categories[index] = category; + return index; + } + + var map = this._getOrCreateMap(); // @ts-ignore + + + index = map.get(category); + + if (index == null) { + if (needCollect) { + index = this.categories.length; + this.categories[index] = category; // @ts-ignore + + map.set(category, index); + } else { + index = NaN; + } + } + + return index; + }; // Consider big data, do not create map until needed. + + + OrdinalMeta.prototype._getOrCreateMap = function () { + return this._map || (this._map = createHashMap(this.categories)); + }; + + return OrdinalMeta; + }(); + + function getName(obj) { + if (isObject(obj) && obj.value != null) { + return obj.value; + } else { + return obj + ''; + } + } + + var roundNumber = round; + /** + * @param extent Both extent[0] and extent[1] should be valid number. + * Should be extent[0] < extent[1]. + * @param splitNumber splitNumber should be >= 1. + */ + + function intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) { + var result = {}; + var span = extent[1] - extent[0]; + var interval = result.interval = nice(span / splitNumber, true); + + if (minInterval != null && interval < minInterval) { + interval = result.interval = minInterval; + } + + if (maxInterval != null && interval > maxInterval) { + interval = result.interval = maxInterval; + } // Tow more digital for tick. + + + var precision = result.intervalPrecision = getIntervalPrecision(interval); // Niced extent inside original extent + + var niceTickExtent = result.niceTickExtent = [roundNumber(Math.ceil(extent[0] / interval) * interval, precision), roundNumber(Math.floor(extent[1] / interval) * interval, precision)]; + fixExtent(niceTickExtent, extent); + return result; + } + /** + * @return interval precision + */ + + function getIntervalPrecision(interval) { + // Tow more digital for tick. + return getPrecision(interval) + 2; + } + + function clamp(niceTickExtent, idx, extent) { + niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]); + } // In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent. + + + function fixExtent(niceTickExtent, extent) { + !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]); + !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]); + clamp(niceTickExtent, 0, extent); + clamp(niceTickExtent, 1, extent); + + if (niceTickExtent[0] > niceTickExtent[1]) { + niceTickExtent[0] = niceTickExtent[1]; + } + } + function contain$2(val, extent) { + return val >= extent[0] && val <= extent[1]; + } + function normalize$1(val, extent) { + if (extent[1] === extent[0]) { + return 0.5; + } + + return (val - extent[0]) / (extent[1] - extent[0]); + } + function scale$2(val, extent) { + return val * (extent[1] - extent[0]) + extent[0]; + } + + var OrdinalScale = + /** @class */ + function (_super) { + __extends(OrdinalScale, _super); + + function OrdinalScale(setting) { + var _this = _super.call(this, setting) || this; + + _this.type = 'ordinal'; + + var ordinalMeta = _this.getSetting('ordinalMeta'); // Caution: Should not use instanceof, consider ec-extensions using + // import approach to get OrdinalMeta class. + + + if (!ordinalMeta) { + ordinalMeta = new OrdinalMeta({}); + } + + if (isArray(ordinalMeta)) { + ordinalMeta = new OrdinalMeta({ + categories: map(ordinalMeta, function (item) { + return isObject(item) ? item.value : item; + }) + }); + } + + _this._ordinalMeta = ordinalMeta; + _this._extent = _this.getSetting('extent') || [0, ordinalMeta.categories.length - 1]; + return _this; + } + + OrdinalScale.prototype.parse = function (val) { + return typeof val === 'string' ? this._ordinalMeta.getOrdinal(val) // val might be float. + : Math.round(val); + }; + + OrdinalScale.prototype.contain = function (rank) { + rank = this.parse(rank); + return contain$2(rank, this._extent) && this._ordinalMeta.categories[rank] != null; + }; + /** + * Normalize given rank or name to linear [0, 1] + * @param val raw ordinal number. + * @return normalized value in [0, 1]. + */ + + + OrdinalScale.prototype.normalize = function (val) { + val = this._getTickNumber(this.parse(val)); + return normalize$1(val, this._extent); + }; + /** + * @param val normalized value in [0, 1]. + * @return raw ordinal number. + */ + + + OrdinalScale.prototype.scale = function (val) { + val = Math.round(scale$2(val, this._extent)); + return this.getRawOrdinalNumber(val); + }; + + OrdinalScale.prototype.getTicks = function () { + var ticks = []; + var extent = this._extent; + var rank = extent[0]; + + while (rank <= extent[1]) { + ticks.push({ + value: rank + }); + rank++; + } + + return ticks; + }; + + OrdinalScale.prototype.getMinorTicks = function (splitNumber) { + // Not support. + return; + }; + /** + * @see `Ordinal['_ordinalNumbersByTick']` + */ + + + OrdinalScale.prototype.setSortInfo = function (info) { + if (info == null) { + this._ordinalNumbersByTick = this._ticksByOrdinalNumber = null; + return; + } + + var infoOrdinalNumbers = info.ordinalNumbers; + var ordinalsByTick = this._ordinalNumbersByTick = []; + var ticksByOrdinal = this._ticksByOrdinalNumber = []; // Unnecessary support negative tick in `realtimeSort`. + + var tickNum = 0; + var allCategoryLen = this._ordinalMeta.categories.length; + + for (var len = Math.min(allCategoryLen, infoOrdinalNumbers.length); tickNum < len; ++tickNum) { + var ordinalNumber = infoOrdinalNumbers[tickNum]; + ordinalsByTick[tickNum] = ordinalNumber; + ticksByOrdinal[ordinalNumber] = tickNum; + } // Handle that `series.data` only covers part of the `axis.category.data`. + + + var unusedOrdinal = 0; + + for (; tickNum < allCategoryLen; ++tickNum) { + while (ticksByOrdinal[unusedOrdinal] != null) { + unusedOrdinal++; + } + ordinalsByTick.push(unusedOrdinal); + ticksByOrdinal[unusedOrdinal] = tickNum; + } + }; + + OrdinalScale.prototype._getTickNumber = function (ordinal) { + var ticksByOrdinalNumber = this._ticksByOrdinalNumber; // also support ordinal out of range of `ordinalMeta.categories.length`, + // where ordinal numbers are used as tick value directly. + + return ticksByOrdinalNumber && ordinal >= 0 && ordinal < ticksByOrdinalNumber.length ? ticksByOrdinalNumber[ordinal] : ordinal; + }; + /** + * @usage + * ```js + * const ordinalNumber = ordinalScale.getRawOrdinalNumber(tickVal); + * + * // case0 + * const rawOrdinalValue = axisModel.getCategories()[ordinalNumber]; + * // case1 + * const rawOrdinalValue = this._ordinalMeta.categories[ordinalNumber]; + * // case2 + * const coord = axis.dataToCoord(ordinalNumber); + * ``` + * + * @param {OrdinalNumber} tickNumber index of display + */ + + + OrdinalScale.prototype.getRawOrdinalNumber = function (tickNumber) { + var ordinalNumbersByTick = this._ordinalNumbersByTick; // tickNumber may be out of range, e.g., when axis max is larger than `ordinalMeta.categories.length`., + // where ordinal numbers are used as tick value directly. + + return ordinalNumbersByTick && tickNumber >= 0 && tickNumber < ordinalNumbersByTick.length ? ordinalNumbersByTick[tickNumber] : tickNumber; + }; + /** + * Get item on tick + */ + + + OrdinalScale.prototype.getLabel = function (tick) { + if (!this.isBlank()) { + var ordinalNumber = this.getRawOrdinalNumber(tick.value); + var cateogry = this._ordinalMeta.categories[ordinalNumber]; // Note that if no data, ordinalMeta.categories is an empty array. + // Return empty if it's not exist. + + return cateogry == null ? '' : cateogry + ''; + } + }; + + OrdinalScale.prototype.count = function () { + return this._extent[1] - this._extent[0] + 1; + }; + + OrdinalScale.prototype.unionExtentFromData = function (data, dim) { + this.unionExtent(data.getApproximateExtent(dim)); + }; + /** + * @override + * If value is in extent range + */ + + + OrdinalScale.prototype.isInExtentRange = function (value) { + value = this._getTickNumber(value); + return this._extent[0] <= value && this._extent[1] >= value; + }; + + OrdinalScale.prototype.getOrdinalMeta = function () { + return this._ordinalMeta; + }; + + OrdinalScale.prototype.niceTicks = function () {}; + + OrdinalScale.prototype.niceExtent = function () {}; + + OrdinalScale.type = 'ordinal'; + return OrdinalScale; + }(Scale); + + Scale.registerClass(OrdinalScale); + + var roundNumber$1 = round; + + var IntervalScale = + /** @class */ + function (_super) { + __extends(IntervalScale, _super); + + function IntervalScale() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = 'interval'; // Step is calculated in adjustExtent. + + _this._interval = 0; + _this._intervalPrecision = 2; + return _this; + } + + IntervalScale.prototype.parse = function (val) { + return val; + }; + + IntervalScale.prototype.contain = function (val) { + return contain$2(val, this._extent); + }; + + IntervalScale.prototype.normalize = function (val) { + return normalize$1(val, this._extent); + }; + + IntervalScale.prototype.scale = function (val) { + return scale$2(val, this._extent); + }; + + IntervalScale.prototype.setExtent = function (start, end) { + var thisExtent = this._extent; // start,end may be a Number like '25',so... + + if (!isNaN(start)) { + thisExtent[0] = parseFloat(start); + } + + if (!isNaN(end)) { + thisExtent[1] = parseFloat(end); + } + }; + + IntervalScale.prototype.unionExtent = function (other) { + var extent = this._extent; + other[0] < extent[0] && (extent[0] = other[0]); + other[1] > extent[1] && (extent[1] = other[1]); // unionExtent may called by it's sub classes + + this.setExtent(extent[0], extent[1]); + }; + + IntervalScale.prototype.getInterval = function () { + return this._interval; + }; + + IntervalScale.prototype.setInterval = function (interval) { + this._interval = interval; // Dropped auto calculated niceExtent and use user setted extent + // We assume user wan't to set both interval, min, max to get a better result + + this._niceExtent = this._extent.slice(); + this._intervalPrecision = getIntervalPrecision(interval); + }; + /** + * @param expandToNicedExtent Whether expand the ticks to niced extent. + */ + + + IntervalScale.prototype.getTicks = function (expandToNicedExtent) { + var interval = this._interval; + var extent = this._extent; + var niceTickExtent = this._niceExtent; + var intervalPrecision = this._intervalPrecision; + var ticks = []; // If interval is 0, return []; + + if (!interval) { + return ticks; + } // Consider this case: using dataZoom toolbox, zoom and zoom. + + + var safeLimit = 10000; + + if (extent[0] < niceTickExtent[0]) { + if (expandToNicedExtent) { + ticks.push({ + value: roundNumber$1(niceTickExtent[0] - interval, intervalPrecision) + }); + } else { + ticks.push({ + value: extent[0] + }); + } + } + + var tick = niceTickExtent[0]; + + while (tick <= niceTickExtent[1]) { + ticks.push({ + value: tick + }); // Avoid rounding error + + tick = roundNumber$1(tick + interval, intervalPrecision); + + if (tick === ticks[ticks.length - 1].value) { + // Consider out of safe float point, e.g., + // -3711126.9907707 + 2e-10 === -3711126.9907707 + break; + } + + if (ticks.length > safeLimit) { + return []; + } + } // Consider this case: the last item of ticks is smaller + // than niceTickExtent[1] and niceTickExtent[1] === extent[1]. + + + var lastNiceTick = ticks.length ? ticks[ticks.length - 1].value : niceTickExtent[1]; + + if (extent[1] > lastNiceTick) { + if (expandToNicedExtent) { + ticks.push({ + value: roundNumber$1(lastNiceTick + interval, intervalPrecision) + }); + } else { + ticks.push({ + value: extent[1] + }); + } + } + + return ticks; + }; + + IntervalScale.prototype.getMinorTicks = function (splitNumber) { + var ticks = this.getTicks(true); + var minorTicks = []; + var extent = this.getExtent(); + + for (var i = 1; i < ticks.length; i++) { + var nextTick = ticks[i]; + var prevTick = ticks[i - 1]; + var count = 0; + var minorTicksGroup = []; + var interval = nextTick.value - prevTick.value; + var minorInterval = interval / splitNumber; + + while (count < splitNumber - 1) { + var minorTick = roundNumber$1(prevTick.value + (count + 1) * minorInterval); // For the first and last interval. The count may be less than splitNumber. + + if (minorTick > extent[0] && minorTick < extent[1]) { + minorTicksGroup.push(minorTick); + } + + count++; + } + + minorTicks.push(minorTicksGroup); + } + + return minorTicks; + }; + /** + * @param opt.precision If 'auto', use nice presision. + * @param opt.pad returns 1.50 but not 1.5 if precision is 2. + */ + + + IntervalScale.prototype.getLabel = function (data, opt) { + if (data == null) { + return ''; + } + + var precision = opt && opt.precision; + + if (precision == null) { + precision = getPrecision(data.value) || 0; + } else if (precision === 'auto') { + // Should be more precise then tick. + precision = this._intervalPrecision; + } // (1) If `precision` is set, 12.005 should be display as '12.00500'. + // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'. + + + var dataNum = roundNumber$1(data.value, precision, true); + return addCommas(dataNum); + }; + /** + * @param splitNumber By default `5`. + */ + + + IntervalScale.prototype.niceTicks = function (splitNumber, minInterval, maxInterval) { + splitNumber = splitNumber || 5; + var extent = this._extent; + var span = extent[1] - extent[0]; + + if (!isFinite(span)) { + return; + } // User may set axis min 0 and data are all negative + // FIXME If it needs to reverse ? + + + if (span < 0) { + span = -span; + extent.reverse(); + } + + var result = intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval); + this._intervalPrecision = result.intervalPrecision; + this._interval = result.interval; + this._niceExtent = result.niceTickExtent; + }; + + IntervalScale.prototype.niceExtent = function (opt) { + var extent = this._extent; // If extent start and end are same, expand them + + if (extent[0] === extent[1]) { + if (extent[0] !== 0) { + // Expand extent + var expandSize = extent[0]; // In the fowllowing case + // Axis has been fixed max 100 + // Plus data are all 100 and axis extent are [100, 100]. + // Extend to the both side will cause expanded max is larger than fixed max. + // So only expand to the smaller side. + + if (!opt.fixMax) { + extent[1] += expandSize / 2; + extent[0] -= expandSize / 2; + } else { + extent[0] -= expandSize / 2; + } + } else { + extent[1] = 1; + } + } + + var span = extent[1] - extent[0]; // If there are no data and extent are [Infinity, -Infinity] + + if (!isFinite(span)) { + extent[0] = 0; + extent[1] = 1; + } + + this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); // let extent = this._extent; + + var interval = this._interval; + + if (!opt.fixMin) { + extent[0] = roundNumber$1(Math.floor(extent[0] / interval) * interval); + } + + if (!opt.fixMax) { + extent[1] = roundNumber$1(Math.ceil(extent[1] / interval) * interval); + } + }; + + IntervalScale.type = 'interval'; + return IntervalScale; + }(Scale); + + Scale.registerClass(IntervalScale); + + var STACK_PREFIX = '__ec_stack_'; + var LARGE_BAR_MIN_WIDTH = 0.5; + var LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array; + + function getSeriesStackId(seriesModel) { + return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex; + } + + function getAxisKey(axis) { + return axis.dim + axis.index; + } + /** + * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined. + */ + + + function getLayoutOnAxis(opt) { + var params = []; + var baseAxis = opt.axis; + var axisKey = 'axis0'; + + if (baseAxis.type !== 'category') { + return; + } + + var bandWidth = baseAxis.getBandWidth(); + + for (var i = 0; i < opt.count || 0; i++) { + params.push(defaults({ + bandWidth: bandWidth, + axisKey: axisKey, + stackId: STACK_PREFIX + i + }, opt)); + } + + var widthAndOffsets = doCalBarWidthAndOffset(params); + var result = []; + + for (var i = 0; i < opt.count; i++) { + var item = widthAndOffsets[axisKey][STACK_PREFIX + i]; + item.offsetCenter = item.offset + item.width / 2; + result.push(item); + } + + return result; + } + function prepareLayoutBarSeries(seriesType, ecModel) { + var seriesModels = []; + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + // Check series coordinate, do layout for cartesian2d only + if (isOnCartesian(seriesModel) && !isInLargeMode(seriesModel)) { + seriesModels.push(seriesModel); + } + }); + return seriesModels; + } + /** + * Map from (baseAxis.dim + '_' + baseAxis.index) to min gap of two adjacent + * values. + * This works for time axes, value axes, and log axes. + * For a single time axis, return value is in the form like + * {'x_0': [1000000]}. + * The value of 1000000 is in milliseconds. + */ + + function getValueAxesMinGaps(barSeries) { + /** + * Map from axis.index to values. + * For a single time axis, axisValues is in the form like + * {'x_0': [1495555200000, 1495641600000, 1495728000000]}. + * Items in axisValues[x], e.g. 1495555200000, are time values of all + * series. + */ + var axisValues = {}; + each(barSeries, function (seriesModel) { + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + + if (baseAxis.type !== 'time' && baseAxis.type !== 'value') { + return; + } + + var data = seriesModel.getData(); + var key = baseAxis.dim + '_' + baseAxis.index; + var dimIdx = data.getDimensionIndex(data.mapDimension(baseAxis.dim)); + var store = data.getStore(); + + for (var i = 0, cnt = store.count(); i < cnt; ++i) { + var value = store.get(dimIdx, i); + + if (!axisValues[key]) { + // No previous data for the axis + axisValues[key] = [value]; + } else { + // No value in previous series + axisValues[key].push(value); + } // Ignore duplicated time values in the same axis + + } + }); + var axisMinGaps = {}; + + for (var key in axisValues) { + if (axisValues.hasOwnProperty(key)) { + var valuesInAxis = axisValues[key]; + + if (valuesInAxis) { + // Sort axis values into ascending order to calculate gaps + valuesInAxis.sort(function (a, b) { + return a - b; + }); + var min = null; + + for (var j = 1; j < valuesInAxis.length; ++j) { + var delta = valuesInAxis[j] - valuesInAxis[j - 1]; + + if (delta > 0) { + // Ignore 0 delta because they are of the same axis value + min = min === null ? delta : Math.min(min, delta); + } + } // Set to null if only have one data + + + axisMinGaps[key] = min; + } + } + } + + return axisMinGaps; + } + + function makeColumnLayout(barSeries) { + var axisMinGaps = getValueAxesMinGaps(barSeries); + var seriesInfoList = []; + each(barSeries, function (seriesModel) { + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + var axisExtent = baseAxis.getExtent(); + var bandWidth; + + if (baseAxis.type === 'category') { + bandWidth = baseAxis.getBandWidth(); + } else if (baseAxis.type === 'value' || baseAxis.type === 'time') { + var key = baseAxis.dim + '_' + baseAxis.index; + var minGap = axisMinGaps[key]; + var extentSpan = Math.abs(axisExtent[1] - axisExtent[0]); + var scale = baseAxis.scale.getExtent(); + var scaleSpan = Math.abs(scale[1] - scale[0]); + bandWidth = minGap ? extentSpan / scaleSpan * minGap : extentSpan; // When there is only one data value + } else { + var data = seriesModel.getData(); + bandWidth = Math.abs(axisExtent[1] - axisExtent[0]) / data.count(); + } + + var barWidth = parsePercent$1(seriesModel.get('barWidth'), bandWidth); + var barMaxWidth = parsePercent$1(seriesModel.get('barMaxWidth'), bandWidth); + var barMinWidth = parsePercent$1( // barMinWidth by default is 1 in cartesian. Because in value axis, + // the auto-calculated bar width might be less than 1. + seriesModel.get('barMinWidth') || 1, bandWidth); + var barGap = seriesModel.get('barGap'); + var barCategoryGap = seriesModel.get('barCategoryGap'); + seriesInfoList.push({ + bandWidth: bandWidth, + barWidth: barWidth, + barMaxWidth: barMaxWidth, + barMinWidth: barMinWidth, + barGap: barGap, + barCategoryGap: barCategoryGap, + axisKey: getAxisKey(baseAxis), + stackId: getSeriesStackId(seriesModel) + }); + }); + return doCalBarWidthAndOffset(seriesInfoList); + } + + function doCalBarWidthAndOffset(seriesInfoList) { + // Columns info on each category axis. Key is cartesian name + var columnsMap = {}; + each(seriesInfoList, function (seriesInfo, idx) { + var axisKey = seriesInfo.axisKey; + var bandWidth = seriesInfo.bandWidth; + var columnsOnAxis = columnsMap[axisKey] || { + bandWidth: bandWidth, + remainedWidth: bandWidth, + autoWidthCount: 0, + categoryGap: null, + gap: '20%', + stacks: {} + }; + var stacks = columnsOnAxis.stacks; + columnsMap[axisKey] = columnsOnAxis; + var stackId = seriesInfo.stackId; + + if (!stacks[stackId]) { + columnsOnAxis.autoWidthCount++; + } + + stacks[stackId] = stacks[stackId] || { + width: 0, + maxWidth: 0 + }; // Caution: In a single coordinate system, these barGrid attributes + // will be shared by series. Consider that they have default values, + // only the attributes set on the last series will work. + // Do not change this fact unless there will be a break change. + + var barWidth = seriesInfo.barWidth; + + if (barWidth && !stacks[stackId].width) { + // See #6312, do not restrict width. + stacks[stackId].width = barWidth; + barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth); + columnsOnAxis.remainedWidth -= barWidth; + } + + var barMaxWidth = seriesInfo.barMaxWidth; + barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth); + var barMinWidth = seriesInfo.barMinWidth; + barMinWidth && (stacks[stackId].minWidth = barMinWidth); + var barGap = seriesInfo.barGap; + barGap != null && (columnsOnAxis.gap = barGap); + var barCategoryGap = seriesInfo.barCategoryGap; + barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap); + }); + var result = {}; + each(columnsMap, function (columnsOnAxis, coordSysName) { + result[coordSysName] = {}; + var stacks = columnsOnAxis.stacks; + var bandWidth = columnsOnAxis.bandWidth; + var categoryGapPercent = columnsOnAxis.categoryGap; + + if (categoryGapPercent == null) { + var columnCount = keys(stacks).length; // More columns in one group + // the spaces between group is smaller. Or the column will be too thin. + + categoryGapPercent = Math.max(35 - columnCount * 4, 15) + '%'; + } + + var categoryGap = parsePercent$1(categoryGapPercent, bandWidth); + var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1); + var remainedWidth = columnsOnAxis.remainedWidth; + var autoWidthCount = columnsOnAxis.autoWidthCount; + var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth + + each(stacks, function (column) { + var maxWidth = column.maxWidth; + var minWidth = column.minWidth; + + if (!column.width) { + var finalWidth = autoWidth; + + if (maxWidth && maxWidth < finalWidth) { + finalWidth = Math.min(maxWidth, remainedWidth); + } // `minWidth` has higher priority. `minWidth` decide that wheter the + // bar is able to be visible. So `minWidth` should not be restricted + // by `maxWidth` or `remainedWidth` (which is from `bandWidth`). In + // the extreme cases for `value` axis, bars are allowed to overlap + // with each other if `minWidth` specified. + + + if (minWidth && minWidth > finalWidth) { + finalWidth = minWidth; + } + + if (finalWidth !== autoWidth) { + column.width = finalWidth; + remainedWidth -= finalWidth + barGapPercent * finalWidth; + autoWidthCount--; + } + } else { + // `barMinWidth/barMaxWidth` has higher priority than `barWidth`, as + // CSS does. Becuase barWidth can be a percent value, where + // `barMaxWidth` can be used to restrict the final width. + var finalWidth = column.width; + + if (maxWidth) { + finalWidth = Math.min(finalWidth, maxWidth); + } // `minWidth` has higher priority, as described above + + + if (minWidth) { + finalWidth = Math.max(finalWidth, minWidth); + } + + column.width = finalWidth; + remainedWidth -= finalWidth + barGapPercent * finalWidth; + autoWidthCount--; + } + }); // Recalculate width again + + autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + var widthSum = 0; + var lastColumn; + each(stacks, function (column, idx) { + if (!column.width) { + column.width = autoWidth; + } + + lastColumn = column; + widthSum += column.width * (1 + barGapPercent); + }); + + if (lastColumn) { + widthSum -= lastColumn.width * barGapPercent; + } + + var offset = -widthSum / 2; + each(stacks, function (column, stackId) { + result[coordSysName][stackId] = result[coordSysName][stackId] || { + bandWidth: bandWidth, + offset: offset, + width: column.width + }; + offset += column.width * (1 + barGapPercent); + }); + }); + return result; + } + + function retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) { + if (barWidthAndOffset && axis) { + var result = barWidthAndOffset[getAxisKey(axis)]; + + if (result != null && seriesModel != null) { + return result[getSeriesStackId(seriesModel)]; + } + + return result; + } + } + function layout(seriesType, ecModel) { + var seriesModels = prepareLayoutBarSeries(seriesType, ecModel); + var barWidthAndOffset = makeColumnLayout(seriesModels); + var lastStackCoords = {}; + each(seriesModels, function (seriesModel) { + var data = seriesModel.getData(); + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + var stackId = getSeriesStackId(seriesModel); + var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId]; + var columnOffset = columnLayoutInfo.offset; + var columnWidth = columnLayoutInfo.width; + var valueAxis = cartesian.getOtherAxis(baseAxis); + var barMinHeight = seriesModel.get('barMinHeight') || 0; + lastStackCoords[stackId] = lastStackCoords[stackId] || []; + data.setLayout({ + bandWidth: columnLayoutInfo.bandWidth, + offset: columnOffset, + size: columnWidth + }); + var valueDim = data.mapDimension(valueAxis.dim); + var baseDim = data.mapDimension(baseAxis.dim); + var stacked = isDimensionStacked(data, valueDim); + var isValueAxisH = valueAxis.isHorizontal(); + var valueAxisStart = getValueAxisStart(baseAxis, valueAxis); + var store = data.getStore(); + var valueDimIdx = data.getDimensionIndex(valueDim); + var baseDimIdx = data.getDimensionIndex(baseDim); + + for (var idx = 0, len = store.count(); idx < len; idx++) { + var value = store.get(valueDimIdx, idx); + var baseValue = store.get(baseDimIdx, idx); + var sign = value >= 0 ? 'p' : 'n'; + var baseCoord = valueAxisStart; // Because of the barMinHeight, we can not use the value in + // stackResultDimension directly. + + if (stacked) { + // Only ordinal axis can be stacked. + if (!lastStackCoords[stackId][baseValue]) { + lastStackCoords[stackId][baseValue] = { + p: valueAxisStart, + n: valueAxisStart // Negative stack + + }; + } // Should also consider #4243 + + + baseCoord = lastStackCoords[stackId][baseValue][sign]; + } + + var x = void 0; + var y = void 0; + var width = void 0; + var height = void 0; + + if (isValueAxisH) { + var coord = cartesian.dataToPoint([value, baseValue]); + x = baseCoord; + y = coord[1] + columnOffset; + width = coord[0] - valueAxisStart; + height = columnWidth; + + if (Math.abs(width) < barMinHeight) { + width = (width < 0 ? -1 : 1) * barMinHeight; + } // Ignore stack from NaN value + + + if (!isNaN(width)) { + stacked && (lastStackCoords[stackId][baseValue][sign] += width); + } + } else { + var coord = cartesian.dataToPoint([baseValue, value]); + x = coord[0] + columnOffset; + y = baseCoord; + width = columnWidth; + height = coord[1] - valueAxisStart; + + if (Math.abs(height) < barMinHeight) { + // Include zero to has a positive bar + height = (height <= 0 ? -1 : 1) * barMinHeight; + } // Ignore stack from NaN value + + + if (!isNaN(height)) { + stacked && (lastStackCoords[stackId][baseValue][sign] += height); + } + } + + data.setItemLayout(idx, { + x: x, + y: y, + width: width, + height: height + }); + } + }); + } // TODO: Do not support stack in large mode yet. + + var largeLayout = { + seriesType: 'bar', + plan: createRenderPlanner(), + reset: function (seriesModel) { + if (!isOnCartesian(seriesModel) || !isInLargeMode(seriesModel)) { + return; + } + + var data = seriesModel.getData(); + var cartesian = seriesModel.coordinateSystem; + var coordLayout = cartesian.master.getRect(); + var baseAxis = cartesian.getBaseAxis(); + var valueAxis = cartesian.getOtherAxis(baseAxis); + var valueDimI = data.getDimensionIndex(data.mapDimension(valueAxis.dim)); + var baseDimI = data.getDimensionIndex(data.mapDimension(baseAxis.dim)); + var valueAxisHorizontal = valueAxis.isHorizontal(); + var valueDimIdx = valueAxisHorizontal ? 0 : 1; + var barWidth = retrieveColumnLayout(makeColumnLayout([seriesModel]), baseAxis, seriesModel).width; + + if (!(barWidth > LARGE_BAR_MIN_WIDTH)) { + // jshint ignore:line + barWidth = LARGE_BAR_MIN_WIDTH; + } + + return { + progress: function (params, data) { + var count = params.count; + var largePoints = new LargeArr(count * 2); + var largeBackgroundPoints = new LargeArr(count * 2); + var largeDataIndices = new LargeArr(count); + var dataIndex; + var coord = []; + var valuePair = []; + var pointsOffset = 0; + var idxOffset = 0; + var store = data.getStore(); + + while ((dataIndex = params.next()) != null) { + valuePair[valueDimIdx] = store.get(valueDimI, dataIndex); + valuePair[1 - valueDimIdx] = store.get(baseDimI, dataIndex); + coord = cartesian.dataToPoint(valuePair, null); // Data index might not be in order, depends on `progressiveChunkMode`. + + largeBackgroundPoints[pointsOffset] = valueAxisHorizontal ? coordLayout.x + coordLayout.width : coord[0]; + largePoints[pointsOffset++] = coord[0]; + largeBackgroundPoints[pointsOffset] = valueAxisHorizontal ? coord[1] : coordLayout.y + coordLayout.height; + largePoints[pointsOffset++] = coord[1]; + largeDataIndices[idxOffset++] = dataIndex; + } + + data.setLayout({ + largePoints: largePoints, + largeDataIndices: largeDataIndices, + largeBackgroundPoints: largeBackgroundPoints, + barWidth: barWidth, + valueAxisStart: getValueAxisStart(baseAxis, valueAxis), + backgroundStart: valueAxisHorizontal ? coordLayout.x : coordLayout.y, + valueAxisHorizontal: valueAxisHorizontal + }); + } + }; + } + }; + + function isOnCartesian(seriesModel) { + return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d'; + } + + function isInLargeMode(seriesModel) { + return seriesModel.pipelineContext && seriesModel.pipelineContext.large; + } // See cases in `test/bar-start.html` and `#7412`, `#8747`. + + + function getValueAxisStart(baseAxis, valueAxis, stacked) { + return valueAxis.toGlobalCoord(valueAxis.dataToCoord(valueAxis.type === 'log' ? 1 : 0)); + } + + var bisect = function (a, x, lo, hi) { + while (lo < hi) { + var mid = lo + hi >>> 1; + + if (a[mid][1] < x) { + lo = mid + 1; + } else { + hi = mid; + } + } + + return lo; + }; + + var TimeScale = + /** @class */ + function (_super) { + __extends(TimeScale, _super); + + function TimeScale(settings) { + var _this = _super.call(this, settings) || this; + + _this.type = 'time'; + return _this; + } + /** + * Get label is mainly for other components like dataZoom, tooltip. + */ + + + TimeScale.prototype.getLabel = function (tick) { + var useUTC = this.getSetting('useUTC'); + return format(tick.value, fullLeveledFormatter[getDefaultFormatPrecisionOfInterval(getPrimaryTimeUnit(this._minLevelUnit))] || fullLeveledFormatter.second, useUTC, this.getSetting('locale')); + }; + + TimeScale.prototype.getFormattedLabel = function (tick, idx, labelFormatter) { + var isUTC = this.getSetting('useUTC'); + var lang = this.getSetting('locale'); + return leveledFormat(tick, idx, labelFormatter, lang, isUTC); + }; + /** + * @override + * @param expandToNicedExtent Whether expand the ticks to niced extent. + */ + + + TimeScale.prototype.getTicks = function (expandToNicedExtent) { + var interval = this._interval; + var extent = this._extent; + var ticks = []; // If interval is 0, return []; + + if (!interval) { + return ticks; + } + + ticks.push({ + value: extent[0], + level: 0 + }); + var useUTC = this.getSetting('useUTC'); + var innerTicks = getIntervalTicks(this._minLevelUnit, this._approxInterval, useUTC, extent); + ticks = ticks.concat(innerTicks); + ticks.push({ + value: extent[1], + level: 0 + }); + return ticks; + }; + + TimeScale.prototype.niceExtent = function (opt) { + var extent = this._extent; // If extent start and end are same, expand them + + if (extent[0] === extent[1]) { + // Expand extent + extent[0] -= ONE_DAY; + extent[1] += ONE_DAY; + } // If there are no data and extent are [Infinity, -Infinity] + + + if (extent[1] === -Infinity && extent[0] === Infinity) { + var d = new Date(); + extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate()); + extent[0] = extent[1] - ONE_DAY; + } + + this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); + }; + + TimeScale.prototype.niceTicks = function (approxTickNum, minInterval, maxInterval) { + approxTickNum = approxTickNum || 10; + var extent = this._extent; + var span = extent[1] - extent[0]; + this._approxInterval = span / approxTickNum; + + if (minInterval != null && this._approxInterval < minInterval) { + this._approxInterval = minInterval; + } + + if (maxInterval != null && this._approxInterval > maxInterval) { + this._approxInterval = maxInterval; + } + + var scaleIntervalsLen = scaleIntervals.length; + var idx = Math.min(bisect(scaleIntervals, this._approxInterval, 0, scaleIntervalsLen), scaleIntervalsLen - 1); // Interval that can be used to calculate ticks + + this._interval = scaleIntervals[idx][1]; // Min level used when picking ticks from top down. + // We check one more level to avoid the ticks are to sparse in some case. + + this._minLevelUnit = scaleIntervals[Math.max(idx - 1, 0)][0]; + }; + + TimeScale.prototype.parse = function (val) { + // val might be float. + return typeof val === 'number' ? val : +parseDate(val); + }; + + TimeScale.prototype.contain = function (val) { + return contain$2(this.parse(val), this._extent); + }; + + TimeScale.prototype.normalize = function (val) { + return normalize$1(this.parse(val), this._extent); + }; + + TimeScale.prototype.scale = function (val) { + return scale$2(val, this._extent); + }; + + TimeScale.type = 'time'; + return TimeScale; + }(IntervalScale); + /** + * This implementation was originally copied from "d3.js" + * + * with some modifications made for this program. + * See the license statement at the head of this file. + */ + + + var scaleIntervals = [// Format interval + ['second', ONE_SECOND], ['minute', ONE_MINUTE], ['hour', ONE_HOUR], ['quarter-day', ONE_HOUR * 6], ['half-day', ONE_HOUR * 12], ['day', ONE_DAY * 1.2], ['half-week', ONE_DAY * 3.5], ['week', ONE_DAY * 7], ['month', ONE_DAY * 31], ['quarter', ONE_DAY * 95], ['half-year', ONE_YEAR / 2], ['year', ONE_YEAR] // 1Y + ]; + + function isUnitValueSame(unit, valueA, valueB, isUTC) { + var dateA = parseDate(valueA); + var dateB = parseDate(valueB); + + var isSame = function (unit) { + return getUnitValue(dateA, unit, isUTC) === getUnitValue(dateB, unit, isUTC); + }; + + var isSameYear = function () { + return isSame('year'); + }; // const isSameHalfYear = () => isSameYear() && isSame('half-year'); + // const isSameQuater = () => isSameYear() && isSame('quarter'); + + + var isSameMonth = function () { + return isSameYear() && isSame('month'); + }; + + var isSameDay = function () { + return isSameMonth() && isSame('day'); + }; // const isSameHalfDay = () => isSameDay() && isSame('half-day'); + + + var isSameHour = function () { + return isSameDay() && isSame('hour'); + }; + + var isSameMinute = function () { + return isSameHour() && isSame('minute'); + }; + + var isSameSecond = function () { + return isSameMinute() && isSame('second'); + }; + + var isSameMilliSecond = function () { + return isSameSecond() && isSame('millisecond'); + }; + + switch (unit) { + case 'year': + return isSameYear(); + + case 'month': + return isSameMonth(); + + case 'day': + return isSameDay(); + + case 'hour': + return isSameHour(); + + case 'minute': + return isSameMinute(); + + case 'second': + return isSameSecond(); + + case 'millisecond': + return isSameMilliSecond(); + } + } // const primaryUnitGetters = { + // year: fullYearGetterName(), + // month: monthGetterName(), + // day: dateGetterName(), + // hour: hoursGetterName(), + // minute: minutesGetterName(), + // second: secondsGetterName(), + // millisecond: millisecondsGetterName() + // }; + // const primaryUnitUTCGetters = { + // year: fullYearGetterName(true), + // month: monthGetterName(true), + // day: dateGetterName(true), + // hour: hoursGetterName(true), + // minute: minutesGetterName(true), + // second: secondsGetterName(true), + // millisecond: millisecondsGetterName(true) + // }; + // function moveTick(date: Date, unitName: TimeUnit, step: number, isUTC: boolean) { + // step = step || 1; + // switch (getPrimaryTimeUnit(unitName)) { + // case 'year': + // date[fullYearSetterName(isUTC)](date[fullYearGetterName(isUTC)]() + step); + // break; + // case 'month': + // date[monthSetterName(isUTC)](date[monthGetterName(isUTC)]() + step); + // break; + // case 'day': + // date[dateSetterName(isUTC)](date[dateGetterName(isUTC)]() + step); + // break; + // case 'hour': + // date[hoursSetterName(isUTC)](date[hoursGetterName(isUTC)]() + step); + // break; + // case 'minute': + // date[minutesSetterName(isUTC)](date[minutesGetterName(isUTC)]() + step); + // break; + // case 'second': + // date[secondsSetterName(isUTC)](date[secondsGetterName(isUTC)]() + step); + // break; + // case 'millisecond': + // date[millisecondsSetterName(isUTC)](date[millisecondsGetterName(isUTC)]() + step); + // break; + // } + // return date.getTime(); + // } + // const DATE_INTERVALS = [[8, 7.5], [4, 3.5], [2, 1.5]]; + // const MONTH_INTERVALS = [[6, 5.5], [3, 2.5], [2, 1.5]]; + // const MINUTES_SECONDS_INTERVALS = [[30, 30], [20, 20], [15, 15], [10, 10], [5, 5], [2, 2]]; + + + function getDateInterval(approxInterval, daysInMonth) { + approxInterval /= ONE_DAY; + return approxInterval > 16 ? 16 // Math.floor(daysInMonth / 2) + 1 // In this case we only want one tick betwen two month. + : approxInterval > 7.5 ? 7 // TODO week 7 or day 8? + : approxInterval > 3.5 ? 4 : approxInterval > 1.5 ? 2 : 1; + } + + function getMonthInterval(approxInterval) { + var APPROX_ONE_MONTH = 30 * ONE_DAY; + approxInterval /= APPROX_ONE_MONTH; + return approxInterval > 6 ? 6 : approxInterval > 3 ? 3 : approxInterval > 2 ? 2 : 1; + } + + function getHourInterval(approxInterval) { + approxInterval /= ONE_HOUR; + return approxInterval > 12 ? 12 : approxInterval > 6 ? 6 : approxInterval > 3.5 ? 4 : approxInterval > 2 ? 2 : 1; + } + + function getMinutesAndSecondsInterval(approxInterval, isMinutes) { + approxInterval /= isMinutes ? ONE_MINUTE : ONE_SECOND; + return approxInterval > 30 ? 30 : approxInterval > 20 ? 20 : approxInterval > 15 ? 15 : approxInterval > 10 ? 10 : approxInterval > 5 ? 5 : approxInterval > 2 ? 2 : 1; + } + + function getMillisecondsInterval(approxInterval) { + return nice(approxInterval, true); + } + + function getFirstTimestampOfUnit(date, unitName, isUTC) { + var outDate = new Date(date); + + switch (getPrimaryTimeUnit(unitName)) { + case 'year': + case 'month': + outDate[monthSetterName(isUTC)](0); + + case 'day': + outDate[dateSetterName(isUTC)](1); + + case 'hour': + outDate[hoursSetterName(isUTC)](0); + + case 'minute': + outDate[minutesSetterName(isUTC)](0); + + case 'second': + outDate[secondsSetterName(isUTC)](0); + outDate[millisecondsSetterName(isUTC)](0); + } + + return outDate.getTime(); + } + + function getIntervalTicks(bottomUnitName, approxInterval, isUTC, extent) { + var safeLimit = 10000; + var unitNames = timeUnits; + var iter = 0; + + function addTicksInSpan(interval, minTimestamp, maxTimestamp, getMethodName, setMethodName, isDate, out) { + var date = new Date(minTimestamp); + var dateTime = minTimestamp; + var d = date[getMethodName](); // if (isDate) { + // d -= 1; // Starts with 0; PENDING + // } + + while (dateTime < maxTimestamp && dateTime <= extent[1]) { + out.push({ + value: dateTime + }); + d += interval; + date[setMethodName](d); + dateTime = date.getTime(); + } // This extra tick is for calcuating ticks of next level. Will not been added to the final result + + + out.push({ + value: dateTime, + notAdd: true + }); + } + + function addLevelTicks(unitName, lastLevelTicks, levelTicks) { + var newAddedTicks = []; + var isFirstLevel = !lastLevelTicks.length; + + if (isUnitValueSame(getPrimaryTimeUnit(unitName), extent[0], extent[1], isUTC)) { + return; + } + + if (isFirstLevel) { + lastLevelTicks = [{ + // TODO Optimize. Not include so may ticks. + value: getFirstTimestampOfUnit(new Date(extent[0]), unitName, isUTC) + }, { + value: extent[1] + }]; + } + + for (var i = 0; i < lastLevelTicks.length - 1; i++) { + var startTick = lastLevelTicks[i].value; + var endTick = lastLevelTicks[i + 1].value; + + if (startTick === endTick) { + continue; + } + + var interval = void 0; + var getterName = void 0; + var setterName = void 0; + var isDate = false; + + switch (unitName) { + case 'year': + interval = Math.max(1, Math.round(approxInterval / ONE_DAY / 365)); + getterName = fullYearGetterName(isUTC); + setterName = fullYearSetterName(isUTC); + break; + + case 'half-year': + case 'quarter': + case 'month': + interval = getMonthInterval(approxInterval); + getterName = monthGetterName(isUTC); + setterName = monthSetterName(isUTC); + break; + + case 'week': // PENDING If week is added. Ignore day. + + case 'half-week': + case 'day': + interval = getDateInterval(approxInterval); // Use 32 days and let interval been 16 + + getterName = dateGetterName(isUTC); + setterName = dateSetterName(isUTC); + isDate = true; + break; + + case 'half-day': + case 'quarter-day': + case 'hour': + interval = getHourInterval(approxInterval); + getterName = hoursGetterName(isUTC); + setterName = hoursSetterName(isUTC); + break; + + case 'minute': + interval = getMinutesAndSecondsInterval(approxInterval, true); + getterName = minutesGetterName(isUTC); + setterName = minutesSetterName(isUTC); + break; + + case 'second': + interval = getMinutesAndSecondsInterval(approxInterval, false); + getterName = secondsGetterName(isUTC); + setterName = secondsSetterName(isUTC); + break; + + case 'millisecond': + interval = getMillisecondsInterval(approxInterval); + getterName = millisecondsGetterName(isUTC); + setterName = millisecondsSetterName(isUTC); + break; + } + + addTicksInSpan(interval, startTick, endTick, getterName, setterName, isDate, newAddedTicks); + + if (unitName === 'year' && levelTicks.length > 1 && i === 0) { + // Add nearest years to the left extent. + levelTicks.unshift({ + value: levelTicks[0].value - interval + }); + } + } + + for (var i = 0; i < newAddedTicks.length; i++) { + levelTicks.push(newAddedTicks[i]); + } // newAddedTicks.length && console.log(unitName, newAddedTicks); + + + return newAddedTicks; + } + + var levelsTicks = []; + var currentLevelTicks = []; + var tickCount = 0; + var lastLevelTickCount = 0; + + for (var i = 0; i < unitNames.length && iter++ < safeLimit; ++i) { + var primaryTimeUnit = getPrimaryTimeUnit(unitNames[i]); + + if (!isPrimaryTimeUnit(unitNames[i])) { + // TODO + continue; + } + + addLevelTicks(unitNames[i], levelsTicks[levelsTicks.length - 1] || [], currentLevelTicks); + var nextPrimaryTimeUnit = unitNames[i + 1] ? getPrimaryTimeUnit(unitNames[i + 1]) : null; + + if (primaryTimeUnit !== nextPrimaryTimeUnit) { + if (currentLevelTicks.length) { + lastLevelTickCount = tickCount; // Remove the duplicate so the tick count can be precisely. + + currentLevelTicks.sort(function (a, b) { + return a.value - b.value; + }); + var levelTicksRemoveDuplicated = []; + + for (var i_1 = 0; i_1 < currentLevelTicks.length; ++i_1) { + var tickValue = currentLevelTicks[i_1].value; + + if (i_1 === 0 || currentLevelTicks[i_1 - 1].value !== tickValue) { + levelTicksRemoveDuplicated.push(currentLevelTicks[i_1]); + + if (tickValue >= extent[0] && tickValue <= extent[1]) { + tickCount++; + } + } + } + + var targetTickNum = (extent[1] - extent[0]) / approxInterval; // Added too much in this level and not too less in last level + + if (tickCount > targetTickNum * 1.5 && lastLevelTickCount > targetTickNum / 1.5) { + break; + } // Only treat primary time unit as one level. + + + levelsTicks.push(levelTicksRemoveDuplicated); + + if (tickCount > targetTickNum || bottomUnitName === unitNames[i]) { + break; + } + } // Reset if next unitName is primary + + + currentLevelTicks = []; + } + } + + if ("development" !== 'production') { + if (iter >= safeLimit) { + warn('Exceed safe limit.'); + } + } + + var levelsTicksInExtent = filter(map(levelsTicks, function (levelTicks) { + return filter(levelTicks, function (tick) { + return tick.value >= extent[0] && tick.value <= extent[1] && !tick.notAdd; + }); + }), function (levelTicks) { + return levelTicks.length > 0; + }); + var ticks = []; + var maxLevel = levelsTicksInExtent.length - 1; + + for (var i = 0; i < levelsTicksInExtent.length; ++i) { + var levelTicks = levelsTicksInExtent[i]; + + for (var k = 0; k < levelTicks.length; ++k) { + ticks.push({ + value: levelTicks[k].value, + level: maxLevel - i + }); + } + } + + ticks.sort(function (a, b) { + return a.value - b.value; + }); // Remove duplicates + + var result = []; + + for (var i = 0; i < ticks.length; ++i) { + if (i === 0 || ticks[i].value !== ticks[i - 1].value) { + result.push(ticks[i]); + } + } + + return result; + } + + Scale.registerClass(TimeScale); + + var scaleProto = Scale.prototype; // FIXME:TS refactor: not good to call it directly with `this`? + + var intervalScaleProto = IntervalScale.prototype; + var roundingErrorFix = round; + var mathFloor = Math.floor; + var mathCeil = Math.ceil; + var mathPow$1 = Math.pow; + var mathLog = Math.log; + + var LogScale = + /** @class */ + function (_super) { + __extends(LogScale, _super); + + function LogScale() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = 'log'; + _this.base = 10; + _this._originalScale = new IntervalScale(); // FIXME:TS actually used by `IntervalScale` + + _this._interval = 0; + return _this; + } + /** + * @param Whether expand the ticks to niced extent. + */ + + + LogScale.prototype.getTicks = function (expandToNicedExtent) { + var originalScale = this._originalScale; + var extent = this._extent; + var originalExtent = originalScale.getExtent(); + var ticks = intervalScaleProto.getTicks.call(this, expandToNicedExtent); + return map(ticks, function (tick) { + var val = tick.value; + var powVal = round(mathPow$1(this.base, val)); // Fix #4158 + + powVal = val === extent[0] && this._fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal; + powVal = val === extent[1] && this._fixMax ? fixRoundingError(powVal, originalExtent[1]) : powVal; + return { + value: powVal + }; + }, this); + }; + + LogScale.prototype.setExtent = function (start, end) { + var base = this.base; + start = mathLog(start) / mathLog(base); + end = mathLog(end) / mathLog(base); + intervalScaleProto.setExtent.call(this, start, end); + }; + /** + * @return {number} end + */ + + + LogScale.prototype.getExtent = function () { + var base = this.base; + var extent = scaleProto.getExtent.call(this); + extent[0] = mathPow$1(base, extent[0]); + extent[1] = mathPow$1(base, extent[1]); // Fix #4158 + + var originalScale = this._originalScale; + var originalExtent = originalScale.getExtent(); + this._fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0])); + this._fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1])); + return extent; + }; + + LogScale.prototype.unionExtent = function (extent) { + this._originalScale.unionExtent(extent); + + var base = this.base; + extent[0] = mathLog(extent[0]) / mathLog(base); + extent[1] = mathLog(extent[1]) / mathLog(base); + scaleProto.unionExtent.call(this, extent); + }; + + LogScale.prototype.unionExtentFromData = function (data, dim) { + // TODO + // filter value that <= 0 + this.unionExtent(data.getApproximateExtent(dim)); + }; + /** + * Update interval and extent of intervals for nice ticks + * @param approxTickNum default 10 Given approx tick number + */ + + + LogScale.prototype.niceTicks = function (approxTickNum) { + approxTickNum = approxTickNum || 10; + var extent = this._extent; + var span = extent[1] - extent[0]; + + if (span === Infinity || span <= 0) { + return; + } + + var interval = quantity(span); + var err = approxTickNum / span * interval; // Filter ticks to get closer to the desired count. + + if (err <= 0.5) { + interval *= 10; + } // Interval should be integer + + + while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) { + interval *= 10; + } + + var niceExtent = [round(mathCeil(extent[0] / interval) * interval), round(mathFloor(extent[1] / interval) * interval)]; + this._interval = interval; + this._niceExtent = niceExtent; + }; + + LogScale.prototype.niceExtent = function (opt) { + intervalScaleProto.niceExtent.call(this, opt); + this._fixMin = opt.fixMin; + this._fixMax = opt.fixMax; + }; + + LogScale.prototype.parse = function (val) { + return val; + }; + + LogScale.prototype.contain = function (val) { + val = mathLog(val) / mathLog(this.base); + return contain$2(val, this._extent); + }; + + LogScale.prototype.normalize = function (val) { + val = mathLog(val) / mathLog(this.base); + return normalize$1(val, this._extent); + }; + + LogScale.prototype.scale = function (val) { + val = scale$2(val, this._extent); + return mathPow$1(this.base, val); + }; + + LogScale.type = 'log'; + return LogScale; + }(Scale); + + var proto = LogScale.prototype; + proto.getMinorTicks = intervalScaleProto.getMinorTicks; + proto.getLabel = intervalScaleProto.getLabel; + + function fixRoundingError(val, originalVal) { + return roundingErrorFix(val, getPrecision(originalVal)); + } + + Scale.registerClass(LogScale); + + var ScaleRawExtentInfo = + /** @class */ + function () { + function ScaleRawExtentInfo(scale, model, // Usually: data extent from all series on this axis. + originalExtent) { + this._prepareParams(scale, model, originalExtent); + } + /** + * Parameters depending on ouside (like model, user callback) + * are prepared and fixed here. + */ + + + ScaleRawExtentInfo.prototype._prepareParams = function (scale, model, // Usually: data extent from all series on this axis. + dataExtent) { + if (dataExtent[1] < dataExtent[0]) { + dataExtent = [NaN, NaN]; + } + + this._dataMin = dataExtent[0]; + this._dataMax = dataExtent[1]; + var isOrdinal = this._isOrdinal = scale.type === 'ordinal'; + this._needCrossZero = model.getNeedCrossZero && model.getNeedCrossZero(); + var modelMinRaw = this._modelMinRaw = model.get('min', true); + + if (isFunction(modelMinRaw)) { + // This callback alway provide users the full data extent (before data filtered). + this._modelMinNum = parseAxisModelMinMax(scale, modelMinRaw({ + min: dataExtent[0], + max: dataExtent[1] + })); + } else if (modelMinRaw !== 'dataMin') { + this._modelMinNum = parseAxisModelMinMax(scale, modelMinRaw); + } + + var modelMaxRaw = this._modelMaxRaw = model.get('max', true); + + if (isFunction(modelMaxRaw)) { + // This callback alway provide users the full data extent (before data filtered). + this._modelMaxNum = parseAxisModelMinMax(scale, modelMaxRaw({ + min: dataExtent[0], + max: dataExtent[1] + })); + } else if (modelMaxRaw !== 'dataMax') { + this._modelMaxNum = parseAxisModelMinMax(scale, modelMaxRaw); + } + + if (isOrdinal) { + // FIXME: there is a flaw here: if there is no "block" data processor like `dataZoom`, + // and progressive rendering is using, here the category result might just only contain + // the processed chunk rather than the entire result. + this._axisDataLen = model.getCategories().length; + } else { + var boundaryGap = model.get('boundaryGap'); + var boundaryGapArr = isArray(boundaryGap) ? boundaryGap : [boundaryGap || 0, boundaryGap || 0]; + + if (typeof boundaryGapArr[0] === 'boolean' || typeof boundaryGapArr[1] === 'boolean') { + if ("development" !== 'production') { + console.warn('Boolean type for boundaryGap is only ' + 'allowed for ordinal axis. Please use string in ' + 'percentage instead, e.g., "20%". Currently, ' + 'boundaryGap is set to be 0.'); + } + + this._boundaryGapInner = [0, 0]; + } else { + this._boundaryGapInner = [parsePercent(boundaryGapArr[0], 1), parsePercent(boundaryGapArr[1], 1)]; + } + } + }; + /** + * Calculate extent by prepared parameters. + * This method has no external dependency and can be called duplicatedly, + * getting the same result. + * If parameters changed, should call this method to recalcuate. + */ + + + ScaleRawExtentInfo.prototype.calculate = function () { + // Notice: When min/max is not set (that is, when there are null/undefined, + // which is the most common case), these cases should be ensured: + // (1) For 'ordinal', show all axis.data. + // (2) For others: + // + `boundaryGap` is applied (if min/max set, boundaryGap is + // disabled). + // + If `needCrossZero`, min/max should be zero, otherwise, min/max should + // be the result that originalExtent enlarged by boundaryGap. + // (3) If no data, it should be ensured that `scale.setBlank` is set. + var isOrdinal = this._isOrdinal; + var dataMin = this._dataMin; + var dataMax = this._dataMax; + var axisDataLen = this._axisDataLen; + var boundaryGapInner = this._boundaryGapInner; + var span = !isOrdinal ? dataMax - dataMin || Math.abs(dataMin) : null; // Currently if a `'value'` axis model min is specified as 'dataMin'/'dataMax', + // `boundaryGap` will not be used. It's the different from specifying as `null`/`undefined`. + + var min = this._modelMinRaw === 'dataMin' ? dataMin : this._modelMinNum; + var max = this._modelMaxRaw === 'dataMax' ? dataMax : this._modelMaxNum; // If `_modelMinNum`/`_modelMaxNum` is `null`/`undefined`, should not be fixed. + + var minFixed = min != null; + var maxFixed = max != null; + + if (min == null) { + min = isOrdinal ? axisDataLen ? 0 : NaN : dataMin - boundaryGapInner[0] * span; + } + + if (max == null) { + max = isOrdinal ? axisDataLen ? axisDataLen - 1 : NaN : dataMax + boundaryGapInner[1] * span; + } + + (min == null || !isFinite(min)) && (min = NaN); + (max == null || !isFinite(max)) && (max = NaN); + var isBlank = eqNaN(min) || eqNaN(max) || isOrdinal && !axisDataLen; // If data extent modified, need to recalculated to ensure cross zero. + + if (this._needCrossZero) { + // Axis is over zero and min is not set + if (min > 0 && max > 0 && !minFixed) { + min = 0; // minFixed = true; + } // Axis is under zero and max is not set + + + if (min < 0 && max < 0 && !maxFixed) { + max = 0; // maxFixed = true; + } // PENDING: + // When `needCrossZero` and all data is positive/negative, should it be ensured + // that the results processed by boundaryGap are positive/negative? + // If so, here `minFixed`/`maxFixed` need to be set. + + } + + var determinedMin = this._determinedMin; + var determinedMax = this._determinedMax; + + if (determinedMin != null) { + min = determinedMin; + minFixed = true; + } + + if (determinedMax != null) { + max = determinedMax; + maxFixed = true; + } // Ensure min/max be finite number or NaN here. (not to be null/undefined) + // `NaN` means min/max axis is blank. + + + return { + min: min, + max: max, + minFixed: minFixed, + maxFixed: maxFixed, + isBlank: isBlank + }; + }; + + ScaleRawExtentInfo.prototype.modifyDataMinMax = function (minMaxName, val) { + if ("development" !== 'production') { + assert(!this.frozen); + } + + this[DATA_MIN_MAX_ATTR[minMaxName]] = val; + }; + + ScaleRawExtentInfo.prototype.setDeterminedMinMax = function (minMaxName, val) { + var attr = DETERMINED_MIN_MAX_ATTR[minMaxName]; + + if ("development" !== 'production') { + assert(!this.frozen // Earse them usually means logic flaw. + && this[attr] == null); + } + + this[attr] = val; + }; + + ScaleRawExtentInfo.prototype.freeze = function () { + // @ts-ignore + this.frozen = true; + }; + + return ScaleRawExtentInfo; + }(); + var DETERMINED_MIN_MAX_ATTR = { + min: '_determinedMin', + max: '_determinedMax' + }; + var DATA_MIN_MAX_ATTR = { + min: '_dataMin', + max: '_dataMax' + }; + /** + * Get scale min max and related info only depends on model settings. + * This method can be called after coordinate system created. + * For example, in data processing stage. + * + * Scale extent info probably be required multiple times during a workflow. + * For example: + * (1) `dataZoom` depends it to get the axis extent in "100%" state. + * (2) `processor/extentCalculator` depends it to make sure whether axis extent is specified. + * (3) `coordSys.update` use it to finally decide the scale extent. + * But the callback of `min`/`max` should not be called multiple times. + * The code below should not be implemented repeatedly either. + * So we cache the result in the scale instance, which will be recreated at the begining + * of the workflow (because `scale` instance will be recreated each round of the workflow). + */ + + function ensureScaleRawExtentInfo(scale, model, // Usually: data extent from all series on this axis. + originalExtent) { + // Do not permit to recreate. + var rawExtentInfo = scale.rawExtentInfo; + + if (rawExtentInfo) { + return rawExtentInfo; + } + + rawExtentInfo = new ScaleRawExtentInfo(scale, model, originalExtent); // @ts-ignore + + scale.rawExtentInfo = rawExtentInfo; + return rawExtentInfo; + } + function parseAxisModelMinMax(scale, minMax) { + return minMax == null ? null : eqNaN(minMax) ? NaN : scale.parse(minMax); + } + + /** + * Get axis scale extent before niced. + * Item of returned array can only be number (including Infinity and NaN). + * + * Caution: + * Precondition of calling this method: + * The scale extent has been initialized using series data extent via + * `scale.setExtent` or `scale.unionExtentFromData`; + */ + + function getScaleExtent(scale, model) { + var scaleType = scale.type; + var rawExtentResult = ensureScaleRawExtentInfo(scale, model, scale.getExtent()).calculate(); + scale.setBlank(rawExtentResult.isBlank); + var min = rawExtentResult.min; + var max = rawExtentResult.max; // If bars are placed on a base axis of type time or interval account for axis boundary overflow and current axis + // is base axis + // FIXME + // (1) Consider support value axis, where below zero and axis `onZero` should be handled properly. + // (2) Refactor the logic with `barGrid`. Is it not need to `makeBarWidthAndOffsetInfo` twice with different extent? + // Should not depend on series type `bar`? + // (3) Fix that might overlap when using dataZoom. + // (4) Consider other chart types using `barGrid`? + // See #6728, #4862, `test/bar-overflow-time-plot.html` + + var ecModel = model.ecModel; + + if (ecModel && scaleType === 'time' + /*|| scaleType === 'interval' */ + ) { + var barSeriesModels = prepareLayoutBarSeries('bar', ecModel); + var isBaseAxisAndHasBarSeries_1 = false; + each(barSeriesModels, function (seriesModel) { + isBaseAxisAndHasBarSeries_1 = isBaseAxisAndHasBarSeries_1 || seriesModel.getBaseAxis() === model.axis; + }); + + if (isBaseAxisAndHasBarSeries_1) { + // Calculate placement of bars on axis. TODO should be decoupled + // with barLayout + var barWidthAndOffset = makeColumnLayout(barSeriesModels); // Adjust axis min and max to account for overflow + + var adjustedScale = adjustScaleForOverflow(min, max, model, barWidthAndOffset); + min = adjustedScale.min; + max = adjustedScale.max; + } + } + + return { + extent: [min, max], + // "fix" means "fixed", the value should not be + // changed in the subsequent steps. + fixMin: rawExtentResult.minFixed, + fixMax: rawExtentResult.maxFixed + }; + } + + function adjustScaleForOverflow(min, max, model, // Only support cartesian coord yet. + barWidthAndOffset) { + // Get Axis Length + var axisExtent = model.axis.getExtent(); + var axisLength = axisExtent[1] - axisExtent[0]; // Get bars on current base axis and calculate min and max overflow + + var barsOnCurrentAxis = retrieveColumnLayout(barWidthAndOffset, model.axis); + + if (barsOnCurrentAxis === undefined) { + return { + min: min, + max: max + }; + } + + var minOverflow = Infinity; + each(barsOnCurrentAxis, function (item) { + minOverflow = Math.min(item.offset, minOverflow); + }); + var maxOverflow = -Infinity; + each(barsOnCurrentAxis, function (item) { + maxOverflow = Math.max(item.offset + item.width, maxOverflow); + }); + minOverflow = Math.abs(minOverflow); + maxOverflow = Math.abs(maxOverflow); + var totalOverFlow = minOverflow + maxOverflow; // Calculate required buffer based on old range and overflow + + var oldRange = max - min; + var oldRangePercentOfNew = 1 - (minOverflow + maxOverflow) / axisLength; + var overflowBuffer = oldRange / oldRangePercentOfNew - oldRange; + max += overflowBuffer * (maxOverflow / totalOverFlow); + min -= overflowBuffer * (minOverflow / totalOverFlow); + return { + min: min, + max: max + }; + } // Precondition of calling this method: + // The scale extent has been initailized using series data extent via + // `scale.setExtent` or `scale.unionExtentFromData`; + + + function niceScaleExtent(scale, inModel) { + var model = inModel; + var extentInfo = getScaleExtent(scale, model); + var extent = extentInfo.extent; + var splitNumber = model.get('splitNumber'); + + if (scale instanceof LogScale) { + scale.base = model.get('logBase'); + } + + var scaleType = scale.type; + scale.setExtent(extent[0], extent[1]); + scale.niceExtent({ + splitNumber: splitNumber, + fixMin: extentInfo.fixMin, + fixMax: extentInfo.fixMax, + minInterval: scaleType === 'interval' || scaleType === 'time' ? model.get('minInterval') : null, + maxInterval: scaleType === 'interval' || scaleType === 'time' ? model.get('maxInterval') : null + }); // If some one specified the min, max. And the default calculated interval + // is not good enough. He can specify the interval. It is often appeared + // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard + // to be 60. + // FIXME + + var interval = model.get('interval'); + + if (interval != null) { + scale.setInterval && scale.setInterval(interval); + } + } + /** + * @param axisType Default retrieve from model.type + */ + + function createScaleByModel(model, axisType) { + axisType = axisType || model.get('type'); + + if (axisType) { + switch (axisType) { + // Buildin scale + case 'category': + return new OrdinalScale({ + ordinalMeta: model.getOrdinalMeta ? model.getOrdinalMeta() : model.getCategories(), + extent: [Infinity, -Infinity] + }); + + case 'time': + return new TimeScale({ + locale: model.ecModel.getLocaleModel(), + useUTC: model.ecModel.get('useUTC') + }); + + default: + // case 'value'/'interval', 'log', or others. + return new (Scale.getClass(axisType) || IntervalScale)(); + } + } + } + /** + * Check if the axis cross 0 + */ + + function ifAxisCrossZero(axis) { + var dataExtent = axis.scale.getExtent(); + var min = dataExtent[0]; + var max = dataExtent[1]; + return !(min > 0 && max > 0 || min < 0 && max < 0); + } + /** + * @param axis + * @return Label formatter function. + * param: {number} tickValue, + * param: {number} idx, the index in all ticks. + * If category axis, this param is not required. + * return: {string} label string. + */ + + function makeLabelFormatter(axis) { + var labelFormatter = axis.getLabelModel().get('formatter'); + var categoryTickStart = axis.type === 'category' ? axis.scale.getExtent()[0] : null; + + if (axis.scale.type === 'time') { + return function (tpl) { + return function (tick, idx) { + return axis.scale.getFormattedLabel(tick, idx, tpl); + }; + }(labelFormatter); + } else if (typeof labelFormatter === 'string') { + return function (tpl) { + return function (tick) { + // For category axis, get raw value; for numeric axis, + // get formatted label like '1,333,444'. + var label = axis.scale.getLabel(tick); + var text = tpl.replace('{value}', label != null ? label : ''); + return text; + }; + }(labelFormatter); + } else if (typeof labelFormatter === 'function') { + return function (cb) { + return function (tick, idx) { + // The original intention of `idx` is "the index of the tick in all ticks". + // But the previous implementation of category axis do not consider the + // `axisLabel.interval`, which cause that, for example, the `interval` is + // `1`, then the ticks "name5", "name7", "name9" are displayed, where the + // corresponding `idx` are `0`, `2`, `4`, but not `0`, `1`, `2`. So we keep + // the definition here for back compatibility. + if (categoryTickStart != null) { + idx = tick.value - categoryTickStart; + } + + return cb(getAxisRawValue(axis, tick), idx, tick.level != null ? { + level: tick.level + } : null); + }; + }(labelFormatter); + } else { + return function (tick) { + return axis.scale.getLabel(tick); + }; + } + } + function getAxisRawValue(axis, tick) { + // In category axis with data zoom, tick is not the original + // index of axis.data. So tick should not be exposed to user + // in category axis. + return axis.type === 'category' ? axis.scale.getLabel(tick) : tick.value; + } + /** + * @param axis + * @return Be null/undefined if no labels. + */ + + function estimateLabelUnionRect(axis) { + var axisModel = axis.model; + var scale = axis.scale; + + if (!axisModel.get(['axisLabel', 'show']) || scale.isBlank()) { + return; + } + + var realNumberScaleTicks; + var tickCount; + var categoryScaleExtent = scale.getExtent(); // Optimize for large category data, avoid call `getTicks()`. + + if (scale instanceof OrdinalScale) { + tickCount = scale.count(); + } else { + realNumberScaleTicks = scale.getTicks(); + tickCount = realNumberScaleTicks.length; + } + + var axisLabelModel = axis.getLabelModel(); + var labelFormatter = makeLabelFormatter(axis); + var rect; + var step = 1; // Simple optimization for large amount of labels + + if (tickCount > 40) { + step = Math.ceil(tickCount / 40); + } + + for (var i = 0; i < tickCount; i += step) { + var tick = realNumberScaleTicks ? realNumberScaleTicks[i] : { + value: categoryScaleExtent[0] + i + }; + var label = labelFormatter(tick, i); + var unrotatedSingleRect = axisLabelModel.getTextRect(label); + var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0); + rect ? rect.union(singleRect) : rect = singleRect; + } + + return rect; + } + + function rotateTextRect(textRect, rotate) { + var rotateRadians = rotate * Math.PI / 180; + var beforeWidth = textRect.width; + var beforeHeight = textRect.height; + var afterWidth = beforeWidth * Math.abs(Math.cos(rotateRadians)) + Math.abs(beforeHeight * Math.sin(rotateRadians)); + var afterHeight = beforeWidth * Math.abs(Math.sin(rotateRadians)) + Math.abs(beforeHeight * Math.cos(rotateRadians)); + var rotatedRect = new BoundingRect(textRect.x, textRect.y, afterWidth, afterHeight); + return rotatedRect; + } + /** + * @param model axisLabelModel or axisTickModel + * @return {number|String} Can be null|'auto'|number|function + */ + + + function getOptionCategoryInterval(model) { + var interval = model.get('interval'); + return interval == null ? 'auto' : interval; + } + /** + * Set `categoryInterval` as 0 implicitly indicates that + * show all labels reguardless of overlap. + * @param {Object} axis axisModel.axis + */ + + function shouldShowAllLabels(axis) { + return axis.type === 'category' && getOptionCategoryInterval(axis.getLabelModel()) === 0; + } + function getDataDimensionsOnAxis(data, axisDim) { + // Remove duplicated dat dimensions caused by `getStackedDimension`. + var dataDimMap = {}; // Currently `mapDimensionsAll` will contain stack result dimension ('__\0ecstackresult'). + // PENDING: is it reasonable? Do we need to remove the original dim from "coord dim" since + // there has been stacked result dim? + + each(data.mapDimensionsAll(axisDim), function (dataDim) { + // For example, the extent of the original dimension + // is [0.1, 0.5], the extent of the `stackResultDimension` + // is [7, 9], the final extent should NOT include [0.1, 0.5], + // because there is no graphic corresponding to [0.1, 0.5]. + // See the case in `test/area-stack.html` `main1`, where area line + // stack needs `yAxis` not start from 0. + dataDimMap[getStackedDimension(data, dataDim)] = true; + }); + return keys(dataDimMap); + } + function unionAxisExtentFromData(dataExtent, data, axisDim) { + if (data) { + each(getDataDimensionsOnAxis(data, axisDim), function (dim) { + var seriesExtent = data.getApproximateExtent(dim); + seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]); + seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]); + }); + } + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars + var AxisModelCommonMixin = + /** @class */ + function () { + function AxisModelCommonMixin() {} + + AxisModelCommonMixin.prototype.getNeedCrossZero = function () { + var option = this.option; + return !option.scale; + }; + /** + * Should be implemented by each axis model if necessary. + * @return coordinate system model + */ + + + AxisModelCommonMixin.prototype.getCoordSysModel = function () { + return; + }; + + return AxisModelCommonMixin; + }(); + + /** + * Create a muti dimension List structure from seriesModel. + */ + + function createList(seriesModel) { + return createSeriesData(null, seriesModel); + } // export function createGraph(seriesModel) { + var dataStack$1 = { + isDimensionStacked: isDimensionStacked, + enableDataStack: enableDataStack, + getStackedDimension: getStackedDimension + }; + /** + * Create scale + * @param {Array.} dataExtent + * @param {Object|module:echarts/Model} option If `optoin.type` + * is secified, it can only be `'value'` currently. + */ + + function createScale(dataExtent, option) { + var axisModel = option; + + if (!(option instanceof Model)) { + axisModel = new Model(option); // FIXME + // Currently AxisModelCommonMixin has nothing to do with the + // the requirements of `axisHelper.createScaleByModel`. For + // example the method `getCategories` and `getOrdinalMeta` + // are required for `'category'` axis, and ecModel are required + // for `'time'` axis. But occationally echarts-gl happened + // to only use `'value'` axis. + // zrUtil.mixin(axisModel, AxisModelCommonMixin); + } + + var scale = createScaleByModel(axisModel); + scale.setExtent(dataExtent[0], dataExtent[1]); + niceScaleExtent(scale, axisModel); + return scale; + } + /** + * Mixin common methods to axis model, + * + * Inlcude methods + * `getFormattedLabels() => Array.` + * `getCategories() => Array.` + * `getMin(origin: boolean) => number` + * `getMax(origin: boolean) => number` + * `getNeedCrossZero() => boolean` + */ + + function mixinAxisModelCommonMethods(Model) { + mixin(Model, AxisModelCommonMixin); + } + function createTextStyle$1(textStyleModel, opts) { + opts = opts || {}; + return createTextStyle(textStyleModel, null, null, opts.state !== 'normal'); + } + + var helper = /*#__PURE__*/Object.freeze({ + __proto__: null, + createList: createList, + getLayoutRect: getLayoutRect, + dataStack: dataStack$1, + createScale: createScale, + mixinAxisModelCommonMethods: mixinAxisModelCommonMethods, + getECData: getECData, + createTextStyle: createTextStyle$1, + createDimensions: createDimensions, + createSymbol: createSymbol, + enableHoverEmphasis: enableHoverEmphasis + }); + + var number = /*#__PURE__*/Object.freeze({ + __proto__: null, + linearMap: linearMap, + round: round, + asc: asc, + getPrecision: getPrecision, + getPrecisionSafe: getPrecisionSafe, + getPixelPrecision: getPixelPrecision, + getPercentWithPrecision: getPercentWithPrecision, + MAX_SAFE_INTEGER: MAX_SAFE_INTEGER, + remRadian: remRadian, + isRadianAroundZero: isRadianAroundZero, + parseDate: parseDate, + quantity: quantity, + quantityExponent: quantityExponent, + nice: nice, + quantile: quantile, + reformIntervals: reformIntervals, + isNumeric: isNumeric, + numericToNumber: numericToNumber + }); + + var time = /*#__PURE__*/Object.freeze({ + __proto__: null, + parse: parseDate, + format: format + }); + + var graphic$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + extendShape: extendShape, + extendPath: extendPath, + makePath: makePath, + makeImage: makeImage, + mergePath: mergePath$1, + resizePath: resizePath, + createIcon: createIcon, + updateProps: updateProps, + initProps: initProps, + getTransform: getTransform, + clipPointsByRect: clipPointsByRect, + clipRectByRect: clipRectByRect, + registerShape: registerShape, + getShapeClass: getShapeClass, + Group: Group, + Image: ZRImage, + Text: ZRText, + Circle: Circle, + Ellipse: Ellipse, + Sector: Sector, + Ring: Ring, + Polygon: Polygon, + Polyline: Polyline, + Rect: Rect, + Line: Line, + BezierCurve: BezierCurve, + Arc: Arc, + IncrementalDisplayable: IncrementalDisplayable, + CompoundPath: CompoundPath, + LinearGradient: LinearGradient, + RadialGradient: RadialGradient, + BoundingRect: BoundingRect + }); + + var format$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + addCommas: addCommas, + toCamelCase: toCamelCase, + normalizeCssArray: normalizeCssArray$1, + encodeHTML: encodeHTML, + formatTpl: formatTpl, + getTooltipMarker: getTooltipMarker, + formatTime: formatTime, + capitalFirst: capitalFirst, + truncateText: truncateText, + getTextRect: getTextRect + }); + + var util$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + map: map, + each: each, + indexOf: indexOf, + inherits: inherits, + reduce: reduce, + filter: filter, + bind: bind, + curry: curry, + isArray: isArray, + isString: isString, + isObject: isObject, + isFunction: isFunction, + extend: extend, + defaults: defaults, + clone: clone, + merge: merge + }); + + var inner$5 = makeInner(); + function createAxisLabels(axis) { + // Only ordinal scale support tick interval + return axis.type === 'category' ? makeCategoryLabels(axis) : makeRealNumberLabels(axis); + } + /** + * @param {module:echats/coord/Axis} axis + * @param {module:echarts/model/Model} tickModel For example, can be axisTick, splitLine, splitArea. + * @return {Object} { + * ticks: Array. + * tickCategoryInterval: number + * } + */ + + function createAxisTicks(axis, tickModel) { + // Only ordinal scale support tick interval + return axis.type === 'category' ? makeCategoryTicks(axis, tickModel) : { + ticks: map(axis.scale.getTicks(), function (tick) { + return tick.value; + }) + }; + } + + function makeCategoryLabels(axis) { + var labelModel = axis.getLabelModel(); + var result = makeCategoryLabelsActually(axis, labelModel); + return !labelModel.get('show') || axis.scale.isBlank() ? { + labels: [], + labelCategoryInterval: result.labelCategoryInterval + } : result; + } + + function makeCategoryLabelsActually(axis, labelModel) { + var labelsCache = getListCache(axis, 'labels'); + var optionLabelInterval = getOptionCategoryInterval(labelModel); + var result = listCacheGet(labelsCache, optionLabelInterval); + + if (result) { + return result; + } + + var labels; + var numericLabelInterval; + + if (isFunction(optionLabelInterval)) { + labels = makeLabelsByCustomizedCategoryInterval(axis, optionLabelInterval); + } else { + numericLabelInterval = optionLabelInterval === 'auto' ? makeAutoCategoryInterval(axis) : optionLabelInterval; + labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval); + } // Cache to avoid calling interval function repeatly. + + + return listCacheSet(labelsCache, optionLabelInterval, { + labels: labels, + labelCategoryInterval: numericLabelInterval + }); + } + + function makeCategoryTicks(axis, tickModel) { + var ticksCache = getListCache(axis, 'ticks'); + var optionTickInterval = getOptionCategoryInterval(tickModel); + var result = listCacheGet(ticksCache, optionTickInterval); + + if (result) { + return result; + } + + var ticks; + var tickCategoryInterval; // Optimize for the case that large category data and no label displayed, + // we should not return all ticks. + + if (!tickModel.get('show') || axis.scale.isBlank()) { + ticks = []; + } + + if (isFunction(optionTickInterval)) { + ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true); + } // Always use label interval by default despite label show. Consider this + // scenario, Use multiple grid with the xAxis sync, and only one xAxis shows + // labels. `splitLine` and `axisTick` should be consistent in this case. + else if (optionTickInterval === 'auto') { + var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel()); + tickCategoryInterval = labelsResult.labelCategoryInterval; + ticks = map(labelsResult.labels, function (labelItem) { + return labelItem.tickValue; + }); + } else { + tickCategoryInterval = optionTickInterval; + ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true); + } // Cache to avoid calling interval function repeatly. + + + return listCacheSet(ticksCache, optionTickInterval, { + ticks: ticks, + tickCategoryInterval: tickCategoryInterval + }); + } + + function makeRealNumberLabels(axis) { + var ticks = axis.scale.getTicks(); + var labelFormatter = makeLabelFormatter(axis); + return { + labels: map(ticks, function (tick, idx) { + return { + level: tick.level, + formattedLabel: labelFormatter(tick, idx), + rawLabel: axis.scale.getLabel(tick), + tickValue: tick.value + }; + }) + }; + } + + function getListCache(axis, prop) { + // Because key can be funciton, and cache size always be small, we use array cache. + return inner$5(axis)[prop] || (inner$5(axis)[prop] = []); + } + + function listCacheGet(cache, key) { + for (var i = 0; i < cache.length; i++) { + if (cache[i].key === key) { + return cache[i].value; + } + } + } + + function listCacheSet(cache, key, value) { + cache.push({ + key: key, + value: value + }); + return value; + } + + function makeAutoCategoryInterval(axis) { + var result = inner$5(axis).autoInterval; + return result != null ? result : inner$5(axis).autoInterval = axis.calculateCategoryInterval(); + } + /** + * Calculate interval for category axis ticks and labels. + * To get precise result, at least one of `getRotate` and `isHorizontal` + * should be implemented in axis. + */ + + + function calculateCategoryInterval(axis) { + var params = fetchAutoCategoryIntervalCalculationParams(axis); + var labelFormatter = makeLabelFormatter(axis); + var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI; + var ordinalScale = axis.scale; + var ordinalExtent = ordinalScale.getExtent(); // Providing this method is for optimization: + // avoid generating a long array by `getTicks` + // in large category data case. + + var tickCount = ordinalScale.count(); + + if (ordinalExtent[1] - ordinalExtent[0] < 1) { + return 0; + } + + var step = 1; // Simple optimization. Empirical value: tick count should less than 40. + + if (tickCount > 40) { + step = Math.max(1, Math.floor(tickCount / 40)); + } + + var tickValue = ordinalExtent[0]; + var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue); + var unitW = Math.abs(unitSpan * Math.cos(rotation)); + var unitH = Math.abs(unitSpan * Math.sin(rotation)); + var maxW = 0; + var maxH = 0; // Caution: Performance sensitive for large category data. + // Consider dataZoom, we should make appropriate step to avoid O(n) loop. + + for (; tickValue <= ordinalExtent[1]; tickValue += step) { + var width = 0; + var height = 0; // Not precise, do not consider align and vertical align + // and each distance from axis line yet. + + var rect = getBoundingRect(labelFormatter({ + value: tickValue + }), params.font, 'center', 'top'); // Magic number + + width = rect.width * 1.3; + height = rect.height * 1.3; // Min size, void long loop. + + maxW = Math.max(maxW, width, 7); + maxH = Math.max(maxH, height, 7); + } + + var dw = maxW / unitW; + var dh = maxH / unitH; // 0/0 is NaN, 1/0 is Infinity. + + isNaN(dw) && (dw = Infinity); + isNaN(dh) && (dh = Infinity); + var interval = Math.max(0, Math.floor(Math.min(dw, dh))); + var cache = inner$5(axis.model); + var axisExtent = axis.getExtent(); + var lastAutoInterval = cache.lastAutoInterval; + var lastTickCount = cache.lastTickCount; // Use cache to keep interval stable while moving zoom window, + // otherwise the calculated interval might jitter when the zoom + // window size is close to the interval-changing size. + // For example, if all of the axis labels are `a, b, c, d, e, f, g`. + // The jitter will cause that sometimes the displayed labels are + // `a, d, g` (interval: 2) sometimes `a, c, e`(interval: 1). + + if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1 // Always choose the bigger one, otherwise the critical + // point is not the same when zooming in or zooming out. + && lastAutoInterval > interval // If the axis change is caused by chart resize, the cache should not + // be used. Otherwise some hiden labels might not be shown again. + && cache.axisExtent0 === axisExtent[0] && cache.axisExtent1 === axisExtent[1]) { + interval = lastAutoInterval; + } // Only update cache if cache not used, otherwise the + // changing of interval is too insensitive. + else { + cache.lastTickCount = tickCount; + cache.lastAutoInterval = interval; + cache.axisExtent0 = axisExtent[0]; + cache.axisExtent1 = axisExtent[1]; + } + + return interval; + } + + function fetchAutoCategoryIntervalCalculationParams(axis) { + var labelModel = axis.getLabelModel(); + return { + axisRotate: axis.getRotate ? axis.getRotate() : axis.isHorizontal && !axis.isHorizontal() ? 90 : 0, + labelRotate: labelModel.get('rotate') || 0, + font: labelModel.getFont() + }; + } + + function makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) { + var labelFormatter = makeLabelFormatter(axis); + var ordinalScale = axis.scale; + var ordinalExtent = ordinalScale.getExtent(); + var labelModel = axis.getLabelModel(); + var result = []; // TODO: axisType: ordinalTime, pick the tick from each month/day/year/... + + var step = Math.max((categoryInterval || 0) + 1, 1); + var startTick = ordinalExtent[0]; + var tickCount = ordinalScale.count(); // Calculate start tick based on zero if possible to keep label consistent + // while zooming and moving while interval > 0. Otherwise the selection + // of displayable ticks and symbols probably keep changing. + // 3 is empirical value. + + if (startTick !== 0 && step > 1 && tickCount / step > 2) { + startTick = Math.round(Math.ceil(startTick / step) * step); + } // (1) Only add min max label here but leave overlap checking + // to render stage, which also ensure the returned list + // suitable for splitLine and splitArea rendering. + // (2) Scales except category always contain min max label so + // do not need to perform this process. + + + var showAllLabel = shouldShowAllLabels(axis); + var includeMinLabel = labelModel.get('showMinLabel') || showAllLabel; + var includeMaxLabel = labelModel.get('showMaxLabel') || showAllLabel; + + if (includeMinLabel && startTick !== ordinalExtent[0]) { + addItem(ordinalExtent[0]); + } // Optimize: avoid generating large array by `ordinalScale.getTicks()`. + + + var tickValue = startTick; + + for (; tickValue <= ordinalExtent[1]; tickValue += step) { + addItem(tickValue); + } + + if (includeMaxLabel && tickValue - step !== ordinalExtent[1]) { + addItem(ordinalExtent[1]); + } + + function addItem(tickValue) { + var tickObj = { + value: tickValue + }; + result.push(onlyTick ? tickValue : { + formattedLabel: labelFormatter(tickObj), + rawLabel: ordinalScale.getLabel(tickObj), + tickValue: tickValue + }); + } + + return result; + } + + function makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) { + var ordinalScale = axis.scale; + var labelFormatter = makeLabelFormatter(axis); + var result = []; + each(ordinalScale.getTicks(), function (tick) { + var rawLabel = ordinalScale.getLabel(tick); + var tickValue = tick.value; + + if (categoryInterval(tick.value, rawLabel)) { + result.push(onlyTick ? tickValue : { + formattedLabel: labelFormatter(tick), + rawLabel: rawLabel, + tickValue: tickValue + }); + } + }); + return result; + } + + var NORMALIZED_EXTENT = [0, 1]; + /** + * Base class of Axis. + */ + + var Axis = + /** @class */ + function () { + function Axis(dim, scale, extent) { + this.onBand = false; + this.inverse = false; + this.dim = dim; + this.scale = scale; + this._extent = extent || [0, 0]; + } + /** + * If axis extent contain given coord + */ + + + Axis.prototype.contain = function (coord) { + var extent = this._extent; + var min = Math.min(extent[0], extent[1]); + var max = Math.max(extent[0], extent[1]); + return coord >= min && coord <= max; + }; + /** + * If axis extent contain given data + */ + + + Axis.prototype.containData = function (data) { + return this.scale.contain(data); + }; + /** + * Get coord extent. + */ + + + Axis.prototype.getExtent = function () { + return this._extent.slice(); + }; + /** + * Get precision used for formatting + */ + + + Axis.prototype.getPixelPrecision = function (dataExtent) { + return getPixelPrecision(dataExtent || this.scale.getExtent(), this._extent); + }; + /** + * Set coord extent + */ + + + Axis.prototype.setExtent = function (start, end) { + var extent = this._extent; + extent[0] = start; + extent[1] = end; + }; + /** + * Convert data to coord. Data is the rank if it has an ordinal scale + */ + + + Axis.prototype.dataToCoord = function (data, clamp) { + var extent = this._extent; + var scale = this.scale; + data = scale.normalize(data); + + if (this.onBand && scale.type === 'ordinal') { + extent = extent.slice(); + fixExtentWithBands(extent, scale.count()); + } + + return linearMap(data, NORMALIZED_EXTENT, extent, clamp); + }; + /** + * Convert coord to data. Data is the rank if it has an ordinal scale + */ + + + Axis.prototype.coordToData = function (coord, clamp) { + var extent = this._extent; + var scale = this.scale; + + if (this.onBand && scale.type === 'ordinal') { + extent = extent.slice(); + fixExtentWithBands(extent, scale.count()); + } + + var t = linearMap(coord, extent, NORMALIZED_EXTENT, clamp); + return this.scale.scale(t); + }; + /** + * Convert pixel point to data in axis + */ + + + Axis.prototype.pointToData = function (point, clamp) { + // Should be implemented in derived class if necessary. + return; + }; + /** + * Different from `zrUtil.map(axis.getTicks(), axis.dataToCoord, axis)`, + * `axis.getTicksCoords` considers `onBand`, which is used by + * `boundaryGap:true` of category axis and splitLine and splitArea. + * @param opt.tickModel default: axis.model.getModel('axisTick') + * @param opt.clamp If `true`, the first and the last + * tick must be at the axis end points. Otherwise, clip ticks + * that outside the axis extent. + */ + + + Axis.prototype.getTicksCoords = function (opt) { + opt = opt || {}; + var tickModel = opt.tickModel || this.getTickModel(); + var result = createAxisTicks(this, tickModel); + var ticks = result.ticks; + var ticksCoords = map(ticks, function (tickVal) { + return { + coord: this.dataToCoord(this.scale.type === 'ordinal' ? this.scale.getRawOrdinalNumber(tickVal) : tickVal), + tickValue: tickVal + }; + }, this); + var alignWithLabel = tickModel.get('alignWithLabel'); + fixOnBandTicksCoords(this, ticksCoords, alignWithLabel, opt.clamp); + return ticksCoords; + }; + + Axis.prototype.getMinorTicksCoords = function () { + if (this.scale.type === 'ordinal') { + // Category axis doesn't support minor ticks + return []; + } + + var minorTickModel = this.model.getModel('minorTick'); + var splitNumber = minorTickModel.get('splitNumber'); // Protection. + + if (!(splitNumber > 0 && splitNumber < 100)) { + splitNumber = 5; + } + + var minorTicks = this.scale.getMinorTicks(splitNumber); + var minorTicksCoords = map(minorTicks, function (minorTicksGroup) { + return map(minorTicksGroup, function (minorTick) { + return { + coord: this.dataToCoord(minorTick), + tickValue: minorTick + }; + }, this); + }, this); + return minorTicksCoords; + }; + + Axis.prototype.getViewLabels = function () { + return createAxisLabels(this).labels; + }; + + Axis.prototype.getLabelModel = function () { + return this.model.getModel('axisLabel'); + }; + /** + * Notice here we only get the default tick model. For splitLine + * or splitArea, we should pass the splitLineModel or splitAreaModel + * manually when calling `getTicksCoords`. + * In GL, this method may be overrided to: + * `axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));` + */ + + + Axis.prototype.getTickModel = function () { + return this.model.getModel('axisTick'); + }; + /** + * Get width of band + */ + + + Axis.prototype.getBandWidth = function () { + var axisExtent = this._extent; + var dataExtent = this.scale.getExtent(); + var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0); // Fix #2728, avoid NaN when only one data. + + len === 0 && (len = 1); + var size = Math.abs(axisExtent[1] - axisExtent[0]); + return Math.abs(size) / len; + }; + /** + * Only be called in category axis. + * Can be overrided, consider other axes like in 3D. + * @return Auto interval for cateogry axis tick and label + */ + + + Axis.prototype.calculateCategoryInterval = function () { + return calculateCategoryInterval(this); + }; + + return Axis; + }(); + + function fixExtentWithBands(extent, nTick) { + var size = extent[1] - extent[0]; + var len = nTick; + var margin = size / len / 2; + extent[0] += margin; + extent[1] -= margin; + } // If axis has labels [1, 2, 3, 4]. Bands on the axis are + // |---1---|---2---|---3---|---4---|. + // So the displayed ticks and splitLine/splitArea should between + // each data item, otherwise cause misleading (e.g., split tow bars + // of a single data item when there are two bar series). + // Also consider if tickCategoryInterval > 0 and onBand, ticks and + // splitLine/spliteArea should layout appropriately corresponding + // to displayed labels. (So we should not use `getBandWidth` in this + // case). + + + function fixOnBandTicksCoords(axis, ticksCoords, alignWithLabel, clamp) { + var ticksLen = ticksCoords.length; + + if (!axis.onBand || alignWithLabel || !ticksLen) { + return; + } + + var axisExtent = axis.getExtent(); + var last; + var diffSize; + + if (ticksLen === 1) { + ticksCoords[0].coord = axisExtent[0]; + last = ticksCoords[1] = { + coord: axisExtent[0] + }; + } else { + var crossLen = ticksCoords[ticksLen - 1].tickValue - ticksCoords[0].tickValue; + var shift_1 = (ticksCoords[ticksLen - 1].coord - ticksCoords[0].coord) / crossLen; + each(ticksCoords, function (ticksItem) { + ticksItem.coord -= shift_1 / 2; + }); + var dataExtent = axis.scale.getExtent(); + diffSize = 1 + dataExtent[1] - ticksCoords[ticksLen - 1].tickValue; + last = { + coord: ticksCoords[ticksLen - 1].coord + shift_1 * diffSize + }; + ticksCoords.push(last); + } + + var inverse = axisExtent[0] > axisExtent[1]; // Handling clamp. + + if (littleThan(ticksCoords[0].coord, axisExtent[0])) { + clamp ? ticksCoords[0].coord = axisExtent[0] : ticksCoords.shift(); + } + + if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) { + ticksCoords.unshift({ + coord: axisExtent[0] + }); + } + + if (littleThan(axisExtent[1], last.coord)) { + clamp ? last.coord = axisExtent[1] : ticksCoords.pop(); + } + + if (clamp && littleThan(last.coord, axisExtent[1])) { + ticksCoords.push({ + coord: axisExtent[1] + }); + } + + function littleThan(a, b) { + // Avoid rounding error cause calculated tick coord different with extent. + // It may cause an extra unecessary tick added. + a = round(a); + b = round(b); + return inverse ? a > b : a < b; + } + } + + // Should use `ComponentModel.extend` or `class XXXX extend ComponentModel` to create class. + // Then use `registerComponentModel` in `install` parameter when `use` this extension. For example: + // class Bar3DModel extends ComponentModel {} + // export function install(registers) { regsiters.registerComponentModel(Bar3DModel); } + // echarts.use(install); + + function extendComponentModel(proto) { + var Model = ComponentModel.extend(proto); + ComponentModel.registerClass(Model); + return Model; + } + function extendComponentView(proto) { + var View = ComponentView.extend(proto); + ComponentView.registerClass(View); + return View; + } + function extendSeriesModel(proto) { + var Model = SeriesModel.extend(proto); + SeriesModel.registerClass(Model); + return Model; + } + function extendChartView(proto) { + var View = ChartView.extend(proto); + ChartView.registerClass(View); + return View; + } + + var PI2$6 = Math.PI * 2; + var CMD$3 = PathProxy.CMD; + var DEFAULT_SEARCH_SPACE = ['top', 'right', 'bottom', 'left']; + + function getCandidateAnchor(pos, distance, rect, outPt, outDir) { + var width = rect.width; + var height = rect.height; + + switch (pos) { + case 'top': + outPt.set(rect.x + width / 2, rect.y - distance); + outDir.set(0, -1); + break; + + case 'bottom': + outPt.set(rect.x + width / 2, rect.y + height + distance); + outDir.set(0, 1); + break; + + case 'left': + outPt.set(rect.x - distance, rect.y + height / 2); + outDir.set(-1, 0); + break; + + case 'right': + outPt.set(rect.x + width + distance, rect.y + height / 2); + outDir.set(1, 0); + break; + } + } + + function projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) { + x -= cx; + y -= cy; + var d = Math.sqrt(x * x + y * y); + x /= d; + y /= d; // Intersect point. + + var ox = x * r + cx; + var oy = y * r + cy; + + if (Math.abs(startAngle - endAngle) % PI2$6 < 1e-4) { + // Is a circle + out[0] = ox; + out[1] = oy; + return d - r; + } + + if (anticlockwise) { + var tmp = startAngle; + startAngle = normalizeRadian(endAngle); + endAngle = normalizeRadian(tmp); + } else { + startAngle = normalizeRadian(startAngle); + endAngle = normalizeRadian(endAngle); + } + + if (startAngle > endAngle) { + endAngle += PI2$6; + } + + var angle = Math.atan2(y, x); + + if (angle < 0) { + angle += PI2$6; + } + + if (angle >= startAngle && angle <= endAngle || angle + PI2$6 >= startAngle && angle + PI2$6 <= endAngle) { + // Project point is on the arc. + out[0] = ox; + out[1] = oy; + return d - r; + } + + var x1 = r * Math.cos(startAngle) + cx; + var y1 = r * Math.sin(startAngle) + cy; + var x2 = r * Math.cos(endAngle) + cx; + var y2 = r * Math.sin(endAngle) + cy; + var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y); + var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y); + + if (d1 < d2) { + out[0] = x1; + out[1] = y1; + return Math.sqrt(d1); + } else { + out[0] = x2; + out[1] = y2; + return Math.sqrt(d2); + } + } + + function projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) { + var dx = x - x1; + var dy = y - y1; + var dx1 = x2 - x1; + var dy1 = y2 - y1; + var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1); + dx1 /= lineLen; + dy1 /= lineLen; // dot product + + var projectedLen = dx * dx1 + dy * dy1; + var t = projectedLen / lineLen; + + if (limitToEnds) { + t = Math.min(Math.max(t, 0), 1); + } + + t *= lineLen; + var ox = out[0] = x1 + t * dx1; + var oy = out[1] = y1 + t * dy1; + return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y)); + } + + function projectPointToRect(x1, y1, width, height, x, y, out) { + if (width < 0) { + x1 = x1 + width; + width = -width; + } + + if (height < 0) { + y1 = y1 + height; + height = -height; + } + + var x2 = x1 + width; + var y2 = y1 + height; + var ox = out[0] = Math.min(Math.max(x, x1), x2); + var oy = out[1] = Math.min(Math.max(y, y1), y2); + return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y)); + } + + var tmpPt = []; + + function nearestPointOnRect(pt, rect, out) { + var dist = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt); + out.set(tmpPt[0], tmpPt[1]); + return dist; + } + /** + * Calculate min distance corresponding point. + * This method won't evaluate if point is in the path. + */ + + + function nearestPointOnPath(pt, path, out) { + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + var x1; + var y1; + var minDist = Infinity; + var data = path.data; + var x = pt.x; + var y = pt.y; + + for (var i = 0; i < data.length;) { + var cmd = data[i++]; + + if (i === 1) { + xi = data[i]; + yi = data[i + 1]; + x0 = xi; + y0 = yi; + } + + var d = minDist; + + switch (cmd) { + case CMD$3.M: + // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点 + // 在 closePath 的时候使用 + x0 = data[i++]; + y0 = data[i++]; + xi = x0; + yi = y0; + break; + + case CMD$3.L: + d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true); + xi = data[i++]; + yi = data[i++]; + break; + + case CMD$3.C: + d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt); + xi = data[i++]; + yi = data[i++]; + break; + + case CMD$3.Q: + d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt); + xi = data[i++]; + yi = data[i++]; + break; + + case CMD$3.A: + // TODO Arc 判断的开销比较大 + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var theta = data[i++]; + var dTheta = data[i++]; // TODO Arc 旋转 + + i += 1; + var anticlockwise = !!(1 - data[i++]); + x1 = Math.cos(theta) * rx + cx; + y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令 + + if (i <= 1) { + // 第一个命令起点还未定义 + x0 = x1; + y0 = y1; + } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放 + + + var _x = (x - cx) * ry / rx + cx; + + d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt); + xi = Math.cos(theta + dTheta) * rx + cx; + yi = Math.sin(theta + dTheta) * ry + cy; + break; + + case CMD$3.R: + x0 = xi = data[i++]; + y0 = yi = data[i++]; + var width = data[i++]; + var height = data[i++]; + d = projectPointToRect(x0, y0, width, height, x, y, tmpPt); + break; + + case CMD$3.Z: + d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true); + xi = x0; + yi = y0; + break; + } + + if (d < minDist) { + minDist = d; + out.set(tmpPt[0], tmpPt[1]); + } + } + + return minDist; + } // Temporal varible for intermediate usage. + + + var pt0 = new Point(); + var pt1 = new Point(); + var pt2 = new Point(); + var dir = new Point(); + var dir2 = new Point(); + /** + * Calculate a proper guide line based on the label position and graphic element definition + * @param label + * @param labelRect + * @param target + * @param targetRect + */ + + function updateLabelLinePoints(target, labelLineModel) { + if (!target) { + return; + } + + var labelLine = target.getTextGuideLine(); + var label = target.getTextContent(); // Needs to create text guide in each charts. + + if (!(label && labelLine)) { + return; + } + + var labelGuideConfig = target.textGuideLineConfig || {}; + var points = [[0, 0], [0, 0], [0, 0]]; + var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE; + var labelRect = label.getBoundingRect().clone(); + labelRect.applyTransform(label.getComputedTransform()); + var minDist = Infinity; + var anchorPoint = labelGuideConfig.anchor; + var targetTransform = target.getComputedTransform(); + var targetInversedTransform = targetTransform && invert([], targetTransform); + var len = labelLineModel.get('length2') || 0; + + if (anchorPoint) { + pt2.copy(anchorPoint); + } + + for (var i = 0; i < searchSpace.length; i++) { + var candidate = searchSpace[i]; + getCandidateAnchor(candidate, 0, labelRect, pt0, dir); + Point.scaleAndAdd(pt1, pt0, dir, len); // Transform to target coord space. + + pt1.transform(targetInversedTransform); // Note: getBoundingRect will ensure the `path` being created. + + var boundingRect = target.getBoundingRect(); + var dist = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2); // TODO pt2 is in the path + + if (dist < minDist) { + minDist = dist; // Transform back to global space. + + pt1.transform(targetTransform); + pt2.transform(targetTransform); + pt2.toArray(points[0]); + pt1.toArray(points[1]); + pt0.toArray(points[2]); + } + } + + limitTurnAngle(points, labelLineModel.get('minTurnAngle')); + labelLine.setShape({ + points: points + }); + } // Temporal variable for the limitTurnAngle function + + var tmpArr = []; + var tmpProjPoint = new Point(); + /** + * Reduce the line segment attached to the label to limit the turn angle between two segments. + * @param linePoints + * @param minTurnAngle Radian of minimum turn angle. 0 - 180 + */ + + function limitTurnAngle(linePoints, minTurnAngle) { + if (!(minTurnAngle <= 180 && minTurnAngle > 0)) { + return; + } + + minTurnAngle = minTurnAngle / 180 * Math.PI; // The line points can be + // /pt1----pt2 (label) + // / + // pt0/ + + pt0.fromArray(linePoints[0]); + pt1.fromArray(linePoints[1]); + pt2.fromArray(linePoints[2]); + Point.sub(dir, pt0, pt1); + Point.sub(dir2, pt2, pt1); + var len1 = dir.len(); + var len2 = dir2.len(); + + if (len1 < 1e-3 || len2 < 1e-3) { + return; + } + + dir.scale(1 / len1); + dir2.scale(1 / len2); + var angleCos = dir.dot(dir2); + var minTurnAngleCos = Math.cos(minTurnAngle); + + if (minTurnAngleCos < angleCos) { + // Smaller than minTurnAngle + // Calculate project point of pt0 on pt1-pt2 + var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false); + tmpProjPoint.fromArray(tmpArr); // Calculate new projected length with limited minTurnAngle and get the new connect point + + tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle)); // Limit the new calculated connect point between pt1 and pt2. + + var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y); + + if (isNaN(t)) { + return; + } + + if (t < 0) { + Point.copy(tmpProjPoint, pt1); + } else if (t > 1) { + Point.copy(tmpProjPoint, pt2); + } + + tmpProjPoint.toArray(linePoints[1]); + } + } + /** + * Limit the angle of line and the surface + * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite + */ + + function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) { + if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) { + return; + } + + maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI; + pt0.fromArray(linePoints[0]); + pt1.fromArray(linePoints[1]); + pt2.fromArray(linePoints[2]); + Point.sub(dir, pt1, pt0); + Point.sub(dir2, pt2, pt1); + var len1 = dir.len(); + var len2 = dir2.len(); + + if (len1 < 1e-3 || len2 < 1e-3) { + return; + } + + dir.scale(1 / len1); + dir2.scale(1 / len2); + var angleCos = dir.dot(surfaceNormal); + var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle); + + if (angleCos < maxSurfaceAngleCos) { + // Calculate project point of pt0 on pt1-pt2 + var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false); + tmpProjPoint.fromArray(tmpArr); + var HALF_PI = Math.PI / 2; + var angle2 = Math.acos(dir2.dot(surfaceNormal)); + var newAngle = HALF_PI + angle2 - maxSurfaceAngle; + + if (newAngle >= HALF_PI) { + // parallel + Point.copy(tmpProjPoint, pt2); + } else { + // Calculate new projected length with limited minTurnAngle and get the new connect point + tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle)); // Limit the new calculated connect point between pt1 and pt2. + + var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y); + + if (isNaN(t)) { + return; + } + + if (t < 0) { + Point.copy(tmpProjPoint, pt1); + } else if (t > 1) { + Point.copy(tmpProjPoint, pt2); + } + } + + tmpProjPoint.toArray(linePoints[1]); + } + } + + function setLabelLineState(labelLine, ignore, stateName, stateModel) { + var isNormal = stateName === 'normal'; + var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName); // Make sure display. + + stateObj.ignore = ignore; // Set smooth + + var smooth = stateModel.get('smooth'); + + if (smooth && smooth === true) { + smooth = 0.3; + } + + stateObj.shape = stateObj.shape || {}; + + if (smooth > 0) { + stateObj.shape.smooth = smooth; + } + + var styleObj = stateModel.getModel('lineStyle').getLineStyle(); + isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj; + } + + function buildLabelLinePath(path, shape) { + var smooth = shape.smooth; + var points = shape.points; + + if (!points) { + return; + } + + path.moveTo(points[0][0], points[0][1]); + + if (smooth > 0 && points.length >= 3) { + var len1 = dist(points[0], points[1]); + var len2 = dist(points[1], points[2]); + + if (!len1 || !len2) { + path.lineTo(points[1][0], points[1][1]); + path.lineTo(points[2][0], points[2][1]); + return; + } + + var moveLen = Math.min(len1, len2) * smooth; + var midPoint0 = lerp([], points[1], points[0], moveLen / len1); + var midPoint2 = lerp([], points[1], points[2], moveLen / len2); + var midPoint1 = lerp([], midPoint0, midPoint2, 0.5); + path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]); + path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]); + } else { + for (var i = 1; i < points.length; i++) { + path.lineTo(points[i][0], points[i][1]); + } + } + } + /** + * Create a label line if necessary and set it's style. + */ + + + function setLabelLineStyle(targetEl, statesModels, defaultStyle) { + var labelLine = targetEl.getTextGuideLine(); + var label = targetEl.getTextContent(); + + if (!label) { + // Not show label line if there is no label. + if (labelLine) { + targetEl.removeTextGuideLine(); + } + + return; + } + + var normalModel = statesModels.normal; + var showNormal = normalModel.get('show'); + var labelIgnoreNormal = label.ignore; + + for (var i = 0; i < DISPLAY_STATES.length; i++) { + var stateName = DISPLAY_STATES[i]; + var stateModel = statesModels[stateName]; + var isNormal = stateName === 'normal'; + + if (stateModel) { + var stateShow = stateModel.get('show'); + var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal); + + if (isLabelIgnored // Not show when label is not shown in this state. + || !retrieve2(stateShow, showNormal) // Use normal state by default if not set. + ) { + var stateObj = isNormal ? labelLine : labelLine && labelLine.states.normal; + + if (stateObj) { + stateObj.ignore = true; + } + + continue; + } // Create labelLine if not exists + + + if (!labelLine) { + labelLine = new Polyline(); + targetEl.setTextGuideLine(labelLine); // Reset state of normal because it's new created. + // NOTE: NORMAL should always been the first! + + if (!isNormal && (labelIgnoreNormal || !showNormal)) { + setLabelLineState(labelLine, true, 'normal', statesModels.normal); + } // Use same state proxy. + + + if (targetEl.stateProxy) { + labelLine.stateProxy = targetEl.stateProxy; + } + } + + setLabelLineState(labelLine, false, stateName, stateModel); + } + } + + if (labelLine) { + defaults(labelLine.style, defaultStyle); // Not fill. + + labelLine.style.fill = null; + var showAbove = normalModel.get('showAbove'); + var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {}; + labelLineConfig.showAbove = showAbove || false; // Custom the buildPath. + + labelLine.buildPath = buildLabelLinePath; + } + } + function getLabelLineStatesModels(itemModel, labelLineName) { + labelLineName = labelLineName || 'labelLine'; + var statesModels = { + normal: itemModel.getModel(labelLineName) + }; + + for (var i = 0; i < SPECIAL_STATES.length; i++) { + var stateName = SPECIAL_STATES[i]; + statesModels[stateName] = itemModel.getModel([stateName, labelLineName]); + } + + return statesModels; + } + + function prepareLayoutList(input) { + var list = []; + + for (var i = 0; i < input.length; i++) { + var rawItem = input[i]; + + if (rawItem.defaultAttr.ignore) { + continue; + } + + var label = rawItem.label; + var transform = label.getComputedTransform(); // NOTE: Get bounding rect after getComputedTransform, or label may not been updated by the host el. + + var localRect = label.getBoundingRect(); + var isAxisAligned = !transform || transform[1] < 1e-5 && transform[2] < 1e-5; + var minMargin = label.style.margin || 0; + var globalRect = localRect.clone(); + globalRect.applyTransform(transform); + globalRect.x -= minMargin / 2; + globalRect.y -= minMargin / 2; + globalRect.width += minMargin; + globalRect.height += minMargin; + var obb = isAxisAligned ? new OrientedBoundingRect(localRect, transform) : null; + list.push({ + label: label, + labelLine: rawItem.labelLine, + rect: globalRect, + localRect: localRect, + obb: obb, + priority: rawItem.priority, + defaultAttr: rawItem.defaultAttr, + layoutOption: rawItem.computedLayoutOption, + axisAligned: isAxisAligned, + transform: transform + }); + } + + return list; + } + + function shiftLayout(list, xyDim, sizeDim, minBound, maxBound, balanceShift) { + var len = list.length; + + if (len < 2) { + return; + } + + list.sort(function (a, b) { + return a.rect[xyDim] - b.rect[xyDim]; + }); + var lastPos = 0; + var delta; + var adjusted = false; + var totalShifts = 0; + + for (var i = 0; i < len; i++) { + var item = list[i]; + var rect = item.rect; + delta = rect[xyDim] - lastPos; + + if (delta < 0) { + // shiftForward(i, len, -delta); + rect[xyDim] -= delta; + item.label[xyDim] -= delta; + adjusted = true; + } + + var shift = Math.max(-delta, 0); + totalShifts += shift; + lastPos = rect[xyDim] + rect[sizeDim]; + } + + if (totalShifts > 0 && balanceShift) { + // Shift back to make the distribution more equally. + shiftList(-totalShifts / len, 0, len); + } // TODO bleedMargin? + + + var first = list[0]; + var last = list[len - 1]; + var minGap; + var maxGap; + updateMinMaxGap(); // If ends exceed two bounds, squeeze at most 80%, then take the gap of two bounds. + + minGap < 0 && squeezeGaps(-minGap, 0.8); + maxGap < 0 && squeezeGaps(maxGap, 0.8); + updateMinMaxGap(); + takeBoundsGap(minGap, maxGap, 1); + takeBoundsGap(maxGap, minGap, -1); // Handle bailout when there is not enough space. + + updateMinMaxGap(); + + if (minGap < 0) { + squeezeWhenBailout(-minGap); + } + + if (maxGap < 0) { + squeezeWhenBailout(maxGap); + } + + function updateMinMaxGap() { + minGap = first.rect[xyDim] - minBound; + maxGap = maxBound - last.rect[xyDim] - last.rect[sizeDim]; + } + + function takeBoundsGap(gapThisBound, gapOtherBound, moveDir) { + if (gapThisBound < 0) { + // Move from other gap if can. + var moveFromMaxGap = Math.min(gapOtherBound, -gapThisBound); + + if (moveFromMaxGap > 0) { + shiftList(moveFromMaxGap * moveDir, 0, len); + var remained = moveFromMaxGap + gapThisBound; + + if (remained < 0) { + squeezeGaps(-remained * moveDir, 1); + } + } else { + squeezeGaps(-gapThisBound * moveDir, 1); + } + } + } + + function shiftList(delta, start, end) { + if (delta !== 0) { + adjusted = true; + } + + for (var i = start; i < end; i++) { + var item = list[i]; + var rect = item.rect; + rect[xyDim] += delta; + item.label[xyDim] += delta; + } + } // Squeeze gaps if the labels exceed margin. + + + function squeezeGaps(delta, maxSqeezePercent) { + var gaps = []; + var totalGaps = 0; + + for (var i = 1; i < len; i++) { + var prevItemRect = list[i - 1].rect; + var gap = Math.max(list[i].rect[xyDim] - prevItemRect[xyDim] - prevItemRect[sizeDim], 0); + gaps.push(gap); + totalGaps += gap; + } + + if (!totalGaps) { + return; + } + + var squeezePercent = Math.min(Math.abs(delta) / totalGaps, maxSqeezePercent); + + if (delta > 0) { + for (var i = 0; i < len - 1; i++) { + // Distribute the shift delta to all gaps. + var movement = gaps[i] * squeezePercent; // Forward + + shiftList(movement, 0, i + 1); + } + } else { + // Backward + for (var i = len - 1; i > 0; i--) { + // Distribute the shift delta to all gaps. + var movement = gaps[i - 1] * squeezePercent; + shiftList(-movement, i, len); + } + } + } + /** + * Squeeze to allow overlap if there is no more space available. + * Let other overlapping strategy like hideOverlap do the job instead of keep exceeding the bounds. + */ + + + function squeezeWhenBailout(delta) { + var dir = delta < 0 ? -1 : 1; + delta = Math.abs(delta); + var moveForEachLabel = Math.ceil(delta / (len - 1)); + + for (var i = 0; i < len - 1; i++) { + if (dir > 0) { + // Forward + shiftList(moveForEachLabel, 0, i + 1); + } else { + // Backward + shiftList(-moveForEachLabel, len - i - 1, len); + } + + delta -= moveForEachLabel; + + if (delta <= 0) { + return; + } + } + } + + return adjusted; + } + /** + * Adjust labels on x direction to avoid overlap. + */ + + + function shiftLayoutOnX(list, leftBound, rightBound, // If average the shifts on all labels and add them to 0 + // TODO: Not sure if should enable it. + // Pros: The angle of lines will distribute more equally + // Cons: In some layout. It may not what user wanted. like in pie. the label of last sector is usually changed unexpectedly. + balanceShift) { + return shiftLayout(list, 'x', 'width', leftBound, rightBound, balanceShift); + } + /** + * Adjust labels on y direction to avoid overlap. + */ + + function shiftLayoutOnY(list, topBound, bottomBound, // If average the shifts on all labels and add them to 0 + balanceShift) { + return shiftLayout(list, 'y', 'height', topBound, bottomBound, balanceShift); + } + function hideOverlap(labelList) { + var displayedLabels = []; // TODO, render overflow visible first, put in the displayedLabels. + + labelList.sort(function (a, b) { + return b.priority - a.priority; + }); + var globalRect = new BoundingRect(0, 0, 0, 0); + + function hideEl(el) { + if (!el.ignore) { + // Show on emphasis. + var emphasisState = el.ensureState('emphasis'); + + if (emphasisState.ignore == null) { + emphasisState.ignore = false; + } + } + + el.ignore = true; + } + + for (var i = 0; i < labelList.length; i++) { + var labelItem = labelList[i]; + var isAxisAligned = labelItem.axisAligned; + var localRect = labelItem.localRect; + var transform = labelItem.transform; + var label = labelItem.label; + var labelLine = labelItem.labelLine; + globalRect.copy(labelItem.rect); // Add a threshold because layout may be aligned precisely. + + globalRect.width -= 0.1; + globalRect.height -= 0.1; + globalRect.x += 0.05; + globalRect.y += 0.05; + var obb = labelItem.obb; + var overlapped = false; + + for (var j = 0; j < displayedLabels.length; j++) { + var existsTextCfg = displayedLabels[j]; // Fast rejection. + + if (!globalRect.intersect(existsTextCfg.rect)) { + continue; + } + + if (isAxisAligned && existsTextCfg.axisAligned) { + // Is overlapped + overlapped = true; + break; + } + + if (!existsTextCfg.obb) { + // If self is not axis aligned. But other is. + existsTextCfg.obb = new OrientedBoundingRect(existsTextCfg.localRect, existsTextCfg.transform); + } + + if (!obb) { + // If self is axis aligned. But other is not. + obb = new OrientedBoundingRect(localRect, transform); + } + + if (obb.intersect(existsTextCfg.obb)) { + overlapped = true; + break; + } + } // TODO Callback to determine if this overlap should be handled? + + + if (overlapped) { + hideEl(label); + labelLine && hideEl(labelLine); + } else { + label.attr('ignore', labelItem.defaultAttr.ignore); + labelLine && labelLine.attr('ignore', labelItem.defaultAttr.labelGuideIgnore); + displayedLabels.push(labelItem); + } + } + } + + function cloneArr(points) { + if (points) { + var newPoints = []; + + for (var i = 0; i < points.length; i++) { + newPoints.push(points[i].slice()); + } + + return newPoints; + } + } + + function prepareLayoutCallbackParams(labelItem, hostEl) { + var label = labelItem.label; + var labelLine = hostEl && hostEl.getTextGuideLine(); + return { + dataIndex: labelItem.dataIndex, + dataType: labelItem.dataType, + seriesIndex: labelItem.seriesModel.seriesIndex, + text: labelItem.label.style.text, + rect: labelItem.hostRect, + labelRect: labelItem.rect, + // x: labelAttr.x, + // y: labelAttr.y, + align: label.style.align, + verticalAlign: label.style.verticalAlign, + labelLinePoints: cloneArr(labelLine && labelLine.shape.points) + }; + } + + var LABEL_OPTION_TO_STYLE_KEYS = ['align', 'verticalAlign', 'width', 'height', 'fontSize']; + var dummyTransformable = new Transformable(); + var labelLayoutInnerStore = makeInner(); + var labelLineAnimationStore = makeInner(); + + function extendWithKeys(target, source, keys) { + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + + if (source[key] != null) { + target[key] = source[key]; + } + } + } + + var LABEL_LAYOUT_PROPS = ['x', 'y', 'rotation']; + + var LabelManager = + /** @class */ + function () { + function LabelManager() { + this._labelList = []; + this._chartViewList = []; + } + + LabelManager.prototype.clearLabels = function () { + this._labelList = []; + this._chartViewList = []; + }; + /** + * Add label to manager + */ + + + LabelManager.prototype._addLabel = function (dataIndex, dataType, seriesModel, label, layoutOption) { + var labelStyle = label.style; + var hostEl = label.__hostTarget; + var textConfig = hostEl.textConfig || {}; // TODO: If label is in other state. + + var labelTransform = label.getComputedTransform(); + var labelRect = label.getBoundingRect().plain(); + BoundingRect.applyTransform(labelRect, labelRect, labelTransform); + + if (labelTransform) { + dummyTransformable.setLocalTransform(labelTransform); + } else { + // Identity transform. + dummyTransformable.x = dummyTransformable.y = dummyTransformable.rotation = dummyTransformable.originX = dummyTransformable.originY = 0; + dummyTransformable.scaleX = dummyTransformable.scaleY = 1; + } + + var host = label.__hostTarget; + var hostRect; + + if (host) { + hostRect = host.getBoundingRect().plain(); + var transform = host.getComputedTransform(); + BoundingRect.applyTransform(hostRect, hostRect, transform); + } + + var labelGuide = hostRect && host.getTextGuideLine(); + + this._labelList.push({ + label: label, + labelLine: labelGuide, + seriesModel: seriesModel, + dataIndex: dataIndex, + dataType: dataType, + layoutOption: layoutOption, + computedLayoutOption: null, + rect: labelRect, + hostRect: hostRect, + // Label with lower priority will be hidden when overlapped + // Use rect size as default priority + priority: hostRect ? hostRect.width * hostRect.height : 0, + // Save default label attributes. + // For restore if developers want get back to default value in callback. + defaultAttr: { + ignore: label.ignore, + labelGuideIgnore: labelGuide && labelGuide.ignore, + x: dummyTransformable.x, + y: dummyTransformable.y, + scaleX: dummyTransformable.scaleX, + scaleY: dummyTransformable.scaleY, + rotation: dummyTransformable.rotation, + style: { + x: labelStyle.x, + y: labelStyle.y, + align: labelStyle.align, + verticalAlign: labelStyle.verticalAlign, + width: labelStyle.width, + height: labelStyle.height, + fontSize: labelStyle.fontSize + }, + cursor: label.cursor, + attachedPos: textConfig.position, + attachedRot: textConfig.rotation + } + }); + }; + + LabelManager.prototype.addLabelsOfSeries = function (chartView) { + var _this = this; + + this._chartViewList.push(chartView); + + var seriesModel = chartView.__model; + var layoutOption = seriesModel.get('labelLayout'); + /** + * Ignore layouting if it's not specified anything. + */ + + if (!(isFunction(layoutOption) || keys(layoutOption).length)) { + return; + } + + chartView.group.traverse(function (child) { + if (child.ignore) { + return true; // Stop traverse descendants. + } // Only support label being hosted on graphic elements. + + + var textEl = child.getTextContent(); + var ecData = getECData(child); // Can only attach the text on the element with dataIndex + + if (textEl && !textEl.disableLabelLayout) { + _this._addLabel(ecData.dataIndex, ecData.dataType, seriesModel, textEl, layoutOption); + } + }); + }; + + LabelManager.prototype.updateLayoutConfig = function (api) { + var width = api.getWidth(); + var height = api.getHeight(); + + function createDragHandler(el, labelLineModel) { + return function () { + updateLabelLinePoints(el, labelLineModel); + }; + } + + for (var i = 0; i < this._labelList.length; i++) { + var labelItem = this._labelList[i]; + var label = labelItem.label; + var hostEl = label.__hostTarget; + var defaultLabelAttr = labelItem.defaultAttr; + var layoutOption = void 0; // TODO A global layout option? + + if (typeof labelItem.layoutOption === 'function') { + layoutOption = labelItem.layoutOption(prepareLayoutCallbackParams(labelItem, hostEl)); + } else { + layoutOption = labelItem.layoutOption; + } + + layoutOption = layoutOption || {}; + labelItem.computedLayoutOption = layoutOption; + var degreeToRadian = Math.PI / 180; // TODO hostEl should always exists. + // Or label should not have parent because the x, y is all in global space. + + if (hostEl) { + hostEl.setTextConfig({ + // Force to set local false. + local: false, + // Ignore position and rotation config on the host el if x or y is changed. + position: layoutOption.x != null || layoutOption.y != null ? null : defaultLabelAttr.attachedPos, + // Ignore rotation config on the host el if rotation is changed. + rotation: layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.attachedRot, + offset: [layoutOption.dx || 0, layoutOption.dy || 0] + }); + } + + var needsUpdateLabelLine = false; + + if (layoutOption.x != null) { + // TODO width of chart view. + label.x = parsePercent$1(layoutOption.x, width); + label.setStyle('x', 0); // Ignore movement in style. TODO: origin. + + needsUpdateLabelLine = true; + } else { + label.x = defaultLabelAttr.x; + label.setStyle('x', defaultLabelAttr.style.x); + } + + if (layoutOption.y != null) { + // TODO height of chart view. + label.y = parsePercent$1(layoutOption.y, height); + label.setStyle('y', 0); // Ignore movement in style. + + needsUpdateLabelLine = true; + } else { + label.y = defaultLabelAttr.y; + label.setStyle('y', defaultLabelAttr.style.y); + } + + if (layoutOption.labelLinePoints) { + var guideLine = hostEl.getTextGuideLine(); + + if (guideLine) { + guideLine.setShape({ + points: layoutOption.labelLinePoints + }); // Not update + + needsUpdateLabelLine = false; + } + } + + var labelLayoutStore = labelLayoutInnerStore(label); + labelLayoutStore.needsUpdateLabelLine = needsUpdateLabelLine; + label.rotation = layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.rotation; + label.scaleX = defaultLabelAttr.scaleX; + label.scaleY = defaultLabelAttr.scaleY; + + for (var k = 0; k < LABEL_OPTION_TO_STYLE_KEYS.length; k++) { + var key = LABEL_OPTION_TO_STYLE_KEYS[k]; + label.setStyle(key, layoutOption[key] != null ? layoutOption[key] : defaultLabelAttr.style[key]); + } + + if (layoutOption.draggable) { + label.draggable = true; + label.cursor = 'move'; + + if (hostEl) { + var hostModel = labelItem.seriesModel; + + if (labelItem.dataIndex != null) { + var data = labelItem.seriesModel.getData(labelItem.dataType); + hostModel = data.getItemModel(labelItem.dataIndex); + } + + label.on('drag', createDragHandler(hostEl, hostModel.getModel('labelLine'))); + } + } else { + // TODO Other drag functions? + label.off('drag'); + label.cursor = defaultLabelAttr.cursor; + } + } + }; + + LabelManager.prototype.layout = function (api) { + var width = api.getWidth(); + var height = api.getHeight(); + var labelList = prepareLayoutList(this._labelList); + var labelsNeedsAdjustOnX = filter(labelList, function (item) { + return item.layoutOption.moveOverlap === 'shiftX'; + }); + var labelsNeedsAdjustOnY = filter(labelList, function (item) { + return item.layoutOption.moveOverlap === 'shiftY'; + }); + shiftLayoutOnX(labelsNeedsAdjustOnX, 0, width); + shiftLayoutOnY(labelsNeedsAdjustOnY, 0, height); + var labelsNeedsHideOverlap = filter(labelList, function (item) { + return item.layoutOption.hideOverlap; + }); + hideOverlap(labelsNeedsHideOverlap); + }; + /** + * Process all labels. Not only labels with layoutOption. + */ + + + LabelManager.prototype.processLabelsOverall = function () { + var _this = this; + + each(this._chartViewList, function (chartView) { + var seriesModel = chartView.__model; + var ignoreLabelLineUpdate = chartView.ignoreLabelLineUpdate; + var animationEnabled = seriesModel.isAnimationEnabled(); + chartView.group.traverse(function (child) { + if (child.ignore && !child.forceLabelAnimation) { + return true; // Stop traverse descendants. + } + + var needsUpdateLabelLine = !ignoreLabelLineUpdate; + var label = child.getTextContent(); + + if (!needsUpdateLabelLine && label) { + needsUpdateLabelLine = labelLayoutInnerStore(label).needsUpdateLabelLine; + } + + if (needsUpdateLabelLine) { + _this._updateLabelLine(child, seriesModel); + } + + if (animationEnabled) { + _this._animateLabels(child, seriesModel); + } + }); + }); + }; + + LabelManager.prototype._updateLabelLine = function (el, seriesModel) { + // Only support label being hosted on graphic elements. + var textEl = el.getTextContent(); // Update label line style. + + var ecData = getECData(el); + var dataIndex = ecData.dataIndex; // Only support labelLine on the labels represent data. + + if (textEl && dataIndex != null) { + var data = seriesModel.getData(ecData.dataType); + var itemModel = data.getItemModel(dataIndex); + var defaultStyle = {}; + var visualStyle = data.getItemVisual(dataIndex, 'style'); + var visualType = data.getVisual('drawType'); // Default to be same with main color + + defaultStyle.stroke = visualStyle[visualType]; + var labelLineModel = itemModel.getModel('labelLine'); + setLabelLineStyle(el, getLabelLineStatesModels(itemModel), defaultStyle); + updateLabelLinePoints(el, labelLineModel); + } + }; + + LabelManager.prototype._animateLabels = function (el, seriesModel) { + var textEl = el.getTextContent(); + var guideLine = el.getTextGuideLine(); // Animate + + if (textEl // `forceLabelAnimation` has the highest priority + && (el.forceLabelAnimation || !textEl.ignore && !textEl.invisible && !el.disableLabelAnimation && !isElementRemoved(el))) { + var layoutStore = labelLayoutInnerStore(textEl); + var oldLayout = layoutStore.oldLayout; + var ecData = getECData(el); + var dataIndex = ecData.dataIndex; + var newProps = { + x: textEl.x, + y: textEl.y, + rotation: textEl.rotation + }; + var data = seriesModel.getData(ecData.dataType); + + if (!oldLayout) { + textEl.attr(newProps); // Disable fade in animation if value animation is enabled. + + if (!labelInner(textEl).valueAnimation) { + var oldOpacity = retrieve2(textEl.style.opacity, 1); // Fade in animation + + textEl.style.opacity = 0; + initProps(textEl, { + style: { + opacity: oldOpacity + } + }, seriesModel, dataIndex); + } + } else { + textEl.attr(oldLayout); // Make sure the animation from is in the right status. + + var prevStates = el.prevStates; + + if (prevStates) { + if (indexOf(prevStates, 'select') >= 0) { + textEl.attr(layoutStore.oldLayoutSelect); + } + + if (indexOf(prevStates, 'emphasis') >= 0) { + textEl.attr(layoutStore.oldLayoutEmphasis); + } + } + + updateProps(textEl, newProps, seriesModel, dataIndex); + } + + layoutStore.oldLayout = newProps; + + if (textEl.states.select) { + var layoutSelect = layoutStore.oldLayoutSelect = {}; + extendWithKeys(layoutSelect, newProps, LABEL_LAYOUT_PROPS); + extendWithKeys(layoutSelect, textEl.states.select, LABEL_LAYOUT_PROPS); + } + + if (textEl.states.emphasis) { + var layoutEmphasis = layoutStore.oldLayoutEmphasis = {}; + extendWithKeys(layoutEmphasis, newProps, LABEL_LAYOUT_PROPS); + extendWithKeys(layoutEmphasis, textEl.states.emphasis, LABEL_LAYOUT_PROPS); + } + + animateLabelValue(textEl, dataIndex, data, seriesModel, seriesModel); + } + + if (guideLine && !guideLine.ignore && !guideLine.invisible) { + var layoutStore = labelLineAnimationStore(guideLine); + var oldLayout = layoutStore.oldLayout; + var newLayout = { + points: guideLine.shape.points + }; + + if (!oldLayout) { + guideLine.setShape(newLayout); + guideLine.style.strokePercent = 0; + initProps(guideLine, { + style: { + strokePercent: 1 + } + }, seriesModel); + } else { + guideLine.attr({ + shape: oldLayout + }); + updateProps(guideLine, { + shape: newLayout + }, seriesModel); + } + + layoutStore.oldLayout = newLayout; + } + }; + + return LabelManager; + }(); + + var getLabelManager = makeInner(); + function installLabelLayout(registers) { + registers.registerUpdateLifecycle('series:beforeupdate', function (ecModel, api, params) { + // TODO api provide an namespace that can save stuff per instance + var labelManager = getLabelManager(api).labelManager; + + if (!labelManager) { + labelManager = getLabelManager(api).labelManager = new LabelManager(); + } + + labelManager.clearLabels(); + }); + registers.registerUpdateLifecycle('series:layoutlabels', function (ecModel, api, params) { + var labelManager = getLabelManager(api).labelManager; + params.updatedSeries.forEach(function (series) { + labelManager.addLabelsOfSeries(api.getViewOfSeriesModel(series)); + }); + labelManager.updateLayoutConfig(api); + labelManager.layout(api); + labelManager.processLabelsOverall(); + }); + } + + function createElement(name) { + return document.createElementNS('http://www.w3.org/2000/svg', name); + } + function normalizeColor(color) { + var opacity; + if (!color || color === 'transparent') { + color = 'none'; + } + else if (typeof color === 'string' && color.indexOf('rgba') > -1) { + var arr = parse(color); + if (arr) { + color = 'rgb(' + arr[0] + ',' + arr[1] + ',' + arr[2] + ')'; + opacity = arr[3]; + } + } + return { + color: color, + opacity: opacity == null ? 1 : opacity + }; + } + + function diff(oldArr, newArr, equals) { + if (!equals) { + equals = function (a, b) { + return a === b; + }; + } + oldArr = oldArr.slice(); + newArr = newArr.slice(); + var newLen = newArr.length; + var oldLen = oldArr.length; + var editLength = 1; + var maxEditLength = newLen + oldLen; + var bestPath = [{ newPos: -1, components: [] }]; + var oldPos = extractCommon(bestPath[0], newArr, oldArr, 0, equals); + if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + var indices = []; + for (var i = 0; i < newArr.length; i++) { + indices.push(i); + } + return [{ + indices: indices, + count: newArr.length, + added: false, + removed: false + }]; + } + function execEditLength() { + for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) { + var basePath; + var addPath = bestPath[diagonalPath - 1]; + var removePath = bestPath[diagonalPath + 1]; + var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath; + if (addPath) { + bestPath[diagonalPath - 1] = undefined; + } + var canAdd = addPath && addPath.newPos + 1 < newLen; + var canRemove = removePath && 0 <= oldPos && oldPos < oldLen; + if (!canAdd && !canRemove) { + bestPath[diagonalPath] = undefined; + continue; + } + if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { + basePath = clonePath$1(removePath); + pushComponent(basePath.components, false, true); + } + else { + basePath = addPath; + basePath.newPos++; + pushComponent(basePath.components, true, false); + } + oldPos = extractCommon(basePath, newArr, oldArr, diagonalPath, equals); + if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) { + return buildValues(basePath.components); + } + else { + bestPath[diagonalPath] = basePath; + } + } + editLength++; + } + while (editLength <= maxEditLength) { + var ret = execEditLength(); + if (ret) { + return ret; + } + } + } + function extractCommon(basePath, newArr, oldArr, diagonalPath, equals) { + var newLen = newArr.length; + var oldLen = oldArr.length; + var newPos = basePath.newPos; + var oldPos = newPos - diagonalPath; + var commonCount = 0; + while (newPos + 1 < newLen && oldPos + 1 < oldLen && equals(newArr[newPos + 1], oldArr[oldPos + 1])) { + newPos++; + oldPos++; + commonCount++; + } + if (commonCount) { + basePath.components.push({ + count: commonCount, + added: false, + removed: false, + indices: [] + }); + } + basePath.newPos = newPos; + return oldPos; + } + function pushComponent(components, added, removed) { + var last = components[components.length - 1]; + if (last && last.added === added && last.removed === removed) { + components[components.length - 1] = { + count: last.count + 1, + added: added, + removed: removed, + indices: [] + }; + } + else { + components.push({ + count: 1, + added: added, + removed: removed, + indices: [] + }); + } + } + function buildValues(components) { + var componentPos = 0; + var componentLen = components.length; + var newPos = 0; + var oldPos = 0; + for (; componentPos < componentLen; componentPos++) { + var component = components[componentPos]; + if (!component.removed) { + var indices = []; + for (var i = newPos; i < newPos + component.count; i++) { + indices.push(i); + } + component.indices = indices; + newPos += component.count; + if (!component.added) { + oldPos += component.count; + } + } + else { + for (var i = oldPos; i < oldPos + component.count; i++) { + component.indices.push(i); + } + oldPos += component.count; + } + } + return components; + } + function clonePath$1(path) { + return { newPos: path.newPos, components: path.components.slice(0) }; + } + function arrayDiff(oldArr, newArr, equal) { + return diff(oldArr, newArr, equal); + } + + var NONE = 'none'; + var mathRound = Math.round; + var mathSin$4 = Math.sin; + var mathCos$4 = Math.cos; + var PI$4 = Math.PI; + var PI2$7 = Math.PI * 2; + var degree = 180 / PI$4; + var EPSILON$4 = 1e-4; + function round3(val) { + return mathRound(val * 1e3) / 1e3; + } + function round4(val) { + return mathRound(val * 1e4) / 1e4; + } + function isAroundZero$1(val) { + return val < EPSILON$4 && val > -EPSILON$4; + } + function pathHasFill(style) { + var fill = style.fill; + return fill != null && fill !== NONE; + } + function pathHasStroke(style) { + var stroke = style.stroke; + return stroke != null && stroke !== NONE; + } + function setTransform(svgEl, m) { + if (m) { + attr(svgEl, 'transform', 'matrix(' + + round3(m[0]) + ',' + + round3(m[1]) + ',' + + round3(m[2]) + ',' + + round3(m[3]) + ',' + + round4(m[4]) + ',' + + round4(m[5]) + + ')'); + } + } + function attr(el, key, val) { + if (!val || val.type !== 'linear' && val.type !== 'radial') { + el.setAttribute(key, val); + } + } + function attrXLink(el, key, val) { + el.setAttributeNS('http://www.w3.org/1999/xlink', key, val); + } + function attrXML(el, key, val) { + el.setAttributeNS('http://www.w3.org/XML/1998/namespace', key, val); + } + function bindStyle(svgEl, style, el) { + var opacity = style.opacity == null ? 1 : style.opacity; + if (el instanceof ZRImage) { + attr(svgEl, 'opacity', opacity + ''); + return; + } + if (pathHasFill(style)) { + var fill = normalizeColor(style.fill); + attr(svgEl, 'fill', fill.color); + attr(svgEl, 'fill-opacity', (style.fillOpacity != null + ? style.fillOpacity * fill.opacity * opacity + : fill.opacity * opacity) + ''); + } + else { + attr(svgEl, 'fill', NONE); + } + if (pathHasStroke(style)) { + var stroke = normalizeColor(style.stroke); + attr(svgEl, 'stroke', stroke.color); + var strokeWidth = style.lineWidth; + var strokeScale_1 = style.strokeNoScale + ? el.getLineScale() + : 1; + attr(svgEl, 'stroke-width', (strokeScale_1 ? strokeWidth / strokeScale_1 : 0) + ''); + attr(svgEl, 'paint-order', style.strokeFirst ? 'stroke' : 'fill'); + attr(svgEl, 'stroke-opacity', (style.strokeOpacity != null + ? style.strokeOpacity * stroke.opacity * opacity + : stroke.opacity * opacity) + ''); + var lineDash = style.lineDash && strokeWidth > 0 && normalizeLineDash(style.lineDash, strokeWidth); + if (lineDash) { + var lineDashOffset = style.lineDashOffset; + if (strokeScale_1 && strokeScale_1 !== 1) { + lineDash = map(lineDash, function (rawVal) { + return rawVal / strokeScale_1; + }); + if (lineDashOffset) { + lineDashOffset /= strokeScale_1; + lineDashOffset = mathRound(lineDashOffset); + } + } + attr(svgEl, 'stroke-dasharray', lineDash.join(',')); + attr(svgEl, 'stroke-dashoffset', (lineDashOffset || 0) + ''); + } + else { + attr(svgEl, 'stroke-dasharray', NONE); + } + style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap); + style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin); + style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit + ''); + } + else { + attr(svgEl, 'stroke', NONE); + } + } + var SVGPathRebuilder = (function () { + function SVGPathRebuilder() { + } + SVGPathRebuilder.prototype.reset = function () { + this._d = []; + this._str = ''; + }; + SVGPathRebuilder.prototype.moveTo = function (x, y) { + this._add('M', x, y); + }; + SVGPathRebuilder.prototype.lineTo = function (x, y) { + this._add('L', x, y); + }; + SVGPathRebuilder.prototype.bezierCurveTo = function (x, y, x2, y2, x3, y3) { + this._add('C', x, y, x2, y2, x3, y3); + }; + SVGPathRebuilder.prototype.quadraticCurveTo = function (x, y, x2, y2) { + this._add('Q', x, y, x2, y2); + }; + SVGPathRebuilder.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) { + this.ellipse(cx, cy, r, r, 0, startAngle, endAngle, anticlockwise); + }; + SVGPathRebuilder.prototype.ellipse = function (cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise) { + var firstCmd = this._d.length === 0; + var dTheta = endAngle - startAngle; + var clockwise = !anticlockwise; + var dThetaPositive = Math.abs(dTheta); + var isCircle = isAroundZero$1(dThetaPositive - PI2$7) + || (clockwise ? dTheta >= PI2$7 : -dTheta >= PI2$7); + var unifiedTheta = dTheta > 0 ? dTheta % PI2$7 : (dTheta % PI2$7 + PI2$7); + var large = false; + if (isCircle) { + large = true; + } + else if (isAroundZero$1(dThetaPositive)) { + large = false; + } + else { + large = (unifiedTheta >= PI$4) === !!clockwise; + } + var x0 = round4(cx + rx * mathCos$4(startAngle)); + var y0 = round4(cy + ry * mathSin$4(startAngle)); + if (isCircle) { + if (clockwise) { + dTheta = PI2$7 - 1e-4; + } + else { + dTheta = -PI2$7 + 1e-4; + } + large = true; + if (firstCmd) { + this._d.push('M', x0, y0); + } + } + var x = round4(cx + rx * mathCos$4(startAngle + dTheta)); + var y = round4(cy + ry * mathSin$4(startAngle + dTheta)); + if (isNaN(x0) || isNaN(y0) || isNaN(rx) || isNaN(ry) || isNaN(psi) || isNaN(degree) || isNaN(x) || isNaN(y)) { + return ''; + } + this._d.push('A', round4(rx), round4(ry), mathRound(psi * degree), +large, +clockwise, x, y); + }; + SVGPathRebuilder.prototype.rect = function (x, y, w, h) { + this._add('M', x, y); + this._add('L', x + w, y); + this._add('L', x + w, y + h); + this._add('L', x, y + h); + this._add('L', x, y); + this._add('Z'); + }; + SVGPathRebuilder.prototype.closePath = function () { + if (this._d.length > 0) { + this._add('Z'); + } + }; + SVGPathRebuilder.prototype._add = function (cmd, a, b, c, d, e, f, g, h) { + this._d.push(cmd); + for (var i = 1; i < arguments.length; i++) { + var val = arguments[i]; + if (isNaN(val)) { + this._invalid = true; + return; + } + this._d.push(round4(val)); + } + }; + SVGPathRebuilder.prototype.generateStr = function () { + this._str = this._invalid ? '' : this._d.join(' '); + this._d = []; + }; + SVGPathRebuilder.prototype.getStr = function () { + return this._str; + }; + return SVGPathRebuilder; + }()); + var svgPath = { + brush: function (el) { + var style = el.style; + var svgEl = el.__svgEl; + if (!svgEl) { + svgEl = createElement('path'); + el.__svgEl = svgEl; + } + if (!el.path) { + el.createPathProxy(); + } + var path = el.path; + if (el.shapeChanged()) { + path.beginPath(); + el.buildPath(path, el.shape); + el.pathUpdated(); + } + var pathVersion = path.getVersion(); + var elExt = el; + var svgPathBuilder = elExt.__svgPathBuilder; + if (elExt.__svgPathVersion !== pathVersion || !svgPathBuilder || el.style.strokePercent < 1) { + if (!svgPathBuilder) { + svgPathBuilder = elExt.__svgPathBuilder = new SVGPathRebuilder(); + } + svgPathBuilder.reset(); + path.rebuildPath(svgPathBuilder, el.style.strokePercent); + svgPathBuilder.generateStr(); + elExt.__svgPathVersion = pathVersion; + } + attr(svgEl, 'd', svgPathBuilder.getStr()); + bindStyle(svgEl, style, el); + setTransform(svgEl, el.transform); + } + }; + var svgImage = { + brush: function (el) { + var style = el.style; + var image = style.image; + if (image instanceof HTMLImageElement) { + image = image.src; + } + else if (image instanceof HTMLCanvasElement) { + image = image.toDataURL(); + } + if (!image) { + return; + } + var x = style.x || 0; + var y = style.y || 0; + var dw = style.width; + var dh = style.height; + var svgEl = el.__svgEl; + if (!svgEl) { + svgEl = createElement('image'); + el.__svgEl = svgEl; + } + if (image !== el.__imageSrc) { + attrXLink(svgEl, 'href', image); + el.__imageSrc = image; + } + attr(svgEl, 'width', dw + ''); + attr(svgEl, 'height', dh + ''); + attr(svgEl, 'x', x + ''); + attr(svgEl, 'y', y + ''); + bindStyle(svgEl, style, el); + setTransform(svgEl, el.transform); + } + }; + var TEXT_ALIGN_TO_ANCHOR = { + left: 'start', + right: 'end', + center: 'middle', + middle: 'middle' + }; + function adjustTextY$1(y, lineHeight, textBaseline) { + if (textBaseline === 'top') { + y += lineHeight / 2; + } + else if (textBaseline === 'bottom') { + y -= lineHeight / 2; + } + return y; + } + var svgText = { + brush: function (el) { + var style = el.style; + var text = style.text; + text != null && (text += ''); + if (!text || isNaN(style.x) || isNaN(style.y)) { + return; + } + var textSvgEl = el.__svgEl; + if (!textSvgEl) { + textSvgEl = createElement('text'); + attrXML(textSvgEl, 'xml:space', 'preserve'); + el.__svgEl = textSvgEl; + } + var font = style.font || DEFAULT_FONT; + var textSvgElStyle = textSvgEl.style; + textSvgElStyle.font = font; + textSvgEl.textContent = text; + bindStyle(textSvgEl, style, el); + setTransform(textSvgEl, el.transform); + var x = style.x || 0; + var y = adjustTextY$1(style.y || 0, getLineHeight(font), style.textBaseline); + var textAlign = TEXT_ALIGN_TO_ANCHOR[style.textAlign] + || style.textAlign; + attr(textSvgEl, 'dominant-baseline', 'central'); + attr(textSvgEl, 'text-anchor', textAlign); + attr(textSvgEl, 'x', x + ''); + attr(textSvgEl, 'y', y + ''); + } + }; + + var MARK_UNUSED = '0'; + var MARK_USED = '1'; + var Definable = (function () { + function Definable(zrId, svgRoot, tagNames, markLabel, domName) { + this.nextId = 0; + this._domName = '_dom'; + this.createElement = createElement; + this._zrId = zrId; + this._svgRoot = svgRoot; + this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames; + this._markLabel = markLabel; + if (domName) { + this._domName = domName; + } + } + Definable.prototype.getDefs = function (isForceCreating) { + var svgRoot = this._svgRoot; + var defs = this._svgRoot.getElementsByTagName('defs'); + if (defs.length === 0) { + if (isForceCreating) { + var defs_1 = svgRoot.insertBefore(this.createElement('defs'), svgRoot.firstChild); + if (!defs_1.contains) { + defs_1.contains = function (el) { + var children = defs_1.children; + if (!children) { + return false; + } + for (var i = children.length - 1; i >= 0; --i) { + if (children[i] === el) { + return true; + } + } + return false; + }; + } + return defs_1; + } + else { + return null; + } + } + else { + return defs[0]; + } + }; + Definable.prototype.doUpdate = function (target, onUpdate) { + if (!target) { + return; + } + var defs = this.getDefs(false); + if (target[this._domName] && defs.contains(target[this._domName])) { + if (typeof onUpdate === 'function') { + onUpdate(target); + } + } + else { + var dom = this.add(target); + if (dom) { + target[this._domName] = dom; + } + } + }; + Definable.prototype.add = function (target) { + return null; + }; + Definable.prototype.addDom = function (dom) { + var defs = this.getDefs(true); + if (dom.parentNode !== defs) { + defs.appendChild(dom); + } + }; + Definable.prototype.removeDom = function (target) { + var defs = this.getDefs(false); + if (defs && target[this._domName]) { + defs.removeChild(target[this._domName]); + target[this._domName] = null; + } + }; + Definable.prototype.getDoms = function () { + var defs = this.getDefs(false); + if (!defs) { + return []; + } + var doms = []; + each(this._tagNames, function (tagName) { + var tags = defs.getElementsByTagName(tagName); + for (var i = 0; i < tags.length; i++) { + doms.push(tags[i]); + } + }); + return doms; + }; + Definable.prototype.markAllUnused = function () { + var doms = this.getDoms(); + var that = this; + each(doms, function (dom) { + dom[that._markLabel] = MARK_UNUSED; + }); + }; + Definable.prototype.markDomUsed = function (dom) { + dom && (dom[this._markLabel] = MARK_USED); + }; + Definable.prototype.markDomUnused = function (dom) { + dom && (dom[this._markLabel] = MARK_UNUSED); + }; + Definable.prototype.isDomUnused = function (dom) { + return dom && dom[this._markLabel] !== MARK_USED; + }; + Definable.prototype.removeUnused = function () { + var _this = this; + var defs = this.getDefs(false); + if (!defs) { + return; + } + var doms = this.getDoms(); + each(doms, function (dom) { + if (_this.isDomUnused(dom)) { + defs.removeChild(dom); + } + }); + }; + Definable.prototype.getSvgProxy = function (displayable) { + if (displayable instanceof Path) { + return svgPath; + } + else if (displayable instanceof ZRImage) { + return svgImage; + } + else if (displayable instanceof TSpan) { + return svgText; + } + else { + return svgPath; + } + }; + Definable.prototype.getSvgElement = function (displayable) { + return displayable.__svgEl; + }; + return Definable; + }()); + + function isLinearGradient(value) { + return value.type === 'linear'; + } + function isRadialGradient(value) { + return value.type === 'radial'; + } + function isGradient(value) { + return value && (value.type === 'linear' + || value.type === 'radial'); + } + var GradientManager = (function (_super) { + __extends(GradientManager, _super); + function GradientManager(zrId, svgRoot) { + return _super.call(this, zrId, svgRoot, ['linearGradient', 'radialGradient'], '__gradient_in_use__') || this; + } + GradientManager.prototype.addWithoutUpdate = function (svgElement, displayable) { + if (displayable && displayable.style) { + var that_1 = this; + each(['fill', 'stroke'], function (fillOrStroke) { + var value = displayable.style[fillOrStroke]; + if (isGradient(value)) { + var gradient = value; + var defs = that_1.getDefs(true); + var dom = void 0; + if (gradient.__dom) { + dom = gradient.__dom; + if (!defs.contains(gradient.__dom)) { + that_1.addDom(dom); + } + } + else { + dom = that_1.add(gradient); + } + that_1.markUsed(displayable); + var id = dom.getAttribute('id'); + svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')'); + } + }); + } + }; + GradientManager.prototype.add = function (gradient) { + var dom; + if (isLinearGradient(gradient)) { + dom = this.createElement('linearGradient'); + } + else if (isRadialGradient(gradient)) { + dom = this.createElement('radialGradient'); + } + else { + logError('Illegal gradient type.'); + return null; + } + gradient.id = gradient.id || this.nextId++; + dom.setAttribute('id', 'zr' + this._zrId + + '-gradient-' + gradient.id); + this.updateDom(gradient, dom); + this.addDom(dom); + return dom; + }; + GradientManager.prototype.update = function (gradient) { + if (!isGradient(gradient)) { + return; + } + var that = this; + this.doUpdate(gradient, function () { + var dom = gradient.__dom; + if (!dom) { + return; + } + var tagName = dom.tagName; + var type = gradient.type; + if (type === 'linear' && tagName === 'linearGradient' + || type === 'radial' && tagName === 'radialGradient') { + that.updateDom(gradient, gradient.__dom); + } + else { + that.removeDom(gradient); + that.add(gradient); + } + }); + }; + GradientManager.prototype.updateDom = function (gradient, dom) { + if (isLinearGradient(gradient)) { + dom.setAttribute('x1', gradient.x + ''); + dom.setAttribute('y1', gradient.y + ''); + dom.setAttribute('x2', gradient.x2 + ''); + dom.setAttribute('y2', gradient.y2 + ''); + } + else if (isRadialGradient(gradient)) { + dom.setAttribute('cx', gradient.x + ''); + dom.setAttribute('cy', gradient.y + ''); + dom.setAttribute('r', gradient.r + ''); + } + else { + logError('Illegal gradient type.'); + return; + } + if (gradient.global) { + dom.setAttribute('gradientUnits', 'userSpaceOnUse'); + } + else { + dom.setAttribute('gradientUnits', 'objectBoundingBox'); + } + dom.innerHTML = ''; + var colors = gradient.colorStops; + for (var i = 0, len = colors.length; i < len; ++i) { + var stop_1 = this.createElement('stop'); + stop_1.setAttribute('offset', colors[i].offset * 100 + '%'); + var color$1 = colors[i].color; + if (color$1.indexOf('rgba') > -1) { + var opacity = parse(color$1)[3]; + var hex = toHex(color$1); + stop_1.setAttribute('stop-color', '#' + hex); + stop_1.setAttribute('stop-opacity', opacity + ''); + } + else { + stop_1.setAttribute('stop-color', colors[i].color); + } + dom.appendChild(stop_1); + } + gradient.__dom = dom; + }; + GradientManager.prototype.markUsed = function (displayable) { + if (displayable.style) { + var gradient = displayable.style.fill; + if (gradient && gradient.__dom) { + _super.prototype.markDomUsed.call(this, gradient.__dom); + } + gradient = displayable.style.stroke; + if (gradient && gradient.__dom) { + _super.prototype.markDomUsed.call(this, gradient.__dom); + } + } + }; + return GradientManager; + }(Definable)); + + function isPattern(value) { + return value && (!!value.image || !!value.svgElement); + } + var patternDomMap = new WeakMap(); + var PatternManager = (function (_super) { + __extends(PatternManager, _super); + function PatternManager(zrId, svgRoot) { + return _super.call(this, zrId, svgRoot, ['pattern'], '__pattern_in_use__') || this; + } + PatternManager.prototype.addWithoutUpdate = function (svgElement, displayable) { + if (displayable && displayable.style) { + var that_1 = this; + each(['fill', 'stroke'], function (fillOrStroke) { + var pattern = displayable.style[fillOrStroke]; + if (isPattern(pattern)) { + var defs = that_1.getDefs(true); + var dom = patternDomMap.get(pattern); + if (dom) { + if (!defs.contains(dom)) { + that_1.addDom(dom); + } + } + else { + dom = that_1.add(pattern); + } + that_1.markUsed(displayable); + var id = dom.getAttribute('id'); + svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')'); + } + }); + } + }; + PatternManager.prototype.add = function (pattern) { + if (!isPattern(pattern)) { + return; + } + var dom = this.createElement('pattern'); + pattern.id = pattern.id == null ? this.nextId++ : pattern.id; + dom.setAttribute('id', 'zr' + this._zrId + + '-pattern-' + pattern.id); + dom.setAttribute('x', '0'); + dom.setAttribute('y', '0'); + dom.setAttribute('patternUnits', 'userSpaceOnUse'); + this.updateDom(pattern, dom); + this.addDom(dom); + return dom; + }; + PatternManager.prototype.update = function (pattern) { + if (!isPattern(pattern)) { + return; + } + var that = this; + this.doUpdate(pattern, function () { + var dom = patternDomMap.get(pattern); + that.updateDom(pattern, dom); + }); + }; + PatternManager.prototype.updateDom = function (pattern, patternDom) { + var svgElement = pattern.svgElement; + if (svgElement instanceof SVGElement) { + if (svgElement.parentNode !== patternDom) { + patternDom.innerHTML = ''; + patternDom.appendChild(svgElement); + patternDom.setAttribute('width', pattern.svgWidth + ''); + patternDom.setAttribute('height', pattern.svgHeight + ''); + } + } + else { + var img = void 0; + var prevImage = patternDom.getElementsByTagName('image'); + if (prevImage.length) { + if (pattern.image) { + img = prevImage[0]; + } + else { + patternDom.removeChild(prevImage[0]); + return; + } + } + else if (pattern.image) { + img = this.createElement('image'); + } + if (img) { + var imageSrc = void 0; + var patternImage = pattern.image; + if (typeof patternImage === 'string') { + imageSrc = patternImage; + } + else if (patternImage instanceof HTMLImageElement) { + imageSrc = patternImage.src; + } + else if (patternImage instanceof HTMLCanvasElement) { + imageSrc = patternImage.toDataURL(); + } + if (imageSrc) { + img.setAttribute('href', imageSrc); + img.setAttribute('x', '0'); + img.setAttribute('y', '0'); + var hostEl = { + dirty: function () { } + }; + var createdImage = createOrUpdateImage(imageSrc, img, hostEl, function (img) { + patternDom.setAttribute('width', img.width + ''); + patternDom.setAttribute('height', img.height + ''); + }); + if (createdImage && createdImage.width && createdImage.height) { + patternDom.setAttribute('width', createdImage.width + ''); + patternDom.setAttribute('height', createdImage.height + ''); + } + patternDom.appendChild(img); + } + } + } + var x = pattern.x || 0; + var y = pattern.y || 0; + var rotation = (pattern.rotation || 0) / Math.PI * 180; + var scaleX = pattern.scaleX || 1; + var scaleY = pattern.scaleY || 1; + var transform = "translate(" + x + ", " + y + ") rotate(" + rotation + ") scale(" + scaleX + ", " + scaleY + ")"; + patternDom.setAttribute('patternTransform', transform); + patternDomMap.set(pattern, patternDom); + }; + PatternManager.prototype.markUsed = function (displayable) { + if (displayable.style) { + if (isPattern(displayable.style.fill)) { + _super.prototype.markDomUsed.call(this, patternDomMap.get(displayable.style.fill)); + } + if (isPattern(displayable.style.stroke)) { + _super.prototype.markDomUsed.call(this, patternDomMap.get(displayable.style.stroke)); + } + } + }; + return PatternManager; + }(Definable)); + + function generateClipPathsKey(clipPaths) { + var key = []; + if (clipPaths) { + for (var i = 0; i < clipPaths.length; i++) { + var clipPath = clipPaths[i]; + key.push(clipPath.id); + } + } + return key.join(','); + } + function hasClipPath(displayable) { + var clipPaths = displayable.__clipPaths; + return clipPaths && clipPaths.length > 0; + } + var ClippathManager = (function (_super) { + __extends(ClippathManager, _super); + function ClippathManager(zrId, svgRoot) { + var _this = _super.call(this, zrId, svgRoot, 'clipPath', '__clippath_in_use__') || this; + _this._refGroups = {}; + _this._keyDuplicateCount = {}; + return _this; + } + ClippathManager.prototype.markAllUnused = function () { + _super.prototype.markAllUnused.call(this); + var refGroups = this._refGroups; + for (var key in refGroups) { + if (refGroups.hasOwnProperty(key)) { + this.markDomUnused(refGroups[key]); + } + } + this._keyDuplicateCount = {}; + }; + ClippathManager.prototype._getClipPathGroup = function (displayable, prevDisplayable) { + if (!hasClipPath(displayable)) { + return; + } + var clipPaths = displayable.__clipPaths; + var keyDuplicateCount = this._keyDuplicateCount; + var clipPathKey = generateClipPathsKey(clipPaths); + if (isClipPathChanged(clipPaths, prevDisplayable && prevDisplayable.__clipPaths)) { + keyDuplicateCount[clipPathKey] = keyDuplicateCount[clipPathKey] || 0; + keyDuplicateCount[clipPathKey] && (clipPathKey += '-' + keyDuplicateCount[clipPathKey]); + keyDuplicateCount[clipPathKey]++; + } + return this._refGroups[clipPathKey] + || (this._refGroups[clipPathKey] = this.createElement('g')); + }; + ClippathManager.prototype.update = function (displayable, prevDisplayable) { + var clipGroup = this._getClipPathGroup(displayable, prevDisplayable); + if (clipGroup) { + this.markDomUsed(clipGroup); + this.updateDom(clipGroup, displayable.__clipPaths); + } + return clipGroup; + }; + ClippathManager.prototype.updateDom = function (parentEl, clipPaths) { + if (clipPaths && clipPaths.length > 0) { + var defs = this.getDefs(true); + var clipPath = clipPaths[0]; + var clipPathEl = void 0; + var id = void 0; + if (clipPath._dom) { + id = clipPath._dom.getAttribute('id'); + clipPathEl = clipPath._dom; + if (!defs.contains(clipPathEl)) { + defs.appendChild(clipPathEl); + } + } + else { + id = 'zr' + this._zrId + '-clip-' + this.nextId; + ++this.nextId; + clipPathEl = this.createElement('clipPath'); + clipPathEl.setAttribute('id', id); + defs.appendChild(clipPathEl); + clipPath._dom = clipPathEl; + } + var svgProxy = this.getSvgProxy(clipPath); + svgProxy.brush(clipPath); + var pathEl = this.getSvgElement(clipPath); + clipPathEl.innerHTML = ''; + clipPathEl.appendChild(pathEl); + parentEl.setAttribute('clip-path', 'url(#' + id + ')'); + if (clipPaths.length > 1) { + this.updateDom(clipPathEl, clipPaths.slice(1)); + } + } + else { + if (parentEl) { + parentEl.setAttribute('clip-path', 'none'); + } + } + }; + ClippathManager.prototype.markUsed = function (displayable) { + var _this = this; + if (displayable.__clipPaths) { + each(displayable.__clipPaths, function (clipPath) { + if (clipPath._dom) { + _super.prototype.markDomUsed.call(_this, clipPath._dom); + } + }); + } + }; + ClippathManager.prototype.removeUnused = function () { + _super.prototype.removeUnused.call(this); + var newRefGroupsMap = {}; + var refGroups = this._refGroups; + for (var key in refGroups) { + if (refGroups.hasOwnProperty(key)) { + var group = refGroups[key]; + if (!this.isDomUnused(group)) { + newRefGroupsMap[key] = group; + } + else if (group.parentNode) { + group.parentNode.removeChild(group); + } + } + } + this._refGroups = newRefGroupsMap; + }; + return ClippathManager; + }(Definable)); + + var ShadowManager = (function (_super) { + __extends(ShadowManager, _super); + function ShadowManager(zrId, svgRoot) { + var _this = _super.call(this, zrId, svgRoot, ['filter'], '__filter_in_use__', '_shadowDom') || this; + _this._shadowDomMap = {}; + _this._shadowDomPool = []; + return _this; + } + ShadowManager.prototype._getFromPool = function () { + var shadowDom = this._shadowDomPool.pop(); + if (!shadowDom) { + shadowDom = this.createElement('filter'); + shadowDom.setAttribute('id', 'zr' + this._zrId + '-shadow-' + this.nextId++); + var domChild = this.createElement('feDropShadow'); + shadowDom.appendChild(domChild); + this.addDom(shadowDom); + } + return shadowDom; + }; + ShadowManager.prototype.update = function (svgElement, displayable) { + var style = displayable.style; + if (hasShadow(style)) { + var shadowKey = getShadowKey(displayable); + var shadowDom = displayable._shadowDom = this._shadowDomMap[shadowKey]; + if (!shadowDom) { + shadowDom = this._getFromPool(); + this._shadowDomMap[shadowKey] = shadowDom; + } + this.updateDom(svgElement, displayable, shadowDom); + } + else { + this.remove(svgElement, displayable); + } + }; + ShadowManager.prototype.remove = function (svgElement, displayable) { + if (displayable._shadowDom != null) { + displayable._shadowDom = null; + svgElement.removeAttribute('filter'); + } + }; + ShadowManager.prototype.updateDom = function (svgElement, displayable, shadowDom) { + var domChild = shadowDom.children[0]; + var style = displayable.style; + var globalScale = displayable.getGlobalScale(); + var scaleX = globalScale[0]; + var scaleY = globalScale[1]; + if (!scaleX || !scaleY) { + return; + } + var offsetX = style.shadowOffsetX || 0; + var offsetY = style.shadowOffsetY || 0; + var blur = style.shadowBlur; + var normalizedColor = normalizeColor(style.shadowColor); + domChild.setAttribute('dx', offsetX / scaleX + ''); + domChild.setAttribute('dy', offsetY / scaleY + ''); + domChild.setAttribute('flood-color', normalizedColor.color); + domChild.setAttribute('flood-opacity', normalizedColor.opacity + ''); + var stdDx = blur / 2 / scaleX; + var stdDy = blur / 2 / scaleY; + var stdDeviation = stdDx + ' ' + stdDy; + domChild.setAttribute('stdDeviation', stdDeviation); + shadowDom.setAttribute('x', '-100%'); + shadowDom.setAttribute('y', '-100%'); + shadowDom.setAttribute('width', '300%'); + shadowDom.setAttribute('height', '300%'); + displayable._shadowDom = shadowDom; + var id = shadowDom.getAttribute('id'); + svgElement.setAttribute('filter', 'url(#' + id + ')'); + }; + ShadowManager.prototype.removeUnused = function () { + var defs = this.getDefs(false); + if (!defs) { + return; + } + var shadowDomsPool = this._shadowDomPool; + var shadowDomMap = this._shadowDomMap; + for (var key in shadowDomMap) { + if (shadowDomMap.hasOwnProperty(key)) { + shadowDomsPool.push(shadowDomMap[key]); + } + } + this._shadowDomMap = {}; + }; + return ShadowManager; + }(Definable)); + function hasShadow(style) { + return style + && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY); + } + function getShadowKey(displayable) { + var style = displayable.style; + var globalScale = displayable.getGlobalScale(); + return [ + style.shadowColor, + (style.shadowBlur || 0).toFixed(2), + (style.shadowOffsetX || 0).toFixed(2), + (style.shadowOffsetY || 0).toFixed(2), + globalScale[0], + globalScale[1] + ].join(','); + } + + function parseInt10(val) { + return parseInt(val, 10); + } + function getSvgProxy(el) { + if (el instanceof Path) { + return svgPath; + } + else if (el instanceof ZRImage) { + return svgImage; + } + else if (el instanceof TSpan) { + return svgText; + } + else { + return svgPath; + } + } + function checkParentAvailable(parent, child) { + return child && parent && child.parentNode !== parent; + } + function insertAfter(parent, child, prevSibling) { + if (checkParentAvailable(parent, child) && prevSibling) { + var nextSibling = prevSibling.nextSibling; + nextSibling ? parent.insertBefore(child, nextSibling) + : parent.appendChild(child); + } + } + function prepend(parent, child) { + if (checkParentAvailable(parent, child)) { + var firstChild = parent.firstChild; + firstChild ? parent.insertBefore(child, firstChild) + : parent.appendChild(child); + } + } + function remove(parent, child) { + if (child && parent && child.parentNode === parent) { + parent.removeChild(child); + } + } + function removeFromMyParent(child) { + if (child && child.parentNode) { + child.parentNode.removeChild(child); + } + } + function getSvgElement(displayable) { + return displayable.__svgEl; + } + var SVGPainter = (function () { + function SVGPainter(root, storage, opts, zrId) { + this.type = 'svg'; + this.refreshHover = createMethodNotSupport('refreshHover'); + this.pathToImage = createMethodNotSupport('pathToImage'); + this.configLayer = createMethodNotSupport('configLayer'); + this.root = root; + this.storage = storage; + this._opts = opts = extend({}, opts || {}); + var svgDom = createElement('svg'); + svgDom.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', 'http://www.w3.org/2000/svg'); + svgDom.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink'); + svgDom.setAttribute('version', '1.1'); + svgDom.setAttribute('baseProfile', 'full'); + svgDom.style.cssText = 'user-select:none;position:absolute;left:0;top:0;'; + var bgRoot = createElement('g'); + svgDom.appendChild(bgRoot); + var svgRoot = createElement('g'); + svgDom.appendChild(svgRoot); + this._gradientManager = new GradientManager(zrId, svgRoot); + this._patternManager = new PatternManager(zrId, svgRoot); + this._clipPathManager = new ClippathManager(zrId, svgRoot); + this._shadowManager = new ShadowManager(zrId, svgRoot); + var viewport = document.createElement('div'); + viewport.style.cssText = 'overflow:hidden;position:relative'; + this._svgDom = svgDom; + this._svgRoot = svgRoot; + this._backgroundRoot = bgRoot; + this._viewport = viewport; + root.appendChild(viewport); + viewport.appendChild(svgDom); + this.resize(opts.width, opts.height); + this._visibleList = []; + } + SVGPainter.prototype.getType = function () { + return 'svg'; + }; + SVGPainter.prototype.getViewportRoot = function () { + return this._viewport; + }; + SVGPainter.prototype.getSvgDom = function () { + return this._svgDom; + }; + SVGPainter.prototype.getSvgRoot = function () { + return this._svgRoot; + }; + SVGPainter.prototype.getViewportRootOffset = function () { + var viewportRoot = this.getViewportRoot(); + if (viewportRoot) { + return { + offsetLeft: viewportRoot.offsetLeft || 0, + offsetTop: viewportRoot.offsetTop || 0 + }; + } + }; + SVGPainter.prototype.refresh = function () { + var list = this.storage.getDisplayList(true); + this._paintList(list); + }; + SVGPainter.prototype.setBackgroundColor = function (backgroundColor) { + if (this._backgroundRoot && this._backgroundNode) { + this._backgroundRoot.removeChild(this._backgroundNode); + } + var bgNode = createElement('rect'); + bgNode.setAttribute('width', this.getWidth()); + bgNode.setAttribute('height', this.getHeight()); + bgNode.setAttribute('x', 0); + bgNode.setAttribute('y', 0); + bgNode.setAttribute('id', 0); + var _a = normalizeColor(backgroundColor), color = _a.color, opacity = _a.opacity; + bgNode.setAttribute('fill', color); + bgNode.setAttribute('fill-opacity', opacity); + this._backgroundRoot.appendChild(bgNode); + this._backgroundNode = bgNode; + }; + SVGPainter.prototype.createSVGElement = function (tag) { + return createElement(tag); + }; + SVGPainter.prototype.paintOne = function (el) { + var svgProxy = getSvgProxy(el); + svgProxy && svgProxy.brush(el); + return getSvgElement(el); + }; + SVGPainter.prototype._paintList = function (list) { + var gradientManager = this._gradientManager; + var patternManager = this._patternManager; + var clipPathManager = this._clipPathManager; + var shadowManager = this._shadowManager; + gradientManager.markAllUnused(); + patternManager.markAllUnused(); + clipPathManager.markAllUnused(); + shadowManager.markAllUnused(); + var svgRoot = this._svgRoot; + var visibleList = this._visibleList; + var listLen = list.length; + var newVisibleList = []; + for (var i = 0; i < listLen; i++) { + var displayable = list[i]; + var svgProxy = getSvgProxy(displayable); + var svgElement = getSvgElement(displayable); + if (!displayable.invisible) { + if (displayable.__dirty || !svgElement) { + svgProxy && svgProxy.brush(displayable); + svgElement = getSvgElement(displayable); + if (svgElement && displayable.style) { + gradientManager.update(displayable.style.fill); + gradientManager.update(displayable.style.stroke); + patternManager.update(displayable.style.fill); + patternManager.update(displayable.style.stroke); + shadowManager.update(svgElement, displayable); + } + displayable.__dirty = 0; + } + if (svgElement) { + newVisibleList.push(displayable); + } + } + } + var diff = arrayDiff(visibleList, newVisibleList); + var prevSvgElement; + var topPrevSvgElement; + for (var i = 0; i < diff.length; i++) { + var item = diff[i]; + if (item.removed) { + for (var k = 0; k < item.count; k++) { + var displayable = visibleList[item.indices[k]]; + var svgElement = getSvgElement(displayable); + hasClipPath(displayable) ? removeFromMyParent(svgElement) + : remove(svgRoot, svgElement); + } + } + } + var prevDisplayable; + var currentClipGroup; + for (var i = 0; i < diff.length; i++) { + var item = diff[i]; + if (item.removed) { + continue; + } + for (var k = 0; k < item.count; k++) { + var displayable = newVisibleList[item.indices[k]]; + var clipGroup = clipPathManager.update(displayable, prevDisplayable); + if (clipGroup !== currentClipGroup) { + prevSvgElement = topPrevSvgElement; + if (clipGroup) { + prevSvgElement ? insertAfter(svgRoot, clipGroup, prevSvgElement) + : prepend(svgRoot, clipGroup); + topPrevSvgElement = clipGroup; + prevSvgElement = null; + } + currentClipGroup = clipGroup; + } + var svgElement = getSvgElement(displayable); + prevSvgElement + ? insertAfter(currentClipGroup || svgRoot, svgElement, prevSvgElement) + : prepend(currentClipGroup || svgRoot, svgElement); + prevSvgElement = svgElement || prevSvgElement; + if (!currentClipGroup) { + topPrevSvgElement = prevSvgElement; + } + gradientManager.markUsed(displayable); + gradientManager.addWithoutUpdate(svgElement, displayable); + patternManager.markUsed(displayable); + patternManager.addWithoutUpdate(svgElement, displayable); + clipPathManager.markUsed(displayable); + prevDisplayable = displayable; + } + } + gradientManager.removeUnused(); + patternManager.removeUnused(); + clipPathManager.removeUnused(); + shadowManager.removeUnused(); + this._visibleList = newVisibleList; + }; + SVGPainter.prototype.resize = function (width, height) { + var viewport = this._viewport; + viewport.style.display = 'none'; + var opts = this._opts; + width != null && (opts.width = width); + height != null && (opts.height = height); + width = this._getSize(0); + height = this._getSize(1); + viewport.style.display = ''; + if (this._width !== width || this._height !== height) { + this._width = width; + this._height = height; + var viewportStyle = viewport.style; + viewportStyle.width = width + 'px'; + viewportStyle.height = height + 'px'; + var svgRoot = this._svgDom; + svgRoot.setAttribute('width', width + ''); + svgRoot.setAttribute('height', height + ''); + } + if (this._backgroundNode) { + this._backgroundNode.setAttribute('width', width); + this._backgroundNode.setAttribute('height', height); + } + }; + SVGPainter.prototype.getWidth = function () { + return this._width; + }; + SVGPainter.prototype.getHeight = function () { + return this._height; + }; + SVGPainter.prototype._getSize = function (whIdx) { + var opts = this._opts; + var wh = ['width', 'height'][whIdx]; + var cwh = ['clientWidth', 'clientHeight'][whIdx]; + var plt = ['paddingLeft', 'paddingTop'][whIdx]; + var prb = ['paddingRight', 'paddingBottom'][whIdx]; + if (opts[wh] != null && opts[wh] !== 'auto') { + return parseFloat(opts[wh]); + } + var root = this.root; + var stl = document.defaultView.getComputedStyle(root); + return ((root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) + - (parseInt10(stl[plt]) || 0) + - (parseInt10(stl[prb]) || 0)) | 0; + }; + SVGPainter.prototype.dispose = function () { + this.root.innerHTML = ''; + this._svgRoot = + this._backgroundRoot = + this._svgDom = + this._backgroundNode = + this._viewport = this.storage = null; + }; + SVGPainter.prototype.clear = function () { + var viewportNode = this._viewport; + if (viewportNode && viewportNode.parentNode) { + viewportNode.parentNode.removeChild(viewportNode); + } + }; + SVGPainter.prototype.toDataURL = function () { + this.refresh(); + var svgDom = this._svgDom; + var outerHTML = svgDom.outerHTML + || (svgDom.parentNode && svgDom.parentNode).innerHTML; + var html = encodeURIComponent(outerHTML.replace(/>\n\r<')); + return 'data:image/svg+xml;charset=UTF-8,' + html; + }; + return SVGPainter; + }()); + function createMethodNotSupport(method) { + return function () { + logError('In SVG mode painter not support method "' + method + '"'); + }; + } + + function install(registers) { + registers.registerPainter('svg', SVGPainter); + } + + function returnFalse() { + return false; + } + function createDom(id, painter, dpr) { + var newDom = createCanvas(); + var width = painter.getWidth(); + var height = painter.getHeight(); + var newDomStyle = newDom.style; + if (newDomStyle) { + newDomStyle.position = 'absolute'; + newDomStyle.left = '0'; + newDomStyle.top = '0'; + newDomStyle.width = width + 'px'; + newDomStyle.height = height + 'px'; + newDom.setAttribute('data-zr-dom-id', id); + } + newDom.width = width * dpr; + newDom.height = height * dpr; + return newDom; + } + var Layer = (function (_super) { + __extends(Layer, _super); + function Layer(id, painter, dpr) { + var _this = _super.call(this) || this; + _this.motionBlur = false; + _this.lastFrameAlpha = 0.7; + _this.dpr = 1; + _this.virtual = false; + _this.config = {}; + _this.incremental = false; + _this.zlevel = 0; + _this.maxRepaintRectCount = 5; + _this.__dirty = true; + _this.__firstTimePaint = true; + _this.__used = false; + _this.__drawIndex = 0; + _this.__startIndex = 0; + _this.__endIndex = 0; + _this.__prevStartIndex = null; + _this.__prevEndIndex = null; + var dom; + dpr = dpr || devicePixelRatio; + if (typeof id === 'string') { + dom = createDom(id, painter, dpr); + } + else if (isObject(id)) { + dom = id; + id = dom.id; + } + _this.id = id; + _this.dom = dom; + var domStyle = dom.style; + if (domStyle) { + dom.onselectstart = returnFalse; + domStyle.webkitUserSelect = 'none'; + domStyle.userSelect = 'none'; + domStyle.webkitTapHighlightColor = 'rgba(0,0,0,0)'; + domStyle['-webkit-touch-callout'] = 'none'; + domStyle.padding = '0'; + domStyle.margin = '0'; + domStyle.borderWidth = '0'; + } + _this.domBack = null; + _this.ctxBack = null; + _this.painter = painter; + _this.config = null; + _this.dpr = dpr; + return _this; + } + Layer.prototype.getElementCount = function () { + return this.__endIndex - this.__startIndex; + }; + Layer.prototype.afterBrush = function () { + this.__prevStartIndex = this.__startIndex; + this.__prevEndIndex = this.__endIndex; + }; + Layer.prototype.initContext = function () { + this.ctx = this.dom.getContext('2d'); + this.ctx.dpr = this.dpr; + }; + Layer.prototype.setUnpainted = function () { + this.__firstTimePaint = true; + }; + Layer.prototype.createBackBuffer = function () { + var dpr = this.dpr; + this.domBack = createDom('back-' + this.id, this.painter, dpr); + this.ctxBack = this.domBack.getContext('2d'); + if (dpr !== 1) { + this.ctxBack.scale(dpr, dpr); + } + }; + Layer.prototype.createRepaintRects = function (displayList, prevList, viewWidth, viewHeight) { + if (this.__firstTimePaint) { + this.__firstTimePaint = false; + return null; + } + var mergedRepaintRects = []; + var maxRepaintRectCount = this.maxRepaintRectCount; + var full = false; + var pendingRect = new BoundingRect(0, 0, 0, 0); + function addRectToMergePool(rect) { + if (!rect.isFinite() || rect.isZero()) { + return; + } + if (mergedRepaintRects.length === 0) { + var boundingRect = new BoundingRect(0, 0, 0, 0); + boundingRect.copy(rect); + mergedRepaintRects.push(boundingRect); + } + else { + var isMerged = false; + var minDeltaArea = Infinity; + var bestRectToMergeIdx = 0; + for (var i = 0; i < mergedRepaintRects.length; ++i) { + var mergedRect = mergedRepaintRects[i]; + if (mergedRect.intersect(rect)) { + var pendingRect_1 = new BoundingRect(0, 0, 0, 0); + pendingRect_1.copy(mergedRect); + pendingRect_1.union(rect); + mergedRepaintRects[i] = pendingRect_1; + isMerged = true; + break; + } + else if (full) { + pendingRect.copy(rect); + pendingRect.union(mergedRect); + var aArea = rect.width * rect.height; + var bArea = mergedRect.width * mergedRect.height; + var pendingArea = pendingRect.width * pendingRect.height; + var deltaArea = pendingArea - aArea - bArea; + if (deltaArea < minDeltaArea) { + minDeltaArea = deltaArea; + bestRectToMergeIdx = i; + } + } + } + if (full) { + mergedRepaintRects[bestRectToMergeIdx].union(rect); + isMerged = true; + } + if (!isMerged) { + var boundingRect = new BoundingRect(0, 0, 0, 0); + boundingRect.copy(rect); + mergedRepaintRects.push(boundingRect); + } + if (!full) { + full = mergedRepaintRects.length >= maxRepaintRectCount; + } + } + } + for (var i = this.__startIndex; i < this.__endIndex; ++i) { + var el = displayList[i]; + if (el) { + var shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true); + var prevRect = el.__isRendered && ((el.__dirty & REDRAW_BIT) || !shouldPaint) + ? el.getPrevPaintRect() + : null; + if (prevRect) { + addRectToMergePool(prevRect); + } + var curRect = shouldPaint && ((el.__dirty & REDRAW_BIT) || !el.__isRendered) + ? el.getPaintRect() + : null; + if (curRect) { + addRectToMergePool(curRect); + } + } + } + for (var i = this.__prevStartIndex; i < this.__prevEndIndex; ++i) { + var el = prevList[i]; + var shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true); + if (el && (!shouldPaint || !el.__zr) && el.__isRendered) { + var prevRect = el.getPrevPaintRect(); + if (prevRect) { + addRectToMergePool(prevRect); + } + } + } + var hasIntersections; + do { + hasIntersections = false; + for (var i = 0; i < mergedRepaintRects.length;) { + if (mergedRepaintRects[i].isZero()) { + mergedRepaintRects.splice(i, 1); + continue; + } + for (var j = i + 1; j < mergedRepaintRects.length;) { + if (mergedRepaintRects[i].intersect(mergedRepaintRects[j])) { + hasIntersections = true; + mergedRepaintRects[i].union(mergedRepaintRects[j]); + mergedRepaintRects.splice(j, 1); + } + else { + j++; + } + } + i++; + } + } while (hasIntersections); + this._paintRects = mergedRepaintRects; + return mergedRepaintRects; + }; + Layer.prototype.debugGetPaintRects = function () { + return (this._paintRects || []).slice(); + }; + Layer.prototype.resize = function (width, height) { + var dpr = this.dpr; + var dom = this.dom; + var domStyle = dom.style; + var domBack = this.domBack; + if (domStyle) { + domStyle.width = width + 'px'; + domStyle.height = height + 'px'; + } + dom.width = width * dpr; + dom.height = height * dpr; + if (domBack) { + domBack.width = width * dpr; + domBack.height = height * dpr; + if (dpr !== 1) { + this.ctxBack.scale(dpr, dpr); + } + } + }; + Layer.prototype.clear = function (clearAll, clearColor, repaintRects) { + var dom = this.dom; + var ctx = this.ctx; + var width = dom.width; + var height = dom.height; + clearColor = clearColor || this.clearColor; + var haveMotionBLur = this.motionBlur && !clearAll; + var lastFrameAlpha = this.lastFrameAlpha; + var dpr = this.dpr; + var self = this; + if (haveMotionBLur) { + if (!this.domBack) { + this.createBackBuffer(); + } + this.ctxBack.globalCompositeOperation = 'copy'; + this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr); + } + var domBack = this.domBack; + function doClear(x, y, width, height) { + ctx.clearRect(x, y, width, height); + if (clearColor && clearColor !== 'transparent') { + var clearColorGradientOrPattern = void 0; + if (isGradientObject(clearColor)) { + clearColorGradientOrPattern = clearColor.__canvasGradient + || getCanvasGradient(ctx, clearColor, { + x: 0, + y: 0, + width: width, + height: height + }); + clearColor.__canvasGradient = clearColorGradientOrPattern; + } + else if (isImagePatternObject(clearColor)) { + clearColorGradientOrPattern = createCanvasPattern(ctx, clearColor, { + dirty: function () { + self.setUnpainted(); + self.__painter.refresh(); + } + }); + } + ctx.save(); + ctx.fillStyle = clearColorGradientOrPattern || clearColor; + ctx.fillRect(x, y, width, height); + ctx.restore(); + } + if (haveMotionBLur) { + ctx.save(); + ctx.globalAlpha = lastFrameAlpha; + ctx.drawImage(domBack, x, y, width, height); + ctx.restore(); + } + } + if (!repaintRects || haveMotionBLur) { + doClear(0, 0, width, height); + } + else if (repaintRects.length) { + each(repaintRects, function (rect) { + doClear(rect.x * dpr, rect.y * dpr, rect.width * dpr, rect.height * dpr); + }); + } + }; + return Layer; + }(Eventful)); + + var HOVER_LAYER_ZLEVEL = 1e5; + var CANVAS_ZLEVEL = 314159; + var EL_AFTER_INCREMENTAL_INC = 0.01; + var INCREMENTAL_INC = 0.001; + function parseInt10$1(val) { + return parseInt(val, 10); + } + function isLayerValid(layer) { + if (!layer) { + return false; + } + if (layer.__builtin__) { + return true; + } + if (typeof (layer.resize) !== 'function' + || typeof (layer.refresh) !== 'function') { + return false; + } + return true; + } + function createRoot(width, height) { + var domRoot = document.createElement('div'); + domRoot.style.cssText = [ + 'position:relative', + 'width:' + width + 'px', + 'height:' + height + 'px', + 'padding:0', + 'margin:0', + 'border-width:0' + ].join(';') + ';'; + return domRoot; + } + var CanvasPainter = (function () { + function CanvasPainter(root, storage, opts, id) { + this.type = 'canvas'; + this._zlevelList = []; + this._prevDisplayList = []; + this._layers = {}; + this._layerConfig = {}; + this._needsManuallyCompositing = false; + this.type = 'canvas'; + var singleCanvas = !root.nodeName + || root.nodeName.toUpperCase() === 'CANVAS'; + this._opts = opts = extend({}, opts || {}); + this.dpr = opts.devicePixelRatio || devicePixelRatio; + this._singleCanvas = singleCanvas; + this.root = root; + var rootStyle = root.style; + if (rootStyle) { + rootStyle.webkitTapHighlightColor = 'transparent'; + rootStyle.webkitUserSelect = 'none'; + rootStyle.userSelect = 'none'; + rootStyle['-webkit-touch-callout'] = 'none'; + root.innerHTML = ''; + } + this.storage = storage; + var zlevelList = this._zlevelList; + this._prevDisplayList = []; + var layers = this._layers; + if (!singleCanvas) { + this._width = this._getSize(0); + this._height = this._getSize(1); + var domRoot = this._domRoot = createRoot(this._width, this._height); + root.appendChild(domRoot); + } + else { + var rootCanvas = root; + var width = rootCanvas.width; + var height = rootCanvas.height; + if (opts.width != null) { + width = opts.width; + } + if (opts.height != null) { + height = opts.height; + } + this.dpr = opts.devicePixelRatio || 1; + rootCanvas.width = width * this.dpr; + rootCanvas.height = height * this.dpr; + this._width = width; + this._height = height; + var mainLayer = new Layer(rootCanvas, this, this.dpr); + mainLayer.__builtin__ = true; + mainLayer.initContext(); + layers[CANVAS_ZLEVEL] = mainLayer; + mainLayer.zlevel = CANVAS_ZLEVEL; + zlevelList.push(CANVAS_ZLEVEL); + this._domRoot = root; + } + } + CanvasPainter.prototype.getType = function () { + return 'canvas'; + }; + CanvasPainter.prototype.isSingleCanvas = function () { + return this._singleCanvas; + }; + CanvasPainter.prototype.getViewportRoot = function () { + return this._domRoot; + }; + CanvasPainter.prototype.getViewportRootOffset = function () { + var viewportRoot = this.getViewportRoot(); + if (viewportRoot) { + return { + offsetLeft: viewportRoot.offsetLeft || 0, + offsetTop: viewportRoot.offsetTop || 0 + }; + } + }; + CanvasPainter.prototype.refresh = function (paintAll) { + var list = this.storage.getDisplayList(true); + var prevList = this._prevDisplayList; + var zlevelList = this._zlevelList; + this._redrawId = Math.random(); + this._paintList(list, prevList, paintAll, this._redrawId); + for (var i = 0; i < zlevelList.length; i++) { + var z = zlevelList[i]; + var layer = this._layers[z]; + if (!layer.__builtin__ && layer.refresh) { + var clearColor = i === 0 ? this._backgroundColor : null; + layer.refresh(clearColor); + } + } + if (this._opts.useDirtyRect) { + this._prevDisplayList = list.slice(); + } + return this; + }; + CanvasPainter.prototype.refreshHover = function () { + this._paintHoverList(this.storage.getDisplayList(false)); + }; + CanvasPainter.prototype._paintHoverList = function (list) { + var len = list.length; + var hoverLayer = this._hoverlayer; + hoverLayer && hoverLayer.clear(); + if (!len) { + return; + } + var scope = { + inHover: true, + viewWidth: this._width, + viewHeight: this._height + }; + var ctx; + for (var i = 0; i < len; i++) { + var el = list[i]; + if (el.__inHover) { + if (!hoverLayer) { + hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL); + } + if (!ctx) { + ctx = hoverLayer.ctx; + ctx.save(); + } + brush(ctx, el, scope, i === len - 1); + } + } + if (ctx) { + ctx.restore(); + } + }; + CanvasPainter.prototype.getHoverLayer = function () { + return this.getLayer(HOVER_LAYER_ZLEVEL); + }; + CanvasPainter.prototype.paintOne = function (ctx, el) { + brushSingle(ctx, el); + }; + CanvasPainter.prototype._paintList = function (list, prevList, paintAll, redrawId) { + if (this._redrawId !== redrawId) { + return; + } + paintAll = paintAll || false; + this._updateLayerStatus(list); + var _a = this._doPaintList(list, prevList, paintAll), finished = _a.finished, needsRefreshHover = _a.needsRefreshHover; + if (this._needsManuallyCompositing) { + this._compositeManually(); + } + if (needsRefreshHover) { + this._paintHoverList(list); + } + if (!finished) { + var self_1 = this; + requestAnimationFrame$1(function () { + self_1._paintList(list, prevList, paintAll, redrawId); + }); + } + else { + this.eachLayer(function (layer) { + layer.afterBrush && layer.afterBrush(); + }); + } + }; + CanvasPainter.prototype._compositeManually = function () { + var ctx = this.getLayer(CANVAS_ZLEVEL).ctx; + var width = this._domRoot.width; + var height = this._domRoot.height; + ctx.clearRect(0, 0, width, height); + this.eachBuiltinLayer(function (layer) { + if (layer.virtual) { + ctx.drawImage(layer.dom, 0, 0, width, height); + } + }); + }; + CanvasPainter.prototype._doPaintList = function (list, prevList, paintAll) { + var _this = this; + var layerList = []; + var useDirtyRect = this._opts.useDirtyRect; + for (var zi = 0; zi < this._zlevelList.length; zi++) { + var zlevel = this._zlevelList[zi]; + var layer = this._layers[zlevel]; + if (layer.__builtin__ + && layer !== this._hoverlayer + && (layer.__dirty || paintAll)) { + layerList.push(layer); + } + } + var finished = true; + var needsRefreshHover = false; + var _loop_1 = function (k) { + var layer = layerList[k]; + var ctx = layer.ctx; + var repaintRects = useDirtyRect + && layer.createRepaintRects(list, prevList, this_1._width, this_1._height); + var start = paintAll ? layer.__startIndex : layer.__drawIndex; + var useTimer = !paintAll && layer.incremental && Date.now; + var startTime = useTimer && Date.now(); + var clearColor = layer.zlevel === this_1._zlevelList[0] + ? this_1._backgroundColor : null; + if (layer.__startIndex === layer.__endIndex) { + layer.clear(false, clearColor, repaintRects); + } + else if (start === layer.__startIndex) { + var firstEl = list[start]; + if (!firstEl.incremental || !firstEl.notClear || paintAll) { + layer.clear(false, clearColor, repaintRects); + } + } + if (start === -1) { + console.error('For some unknown reason. drawIndex is -1'); + start = layer.__startIndex; + } + var i; + var repaint = function (repaintRect) { + var scope = { + inHover: false, + allClipped: false, + prevEl: null, + viewWidth: _this._width, + viewHeight: _this._height + }; + for (i = start; i < layer.__endIndex; i++) { + var el = list[i]; + if (el.__inHover) { + needsRefreshHover = true; + } + _this._doPaintEl(el, layer, useDirtyRect, repaintRect, scope, i === layer.__endIndex - 1); + if (useTimer) { + var dTime = Date.now() - startTime; + if (dTime > 15) { + break; + } + } + } + if (scope.prevElClipPaths) { + ctx.restore(); + } + }; + if (repaintRects) { + if (repaintRects.length === 0) { + i = layer.__endIndex; + } + else { + var dpr = this_1.dpr; + for (var r = 0; r < repaintRects.length; ++r) { + var rect = repaintRects[r]; + ctx.save(); + ctx.beginPath(); + ctx.rect(rect.x * dpr, rect.y * dpr, rect.width * dpr, rect.height * dpr); + ctx.clip(); + repaint(rect); + ctx.restore(); + } + } + } + else { + ctx.save(); + repaint(); + ctx.restore(); + } + layer.__drawIndex = i; + if (layer.__drawIndex < layer.__endIndex) { + finished = false; + } + }; + var this_1 = this; + for (var k = 0; k < layerList.length; k++) { + _loop_1(k); + } + if (env.wxa) { + each(this._layers, function (layer) { + if (layer && layer.ctx && layer.ctx.draw) { + layer.ctx.draw(); + } + }); + } + return { + finished: finished, + needsRefreshHover: needsRefreshHover + }; + }; + CanvasPainter.prototype._doPaintEl = function (el, currentLayer, useDirtyRect, repaintRect, scope, isLast) { + var ctx = currentLayer.ctx; + if (useDirtyRect) { + var paintRect = el.getPaintRect(); + if (!repaintRect || paintRect && paintRect.intersect(repaintRect)) { + brush(ctx, el, scope, isLast); + el.setPrevPaintRect(paintRect); + } + } + else { + brush(ctx, el, scope, isLast); + } + }; + CanvasPainter.prototype.getLayer = function (zlevel, virtual) { + if (this._singleCanvas && !this._needsManuallyCompositing) { + zlevel = CANVAS_ZLEVEL; + } + var layer = this._layers[zlevel]; + if (!layer) { + layer = new Layer('zr_' + zlevel, this, this.dpr); + layer.zlevel = zlevel; + layer.__builtin__ = true; + if (this._layerConfig[zlevel]) { + merge(layer, this._layerConfig[zlevel], true); + } + else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) { + merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true); + } + if (virtual) { + layer.virtual = virtual; + } + this.insertLayer(zlevel, layer); + layer.initContext(); + } + return layer; + }; + CanvasPainter.prototype.insertLayer = function (zlevel, layer) { + var layersMap = this._layers; + var zlevelList = this._zlevelList; + var len = zlevelList.length; + var domRoot = this._domRoot; + var prevLayer = null; + var i = -1; + if (layersMap[zlevel]) { + logError('ZLevel ' + zlevel + ' has been used already'); + return; + } + if (!isLayerValid(layer)) { + logError('Layer of zlevel ' + zlevel + ' is not valid'); + return; + } + if (len > 0 && zlevel > zlevelList[0]) { + for (i = 0; i < len - 1; i++) { + if (zlevelList[i] < zlevel + && zlevelList[i + 1] > zlevel) { + break; + } + } + prevLayer = layersMap[zlevelList[i]]; + } + zlevelList.splice(i + 1, 0, zlevel); + layersMap[zlevel] = layer; + if (!layer.virtual) { + if (prevLayer) { + var prevDom = prevLayer.dom; + if (prevDom.nextSibling) { + domRoot.insertBefore(layer.dom, prevDom.nextSibling); + } + else { + domRoot.appendChild(layer.dom); + } + } + else { + if (domRoot.firstChild) { + domRoot.insertBefore(layer.dom, domRoot.firstChild); + } + else { + domRoot.appendChild(layer.dom); + } + } + } + layer.__painter = this; + }; + CanvasPainter.prototype.eachLayer = function (cb, context) { + var zlevelList = this._zlevelList; + for (var i = 0; i < zlevelList.length; i++) { + var z = zlevelList[i]; + cb.call(context, this._layers[z], z); + } + }; + CanvasPainter.prototype.eachBuiltinLayer = function (cb, context) { + var zlevelList = this._zlevelList; + for (var i = 0; i < zlevelList.length; i++) { + var z = zlevelList[i]; + var layer = this._layers[z]; + if (layer.__builtin__) { + cb.call(context, layer, z); + } + } + }; + CanvasPainter.prototype.eachOtherLayer = function (cb, context) { + var zlevelList = this._zlevelList; + for (var i = 0; i < zlevelList.length; i++) { + var z = zlevelList[i]; + var layer = this._layers[z]; + if (!layer.__builtin__) { + cb.call(context, layer, z); + } + } + }; + CanvasPainter.prototype.getLayers = function () { + return this._layers; + }; + CanvasPainter.prototype._updateLayerStatus = function (list) { + this.eachBuiltinLayer(function (layer, z) { + layer.__dirty = layer.__used = false; + }); + function updatePrevLayer(idx) { + if (prevLayer) { + if (prevLayer.__endIndex !== idx) { + prevLayer.__dirty = true; + } + prevLayer.__endIndex = idx; + } + } + if (this._singleCanvas) { + for (var i_1 = 1; i_1 < list.length; i_1++) { + var el = list[i_1]; + if (el.zlevel !== list[i_1 - 1].zlevel || el.incremental) { + this._needsManuallyCompositing = true; + break; + } + } + } + var prevLayer = null; + var incrementalLayerCount = 0; + var prevZlevel; + var i; + for (i = 0; i < list.length; i++) { + var el = list[i]; + var zlevel = el.zlevel; + var layer = void 0; + if (prevZlevel !== zlevel) { + prevZlevel = zlevel; + incrementalLayerCount = 0; + } + if (el.incremental) { + layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing); + layer.incremental = true; + incrementalLayerCount = 1; + } + else { + layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing); + } + if (!layer.__builtin__) { + logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id); + } + if (layer !== prevLayer) { + layer.__used = true; + if (layer.__startIndex !== i) { + layer.__dirty = true; + } + layer.__startIndex = i; + if (!layer.incremental) { + layer.__drawIndex = i; + } + else { + layer.__drawIndex = -1; + } + updatePrevLayer(i); + prevLayer = layer; + } + if ((el.__dirty & REDRAW_BIT) && !el.__inHover) { + layer.__dirty = true; + if (layer.incremental && layer.__drawIndex < 0) { + layer.__drawIndex = i; + } + } + } + updatePrevLayer(i); + this.eachBuiltinLayer(function (layer, z) { + if (!layer.__used && layer.getElementCount() > 0) { + layer.__dirty = true; + layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0; + } + if (layer.__dirty && layer.__drawIndex < 0) { + layer.__drawIndex = layer.__startIndex; + } + }); + }; + CanvasPainter.prototype.clear = function () { + this.eachBuiltinLayer(this._clearLayer); + return this; + }; + CanvasPainter.prototype._clearLayer = function (layer) { + layer.clear(); + }; + CanvasPainter.prototype.setBackgroundColor = function (backgroundColor) { + this._backgroundColor = backgroundColor; + each(this._layers, function (layer) { + layer.setUnpainted(); + }); + }; + CanvasPainter.prototype.configLayer = function (zlevel, config) { + if (config) { + var layerConfig = this._layerConfig; + if (!layerConfig[zlevel]) { + layerConfig[zlevel] = config; + } + else { + merge(layerConfig[zlevel], config, true); + } + for (var i = 0; i < this._zlevelList.length; i++) { + var _zlevel = this._zlevelList[i]; + if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) { + var layer = this._layers[_zlevel]; + merge(layer, layerConfig[zlevel], true); + } + } + } + }; + CanvasPainter.prototype.delLayer = function (zlevel) { + var layers = this._layers; + var zlevelList = this._zlevelList; + var layer = layers[zlevel]; + if (!layer) { + return; + } + layer.dom.parentNode.removeChild(layer.dom); + delete layers[zlevel]; + zlevelList.splice(indexOf(zlevelList, zlevel), 1); + }; + CanvasPainter.prototype.resize = function (width, height) { + if (!this._domRoot.style) { + if (width == null || height == null) { + return; + } + this._width = width; + this._height = height; + this.getLayer(CANVAS_ZLEVEL).resize(width, height); + } + else { + var domRoot = this._domRoot; + domRoot.style.display = 'none'; + var opts = this._opts; + width != null && (opts.width = width); + height != null && (opts.height = height); + width = this._getSize(0); + height = this._getSize(1); + domRoot.style.display = ''; + if (this._width !== width || height !== this._height) { + domRoot.style.width = width + 'px'; + domRoot.style.height = height + 'px'; + for (var id in this._layers) { + if (this._layers.hasOwnProperty(id)) { + this._layers[id].resize(width, height); + } + } + this.refresh(true); + } + this._width = width; + this._height = height; + } + return this; + }; + CanvasPainter.prototype.clearLayer = function (zlevel) { + var layer = this._layers[zlevel]; + if (layer) { + layer.clear(); + } + }; + CanvasPainter.prototype.dispose = function () { + this.root.innerHTML = ''; + this.root = + this.storage = + this._domRoot = + this._layers = null; + }; + CanvasPainter.prototype.getRenderedCanvas = function (opts) { + opts = opts || {}; + if (this._singleCanvas && !this._compositeManually) { + return this._layers[CANVAS_ZLEVEL].dom; + } + var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr); + imageLayer.initContext(); + imageLayer.clear(false, opts.backgroundColor || this._backgroundColor); + var ctx = imageLayer.ctx; + if (opts.pixelRatio <= this.dpr) { + this.refresh(); + var width_1 = imageLayer.dom.width; + var height_1 = imageLayer.dom.height; + this.eachLayer(function (layer) { + if (layer.__builtin__) { + ctx.drawImage(layer.dom, 0, 0, width_1, height_1); + } + else if (layer.renderToCanvas) { + ctx.save(); + layer.renderToCanvas(ctx); + ctx.restore(); + } + }); + } + else { + var scope = { + inHover: false, + viewWidth: this._width, + viewHeight: this._height + }; + var displayList = this.storage.getDisplayList(true); + for (var i = 0, len = displayList.length; i < len; i++) { + var el = displayList[i]; + brush(ctx, el, scope, i === len - 1); + } + } + return imageLayer.dom; + }; + CanvasPainter.prototype.getWidth = function () { + return this._width; + }; + CanvasPainter.prototype.getHeight = function () { + return this._height; + }; + CanvasPainter.prototype._getSize = function (whIdx) { + var opts = this._opts; + var wh = ['width', 'height'][whIdx]; + var cwh = ['clientWidth', 'clientHeight'][whIdx]; + var plt = ['paddingLeft', 'paddingTop'][whIdx]; + var prb = ['paddingRight', 'paddingBottom'][whIdx]; + if (opts[wh] != null && opts[wh] !== 'auto') { + return parseFloat(opts[wh]); + } + var root = this.root; + var stl = document.defaultView.getComputedStyle(root); + return ((root[cwh] || parseInt10$1(stl[wh]) || parseInt10$1(root.style[wh])) + - (parseInt10$1(stl[plt]) || 0) + - (parseInt10$1(stl[prb]) || 0)) | 0; + }; + CanvasPainter.prototype.pathToImage = function (path, dpr) { + dpr = dpr || this.dpr; + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + var rect = path.getBoundingRect(); + var style = path.style; + var shadowBlurSize = style.shadowBlur * dpr; + var shadowOffsetX = style.shadowOffsetX * dpr; + var shadowOffsetY = style.shadowOffsetY * dpr; + var lineWidth = path.hasStroke() ? style.lineWidth : 0; + var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize); + var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize); + var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize); + var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize); + var width = rect.width + leftMargin + rightMargin; + var height = rect.height + topMargin + bottomMargin; + canvas.width = width * dpr; + canvas.height = height * dpr; + ctx.scale(dpr, dpr); + ctx.clearRect(0, 0, width, height); + ctx.dpr = dpr; + var pathTransform = { + x: path.x, + y: path.y, + scaleX: path.scaleX, + scaleY: path.scaleY, + rotation: path.rotation, + originX: path.originX, + originY: path.originY + }; + path.x = leftMargin - rect.x; + path.y = topMargin - rect.y; + path.rotation = 0; + path.scaleX = 1; + path.scaleY = 1; + path.updateTransform(); + if (path) { + brush(ctx, path, { + inHover: false, + viewWidth: this._width, + viewHeight: this._height + }, true); + } + var imgShape = new ZRImage({ + style: { + x: 0, + y: 0, + image: canvas + } + }); + extend(path, pathTransform); + return imgShape; + }; + return CanvasPainter; + }()); + + function install$1(registers) { + registers.registerPainter('canvas', CanvasPainter); + } + + var LineSeriesModel = + /** @class */ + function (_super) { + __extends(LineSeriesModel, _super); + + function LineSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = LineSeriesModel.type; + _this.hasSymbolVisual = true; + return _this; + } + + LineSeriesModel.prototype.getInitialData = function (option) { + if ("development" !== 'production') { + var coordSys = option.coordinateSystem; + + if (coordSys !== 'polar' && coordSys !== 'cartesian2d') { + throw new Error('Line not support coordinateSystem besides cartesian and polar'); + } + } + + return createSeriesData(null, this, { + useEncodeDefaulter: true + }); + }; + + LineSeriesModel.prototype.getLegendIcon = function (opt) { + var group = new Group(); + var line = createSymbol('line', 0, opt.itemHeight / 2, opt.itemWidth, 0, opt.lineStyle.stroke, false); + group.add(line); + line.setStyle(opt.lineStyle); + var visualType = this.getData().getVisual('symbol'); + var visualRotate = this.getData().getVisual('symbolRotate'); + var symbolType = visualType === 'none' ? 'circle' : visualType; // Symbol size is 80% when there is a line + + var size = opt.itemHeight * 0.8; + var symbol = createSymbol(symbolType, (opt.itemWidth - size) / 2, (opt.itemHeight - size) / 2, size, size, opt.itemStyle.fill); + group.add(symbol); + symbol.setStyle(opt.itemStyle); + var symbolRotate = opt.iconRotate === 'inherit' ? visualRotate : opt.iconRotate || 0; + symbol.rotation = symbolRotate * Math.PI / 180; + symbol.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]); + + if (symbolType.indexOf('empty') > -1) { + symbol.style.stroke = symbol.style.fill; + symbol.style.fill = '#fff'; + symbol.style.lineWidth = 2; + } + + return group; + }; + + LineSeriesModel.type = 'series.line'; + LineSeriesModel.dependencies = ['grid', 'polar']; + LineSeriesModel.defaultOption = { + zlevel: 0, + z: 3, + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + clip: true, + label: { + position: 'top' + }, + // itemStyle: { + // }, + endLabel: { + show: false, + valueAnimation: true, + distance: 8 + }, + lineStyle: { + width: 2, + type: 'solid' + }, + emphasis: { + scale: true, + lineStyle: { + width: 'bolder' + } + }, + // areaStyle: { + // origin of areaStyle. Valid values: + // `'auto'/null/undefined`: from axisLine to data + // `'start'`: from min to data + // `'end'`: from data to max + // origin: 'auto' + // }, + // false, 'start', 'end', 'middle' + step: false, + // Disabled if step is true + smooth: false, + smoothMonotone: null, + symbol: 'emptyCircle', + symbolSize: 4, + symbolRotate: null, + showSymbol: true, + // `false`: follow the label interval strategy. + // `true`: show all symbols. + // `'auto'`: If possible, show all symbols, otherwise + // follow the label interval strategy. + showAllSymbol: 'auto', + // Whether to connect break point. + connectNulls: false, + // Sampling for large data. Can be: 'average', 'max', 'min', 'sum', 'lttb'. + sampling: 'none', + animationEasing: 'linear', + // Disable progressive + progressive: 0, + hoverLayerThreshold: Infinity, + universalTransition: { + divideShape: 'clone' + }, + triggerLineEvent: false + }; + return LineSeriesModel; + }(SeriesModel); + + /** + * @return label string. Not null/undefined + */ + + function getDefaultLabel(data, dataIndex) { + var labelDims = data.mapDimensionsAll('defaultedLabel'); + var len = labelDims.length; // Simple optimization (in lots of cases, label dims length is 1) + + if (len === 1) { + var rawVal = retrieveRawValue(data, dataIndex, labelDims[0]); + return rawVal != null ? rawVal + '' : null; + } else if (len) { + var vals = []; + + for (var i = 0; i < labelDims.length; i++) { + vals.push(retrieveRawValue(data, dataIndex, labelDims[i])); + } + + return vals.join(' '); + } + } + function getDefaultInterpolatedLabel(data, interpolatedValue) { + var labelDims = data.mapDimensionsAll('defaultedLabel'); + + if (!isArray(interpolatedValue)) { + return interpolatedValue + ''; + } + + var vals = []; + + for (var i = 0; i < labelDims.length; i++) { + var dimIndex = data.getDimensionIndex(labelDims[i]); + + if (dimIndex >= 0) { + vals.push(interpolatedValue[dimIndex]); + } + } + + return vals.join(' '); + } + + var Symbol = + /** @class */ + function (_super) { + __extends(Symbol, _super); + + function Symbol(data, idx, seriesScope, opts) { + var _this = _super.call(this) || this; + + _this.updateData(data, idx, seriesScope, opts); + + return _this; + } + + Symbol.prototype._createSymbol = function (symbolType, data, idx, symbolSize, keepAspect) { + // Remove paths created before + this.removeAll(); // let symbolPath = createSymbol( + // symbolType, -0.5, -0.5, 1, 1, color + // ); + // If width/height are set too small (e.g., set to 1) on ios10 + // and macOS Sierra, a circle stroke become a rect, no matter what + // the scale is set. So we set width/height as 2. See #4150. + + var symbolPath = createSymbol(symbolType, -1, -1, 2, 2, null, keepAspect); + symbolPath.attr({ + z2: 100, + culling: true, + scaleX: symbolSize[0] / 2, + scaleY: symbolSize[1] / 2 + }); // Rewrite drift method + + symbolPath.drift = driftSymbol; + this._symbolType = symbolType; + this.add(symbolPath); + }; + /** + * Stop animation + * @param {boolean} toLastFrame + */ + + + Symbol.prototype.stopSymbolAnimation = function (toLastFrame) { + this.childAt(0).stopAnimation(null, toLastFrame); + }; + + Symbol.prototype.getSymbolType = function () { + return this._symbolType; + }; + /** + * FIXME: + * Caution: This method breaks the encapsulation of this module, + * but it indeed brings convenience. So do not use the method + * unless you detailedly know all the implements of `Symbol`, + * especially animation. + * + * Get symbol path element. + */ + + + Symbol.prototype.getSymbolPath = function () { + return this.childAt(0); + }; + /** + * Highlight symbol + */ + + + Symbol.prototype.highlight = function () { + enterEmphasis(this.childAt(0)); + }; + /** + * Downplay symbol + */ + + + Symbol.prototype.downplay = function () { + leaveEmphasis(this.childAt(0)); + }; + /** + * @param {number} zlevel + * @param {number} z + */ + + + Symbol.prototype.setZ = function (zlevel, z) { + var symbolPath = this.childAt(0); + symbolPath.zlevel = zlevel; + symbolPath.z = z; + }; + + Symbol.prototype.setDraggable = function (draggable) { + var symbolPath = this.childAt(0); + symbolPath.draggable = draggable; + symbolPath.cursor = draggable ? 'move' : symbolPath.cursor; + }; + /** + * Update symbol properties + */ + + + Symbol.prototype.updateData = function (data, idx, seriesScope, opts) { + this.silent = false; + var symbolType = data.getItemVisual(idx, 'symbol') || 'circle'; + var seriesModel = data.hostModel; + var symbolSize = Symbol.getSymbolSize(data, idx); + var isInit = symbolType !== this._symbolType; + var disableAnimation = opts && opts.disableAnimation; + + if (isInit) { + var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect'); + + this._createSymbol(symbolType, data, idx, symbolSize, keepAspect); + } else { + var symbolPath = this.childAt(0); + symbolPath.silent = false; + var target = { + scaleX: symbolSize[0] / 2, + scaleY: symbolSize[1] / 2 + }; + disableAnimation ? symbolPath.attr(target) : updateProps(symbolPath, target, seriesModel, idx); + saveOldStyle(symbolPath); + } + + this._updateCommon(data, idx, symbolSize, seriesScope, opts); + + if (isInit) { + var symbolPath = this.childAt(0); + + if (!disableAnimation) { + var target = { + scaleX: this._sizeX, + scaleY: this._sizeY, + style: { + // Always fadeIn. Because it has fadeOut animation when symbol is removed.. + opacity: symbolPath.style.opacity + } + }; + symbolPath.scaleX = symbolPath.scaleY = 0; + symbolPath.style.opacity = 0; + initProps(symbolPath, target, seriesModel, idx); + } + } + + if (disableAnimation) { + // Must stop remove animation manually if don't call initProps or updateProps. + this.childAt(0).stopAnimation('remove'); + } + + this._seriesModel = seriesModel; + }; + + Symbol.prototype._updateCommon = function (data, idx, symbolSize, seriesScope, opts) { + var symbolPath = this.childAt(0); + var seriesModel = data.hostModel; + var emphasisItemStyle; + var blurItemStyle; + var selectItemStyle; + var focus; + var blurScope; + var labelStatesModels; + var hoverScale; + var cursorStyle; + + if (seriesScope) { + emphasisItemStyle = seriesScope.emphasisItemStyle; + blurItemStyle = seriesScope.blurItemStyle; + selectItemStyle = seriesScope.selectItemStyle; + focus = seriesScope.focus; + blurScope = seriesScope.blurScope; + labelStatesModels = seriesScope.labelStatesModels; + hoverScale = seriesScope.hoverScale; + cursorStyle = seriesScope.cursorStyle; + } + + if (!seriesScope || data.hasItemOption) { + var itemModel = seriesScope && seriesScope.itemModel ? seriesScope.itemModel : data.getItemModel(idx); + var emphasisModel = itemModel.getModel('emphasis'); + emphasisItemStyle = emphasisModel.getModel('itemStyle').getItemStyle(); + selectItemStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle(); + blurItemStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle(); + focus = emphasisModel.get('focus'); + blurScope = emphasisModel.get('blurScope'); + labelStatesModels = getLabelStatesModels(itemModel); + hoverScale = emphasisModel.getShallow('scale'); + cursorStyle = itemModel.getShallow('cursor'); + } + + var symbolRotate = data.getItemVisual(idx, 'symbolRotate'); + symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0); + var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, 'symbolOffset'), symbolSize); + + if (symbolOffset) { + symbolPath.x = symbolOffset[0]; + symbolPath.y = symbolOffset[1]; + } + + cursorStyle && symbolPath.attr('cursor', cursorStyle); + var symbolStyle = data.getItemVisual(idx, 'style'); + var visualColor = symbolStyle.fill; + + if (symbolPath instanceof ZRImage) { + var pathStyle = symbolPath.style; + symbolPath.useStyle(extend({ + // TODO other properties like x, y ? + image: pathStyle.image, + x: pathStyle.x, + y: pathStyle.y, + width: pathStyle.width, + height: pathStyle.height + }, symbolStyle)); + } else { + if (symbolPath.__isEmptyBrush) { + // fill and stroke will be swapped if it's empty. + // So we cloned a new style to avoid it affecting the original style in visual storage. + // TODO Better implementation. No empty logic! + symbolPath.useStyle(extend({}, symbolStyle)); + } else { + symbolPath.useStyle(symbolStyle); + } // Disable decal because symbol scale will been applied on the decal. + + + symbolPath.style.decal = null; + symbolPath.setColor(visualColor, opts && opts.symbolInnerColor); + symbolPath.style.strokeNoScale = true; + } + + var liftZ = data.getItemVisual(idx, 'liftZ'); + var z2Origin = this._z2; + + if (liftZ != null) { + if (z2Origin == null) { + this._z2 = symbolPath.z2; + symbolPath.z2 += liftZ; + } + } else if (z2Origin != null) { + symbolPath.z2 = z2Origin; + this._z2 = null; + } + + var useNameLabel = opts && opts.useNameLabel; + setLabelStyle(symbolPath, labelStatesModels, { + labelFetcher: seriesModel, + labelDataIndex: idx, + defaultText: getLabelDefaultText, + inheritColor: visualColor, + defaultOpacity: symbolStyle.opacity + }); // Do not execute util needed. + + function getLabelDefaultText(idx) { + return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx); + } + + this._sizeX = symbolSize[0] / 2; + this._sizeY = symbolSize[1] / 2; + var emphasisState = symbolPath.ensureState('emphasis'); + emphasisState.style = emphasisItemStyle; + symbolPath.ensureState('select').style = selectItemStyle; + symbolPath.ensureState('blur').style = blurItemStyle; + + if (hoverScale) { + var scaleRatio = Math.max(1.1, 3 / this._sizeY); + emphasisState.scaleX = this._sizeX * scaleRatio; + emphasisState.scaleY = this._sizeY * scaleRatio; + } + + this.setSymbolScale(1); + enableHoverEmphasis(this, focus, blurScope); + }; + + Symbol.prototype.setSymbolScale = function (scale) { + this.scaleX = this.scaleY = scale; + }; + + Symbol.prototype.fadeOut = function (cb, opt) { + var symbolPath = this.childAt(0); + var seriesModel = this._seriesModel; + var dataIndex = getECData(this).dataIndex; + var animationOpt = opt && opt.animation; // Avoid mistaken hover when fading out + + this.silent = symbolPath.silent = true; // Not show text when animating + + if (opt && opt.fadeLabel) { + var textContent = symbolPath.getTextContent(); + + if (textContent) { + removeElement(textContent, { + style: { + opacity: 0 + } + }, seriesModel, { + dataIndex: dataIndex, + removeOpt: animationOpt, + cb: function () { + symbolPath.removeTextContent(); + } + }); + } + } else { + symbolPath.removeTextContent(); + } + + removeElement(symbolPath, { + style: { + opacity: 0 + }, + scaleX: 0, + scaleY: 0 + }, seriesModel, { + dataIndex: dataIndex, + cb: cb, + removeOpt: animationOpt + }); + }; + + Symbol.getSymbolSize = function (data, idx) { + return normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize')); + }; + + return Symbol; + }(Group); + + function driftSymbol(dx, dy) { + this.parent.drift(dx, dy); + } + + function symbolNeedsDraw(data, point, idx, opt) { + return point && !isNaN(point[0]) && !isNaN(point[1]) && !(opt.isIgnore && opt.isIgnore(idx)) // We do not set clipShape on group, because it will cut part of + // the symbol element shape. We use the same clip shape here as + // the line clip. + && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1])) && data.getItemVisual(idx, 'symbol') !== 'none'; + } + + function normalizeUpdateOpt(opt) { + if (opt != null && !isObject(opt)) { + opt = { + isIgnore: opt + }; + } + + return opt || {}; + } + + function makeSeriesScope(data) { + var seriesModel = data.hostModel; + var emphasisModel = seriesModel.getModel('emphasis'); + return { + emphasisItemStyle: emphasisModel.getModel('itemStyle').getItemStyle(), + blurItemStyle: seriesModel.getModel(['blur', 'itemStyle']).getItemStyle(), + selectItemStyle: seriesModel.getModel(['select', 'itemStyle']).getItemStyle(), + focus: emphasisModel.get('focus'), + blurScope: emphasisModel.get('blurScope'), + hoverScale: emphasisModel.get('scale'), + labelStatesModels: getLabelStatesModels(seriesModel), + cursorStyle: seriesModel.get('cursor') + }; + } + + var SymbolDraw = + /** @class */ + function () { + function SymbolDraw(SymbolCtor) { + this.group = new Group(); + this._SymbolCtor = SymbolCtor || Symbol; + } + /** + * Update symbols draw by new data + */ + + + SymbolDraw.prototype.updateData = function (data, opt) { + opt = normalizeUpdateOpt(opt); + var group = this.group; + var seriesModel = data.hostModel; + var oldData = this._data; + var SymbolCtor = this._SymbolCtor; + var disableAnimation = opt.disableAnimation; + var seriesScope = makeSeriesScope(data); + var symbolUpdateOpt = { + disableAnimation: disableAnimation + }; + + var getSymbolPoint = opt.getSymbolPoint || function (idx) { + return data.getItemLayout(idx); + }; // There is no oldLineData only when first rendering or switching from + // stream mode to normal mode, where previous elements should be removed. + + + if (!oldData) { + group.removeAll(); + } + + data.diff(oldData).add(function (newIdx) { + var point = getSymbolPoint(newIdx); + + if (symbolNeedsDraw(data, point, newIdx, opt)) { + var symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt); + symbolEl.setPosition(point); + data.setItemGraphicEl(newIdx, symbolEl); + group.add(symbolEl); + } + }).update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + var point = getSymbolPoint(newIdx); + + if (!symbolNeedsDraw(data, point, newIdx, opt)) { + group.remove(symbolEl); + return; + } + + var newSymbolType = data.getItemVisual(newIdx, 'symbol') || 'circle'; + var oldSymbolType = symbolEl && symbolEl.getSymbolType && symbolEl.getSymbolType(); + + if (!symbolEl // Create a new if symbol type changed. + || oldSymbolType && oldSymbolType !== newSymbolType) { + group.remove(symbolEl); + symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt); + symbolEl.setPosition(point); + } else { + symbolEl.updateData(data, newIdx, seriesScope, symbolUpdateOpt); + var target = { + x: point[0], + y: point[1] + }; + disableAnimation ? symbolEl.attr(target) : updateProps(symbolEl, target, seriesModel); + } // Add back + + + group.add(symbolEl); + data.setItemGraphicEl(newIdx, symbolEl); + }).remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && el.fadeOut(function () { + group.remove(el); + }); + }).execute(); + this._getSymbolPoint = getSymbolPoint; + this._data = data; + }; + + SymbolDraw.prototype.isPersistent = function () { + return true; + }; + + SymbolDraw.prototype.updateLayout = function () { + var _this = this; + + var data = this._data; + + if (data) { + // Not use animation + data.eachItemGraphicEl(function (el, idx) { + var point = _this._getSymbolPoint(idx); + + el.setPosition(point); + el.markRedraw(); + }); + } + }; + + SymbolDraw.prototype.incrementalPrepareUpdate = function (data) { + this._seriesScope = makeSeriesScope(data); + this._data = null; + this.group.removeAll(); + }; + /** + * Update symbols draw by new data + */ + + SymbolDraw.prototype.incrementalUpdate = function (taskParams, data, opt) { + opt = normalizeUpdateOpt(opt); + + function updateIncrementalAndHover(el) { + if (!el.isGroup) { + el.incremental = true; + el.ensureState('emphasis').hoverLayer = true; + } + } + + for (var idx = taskParams.start; idx < taskParams.end; idx++) { + var point = data.getItemLayout(idx); + + if (symbolNeedsDraw(data, point, idx, opt)) { + var el = new this._SymbolCtor(data, idx, this._seriesScope); + el.traverse(updateIncrementalAndHover); + el.setPosition(point); + this.group.add(el); + data.setItemGraphicEl(idx, el); + } + } + }; + + SymbolDraw.prototype.remove = function (enableAnimation) { + var group = this.group; + var data = this._data; // Incremental model do not have this._data. + + if (data && enableAnimation) { + data.eachItemGraphicEl(function (el) { + el.fadeOut(function () { + group.remove(el); + }); + }); + } else { + group.removeAll(); + } + }; + return SymbolDraw; + }(); + + function prepareDataCoordInfo(coordSys, data, valueOrigin) { + var baseAxis = coordSys.getBaseAxis(); + var valueAxis = coordSys.getOtherAxis(baseAxis); + var valueStart = getValueStart(valueAxis, valueOrigin); + var baseAxisDim = baseAxis.dim; + var valueAxisDim = valueAxis.dim; + var valueDim = data.mapDimension(valueAxisDim); + var baseDim = data.mapDimension(baseAxisDim); + var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0; + var dims = map(coordSys.dimensions, function (coordDim) { + return data.mapDimension(coordDim); + }); + var stacked = false; + var stackResultDim = data.getCalculationInfo('stackResultDimension'); + + if (isDimensionStacked(data, dims[0] + /*, dims[1]*/ + )) { + // jshint ignore:line + stacked = true; + dims[0] = stackResultDim; + } + + if (isDimensionStacked(data, dims[1] + /*, dims[0]*/ + )) { + // jshint ignore:line + stacked = true; + dims[1] = stackResultDim; + } + + return { + dataDimsForPoint: dims, + valueStart: valueStart, + valueAxisDim: valueAxisDim, + baseAxisDim: baseAxisDim, + stacked: !!stacked, + valueDim: valueDim, + baseDim: baseDim, + baseDataOffset: baseDataOffset, + stackedOverDimension: data.getCalculationInfo('stackedOverDimension') + }; + } + + function getValueStart(valueAxis, valueOrigin) { + var valueStart = 0; + var extent = valueAxis.scale.getExtent(); + + if (valueOrigin === 'start') { + valueStart = extent[0]; + } else if (valueOrigin === 'end') { + valueStart = extent[1]; + } // auto + else { + // Both positive + if (extent[0] > 0) { + valueStart = extent[0]; + } // Both negative + else if (extent[1] < 0) { + valueStart = extent[1]; + } // If is one positive, and one negative, onZero shall be true + + } + + return valueStart; + } + + function getStackedOnPoint(dataCoordInfo, coordSys, data, idx) { + var value = NaN; + + if (dataCoordInfo.stacked) { + value = data.get(data.getCalculationInfo('stackedOverDimension'), idx); + } + + if (isNaN(value)) { + value = dataCoordInfo.valueStart; + } + + var baseDataOffset = dataCoordInfo.baseDataOffset; + var stackedData = []; + stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx); + stackedData[1 - baseDataOffset] = value; + return coordSys.dataToPoint(stackedData); + } + + /* global Float32Array */ + + var supportFloat32Array = typeof Float32Array !== 'undefined'; + var Float32ArrayCtor = !supportFloat32Array ? Array : Float32Array; + function createFloat32Array(arg) { + if (isArray(arg)) { + // Return self directly if don't support TypedArray. + return supportFloat32Array ? new Float32Array(arg) : arg; + } // Else is number + + + return new Float32ArrayCtor(arg); + } + + function diffData(oldData, newData) { + var diffResult = []; + newData.diff(oldData).add(function (idx) { + diffResult.push({ + cmd: '+', + idx: idx + }); + }).update(function (newIdx, oldIdx) { + diffResult.push({ + cmd: '=', + idx: oldIdx, + idx1: newIdx + }); + }).remove(function (idx) { + diffResult.push({ + cmd: '-', + idx: idx + }); + }).execute(); + return diffResult; + } + + function lineAnimationDiff(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys, oldValueOrigin, newValueOrigin) { + var diff = diffData(oldData, newData); // let newIdList = newData.mapArray(newData.getId); + // let oldIdList = oldData.mapArray(oldData.getId); + // convertToIntId(newIdList, oldIdList); + // // FIXME One data ? + // diff = arrayDiff(oldIdList, newIdList); + + var currPoints = []; + var nextPoints = []; // Points for stacking base line + + var currStackedPoints = []; + var nextStackedPoints = []; + var status = []; + var sortedIndices = []; + var rawIndices = []; + var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin); // const oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin); + + var oldPoints = oldData.getLayout('points') || []; + var newPoints = newData.getLayout('points') || []; + + for (var i = 0; i < diff.length; i++) { + var diffItem = diff[i]; + var pointAdded = true; + var oldIdx2 = void 0; + var newIdx2 = void 0; // FIXME, animation is not so perfect when dataZoom window moves fast + // Which is in case remvoing or add more than one data in the tail or head + + switch (diffItem.cmd) { + case '=': + oldIdx2 = diffItem.idx * 2; + newIdx2 = diffItem.idx1 * 2; + var currentX = oldPoints[oldIdx2]; + var currentY = oldPoints[oldIdx2 + 1]; + var nextX = newPoints[newIdx2]; + var nextY = newPoints[newIdx2 + 1]; // If previous data is NaN, use next point directly + + if (isNaN(currentX) || isNaN(currentY)) { + currentX = nextX; + currentY = nextY; + } + + currPoints.push(currentX, currentY); + nextPoints.push(nextX, nextY); + currStackedPoints.push(oldStackedOnPoints[oldIdx2], oldStackedOnPoints[oldIdx2 + 1]); + nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]); + rawIndices.push(newData.getRawIndex(diffItem.idx1)); + break; + + case '+': + var newIdx = diffItem.idx; + var newDataDimsForPoint = newDataOldCoordInfo.dataDimsForPoint; + var oldPt = oldCoordSys.dataToPoint([newData.get(newDataDimsForPoint[0], newIdx), newData.get(newDataDimsForPoint[1], newIdx)]); + newIdx2 = newIdx * 2; + currPoints.push(oldPt[0], oldPt[1]); + nextPoints.push(newPoints[newIdx2], newPoints[newIdx2 + 1]); + var stackedOnPoint = getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, newIdx); + currStackedPoints.push(stackedOnPoint[0], stackedOnPoint[1]); + nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]); + rawIndices.push(newData.getRawIndex(newIdx)); + break; + + case '-': + pointAdded = false; + } // Original indices + + + if (pointAdded) { + status.push(diffItem); + sortedIndices.push(sortedIndices.length); + } + } // Diff result may be crossed if all items are changed + // Sort by data index + + + sortedIndices.sort(function (a, b) { + return rawIndices[a] - rawIndices[b]; + }); + var len = currPoints.length; + var sortedCurrPoints = createFloat32Array(len); + var sortedNextPoints = createFloat32Array(len); + var sortedCurrStackedPoints = createFloat32Array(len); + var sortedNextStackedPoints = createFloat32Array(len); + var sortedStatus = []; + + for (var i = 0; i < sortedIndices.length; i++) { + var idx = sortedIndices[i]; + var i2 = i * 2; + var idx2 = idx * 2; + sortedCurrPoints[i2] = currPoints[idx2]; + sortedCurrPoints[i2 + 1] = currPoints[idx2 + 1]; + sortedNextPoints[i2] = nextPoints[idx2]; + sortedNextPoints[i2 + 1] = nextPoints[idx2 + 1]; + sortedCurrStackedPoints[i2] = currStackedPoints[idx2]; + sortedCurrStackedPoints[i2 + 1] = currStackedPoints[idx2 + 1]; + sortedNextStackedPoints[i2] = nextStackedPoints[idx2]; + sortedNextStackedPoints[i2 + 1] = nextStackedPoints[idx2 + 1]; + sortedStatus[i] = status[idx]; + } + + return { + current: sortedCurrPoints, + next: sortedNextPoints, + stackedOnCurrent: sortedCurrStackedPoints, + stackedOnNext: sortedNextStackedPoints, + status: sortedStatus + }; + } + + var mathMin$5 = Math.min; + var mathMax$5 = Math.max; + + function isPointNull(x, y) { + return isNaN(x) || isNaN(y); + } + /** + * Draw smoothed line in non-monotone, in may cause undesired curve in extreme + * situations. This should be used when points are non-monotone neither in x or + * y dimension. + */ + + + function drawSegment(ctx, points, start, segLen, allLen, dir, smooth, smoothMonotone, connectNulls) { + var prevX; + var prevY; + var cpx0; + var cpy0; + var cpx1; + var cpy1; + var idx = start; + var k = 0; + + for (; k < segLen; k++) { + var x = points[idx * 2]; + var y = points[idx * 2 + 1]; + + if (idx >= allLen || idx < 0) { + break; + } + + if (isPointNull(x, y)) { + if (connectNulls) { + idx += dir; + continue; + } + + break; + } + + if (idx === start) { + ctx[dir > 0 ? 'moveTo' : 'lineTo'](x, y); + cpx0 = x; + cpy0 = y; + } else { + var dx = x - prevX; + var dy = y - prevY; // Ignore tiny segment. + + if (dx * dx + dy * dy < 0.5) { + idx += dir; + continue; + } + + if (smooth > 0) { + var nextIdx = idx + dir; + var nextX = points[nextIdx * 2]; + var nextY = points[nextIdx * 2 + 1]; // Ignore duplicate point + + while (nextX === x && nextY === y && k < segLen) { + k++; + nextIdx += dir; + idx += dir; + nextX = points[nextIdx * 2]; + nextY = points[nextIdx * 2 + 1]; + x = points[idx * 2]; + y = points[idx * 2 + 1]; + dx = x - prevX; + dy = y - prevY; + } + + var tmpK = k + 1; + + if (connectNulls) { + // Find next point not null + while (isPointNull(nextX, nextY) && tmpK < segLen) { + tmpK++; + nextIdx += dir; + nextX = points[nextIdx * 2]; + nextY = points[nextIdx * 2 + 1]; + } + } + + var ratioNextSeg = 0.5; + var vx = 0; + var vy = 0; + var nextCpx0 = void 0; + var nextCpy0 = void 0; // Is last point + + if (tmpK >= segLen || isPointNull(nextX, nextY)) { + cpx1 = x; + cpy1 = y; + } else { + vx = nextX - prevX; + vy = nextY - prevY; + var dx0 = x - prevX; + var dx1 = nextX - x; + var dy0 = y - prevY; + var dy1 = nextY - y; + var lenPrevSeg = void 0; + var lenNextSeg = void 0; + + if (smoothMonotone === 'x') { + lenPrevSeg = Math.abs(dx0); + lenNextSeg = Math.abs(dx1); + cpx1 = x - lenPrevSeg * smooth; + cpy1 = y; + nextCpx0 = x + lenPrevSeg * smooth; + nextCpy0 = y; + } else if (smoothMonotone === 'y') { + lenPrevSeg = Math.abs(dy0); + lenNextSeg = Math.abs(dy1); + cpx1 = x; + cpy1 = y - lenPrevSeg * smooth; + nextCpx0 = x; + nextCpy0 = y + lenPrevSeg * smooth; + } else { + lenPrevSeg = Math.sqrt(dx0 * dx0 + dy0 * dy0); + lenNextSeg = Math.sqrt(dx1 * dx1 + dy1 * dy1); // Use ratio of seg length + + ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg); + cpx1 = x - vx * smooth * (1 - ratioNextSeg); + cpy1 = y - vy * smooth * (1 - ratioNextSeg); // cp0 of next segment + + nextCpx0 = x + vx * smooth * ratioNextSeg; + nextCpy0 = y + vy * smooth * ratioNextSeg; // Smooth constraint between point and next point. + // Avoid exceeding extreme after smoothing. + + nextCpx0 = mathMin$5(nextCpx0, mathMax$5(nextX, x)); + nextCpy0 = mathMin$5(nextCpy0, mathMax$5(nextY, y)); + nextCpx0 = mathMax$5(nextCpx0, mathMin$5(nextX, x)); + nextCpy0 = mathMax$5(nextCpy0, mathMin$5(nextY, y)); // Reclaculate cp1 based on the adjusted cp0 of next seg. + + vx = nextCpx0 - x; + vy = nextCpy0 - y; + cpx1 = x - vx * lenPrevSeg / lenNextSeg; + cpy1 = y - vy * lenPrevSeg / lenNextSeg; // Smooth constraint between point and prev point. + // Avoid exceeding extreme after smoothing. + + cpx1 = mathMin$5(cpx1, mathMax$5(prevX, x)); + cpy1 = mathMin$5(cpy1, mathMax$5(prevY, y)); + cpx1 = mathMax$5(cpx1, mathMin$5(prevX, x)); + cpy1 = mathMax$5(cpy1, mathMin$5(prevY, y)); // Adjust next cp0 again. + + vx = x - cpx1; + vy = y - cpy1; + nextCpx0 = x + vx * lenNextSeg / lenPrevSeg; + nextCpy0 = y + vy * lenNextSeg / lenPrevSeg; + } + } + + ctx.bezierCurveTo(cpx0, cpy0, cpx1, cpy1, x, y); + cpx0 = nextCpx0; + cpy0 = nextCpy0; + } else { + ctx.lineTo(x, y); + } + } + + prevX = x; + prevY = y; + idx += dir; + } + + return k; + } + + var ECPolylineShape = + /** @class */ + function () { + function ECPolylineShape() { + this.smooth = 0; + this.smoothConstraint = true; + } + + return ECPolylineShape; + }(); + + var ECPolyline = + /** @class */ + function (_super) { + __extends(ECPolyline, _super); + + function ECPolyline(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'ec-polyline'; + return _this; + } + + ECPolyline.prototype.getDefaultStyle = function () { + return { + stroke: '#000', + fill: null + }; + }; + + ECPolyline.prototype.getDefaultShape = function () { + return new ECPolylineShape(); + }; + + ECPolyline.prototype.buildPath = function (ctx, shape) { + var points = shape.points; + var i = 0; + var len = points.length / 2; // const result = getBoundingBox(points, shape.smoothConstraint); + + if (shape.connectNulls) { + // Must remove first and last null values avoid draw error in polygon + for (; len > 0; len--) { + if (!isPointNull(points[len * 2 - 2], points[len * 2 - 1])) { + break; + } + } + + for (; i < len; i++) { + if (!isPointNull(points[i * 2], points[i * 2 + 1])) { + break; + } + } + } + + while (i < len) { + i += drawSegment(ctx, points, i, len, len, 1, shape.smooth, shape.smoothMonotone, shape.connectNulls) + 1; + } + }; + + ECPolyline.prototype.getPointOn = function (xOrY, dim) { + if (!this.path) { + this.createPathProxy(); + this.buildPath(this.path, this.shape); + } + + var path = this.path; + var data = path.data; + var CMD = PathProxy.CMD; + var x0; + var y0; + var isDimX = dim === 'x'; + var roots = []; + + for (var i = 0; i < data.length;) { + var cmd = data[i++]; + var x = void 0; + var y = void 0; + var x2 = void 0; + var y2 = void 0; + var x3 = void 0; + var y3 = void 0; + var t = void 0; + + switch (cmd) { + case CMD.M: + x0 = data[i++]; + y0 = data[i++]; + break; + + case CMD.L: + x = data[i++]; + y = data[i++]; + t = isDimX ? (xOrY - x0) / (x - x0) : (xOrY - y0) / (y - y0); + + if (t <= 1 && t >= 0) { + var val = isDimX ? (y - y0) * t + y0 : (x - x0) * t + x0; + return isDimX ? [xOrY, val] : [val, xOrY]; + } + + x0 = x; + y0 = y; + break; + + case CMD.C: + x = data[i++]; + y = data[i++]; + x2 = data[i++]; + y2 = data[i++]; + x3 = data[i++]; + y3 = data[i++]; + var nRoot = isDimX ? cubicRootAt(x0, x, x2, x3, xOrY, roots) : cubicRootAt(y0, y, y2, y3, xOrY, roots); + + if (nRoot > 0) { + for (var i_1 = 0; i_1 < nRoot; i_1++) { + var t_1 = roots[i_1]; + + if (t_1 <= 1 && t_1 >= 0) { + var val = isDimX ? cubicAt(y0, y, y2, y3, t_1) : cubicAt(x0, x, x2, x3, t_1); + return isDimX ? [xOrY, val] : [val, xOrY]; + } + } + } + + x0 = x3; + y0 = y3; + break; + } + } + }; + + return ECPolyline; + }(Path); + + var ECPolygonShape = + /** @class */ + function (_super) { + __extends(ECPolygonShape, _super); + + function ECPolygonShape() { + return _super !== null && _super.apply(this, arguments) || this; + } + + return ECPolygonShape; + }(ECPolylineShape); + + var ECPolygon = + /** @class */ + function (_super) { + __extends(ECPolygon, _super); + + function ECPolygon(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'ec-polygon'; + return _this; + } + + ECPolygon.prototype.getDefaultShape = function () { + return new ECPolygonShape(); + }; + + ECPolygon.prototype.buildPath = function (ctx, shape) { + var points = shape.points; + var stackedOnPoints = shape.stackedOnPoints; + var i = 0; + var len = points.length / 2; + var smoothMonotone = shape.smoothMonotone; + + if (shape.connectNulls) { + // Must remove first and last null values avoid draw error in polygon + for (; len > 0; len--) { + if (!isPointNull(points[len * 2 - 2], points[len * 2 - 1])) { + break; + } + } + + for (; i < len; i++) { + if (!isPointNull(points[i * 2], points[i * 2 + 1])) { + break; + } + } + } + + while (i < len) { + var k = drawSegment(ctx, points, i, len, len, 1, shape.smooth, smoothMonotone, shape.connectNulls); + drawSegment(ctx, stackedOnPoints, i + k - 1, k, len, -1, shape.stackedOnSmooth, smoothMonotone, shape.connectNulls); + i += k + 1; + ctx.closePath(); + } + }; + + return ECPolygon; + }(Path); + + function createGridClipPath(cartesian, hasAnimation, seriesModel, done, during) { + var rect = cartesian.getArea(); + var x = rect.x; + var y = rect.y; + var width = rect.width; + var height = rect.height; + var lineWidth = seriesModel.get(['lineStyle', 'width']) || 2; // Expand the clip path a bit to avoid the border is clipped and looks thinner + + x -= lineWidth / 2; + y -= lineWidth / 2; + width += lineWidth; + height += lineWidth; // fix: https://github.com/apache/incubator-echarts/issues/11369 + + x = Math.floor(x); + width = Math.round(width); + var clipPath = new Rect({ + shape: { + x: x, + y: y, + width: width, + height: height + } + }); + + if (hasAnimation) { + var baseAxis = cartesian.getBaseAxis(); + var isHorizontal = baseAxis.isHorizontal(); + var isAxisInversed = baseAxis.inverse; + + if (isHorizontal) { + if (isAxisInversed) { + clipPath.shape.x += width; + } + + clipPath.shape.width = 0; + } else { + if (!isAxisInversed) { + clipPath.shape.y += height; + } + + clipPath.shape.height = 0; + } + + var duringCb = typeof during === 'function' ? function (percent) { + during(percent, clipPath); + } : null; + initProps(clipPath, { + shape: { + width: width, + height: height, + x: x, + y: y + } + }, seriesModel, null, done, duringCb); + } + + return clipPath; + } + + function createPolarClipPath(polar, hasAnimation, seriesModel) { + var sectorArea = polar.getArea(); // Avoid float number rounding error for symbol on the edge of axis extent. + + var r0 = round(sectorArea.r0, 1); + var r = round(sectorArea.r, 1); + var clipPath = new Sector({ + shape: { + cx: round(polar.cx, 1), + cy: round(polar.cy, 1), + r0: r0, + r: r, + startAngle: sectorArea.startAngle, + endAngle: sectorArea.endAngle, + clockwise: sectorArea.clockwise + } + }); + + if (hasAnimation) { + var isRadial = polar.getBaseAxis().dim === 'angle'; + + if (isRadial) { + clipPath.shape.endAngle = sectorArea.startAngle; + } else { + clipPath.shape.r = r0; + } + + initProps(clipPath, { + shape: { + endAngle: sectorArea.endAngle, + r: r + } + }, seriesModel); + } + + return clipPath; + } + + function createClipPath(coordSys, hasAnimation, seriesModel, done, during) { + if (!coordSys) { + return null; + } else if (coordSys.type === 'polar') { + return createPolarClipPath(coordSys, hasAnimation, seriesModel); + } else if (coordSys.type === 'cartesian2d') { + return createGridClipPath(coordSys, hasAnimation, seriesModel, done, during); + } + + return null; + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function isCoordinateSystemType(coordSys, type) { + return coordSys.type === type; + } + + function isPointsSame(points1, points2) { + if (points1.length !== points2.length) { + return; + } + + for (var i = 0; i < points1.length; i++) { + if (points1[i] !== points2[i]) { + return; + } + } + + return true; + } + + function bboxFromPoints(points) { + var minX = Infinity; + var minY = Infinity; + var maxX = -Infinity; + var maxY = -Infinity; + + for (var i = 0; i < points.length;) { + var x = points[i++]; + var y = points[i++]; + + if (!isNaN(x)) { + minX = Math.min(x, minX); + maxX = Math.max(x, maxX); + } + + if (!isNaN(y)) { + minY = Math.min(y, minY); + maxY = Math.max(y, maxY); + } + } + + return [[minX, minY], [maxX, maxY]]; + } + + function getBoundingDiff(points1, points2) { + var _a = bboxFromPoints(points1), + min1 = _a[0], + max1 = _a[1]; + + var _b = bboxFromPoints(points2), + min2 = _b[0], + max2 = _b[1]; // Get a max value from each corner of two boundings. + + + return Math.max(Math.abs(min1[0] - min2[0]), Math.abs(min1[1] - min2[1]), Math.abs(max1[0] - max2[0]), Math.abs(max1[1] - max2[1])); + } + + function getSmooth(smooth) { + return typeof smooth === 'number' ? smooth : smooth ? 0.5 : 0; + } + + function getStackedOnPoints(coordSys, data, dataCoordInfo) { + if (!dataCoordInfo.valueDim) { + return []; + } + + var len = data.count(); + var points = createFloat32Array(len * 2); + + for (var idx = 0; idx < len; idx++) { + var pt = getStackedOnPoint(dataCoordInfo, coordSys, data, idx); + points[idx * 2] = pt[0]; + points[idx * 2 + 1] = pt[1]; + } + + return points; + } + + function turnPointsIntoStep(points, coordSys, stepTurnAt) { + var baseAxis = coordSys.getBaseAxis(); + var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1; + var stepPoints = []; + var i = 0; + var stepPt = []; + var pt = []; + var nextPt = []; + + for (; i < points.length - 2; i += 2) { + nextPt[0] = points[i + 2]; + nextPt[1] = points[i + 3]; + pt[0] = points[i]; + pt[1] = points[i + 1]; + stepPoints.push(pt[0], pt[1]); + + switch (stepTurnAt) { + case 'end': + stepPt[baseIndex] = nextPt[baseIndex]; + stepPt[1 - baseIndex] = pt[1 - baseIndex]; + stepPoints.push(stepPt[0], stepPt[1]); + break; + + case 'middle': + var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2; + var stepPt2 = []; + stepPt[baseIndex] = stepPt2[baseIndex] = middle; + stepPt[1 - baseIndex] = pt[1 - baseIndex]; + stepPt2[1 - baseIndex] = nextPt[1 - baseIndex]; + stepPoints.push(stepPt[0], stepPt[1]); + stepPoints.push(stepPt2[0], stepPt2[1]); + break; + + default: + // default is start + stepPt[baseIndex] = pt[baseIndex]; + stepPt[1 - baseIndex] = nextPt[1 - baseIndex]; + stepPoints.push(stepPt[0], stepPt[1]); + } + } // Last points + + + stepPoints.push(points[i++], points[i++]); + return stepPoints; + } + /** + * Clip color stops to edge. Avoid creating too large gradients. + * Which may lead to blurry when GPU acceleration is enabled. See #15680 + * + * The stops has been sorted from small to large. + */ + + + function clipColorStops(colorStops, maxSize) { + var newColorStops = []; + var len = colorStops.length; // coord will always < 0 in prevOutOfRangeColorStop. + + var prevOutOfRangeColorStop; + var prevInRangeColorStop; + + function lerpStop(stop0, stop1, clippedCoord) { + var coord0 = stop0.coord; + var p = (clippedCoord - coord0) / (stop1.coord - coord0); + var color = lerp$1(p, [stop0.color, stop1.color]); + return { + coord: clippedCoord, + color: color + }; + } + + for (var i = 0; i < len; i++) { + var stop_1 = colorStops[i]; + var coord = stop_1.coord; + + if (coord < 0) { + prevOutOfRangeColorStop = stop_1; + } else if (coord > maxSize) { + if (prevInRangeColorStop) { + newColorStops.push(lerpStop(prevInRangeColorStop, stop_1, maxSize)); + } else if (prevOutOfRangeColorStop) { + // If there are two stops and coord range is between these two stops + newColorStops.push(lerpStop(prevOutOfRangeColorStop, stop_1, 0), lerpStop(prevOutOfRangeColorStop, stop_1, maxSize)); + } // All following stop will be out of range. So just ignore them. + + + break; + } else { + if (prevOutOfRangeColorStop) { + newColorStops.push(lerpStop(prevOutOfRangeColorStop, stop_1, 0)); // Reset + + prevOutOfRangeColorStop = null; + } + + newColorStops.push(stop_1); + prevInRangeColorStop = stop_1; + } + } + + return newColorStops; + } + + function getVisualGradient(data, coordSys, api) { + var visualMetaList = data.getVisual('visualMeta'); + + if (!visualMetaList || !visualMetaList.length || !data.count()) { + // When data.count() is 0, gradient range can not be calculated. + return; + } + + if (coordSys.type !== 'cartesian2d') { + if ("development" !== 'production') { + console.warn('Visual map on line style is only supported on cartesian2d.'); + } + + return; + } + + var coordDim; + var visualMeta; + + for (var i = visualMetaList.length - 1; i >= 0; i--) { + var dimInfo = data.getDimensionInfo(visualMetaList[i].dimension); + coordDim = dimInfo && dimInfo.coordDim; // Can only be x or y + + if (coordDim === 'x' || coordDim === 'y') { + visualMeta = visualMetaList[i]; + break; + } + } + + if (!visualMeta) { + if ("development" !== 'production') { + console.warn('Visual map on line style only support x or y dimension.'); + } + + return; + } // If the area to be rendered is bigger than area defined by LinearGradient, + // the canvas spec prescribes that the color of the first stop and the last + // stop should be used. But if two stops are added at offset 0, in effect + // browsers use the color of the second stop to render area outside + // LinearGradient. So we can only infinitesimally extend area defined in + // LinearGradient to render `outerColors`. + + + var axis = coordSys.getAxis(coordDim); // dataToCoord mapping may not be linear, but must be monotonic. + + var colorStops = map(visualMeta.stops, function (stop) { + // offset will be calculated later. + return { + coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)), + color: stop.color + }; + }); + var stopLen = colorStops.length; + var outerColors = visualMeta.outerColors.slice(); + + if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) { + colorStops.reverse(); + outerColors.reverse(); + } + + var colorStopsInRange = clipColorStops(colorStops, coordDim === 'x' ? api.getWidth() : api.getHeight()); + var inRangeStopLen = colorStopsInRange.length; + + if (!inRangeStopLen && stopLen) { + // All stops are out of range. All will be the same color. + return colorStops[0].coord < 0 ? outerColors[1] ? outerColors[1] : colorStops[stopLen - 1].color : outerColors[0] ? outerColors[0] : colorStops[0].color; + } + + var tinyExtent = 10; // Arbitrary value: 10px + + var minCoord = colorStopsInRange[0].coord - tinyExtent; + var maxCoord = colorStopsInRange[inRangeStopLen - 1].coord + tinyExtent; + var coordSpan = maxCoord - minCoord; + + if (coordSpan < 1e-3) { + return 'transparent'; + } + + each(colorStopsInRange, function (stop) { + stop.offset = (stop.coord - minCoord) / coordSpan; + }); + colorStopsInRange.push({ + // NOTE: inRangeStopLen may still be 0 if stoplen is zero. + offset: inRangeStopLen ? colorStopsInRange[inRangeStopLen - 1].offset : 0.5, + color: outerColors[1] || 'transparent' + }); + colorStopsInRange.unshift({ + offset: inRangeStopLen ? colorStopsInRange[0].offset : 0.5, + color: outerColors[0] || 'transparent' + }); + var gradient = new LinearGradient(0, 0, 0, 0, colorStopsInRange, true); + gradient[coordDim] = minCoord; + gradient[coordDim + '2'] = maxCoord; + return gradient; + } + + function getIsIgnoreFunc(seriesModel, data, coordSys) { + var showAllSymbol = seriesModel.get('showAllSymbol'); + var isAuto = showAllSymbol === 'auto'; + + if (showAllSymbol && !isAuto) { + return; + } + + var categoryAxis = coordSys.getAxesByScale('ordinal')[0]; + + if (!categoryAxis) { + return; + } // Note that category label interval strategy might bring some weird effect + // in some scenario: users may wonder why some of the symbols are not + // displayed. So we show all symbols as possible as we can. + + + if (isAuto // Simplify the logic, do not determine label overlap here. + && canShowAllSymbolForCategory(categoryAxis, data)) { + return; + } // Otherwise follow the label interval strategy on category axis. + + + var categoryDataDim = data.mapDimension(categoryAxis.dim); + var labelMap = {}; + each(categoryAxis.getViewLabels(), function (labelItem) { + var ordinalNumber = categoryAxis.scale.getRawOrdinalNumber(labelItem.tickValue); + labelMap[ordinalNumber] = 1; + }); + return function (dataIndex) { + return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex)); + }; + } + + function canShowAllSymbolForCategory(categoryAxis, data) { + // In mose cases, line is monotonous on category axis, and the label size + // is close with each other. So we check the symbol size and some of the + // label size alone with the category axis to estimate whether all symbol + // can be shown without overlap. + var axisExtent = categoryAxis.getExtent(); + var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count(); + isNaN(availSize) && (availSize = 0); // 0/0 is NaN. + // Sampling some points, max 5. + + var dataLen = data.count(); + var step = Math.max(1, Math.round(dataLen / 5)); + + for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) { + if (Symbol.getSymbolSize(data, dataIndex // Only for cartesian, where `isHorizontal` exists. + )[categoryAxis.isHorizontal() ? 1 : 0] // Empirical number + * 1.5 > availSize) { + return false; + } + } + + return true; + } + + function isPointNull$1(x, y) { + return isNaN(x) || isNaN(y); + } + + function getLastIndexNotNull(points) { + var len = points.length / 2; + + for (; len > 0; len--) { + if (!isPointNull$1(points[len * 2 - 2], points[len * 2 - 1])) { + break; + } + } + + return len - 1; + } + + function getPointAtIndex(points, idx) { + return [points[idx * 2], points[idx * 2 + 1]]; + } + + function getIndexRange(points, xOrY, dim) { + var len = points.length / 2; + var dimIdx = dim === 'x' ? 0 : 1; + var a; + var b; + var prevIndex = 0; + var nextIndex = -1; + + for (var i = 0; i < len; i++) { + b = points[i * 2 + dimIdx]; + + if (isNaN(b) || isNaN(points[i * 2 + 1 - dimIdx])) { + continue; + } + + if (i === 0) { + a = b; + continue; + } + + if (a <= xOrY && b >= xOrY || a >= xOrY && b <= xOrY) { + nextIndex = i; + break; + } + + prevIndex = i; + a = b; + } + + return { + range: [prevIndex, nextIndex], + t: (xOrY - a) / (b - a) + }; + } + + function anyStateShowEndLabel(seriesModel) { + if (seriesModel.get(['endLabel', 'show'])) { + return true; + } + + for (var i = 0; i < SPECIAL_STATES.length; i++) { + if (seriesModel.get([SPECIAL_STATES[i], 'endLabel', 'show'])) { + return true; + } + } + + return false; + } + + function createLineClipPath(lineView, coordSys, hasAnimation, seriesModel) { + if (isCoordinateSystemType(coordSys, 'cartesian2d')) { + var endLabelModel_1 = seriesModel.getModel('endLabel'); + var valueAnimation_1 = endLabelModel_1.get('valueAnimation'); + var data_1 = seriesModel.getData(); + var labelAnimationRecord_1 = { + lastFrameIndex: 0 + }; + var during = anyStateShowEndLabel(seriesModel) ? function (percent, clipRect) { + lineView._endLabelOnDuring(percent, clipRect, data_1, labelAnimationRecord_1, valueAnimation_1, endLabelModel_1, coordSys); + } : null; + var isHorizontal = coordSys.getBaseAxis().isHorizontal(); + var clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel, function () { + var endLabel = lineView._endLabel; + + if (endLabel && hasAnimation) { + if (labelAnimationRecord_1.originalX != null) { + endLabel.attr({ + x: labelAnimationRecord_1.originalX, + y: labelAnimationRecord_1.originalY + }); + } + } + }, during); // Expand clip shape to avoid clipping when line value exceeds axis + + if (!seriesModel.get('clip', true)) { + var rectShape = clipPath.shape; + var expandSize = Math.max(rectShape.width, rectShape.height); + + if (isHorizontal) { + rectShape.y -= expandSize; + rectShape.height += expandSize * 2; + } else { + rectShape.x -= expandSize; + rectShape.width += expandSize * 2; + } + } // Set to the final frame. To make sure label layout is right. + + + if (during) { + during(1, clipPath); + } + + return clipPath; + } else { + if ("development" !== 'production') { + if (seriesModel.get(['endLabel', 'show'])) { + console.warn('endLabel is not supported for lines in polar systems.'); + } + } + + return createPolarClipPath(coordSys, hasAnimation, seriesModel); + } + } + + function getEndLabelStateSpecified(endLabelModel, coordSys) { + var baseAxis = coordSys.getBaseAxis(); + var isHorizontal = baseAxis.isHorizontal(); + var isBaseInversed = baseAxis.inverse; + var align = isHorizontal ? isBaseInversed ? 'right' : 'left' : 'center'; + var verticalAlign = isHorizontal ? 'middle' : isBaseInversed ? 'top' : 'bottom'; + return { + normal: { + align: endLabelModel.get('align') || align, + verticalAlign: endLabelModel.get('verticalAlign') || verticalAlign + } + }; + } + + var LineView = + /** @class */ + function (_super) { + __extends(LineView, _super); + + function LineView() { + return _super !== null && _super.apply(this, arguments) || this; + } + + LineView.prototype.init = function () { + var lineGroup = new Group(); + var symbolDraw = new SymbolDraw(); + this.group.add(symbolDraw.group); + this._symbolDraw = symbolDraw; + this._lineGroup = lineGroup; + }; + + LineView.prototype.render = function (seriesModel, ecModel, api) { + var _this = this; + + var coordSys = seriesModel.coordinateSystem; + var group = this.group; + var data = seriesModel.getData(); + var lineStyleModel = seriesModel.getModel('lineStyle'); + var areaStyleModel = seriesModel.getModel('areaStyle'); + var points = data.getLayout('points') || []; + var isCoordSysPolar = coordSys.type === 'polar'; + var prevCoordSys = this._coordSys; + var symbolDraw = this._symbolDraw; + var polyline = this._polyline; + var polygon = this._polygon; + var lineGroup = this._lineGroup; + var hasAnimation = seriesModel.get('animation'); + var isAreaChart = !areaStyleModel.isEmpty(); + var valueOrigin = areaStyleModel.get('origin'); + var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin); + var stackedOnPoints = isAreaChart && getStackedOnPoints(coordSys, data, dataCoordInfo); + var showSymbol = seriesModel.get('showSymbol'); + var isIgnoreFunc = showSymbol && !isCoordSysPolar && getIsIgnoreFunc(seriesModel, data, coordSys); // Remove temporary symbols + + var oldData = this._data; + oldData && oldData.eachItemGraphicEl(function (el, idx) { + if (el.__temp) { + group.remove(el); + oldData.setItemGraphicEl(idx, null); + } + }); // Remove previous created symbols if showSymbol changed to false + + if (!showSymbol) { + symbolDraw.remove(); + } + + group.add(lineGroup); // FIXME step not support polar + + var step = !isCoordSysPolar ? seriesModel.get('step') : false; + var clipShapeForSymbol; + + if (coordSys && coordSys.getArea && seriesModel.get('clip', true)) { + clipShapeForSymbol = coordSys.getArea(); // Avoid float number rounding error for symbol on the edge of axis extent. + // See #7913 and `test/dataZoom-clip.html`. + + if (clipShapeForSymbol.width != null) { + clipShapeForSymbol.x -= 0.1; + clipShapeForSymbol.y -= 0.1; + clipShapeForSymbol.width += 0.2; + clipShapeForSymbol.height += 0.2; + } else if (clipShapeForSymbol.r0) { + clipShapeForSymbol.r0 -= 0.5; + clipShapeForSymbol.r += 0.5; + } + } + + this._clipShapeForSymbol = clipShapeForSymbol; + var visualColor = getVisualGradient(data, coordSys, api) || data.getVisual('style')[data.getVisual('drawType')]; // Initialization animation or coordinate system changed + + if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) { + showSymbol && symbolDraw.updateData(data, { + isIgnore: isIgnoreFunc, + clipShape: clipShapeForSymbol, + disableAnimation: true, + getSymbolPoint: function (idx) { + return [points[idx * 2], points[idx * 2 + 1]]; + } + }); + hasAnimation && this._initSymbolLabelAnimation(data, coordSys, clipShapeForSymbol); + + if (step) { + // TODO If stacked series is not step + points = turnPointsIntoStep(points, coordSys, step); + + if (stackedOnPoints) { + stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step); + } + } + + polyline = this._newPolyline(points); + + if (isAreaChart) { + polygon = this._newPolygon(points, stackedOnPoints); + } // NOTE: Must update _endLabel before setClipPath. + + + if (!isCoordSysPolar) { + this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor)); + } + + lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel)); + } else { + if (isAreaChart && !polygon) { + // If areaStyle is added + polygon = this._newPolygon(points, stackedOnPoints); + } else if (polygon && !isAreaChart) { + // If areaStyle is removed + lineGroup.remove(polygon); + polygon = this._polygon = null; + } // NOTE: Must update _endLabel before setClipPath. + + + if (!isCoordSysPolar) { + this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor)); + } // Update clipPath + + + var oldClipPath = lineGroup.getClipPath(); + + if (oldClipPath) { + var newClipPath = createLineClipPath(this, coordSys, false, seriesModel); + initProps(oldClipPath, { + shape: newClipPath.shape + }, seriesModel); + } else { + lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel)); + } // Always update, or it is wrong in the case turning on legend + // because points are not changed + + + showSymbol && symbolDraw.updateData(data, { + isIgnore: isIgnoreFunc, + clipShape: clipShapeForSymbol, + disableAnimation: true, + getSymbolPoint: function (idx) { + return [points[idx * 2], points[idx * 2 + 1]]; + } + }); // In the case data zoom triggerred refreshing frequently + // Data may not change if line has a category axis. So it should animate nothing + + if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) || !isPointsSame(this._points, points)) { + if (hasAnimation) { + this._doUpdateAnimation(data, stackedOnPoints, coordSys, api, step, valueOrigin); + } else { + // Not do it in update with animation + if (step) { + // TODO If stacked series is not step + points = turnPointsIntoStep(points, coordSys, step); + + if (stackedOnPoints) { + stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step); + } + } + + polyline.setShape({ + points: points + }); + polygon && polygon.setShape({ + points: points, + stackedOnPoints: stackedOnPoints + }); + } + } + } + + var focus = seriesModel.get(['emphasis', 'focus']); + var blurScope = seriesModel.get(['emphasis', 'blurScope']); + polyline.useStyle(defaults( // Use color in lineStyle first + lineStyleModel.getLineStyle(), { + fill: 'none', + stroke: visualColor, + lineJoin: 'bevel' + })); + setStatesStylesFromModel(polyline, seriesModel, 'lineStyle'); + + if (polyline.style.lineWidth > 0 && seriesModel.get(['emphasis', 'lineStyle', 'width']) === 'bolder') { + var emphasisLineStyle = polyline.getState('emphasis').style; + emphasisLineStyle.lineWidth = +polyline.style.lineWidth + 1; + } // Needs seriesIndex for focus + + + getECData(polyline).seriesIndex = seriesModel.seriesIndex; + enableHoverEmphasis(polyline, focus, blurScope); + var smooth = getSmooth(seriesModel.get('smooth')); + var smoothMonotone = seriesModel.get('smoothMonotone'); + var connectNulls = seriesModel.get('connectNulls'); + polyline.setShape({ + smooth: smooth, + smoothMonotone: smoothMonotone, + connectNulls: connectNulls + }); + + if (polygon) { + var stackedOnSeries = data.getCalculationInfo('stackedOnSeries'); + var stackedOnSmooth = 0; + polygon.useStyle(defaults(areaStyleModel.getAreaStyle(), { + fill: visualColor, + opacity: 0.7, + lineJoin: 'bevel', + decal: data.getVisual('style').decal + })); + + if (stackedOnSeries) { + stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth')); + } + + polygon.setShape({ + smooth: smooth, + stackedOnSmooth: stackedOnSmooth, + smoothMonotone: smoothMonotone, + connectNulls: connectNulls + }); + setStatesStylesFromModel(polygon, seriesModel, 'areaStyle'); // Needs seriesIndex for focus + + getECData(polygon).seriesIndex = seriesModel.seriesIndex; + enableHoverEmphasis(polygon, focus, blurScope); + } + + var changePolyState = function (toState) { + _this._changePolyState(toState); + }; + + data.eachItemGraphicEl(function (el) { + // Switch polyline / polygon state if element changed its state. + el && (el.onHoverStateChange = changePolyState); + }); + this._polyline.onHoverStateChange = changePolyState; + this._data = data; // Save the coordinate system for transition animation when data changed + + this._coordSys = coordSys; + this._stackedOnPoints = stackedOnPoints; + this._points = points; + this._step = step; + this._valueOrigin = valueOrigin; + + if (seriesModel.get('triggerLineEvent')) { + this.packEventData(seriesModel, polyline); + polygon && this.packEventData(seriesModel, polygon); + } + }; + + LineView.prototype.packEventData = function (seriesModel, el) { + getECData(el).eventData = { + componentType: 'series', + componentSubType: 'line', + componentIndex: seriesModel.componentIndex, + seriesIndex: seriesModel.seriesIndex, + seriesName: seriesModel.name, + seriesType: 'line' + }; + }; + + LineView.prototype.highlight = function (seriesModel, ecModel, api, payload) { + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, payload); + + this._changePolyState('emphasis'); + + if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) { + var points = data.getLayout('points'); + var symbol = data.getItemGraphicEl(dataIndex); + + if (!symbol) { + // Create a temporary symbol if it is not exists + var x = points[dataIndex * 2]; + var y = points[dataIndex * 2 + 1]; + + if (isNaN(x) || isNaN(y)) { + // Null data + return; + } // fix #11360: should't draw symbol outside clipShapeForSymbol + + + if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(x, y)) { + return; + } + + var zlevel = seriesModel.get('zlevel'); + var z = seriesModel.get('z'); + symbol = new Symbol(data, dataIndex); + symbol.x = x; + symbol.y = y; + symbol.setZ(zlevel, z); // ensure label text of the temporary symbol is in front of line and area polygon + + var symbolLabel = symbol.getSymbolPath().getTextContent(); + + if (symbolLabel) { + symbolLabel.zlevel = zlevel; + symbolLabel.z = z; + symbolLabel.z2 = this._polyline.z2 + 1; + } + + symbol.__temp = true; + data.setItemGraphicEl(dataIndex, symbol); // Stop scale animation + + symbol.stopSymbolAnimation(true); + this.group.add(symbol); + } + + symbol.highlight(); + } else { + // Highlight whole series + ChartView.prototype.highlight.call(this, seriesModel, ecModel, api, payload); + } + }; + + LineView.prototype.downplay = function (seriesModel, ecModel, api, payload) { + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, payload); + + this._changePolyState('normal'); + + if (dataIndex != null && dataIndex >= 0) { + var symbol = data.getItemGraphicEl(dataIndex); + + if (symbol) { + if (symbol.__temp) { + data.setItemGraphicEl(dataIndex, null); + this.group.remove(symbol); + } else { + symbol.downplay(); + } + } + } else { + // FIXME + // can not downplay completely. + // Downplay whole series + ChartView.prototype.downplay.call(this, seriesModel, ecModel, api, payload); + } + }; + + LineView.prototype._changePolyState = function (toState) { + var polygon = this._polygon; + setStatesFlag(this._polyline, toState); + polygon && setStatesFlag(polygon, toState); + }; + + LineView.prototype._newPolyline = function (points) { + var polyline = this._polyline; // Remove previous created polyline + + if (polyline) { + this._lineGroup.remove(polyline); + } + + polyline = new ECPolyline({ + shape: { + points: points + }, + segmentIgnoreThreshold: 2, + z2: 10 + }); + + this._lineGroup.add(polyline); + + this._polyline = polyline; + return polyline; + }; + + LineView.prototype._newPolygon = function (points, stackedOnPoints) { + var polygon = this._polygon; // Remove previous created polygon + + if (polygon) { + this._lineGroup.remove(polygon); + } + + polygon = new ECPolygon({ + shape: { + points: points, + stackedOnPoints: stackedOnPoints + }, + segmentIgnoreThreshold: 2 + }); + + this._lineGroup.add(polygon); + + this._polygon = polygon; + return polygon; + }; + + LineView.prototype._initSymbolLabelAnimation = function (data, coordSys, clipShape) { + var isHorizontalOrRadial; + var isCoordSysPolar; + var baseAxis = coordSys.getBaseAxis(); + var isAxisInverse = baseAxis.inverse; + + if (coordSys.type === 'cartesian2d') { + isHorizontalOrRadial = baseAxis.isHorizontal(); + isCoordSysPolar = false; + } else if (coordSys.type === 'polar') { + isHorizontalOrRadial = baseAxis.dim === 'angle'; + isCoordSysPolar = true; + } + + var seriesModel = data.hostModel; + var seriesDuration = seriesModel.get('animationDuration'); + + if (typeof seriesDuration === 'function') { + seriesDuration = seriesDuration(null); + } + + var seriesDalay = seriesModel.get('animationDelay') || 0; + var seriesDalayValue = typeof seriesDalay === 'function' ? seriesDalay(null) : seriesDalay; + data.eachItemGraphicEl(function (symbol, idx) { + var el = symbol; + + if (el) { + var point = [symbol.x, symbol.y]; + var start = void 0; + var end = void 0; + var current = void 0; + + if (clipShape) { + if (isCoordSysPolar) { + var polarClip = clipShape; + var coord = coordSys.pointToCoord(point); + + if (isHorizontalOrRadial) { + start = polarClip.startAngle; + end = polarClip.endAngle; + current = -coord[1] / 180 * Math.PI; + } else { + start = polarClip.r0; + end = polarClip.r; + current = coord[0]; + } + } else { + var gridClip = clipShape; + + if (isHorizontalOrRadial) { + start = gridClip.x; + end = gridClip.x + gridClip.width; + current = symbol.x; + } else { + start = gridClip.y + gridClip.height; + end = gridClip.y; + current = symbol.y; + } + } + } + + var ratio = end === start ? 0 : (current - start) / (end - start); + + if (isAxisInverse) { + ratio = 1 - ratio; + } + + var delay = typeof seriesDalay === 'function' ? seriesDalay(idx) : seriesDuration * ratio + seriesDalayValue; + var symbolPath = el.getSymbolPath(); + var text = symbolPath.getTextContent(); + el.attr({ + scaleX: 0, + scaleY: 0 + }); + el.animateTo({ + scaleX: 1, + scaleY: 1 + }, { + duration: 200, + setToFinal: true, + delay: delay + }); + + if (text) { + text.animateFrom({ + style: { + opacity: 0 + } + }, { + duration: 300, + delay: delay + }); + } + + symbolPath.disableLabelAnimation = true; + } + }); + }; + + LineView.prototype._initOrUpdateEndLabel = function (seriesModel, coordSys, inheritColor) { + var endLabelModel = seriesModel.getModel('endLabel'); + + if (anyStateShowEndLabel(seriesModel)) { + var data_2 = seriesModel.getData(); + var polyline = this._polyline; + var endLabel = this._endLabel; + + if (!endLabel) { + endLabel = this._endLabel = new ZRText({ + z2: 200 // should be higher than item symbol + + }); + endLabel.ignoreClip = true; + polyline.setTextContent(this._endLabel); + polyline.disableLabelAnimation = true; + } // Find last non-NaN data to display data + + + var dataIndex = getLastIndexNotNull(data_2.getLayout('points')); + + if (dataIndex >= 0) { + setLabelStyle(polyline, getLabelStatesModels(seriesModel, 'endLabel'), { + inheritColor: inheritColor, + labelFetcher: seriesModel, + labelDataIndex: dataIndex, + defaultText: function (dataIndex, opt, interpolatedValue) { + return interpolatedValue != null ? getDefaultInterpolatedLabel(data_2, interpolatedValue) : getDefaultLabel(data_2, dataIndex); + }, + enableTextSetter: true + }, getEndLabelStateSpecified(endLabelModel, coordSys)); + polyline.textConfig.position = null; + } + } else if (this._endLabel) { + this._polyline.removeTextContent(); + + this._endLabel = null; + } + }; + + LineView.prototype._endLabelOnDuring = function (percent, clipRect, data, animationRecord, valueAnimation, endLabelModel, coordSys) { + var endLabel = this._endLabel; + var polyline = this._polyline; + + if (endLabel) { + // NOTE: Don't remove percent < 1. percent === 1 means the first frame during render. + // The label is not prepared at this time. + if (percent < 1 && animationRecord.originalX == null) { + animationRecord.originalX = endLabel.x; + animationRecord.originalY = endLabel.y; + } + + var points = data.getLayout('points'); + var seriesModel = data.hostModel; + var connectNulls = seriesModel.get('connectNulls'); + var precision = endLabelModel.get('precision'); + var distance = endLabelModel.get('distance') || 0; + var baseAxis = coordSys.getBaseAxis(); + var isHorizontal = baseAxis.isHorizontal(); + var isBaseInversed = baseAxis.inverse; + var clipShape = clipRect.shape; + var xOrY = isBaseInversed ? isHorizontal ? clipShape.x : clipShape.y + clipShape.height : isHorizontal ? clipShape.x + clipShape.width : clipShape.y; + var distanceX = (isHorizontal ? distance : 0) * (isBaseInversed ? -1 : 1); + var distanceY = (isHorizontal ? 0 : -distance) * (isBaseInversed ? -1 : 1); + var dim = isHorizontal ? 'x' : 'y'; + var dataIndexRange = getIndexRange(points, xOrY, dim); + var indices = dataIndexRange.range; + var diff = indices[1] - indices[0]; + var value = void 0; + + if (diff >= 1) { + // diff > 1 && connectNulls, which is on the null data. + if (diff > 1 && !connectNulls) { + var pt = getPointAtIndex(points, indices[0]); + endLabel.attr({ + x: pt[0] + distanceX, + y: pt[1] + distanceY + }); + valueAnimation && (value = seriesModel.getRawValue(indices[0])); + } else { + var pt = polyline.getPointOn(xOrY, dim); + pt && endLabel.attr({ + x: pt[0] + distanceX, + y: pt[1] + distanceY + }); + var startValue = seriesModel.getRawValue(indices[0]); + var endValue = seriesModel.getRawValue(indices[1]); + valueAnimation && (value = interpolateRawValues(data, precision, startValue, endValue, dataIndexRange.t)); + } + + animationRecord.lastFrameIndex = indices[0]; + } else { + // If diff <= 0, which is the range is not found(Include NaN) + // Choose the first point or last point. + var idx = percent === 1 || animationRecord.lastFrameIndex > 0 ? indices[0] : 0; + var pt = getPointAtIndex(points, idx); + valueAnimation && (value = seriesModel.getRawValue(idx)); + endLabel.attr({ + x: pt[0] + distanceX, + y: pt[1] + distanceY + }); + } + + if (valueAnimation) { + labelInner(endLabel).setLabelText(value); + } + } + }; + /** + * @private + */ + // FIXME Two value axis + + + LineView.prototype._doUpdateAnimation = function (data, stackedOnPoints, coordSys, api, step, valueOrigin) { + var polyline = this._polyline; + var polygon = this._polygon; + var seriesModel = data.hostModel; + var diff = lineAnimationDiff(this._data, data, this._stackedOnPoints, stackedOnPoints, this._coordSys, coordSys, this._valueOrigin); + var current = diff.current; + var stackedOnCurrent = diff.stackedOnCurrent; + var next = diff.next; + var stackedOnNext = diff.stackedOnNext; + + if (step) { + // TODO If stacked series is not step + current = turnPointsIntoStep(diff.current, coordSys, step); + stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step); + next = turnPointsIntoStep(diff.next, coordSys, step); + stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step); + } // Don't apply animation if diff is large. + // For better result and avoid memory explosion problems like + // https://github.com/apache/incubator-echarts/issues/12229 + + + if (getBoundingDiff(current, next) > 3000 || polygon && getBoundingDiff(stackedOnCurrent, stackedOnNext) > 3000) { + polyline.stopAnimation(); + polyline.setShape({ + points: next + }); + + if (polygon) { + polygon.stopAnimation(); + polygon.setShape({ + points: next, + stackedOnPoints: stackedOnNext + }); + } + + return; + } + + polyline.shape.__points = diff.current; + polyline.shape.points = current; + var target = { + shape: { + points: next + } + }; // Also animate the original points. + // If points reference is changed when turning into step line. + + if (diff.current !== current) { + target.shape.__points = diff.next; + } // Stop previous animation. + + + polyline.stopAnimation(); + updateProps(polyline, target, seriesModel); + + if (polygon) { + polygon.setShape({ + // Reuse the points with polyline. + points: current, + stackedOnPoints: stackedOnCurrent + }); + polygon.stopAnimation(); + updateProps(polygon, { + shape: { + stackedOnPoints: stackedOnNext + } + }, seriesModel); // If use attr directly in updateProps. + + if (polyline.shape.points !== polygon.shape.points) { + polygon.shape.points = polyline.shape.points; + } + } + + var updatedDataInfo = []; + var diffStatus = diff.status; + + for (var i = 0; i < diffStatus.length; i++) { + var cmd = diffStatus[i].cmd; + + if (cmd === '=') { + var el = data.getItemGraphicEl(diffStatus[i].idx1); + + if (el) { + updatedDataInfo.push({ + el: el, + ptIdx: i // Index of points + + }); + } + } + } + + if (polyline.animators && polyline.animators.length) { + polyline.animators[0].during(function () { + polygon && polygon.dirtyShape(); + var points = polyline.shape.__points; + + for (var i = 0; i < updatedDataInfo.length; i++) { + var el = updatedDataInfo[i].el; + var offset = updatedDataInfo[i].ptIdx * 2; + el.x = points[offset]; + el.y = points[offset + 1]; + el.markRedraw(); + } + }); + } + }; + + LineView.prototype.remove = function (ecModel) { + var group = this.group; + var oldData = this._data; + + this._lineGroup.removeAll(); + + this._symbolDraw.remove(true); // Remove temporary created elements when highlighting + + + oldData && oldData.eachItemGraphicEl(function (el, idx) { + if (el.__temp) { + group.remove(el); + oldData.setItemGraphicEl(idx, null); + } + }); + this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._endLabel = this._data = null; + }; + + LineView.type = 'line'; + return LineView; + }(ChartView); + + function pointsLayout(seriesType, forceStoreInTypedArray) { + return { + seriesType: seriesType, + plan: createRenderPlanner(), + reset: function (seriesModel) { + var data = seriesModel.getData(); + var coordSys = seriesModel.coordinateSystem; + var pipelineContext = seriesModel.pipelineContext; + var useTypedArray = forceStoreInTypedArray || pipelineContext.large; + + if (!coordSys) { + return; + } + + var dims = map(coordSys.dimensions, function (dim) { + return data.mapDimension(dim); + }).slice(0, 2); + var dimLen = dims.length; + var stackResultDim = data.getCalculationInfo('stackResultDimension'); + + if (isDimensionStacked(data, dims[0] + /*, dims[1]*/ + )) { + dims[0] = stackResultDim; + } + + if (isDimensionStacked(data, dims[1] + /*, dims[0]*/ + )) { + dims[1] = stackResultDim; + } + + var store = data.getStore(); + var dimIdx0 = data.getDimensionIndex(dims[0]); + var dimIdx1 = data.getDimensionIndex(dims[1]); + return dimLen && { + progress: function (params, data) { + var segCount = params.end - params.start; + var points = useTypedArray && createFloat32Array(segCount * dimLen); + var tmpIn = []; + var tmpOut = []; + + for (var i = params.start, offset = 0; i < params.end; i++) { + var point = void 0; + + if (dimLen === 1) { + var x = store.get(dimIdx0, i); // NOTE: Make sure the second parameter is null to use default strategy. + + point = coordSys.dataToPoint(x, null, tmpOut); + } else { + tmpIn[0] = store.get(dimIdx0, i); + tmpIn[1] = store.get(dimIdx1, i); // Let coordinate system to handle the NaN data. + + point = coordSys.dataToPoint(tmpIn, null, tmpOut); + } + + if (useTypedArray) { + points[offset++] = point[0]; + points[offset++] = point[1]; + } else { + data.setItemLayout(i, point.slice()); + } + } + + useTypedArray && data.setLayout('points', points); + } + }; + } + }; + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var samplers = { + average: function (frame) { + var sum = 0; + var count = 0; + + for (var i = 0; i < frame.length; i++) { + if (!isNaN(frame[i])) { + sum += frame[i]; + count++; + } + } // Return NaN if count is 0 + + + return count === 0 ? NaN : sum / count; + }, + sum: function (frame) { + var sum = 0; + + for (var i = 0; i < frame.length; i++) { + // Ignore NaN + sum += frame[i] || 0; + } + + return sum; + }, + max: function (frame) { + var max = -Infinity; + + for (var i = 0; i < frame.length; i++) { + frame[i] > max && (max = frame[i]); + } // NaN will cause illegal axis extent. + + + return isFinite(max) ? max : NaN; + }, + min: function (frame) { + var min = Infinity; + + for (var i = 0; i < frame.length; i++) { + frame[i] < min && (min = frame[i]); + } // NaN will cause illegal axis extent. + + + return isFinite(min) ? min : NaN; + }, + // TODO + // Median + nearest: function (frame) { + return frame[0]; + } + }; + + var indexSampler = function (frame) { + return Math.round(frame.length / 2); + }; + + function dataSample(seriesType) { + return { + seriesType: seriesType, + // FIXME:TS never used, so comment it + // modifyOutputEnd: true, + reset: function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var sampling = seriesModel.get('sampling'); + var coordSys = seriesModel.coordinateSystem; + var count = data.count(); // Only cartesian2d support down sampling. Disable it when there is few data. + + if (count > 10 && coordSys.type === 'cartesian2d' && sampling) { + var baseAxis = coordSys.getBaseAxis(); + var valueAxis = coordSys.getOtherAxis(baseAxis); + var extent = baseAxis.getExtent(); + var dpr = api.getDevicePixelRatio(); // Coordinste system has been resized + + var size = Math.abs(extent[1] - extent[0]) * (dpr || 1); + var rate = Math.round(count / size); + + if (rate > 1) { + if (sampling === 'lttb') { + seriesModel.setData(data.lttbDownSample(data.mapDimension(valueAxis.dim), 1 / rate)); + } + + var sampler = void 0; + + if (typeof sampling === 'string') { + sampler = samplers[sampling]; + } else if (typeof sampling === 'function') { + sampler = sampling; + } + + if (sampler) { + // Only support sample the first dim mapped from value axis. + seriesModel.setData(data.downSample(data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler)); + } + } + } + } + }; + } + + function install$2(registers) { + registers.registerChartView(LineView); + registers.registerSeriesModel(LineSeriesModel); + registers.registerLayout(pointsLayout('line', true)); + registers.registerVisual({ + seriesType: 'line', + reset: function (seriesModel) { + var data = seriesModel.getData(); // Visual coding for legend + + var lineStyle = seriesModel.getModel('lineStyle').getLineStyle(); + + if (lineStyle && !lineStyle.stroke) { + // Fill in visual should be palette color if + // has color callback + lineStyle.stroke = data.getVisual('style').fill; + } + + data.setVisual('legendLineStyle', lineStyle); + } + }); // Down sample after filter + + registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample('line')); + } + + var BaseBarSeriesModel = + /** @class */ + function (_super) { + __extends(BaseBarSeriesModel, _super); + + function BaseBarSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = BaseBarSeriesModel.type; + return _this; + } + + BaseBarSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesData(null, this, { + useEncodeDefaulter: true + }); + }; + + BaseBarSeriesModel.prototype.getMarkerPosition = function (value) { + var coordSys = this.coordinateSystem; + + if (coordSys && coordSys.clampData) { + // PENDING if clamp ? + var pt = coordSys.dataToPoint(coordSys.clampData(value)); + var data = this.getData(); + var offset = data.getLayout('offset'); + var size = data.getLayout('size'); + var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1; + pt[offsetIndex] += offset + size / 2; + return pt; + } + + return [NaN, NaN]; + }; + + BaseBarSeriesModel.type = 'series.__base_bar__'; + BaseBarSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + // stack: null + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + barMinHeight: 0, + barMinAngle: 0, + // cursor: null, + large: false, + largeThreshold: 400, + progressive: 3e3, + progressiveChunkMode: 'mod' + }; + return BaseBarSeriesModel; + }(SeriesModel); + + SeriesModel.registerClass(BaseBarSeriesModel); + + var BarSeriesModel = + /** @class */ + function (_super) { + __extends(BarSeriesModel, _super); + + function BarSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = BarSeriesModel.type; + return _this; + } + + BarSeriesModel.prototype.getInitialData = function () { + return createSeriesData(null, this, { + useEncodeDefaulter: true, + createInvertedIndices: !!this.get('realtimeSort', true) || null + }); + }; + /** + * @override + */ + + + BarSeriesModel.prototype.getProgressive = function () { + // Do not support progressive in normal mode. + return this.get('large') ? this.get('progressive') : false; + }; + /** + * @override + */ + + + BarSeriesModel.prototype.getProgressiveThreshold = function () { + // Do not support progressive in normal mode. + var progressiveThreshold = this.get('progressiveThreshold'); + var largeThreshold = this.get('largeThreshold'); + + if (largeThreshold > progressiveThreshold) { + progressiveThreshold = largeThreshold; + } + + return progressiveThreshold; + }; + + BarSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) { + return selectors.rect(data.getItemLayout(dataIndex)); + }; + + BarSeriesModel.type = 'series.bar'; + BarSeriesModel.dependencies = ['grid', 'polar']; + BarSeriesModel.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, { + // If clipped + // Only available on cartesian2d + clip: true, + roundCap: false, + showBackground: false, + backgroundStyle: { + color: 'rgba(180, 180, 180, 0.2)', + borderColor: null, + borderWidth: 0, + borderType: 'solid', + borderRadius: 0, + shadowBlur: 0, + shadowColor: null, + shadowOffsetX: 0, + shadowOffsetY: 0, + opacity: 1 + }, + select: { + itemStyle: { + borderColor: '#212121' + } + }, + realtimeSort: false + }); + return BarSeriesModel; + }(BaseBarSeriesModel); + + /** + * Sausage: similar to sector, but have half circle on both sides + */ + + var SausageShape = + /** @class */ + function () { + function SausageShape() { + this.cx = 0; + this.cy = 0; + this.r0 = 0; + this.r = 0; + this.startAngle = 0; + this.endAngle = Math.PI * 2; + this.clockwise = true; + } + + return SausageShape; + }(); + + var SausagePath = + /** @class */ + function (_super) { + __extends(SausagePath, _super); + + function SausagePath(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'sausage'; + return _this; + } + + SausagePath.prototype.getDefaultShape = function () { + return new SausageShape(); + }; + + SausagePath.prototype.buildPath = function (ctx, shape) { + var x = shape.cx; + var y = shape.cy; + var r0 = Math.max(shape.r0 || 0, 0); + var r = Math.max(shape.r, 0); + var dr = (r - r0) * 0.5; + var rCenter = r0 + dr; + var startAngle = shape.startAngle; + var endAngle = shape.endAngle; + var clockwise = shape.clockwise; + var unitStartX = Math.cos(startAngle); + var unitStartY = Math.sin(startAngle); + var unitEndX = Math.cos(endAngle); + var unitEndY = Math.sin(endAngle); + var lessThanCircle = clockwise ? endAngle - startAngle < Math.PI * 2 : startAngle - endAngle < Math.PI * 2; + + if (lessThanCircle) { + ctx.moveTo(unitStartX * r0 + x, unitStartY * r0 + y); + ctx.arc(unitStartX * rCenter + x, unitStartY * rCenter + y, dr, -Math.PI + startAngle, startAngle, !clockwise); + } + + ctx.arc(x, y, r, startAngle, endAngle, !clockwise); + ctx.moveTo(unitEndX * r + x, unitEndY * r + y); + ctx.arc(unitEndX * rCenter + x, unitEndY * rCenter + y, dr, endAngle - Math.PI * 2, endAngle - Math.PI, !clockwise); + + if (r0 !== 0) { + ctx.arc(x, y, r0, endAngle, startAngle, clockwise); + ctx.moveTo(unitStartX * r0 + x, unitEndY * r0 + y); + } + + ctx.closePath(); + }; + + return SausagePath; + }(Path); + + function createSectorCalculateTextPosition(positionMapping, opts) { + opts = opts || {}; + var isRoundCap = opts.isRoundCap; + return function (out, opts, boundingRect) { + var textPosition = opts.position; + + if (!textPosition || textPosition instanceof Array) { + return calculateTextPosition(out, opts, boundingRect); + } + + var mappedSectorPosition = positionMapping(textPosition); + var distance = opts.distance != null ? opts.distance : 5; + var sector = this.shape; + var cx = sector.cx; + var cy = sector.cy; + var r = sector.r; + var r0 = sector.r0; + var middleR = (r + r0) / 2; + var startAngle = sector.startAngle; + var endAngle = sector.endAngle; + var middleAngle = (startAngle + endAngle) / 2; + var extraDist = isRoundCap ? Math.abs(r - r0) / 2 : 0; + var mathCos = Math.cos; + var mathSin = Math.sin; // base position: top-left + + var x = cx + r * mathCos(startAngle); + var y = cy + r * mathSin(startAngle); + var textAlign = 'left'; + var textVerticalAlign = 'top'; + + switch (mappedSectorPosition) { + case 'startArc': + x = cx + (r0 - distance) * mathCos(middleAngle); + y = cy + (r0 - distance) * mathSin(middleAngle); + textAlign = 'center'; + textVerticalAlign = 'top'; + break; + + case 'insideStartArc': + x = cx + (r0 + distance) * mathCos(middleAngle); + y = cy + (r0 + distance) * mathSin(middleAngle); + textAlign = 'center'; + textVerticalAlign = 'bottom'; + break; + + case 'startAngle': + x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, distance + extraDist, false); + y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, distance + extraDist, false); + textAlign = 'right'; + textVerticalAlign = 'middle'; + break; + + case 'insideStartAngle': + x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, -distance + extraDist, false); + y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, -distance + extraDist, false); + textAlign = 'left'; + textVerticalAlign = 'middle'; + break; + + case 'middle': + x = cx + middleR * mathCos(middleAngle); + y = cy + middleR * mathSin(middleAngle); + textAlign = 'center'; + textVerticalAlign = 'middle'; + break; + + case 'endArc': + x = cx + (r + distance) * mathCos(middleAngle); + y = cy + (r + distance) * mathSin(middleAngle); + textAlign = 'center'; + textVerticalAlign = 'bottom'; + break; + + case 'insideEndArc': + x = cx + (r - distance) * mathCos(middleAngle); + y = cy + (r - distance) * mathSin(middleAngle); + textAlign = 'center'; + textVerticalAlign = 'top'; + break; + + case 'endAngle': + x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, distance + extraDist, true); + y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, distance + extraDist, true); + textAlign = 'left'; + textVerticalAlign = 'middle'; + break; + + case 'insideEndAngle': + x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, -distance + extraDist, true); + y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, -distance + extraDist, true); + textAlign = 'right'; + textVerticalAlign = 'middle'; + break; + + default: + return calculateTextPosition(out, opts, boundingRect); + } + + out = out || {}; + out.x = x; + out.y = y; + out.align = textAlign; + out.verticalAlign = textVerticalAlign; + return out; + }; + } + function setSectorTextRotation(sector, textPosition, positionMapping, rotateType) { + if (typeof rotateType === 'number') { + // user-set rotation + sector.setTextConfig({ + rotation: rotateType + }); + return; + } else if (isArray(textPosition)) { + // user-set position, use 0 as auto rotation + sector.setTextConfig({ + rotation: 0 + }); + return; + } + + var shape = sector.shape; + var startAngle = shape.clockwise ? shape.startAngle : shape.endAngle; + var endAngle = shape.clockwise ? shape.endAngle : shape.startAngle; + var middleAngle = (startAngle + endAngle) / 2; + var anchorAngle; + var mappedSectorPosition = positionMapping(textPosition); + + switch (mappedSectorPosition) { + case 'startArc': + case 'insideStartArc': + case 'middle': + case 'insideEndArc': + case 'endArc': + anchorAngle = middleAngle; + break; + + case 'startAngle': + case 'insideStartAngle': + anchorAngle = startAngle; + break; + + case 'endAngle': + case 'insideEndAngle': + anchorAngle = endAngle; + break; + + default: + sector.setTextConfig({ + rotation: 0 + }); + return; + } + + var rotate = Math.PI * 1.5 - anchorAngle; + /** + * TODO: labels with rotate > Math.PI / 2 should be rotate another + * half round flipped to increase readability. However, only middle + * position supports this for now, because in other positions, the + * anchor point is not at the center of the text, so the positions + * after rotating is not as expected. + */ + + if (mappedSectorPosition === 'middle' && rotate > Math.PI / 2 && rotate < Math.PI * 1.5) { + rotate -= Math.PI; + } + + sector.setTextConfig({ + rotation: rotate + }); + } + + function adjustAngleDistanceX(angle, distance, isEnd) { + return distance * Math.sin(angle) * (isEnd ? -1 : 1); + } + + function adjustAngleDistanceY(angle, distance, isEnd) { + return distance * Math.cos(angle) * (isEnd ? 1 : -1); + } + + var _eventPos = [0, 0]; + var mathMax$6 = Math.max; + var mathMin$6 = Math.min; + + function getClipArea(coord, data) { + var coordSysClipArea = coord.getArea && coord.getArea(); + + if (isCoordinateSystemType(coord, 'cartesian2d')) { + var baseAxis = coord.getBaseAxis(); // When boundaryGap is false or using time axis. bar may exceed the grid. + // We should not clip this part. + // See test/bar2.html + + if (baseAxis.type !== 'category' || !baseAxis.onBand) { + var expandWidth = data.getLayout('bandWidth'); + + if (baseAxis.isHorizontal()) { + coordSysClipArea.x -= expandWidth; + coordSysClipArea.width += expandWidth * 2; + } else { + coordSysClipArea.y -= expandWidth; + coordSysClipArea.height += expandWidth * 2; + } + } + } + + return coordSysClipArea; + } + + var BarView = + /** @class */ + function (_super) { + __extends(BarView, _super); + + function BarView() { + var _this = _super.call(this) || this; + + _this.type = BarView.type; + _this._isFirstFrame = true; + return _this; + } + + BarView.prototype.render = function (seriesModel, ecModel, api, payload) { + this._model = seriesModel; + + this._removeOnRenderedListener(api); + + this._updateDrawMode(seriesModel); + + var coordinateSystemType = seriesModel.get('coordinateSystem'); + + if (coordinateSystemType === 'cartesian2d' || coordinateSystemType === 'polar') { + this._isLargeDraw ? this._renderLarge(seriesModel, ecModel, api) : this._renderNormal(seriesModel, ecModel, api, payload); + } else if ("development" !== 'production') { + warn('Only cartesian2d and polar supported for bar.'); + } + }; + + BarView.prototype.incrementalPrepareRender = function (seriesModel) { + this._clear(); + + this._updateDrawMode(seriesModel); // incremental also need to clip, otherwise might be overlow. + // But must not set clip in each frame, otherwise all of the children will be marked redraw. + + + this._updateLargeClip(seriesModel); + }; + + BarView.prototype.incrementalRender = function (params, seriesModel) { + // Do not support progressive in normal mode. + this._incrementalRenderLarge(params, seriesModel); + }; + + BarView.prototype._updateDrawMode = function (seriesModel) { + var isLargeDraw = seriesModel.pipelineContext.large; + + if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) { + this._isLargeDraw = isLargeDraw; + + this._clear(); + } + }; + + BarView.prototype._renderNormal = function (seriesModel, ecModel, api, payload) { + var group = this.group; + var data = seriesModel.getData(); + var oldData = this._data; + var coord = seriesModel.coordinateSystem; + var baseAxis = coord.getBaseAxis(); + var isHorizontalOrRadial; + + if (coord.type === 'cartesian2d') { + isHorizontalOrRadial = baseAxis.isHorizontal(); + } else if (coord.type === 'polar') { + isHorizontalOrRadial = baseAxis.dim === 'angle'; + } + + var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null; + var realtimeSortCfg = shouldRealtimeSort(seriesModel, coord); + + if (realtimeSortCfg) { + this._enableRealtimeSort(realtimeSortCfg, data, api); + } + + var needsClip = seriesModel.get('clip', true) || realtimeSortCfg; + var coordSysClipArea = getClipArea(coord, data); // If there is clipPath created in large mode. Remove it. + + group.removeClipPath(); // We don't use clipPath in normal mode because we needs a perfect animation + // And don't want the label are clipped. + + var roundCap = seriesModel.get('roundCap', true); + var drawBackground = seriesModel.get('showBackground', true); + var backgroundModel = seriesModel.getModel('backgroundStyle'); + var barBorderRadius = backgroundModel.get('borderRadius') || 0; + var bgEls = []; + var oldBgEls = this._backgroundEls; + var isInitSort = payload && payload.isInitSort; + var isChangeOrder = payload && payload.type === 'changeAxisOrder'; + + function createBackground(dataIndex) { + var bgLayout = getLayout[coord.type](data, dataIndex); + var bgEl = createBackgroundEl(coord, isHorizontalOrRadial, bgLayout); + bgEl.useStyle(backgroundModel.getItemStyle()); // Only cartesian2d support borderRadius. + + if (coord.type === 'cartesian2d') { + bgEl.setShape('r', barBorderRadius); + } + + bgEls[dataIndex] = bgEl; + return bgEl; + } + data.diff(oldData).add(function (dataIndex) { + var itemModel = data.getItemModel(dataIndex); + var layout = getLayout[coord.type](data, dataIndex, itemModel); + + if (drawBackground) { + createBackground(dataIndex); + } // If dataZoom in filteMode: 'empty', the baseValue can be set as NaN in "axisProxy". + + + if (!data.hasValue(dataIndex) || !isValidLayout[coord.type](layout)) { + return; + } + + var isClipped = false; + + if (needsClip) { + // Clip will modify the layout params. + // And return a boolean to determine if the shape are fully clipped. + isClipped = clip[coord.type](coordSysClipArea, layout); + } + + var el = elementCreator[coord.type](seriesModel, data, dataIndex, layout, isHorizontalOrRadial, animationModel, baseAxis.model, false, roundCap); + + if (realtimeSortCfg) { + /** + * Force label animation because even if the element is + * ignored because it's clipped, it may not be clipped after + * changing order. Then, if not using forceLabelAnimation, + * the label animation was never started, in which case, + * the label will be the final value and doesn't have label + * animation. + */ + el.forceLabelAnimation = true; + } + + updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === 'polar'); + + if (isInitSort) { + el.attr({ + shape: layout + }); + } else if (realtimeSortCfg) { + updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout, dataIndex, isHorizontalOrRadial, false, false); + } else { + initProps(el, { + shape: layout + }, seriesModel, dataIndex); + } + + data.setItemGraphicEl(dataIndex, el); + group.add(el); + el.ignore = isClipped; + }).update(function (newIndex, oldIndex) { + var itemModel = data.getItemModel(newIndex); + var layout = getLayout[coord.type](data, newIndex, itemModel); + + if (drawBackground) { + var bgEl = void 0; + + if (oldBgEls.length === 0) { + bgEl = createBackground(oldIndex); + } else { + bgEl = oldBgEls[oldIndex]; + bgEl.useStyle(backgroundModel.getItemStyle()); // Only cartesian2d support borderRadius. + + if (coord.type === 'cartesian2d') { + bgEl.setShape('r', barBorderRadius); + } + + bgEls[newIndex] = bgEl; + } + + var bgLayout = getLayout[coord.type](data, newIndex); + var shape = createBackgroundShape(isHorizontalOrRadial, bgLayout, coord); + updateProps(bgEl, { + shape: shape + }, animationModel, newIndex); + } + + var el = oldData.getItemGraphicEl(oldIndex); + + if (!data.hasValue(newIndex) || !isValidLayout[coord.type](layout)) { + group.remove(el); + return; + } + + var isClipped = false; + + if (needsClip) { + isClipped = clip[coord.type](coordSysClipArea, layout); + + if (isClipped) { + group.remove(el); + } + } + + if (!el) { + el = elementCreator[coord.type](seriesModel, data, newIndex, layout, isHorizontalOrRadial, animationModel, baseAxis.model, !!el, roundCap); + } else { + saveOldStyle(el); + } + + if (realtimeSortCfg) { + el.forceLabelAnimation = true; + } + + if (isChangeOrder) { + var textEl = el.getTextContent(); + + if (textEl) { + var labelInnerStore = labelInner(textEl); + + if (labelInnerStore.prevValue != null) { + /** + * Set preValue to be value so that no new label + * should be started, otherwise, it will take a full + * `animationDurationUpdate` time to finish the + * animation, which is not expected. + */ + labelInnerStore.prevValue = labelInnerStore.value; + } + } + } // Not change anything if only order changed. + // Especially not change label. + + + if (!isChangeOrder) { + updateStyle(el, data, newIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === 'polar'); + } + + if (isInitSort) { + el.attr({ + shape: layout + }); + } else if (realtimeSortCfg) { + updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout, newIndex, isHorizontalOrRadial, true, isChangeOrder); + } else { + updateProps(el, { + shape: layout + }, seriesModel, newIndex, null); + } + + data.setItemGraphicEl(newIndex, el); + el.ignore = isClipped; + group.add(el); + }).remove(function (dataIndex) { + var el = oldData.getItemGraphicEl(dataIndex); + el && removeElementWithFadeOut(el, seriesModel, dataIndex); + }).execute(); + var bgGroup = this._backgroundGroup || (this._backgroundGroup = new Group()); + bgGroup.removeAll(); + + for (var i = 0; i < bgEls.length; ++i) { + bgGroup.add(bgEls[i]); + } + + group.add(bgGroup); + this._backgroundEls = bgEls; + this._data = data; + }; + + BarView.prototype._renderLarge = function (seriesModel, ecModel, api) { + this._clear(); + + createLarge(seriesModel, this.group); + + this._updateLargeClip(seriesModel); + }; + + BarView.prototype._incrementalRenderLarge = function (params, seriesModel) { + this._removeBackground(); + + createLarge(seriesModel, this.group, true); + }; + + BarView.prototype._updateLargeClip = function (seriesModel) { + // Use clipPath in large mode. + var clipPath = seriesModel.get('clip', true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null; + + if (clipPath) { + this.group.setClipPath(clipPath); + } else { + this.group.removeClipPath(); + } + }; + + BarView.prototype._enableRealtimeSort = function (realtimeSortCfg, data, api) { + var _this = this; // If no data in the first frame, wait for data to initSort + + + if (!data.count()) { + return; + } + + var baseAxis = realtimeSortCfg.baseAxis; + + if (this._isFirstFrame) { + this._dispatchInitSort(data, realtimeSortCfg, api); + + this._isFirstFrame = false; + } else { + var orderMapping_1 = function (idx) { + var el = data.getItemGraphicEl(idx); + + if (el) { + var shape = el.shape; // If data is NaN, shape.xxx may be NaN, so use || 0 here in case + + return (baseAxis.isHorizontal() // The result should be consistent with the initial sort by data value. + // Do not support the case that both positive and negative exist. + ? Math.abs(shape.height) : Math.abs(shape.width)) || 0; + } else { + return 0; + } + }; + + this._onRendered = function () { + _this._updateSortWithinSameData(data, orderMapping_1, baseAxis, api); + }; + + api.getZr().on('rendered', this._onRendered); + } + }; + + BarView.prototype._dataSort = function (data, baseAxis, orderMapping) { + var info = []; + data.each(data.mapDimension(baseAxis.dim), function (ordinalNumber, dataIdx) { + var mappedValue = orderMapping(dataIdx); + mappedValue = mappedValue == null ? NaN : mappedValue; + info.push({ + dataIndex: dataIdx, + mappedValue: mappedValue, + ordinalNumber: ordinalNumber + }); + }); + info.sort(function (a, b) { + // If NaN, it will be treated as min val. + return b.mappedValue - a.mappedValue; + }); + return { + ordinalNumbers: map(info, function (item) { + return item.ordinalNumber; + }) + }; + }; + + BarView.prototype._isOrderChangedWithinSameData = function (data, orderMapping, baseAxis) { + var scale = baseAxis.scale; + var ordinalDataDim = data.mapDimension(baseAxis.dim); + var lastValue = Number.MAX_VALUE; + + for (var tickNum = 0, len = scale.getOrdinalMeta().categories.length; tickNum < len; ++tickNum) { + var rawIdx = data.rawIndexOf(ordinalDataDim, scale.getRawOrdinalNumber(tickNum)); + var value = rawIdx < 0 // If some tick have no bar, the tick will be treated as min. + ? Number.MIN_VALUE // PENDING: if dataZoom on baseAxis exits, is it a performance issue? + : orderMapping(data.indexOfRawIndex(rawIdx)); + + if (value > lastValue) { + return true; + } + + lastValue = value; + } + + return false; + }; + /* + * Consider the case when A and B changed order, whose representing + * bars are both out of sight, we don't wish to trigger reorder action + * as long as the order in the view doesn't change. + */ + + + BarView.prototype._isOrderDifferentInView = function (orderInfo, baseAxis) { + var scale = baseAxis.scale; + var extent = scale.getExtent(); + var tickNum = Math.max(0, extent[0]); + var tickMax = Math.min(extent[1], scale.getOrdinalMeta().categories.length - 1); + + for (; tickNum <= tickMax; ++tickNum) { + if (orderInfo.ordinalNumbers[tickNum] !== scale.getRawOrdinalNumber(tickNum)) { + return true; + } + } + }; + + BarView.prototype._updateSortWithinSameData = function (data, orderMapping, baseAxis, api) { + if (!this._isOrderChangedWithinSameData(data, orderMapping, baseAxis)) { + return; + } + + var sortInfo = this._dataSort(data, baseAxis, orderMapping); + + if (this._isOrderDifferentInView(sortInfo, baseAxis)) { + this._removeOnRenderedListener(api); + + api.dispatchAction({ + type: 'changeAxisOrder', + componentType: baseAxis.dim + 'Axis', + axisId: baseAxis.index, + sortInfo: sortInfo + }); + } + }; + + BarView.prototype._dispatchInitSort = function (data, realtimeSortCfg, api) { + var baseAxis = realtimeSortCfg.baseAxis; + + var sortResult = this._dataSort(data, baseAxis, function (dataIdx) { + return data.get(data.mapDimension(realtimeSortCfg.otherAxis.dim), dataIdx); + }); + + api.dispatchAction({ + type: 'changeAxisOrder', + componentType: baseAxis.dim + 'Axis', + isInitSort: true, + axisId: baseAxis.index, + sortInfo: sortResult + }); + }; + + BarView.prototype.remove = function (ecModel, api) { + this._clear(this._model); + + this._removeOnRenderedListener(api); + }; + + BarView.prototype.dispose = function (ecModel, api) { + this._removeOnRenderedListener(api); + }; + + BarView.prototype._removeOnRenderedListener = function (api) { + if (this._onRendered) { + api.getZr().off('rendered', this._onRendered); + this._onRendered = null; + } + }; + + BarView.prototype._clear = function (model) { + var group = this.group; + var data = this._data; + + if (model && model.isAnimationEnabled() && data && !this._isLargeDraw) { + this._removeBackground(); + + this._backgroundEls = []; + data.eachItemGraphicEl(function (el) { + removeElementWithFadeOut(el, model, getECData(el).dataIndex); + }); + } else { + group.removeAll(); + } + + this._data = null; + this._isFirstFrame = true; + }; + + BarView.prototype._removeBackground = function () { + this.group.remove(this._backgroundGroup); + this._backgroundGroup = null; + }; + + BarView.type = 'bar'; + return BarView; + }(ChartView); + + var clip = { + cartesian2d: function (coordSysBoundingRect, layout) { + var signWidth = layout.width < 0 ? -1 : 1; + var signHeight = layout.height < 0 ? -1 : 1; // Needs positive width and height + + if (signWidth < 0) { + layout.x += layout.width; + layout.width = -layout.width; + } + + if (signHeight < 0) { + layout.y += layout.height; + layout.height = -layout.height; + } + + var coordSysX2 = coordSysBoundingRect.x + coordSysBoundingRect.width; + var coordSysY2 = coordSysBoundingRect.y + coordSysBoundingRect.height; + var x = mathMax$6(layout.x, coordSysBoundingRect.x); + var x2 = mathMin$6(layout.x + layout.width, coordSysX2); + var y = mathMax$6(layout.y, coordSysBoundingRect.y); + var y2 = mathMin$6(layout.y + layout.height, coordSysY2); + var xClipped = x2 < x; + var yClipped = y2 < y; // When xClipped or yClipped, the element will be marked as `ignore`. + // But we should also place the element at the edge of the coord sys bounding rect. + // Beause if data changed and the bar show again, its transition animaiton + // will begin at this place. + + layout.x = xClipped && x > coordSysX2 ? x2 : x; + layout.y = yClipped && y > coordSysY2 ? y2 : y; + layout.width = xClipped ? 0 : x2 - x; + layout.height = yClipped ? 0 : y2 - y; // Reverse back + + if (signWidth < 0) { + layout.x += layout.width; + layout.width = -layout.width; + } + + if (signHeight < 0) { + layout.y += layout.height; + layout.height = -layout.height; + } + + return xClipped || yClipped; + }, + polar: function (coordSysClipArea, layout) { + var signR = layout.r0 <= layout.r ? 1 : -1; // Make sure r is larger than r0 + + if (signR < 0) { + var tmp = layout.r; + layout.r = layout.r0; + layout.r0 = tmp; + } + + var r = mathMin$6(layout.r, coordSysClipArea.r); + var r0 = mathMax$6(layout.r0, coordSysClipArea.r0); + layout.r = r; + layout.r0 = r0; + var clipped = r - r0 < 0; // Reverse back + + if (signR < 0) { + var tmp = layout.r; + layout.r = layout.r0; + layout.r0 = tmp; + } + + return clipped; + } + }; + var elementCreator = { + cartesian2d: function (seriesModel, data, newIndex, layout, isHorizontal, animationModel, axisModel, isUpdate, roundCap) { + var rect = new Rect({ + shape: extend({}, layout), + z2: 1 + }); + rect.__dataIndex = newIndex; + rect.name = 'item'; + + if (animationModel) { + var rectShape = rect.shape; + var animateProperty = isHorizontal ? 'height' : 'width'; + rectShape[animateProperty] = 0; + } + + return rect; + }, + polar: function (seriesModel, data, newIndex, layout, isRadial, animationModel, axisModel, isUpdate, roundCap) { + var ShapeClass = !isRadial && roundCap ? SausagePath : Sector; + var sector = new ShapeClass({ + shape: layout, + z2: 1 + }); + sector.name = 'item'; + var positionMap = createPolarPositionMapping(isRadial); + sector.calculateTextPosition = createSectorCalculateTextPosition(positionMap, { + isRoundCap: ShapeClass === SausagePath + }); // Animation + + if (animationModel) { + var sectorShape = sector.shape; + var animateProperty = isRadial ? 'r' : 'endAngle'; + var animateTarget = {}; + sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle; + animateTarget[animateProperty] = layout[animateProperty]; + (isUpdate ? updateProps : initProps)(sector, { + shape: animateTarget // __value: typeof dataValue === 'string' ? parseInt(dataValue, 10) : dataValue + + }, animationModel); + } + + return sector; + } + }; + + function shouldRealtimeSort(seriesModel, coordSys) { + var realtimeSortOption = seriesModel.get('realtimeSort', true); + var baseAxis = coordSys.getBaseAxis(); + + if ("development" !== 'production') { + if (realtimeSortOption) { + if (baseAxis.type !== 'category') { + warn('`realtimeSort` will not work because this bar series is not based on a category axis.'); + } + + if (coordSys.type !== 'cartesian2d') { + warn('`realtimeSort` will not work because this bar series is not on cartesian2d.'); + } + } + } + + if (realtimeSortOption && baseAxis.type === 'category' && coordSys.type === 'cartesian2d') { + return { + baseAxis: baseAxis, + otherAxis: coordSys.getOtherAxis(baseAxis) + }; + } + } + + function updateRealtimeAnimation(realtimeSortCfg, seriesAnimationModel, el, layout, newIndex, isHorizontal, isUpdate, isChangeOrder) { + var seriesTarget; + var axisTarget; + + if (isHorizontal) { + axisTarget = { + x: layout.x, + width: layout.width + }; + seriesTarget = { + y: layout.y, + height: layout.height + }; + } else { + axisTarget = { + y: layout.y, + height: layout.height + }; + seriesTarget = { + x: layout.x, + width: layout.width + }; + } + + if (!isChangeOrder) { + // Keep the original growth animation if only axis order changed. + // Not start a new animation. + (isUpdate ? updateProps : initProps)(el, { + shape: seriesTarget + }, seriesAnimationModel, newIndex, null); + } + + var axisAnimationModel = seriesAnimationModel ? realtimeSortCfg.baseAxis.model : null; + (isUpdate ? updateProps : initProps)(el, { + shape: axisTarget + }, axisAnimationModel, newIndex); + } + + function checkPropertiesNotValid(obj, props) { + for (var i = 0; i < props.length; i++) { + if (!isFinite(obj[props[i]])) { + return true; + } + } + + return false; + } + + var rectPropties = ['x', 'y', 'width', 'height']; + var polarPropties = ['cx', 'cy', 'r', 'startAngle', 'endAngle']; + var isValidLayout = { + cartesian2d: function (layout) { + return !checkPropertiesNotValid(layout, rectPropties); + }, + polar: function (layout) { + return !checkPropertiesNotValid(layout, polarPropties); + } + }; + var getLayout = { + // itemModel is only used to get borderWidth, which is not needed + // when calculating bar background layout. + cartesian2d: function (data, dataIndex, itemModel) { + var layout = data.getItemLayout(dataIndex); + var fixedLineWidth = itemModel ? getLineWidth(itemModel, layout) : 0; // fix layout with lineWidth + + var signX = layout.width > 0 ? 1 : -1; + var signY = layout.height > 0 ? 1 : -1; + return { + x: layout.x + signX * fixedLineWidth / 2, + y: layout.y + signY * fixedLineWidth / 2, + width: layout.width - signX * fixedLineWidth, + height: layout.height - signY * fixedLineWidth + }; + }, + polar: function (data, dataIndex, itemModel) { + var layout = data.getItemLayout(dataIndex); + return { + cx: layout.cx, + cy: layout.cy, + r0: layout.r0, + r: layout.r, + startAngle: layout.startAngle, + endAngle: layout.endAngle, + clockwise: layout.clockwise + }; + } + }; + + function isZeroOnPolar(layout) { + return layout.startAngle != null && layout.endAngle != null && layout.startAngle === layout.endAngle; + } + + function createPolarPositionMapping(isRadial) { + return function (isRadial) { + var arcOrAngle = isRadial ? 'Arc' : 'Angle'; + return function (position) { + switch (position) { + case 'start': + case 'insideStart': + case 'end': + case 'insideEnd': + return position + arcOrAngle; + + default: + return position; + } + }; + }(isRadial); + } + + function updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, isPolar) { + var style = data.getItemVisual(dataIndex, 'style'); + + if (!isPolar) { + el.setShape('r', itemModel.get(['itemStyle', 'borderRadius']) || 0); + } + + el.useStyle(style); + var cursorStyle = itemModel.getShallow('cursor'); + cursorStyle && el.attr('cursor', cursorStyle); + var labelPositionOutside = isPolar ? isHorizontalOrRadial ? layout.r >= layout.r0 ? 'endArc' : 'startArc' : layout.endAngle >= layout.startAngle ? 'endAngle' : 'startAngle' : isHorizontalOrRadial ? layout.height >= 0 ? 'bottom' : 'top' : layout.width >= 0 ? 'right' : 'left'; + var labelStatesModels = getLabelStatesModels(itemModel); + setLabelStyle(el, labelStatesModels, { + labelFetcher: seriesModel, + labelDataIndex: dataIndex, + defaultText: getDefaultLabel(seriesModel.getData(), dataIndex), + inheritColor: style.fill, + defaultOpacity: style.opacity, + defaultOutsidePosition: labelPositionOutside + }); + var label = el.getTextContent(); + + if (isPolar && label) { + var position = itemModel.get(['label', 'position']); + el.textConfig.inside = position === 'middle' ? true : null; + setSectorTextRotation(el, position === 'outside' ? labelPositionOutside : position, createPolarPositionMapping(isHorizontalOrRadial), itemModel.get(['label', 'rotate'])); + } + + setLabelValueAnimation(label, labelStatesModels, seriesModel.getRawValue(dataIndex), function (value) { + return getDefaultInterpolatedLabel(data, value); + }); + var emphasisModel = itemModel.getModel(['emphasis']); + enableHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope')); + setStatesStylesFromModel(el, itemModel); + + if (isZeroOnPolar(layout)) { + el.style.fill = 'none'; + el.style.stroke = 'none'; + each(el.states, function (state) { + if (state.style) { + state.style.fill = state.style.stroke = 'none'; + } + }); + } + } // In case width or height are too small. + + + function getLineWidth(itemModel, rawLayout) { + // Has no border. + var borderColor = itemModel.get(['itemStyle', 'borderColor']); + + if (!borderColor || borderColor === 'none') { + return 0; + } + + var lineWidth = itemModel.get(['itemStyle', 'borderWidth']) || 0; // width or height may be NaN for empty data + + var width = isNaN(rawLayout.width) ? Number.MAX_VALUE : Math.abs(rawLayout.width); + var height = isNaN(rawLayout.height) ? Number.MAX_VALUE : Math.abs(rawLayout.height); + return Math.min(lineWidth, width, height); + } + + var LagePathShape = + /** @class */ + function () { + function LagePathShape() {} + + return LagePathShape; + }(); + + var LargePath = + /** @class */ + function (_super) { + __extends(LargePath, _super); + + function LargePath(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'largeBar'; + return _this; + } + + LargePath.prototype.getDefaultShape = function () { + return new LagePathShape(); + }; + + LargePath.prototype.buildPath = function (ctx, shape) { + // Drawing lines is more efficient than drawing + // a whole line or drawing rects. + var points = shape.points; + var startPoint = this.__startPoint; + var baseDimIdx = this.__baseDimIdx; + + for (var i = 0; i < points.length; i += 2) { + startPoint[baseDimIdx] = points[i + baseDimIdx]; + ctx.moveTo(startPoint[0], startPoint[1]); + ctx.lineTo(points[i], points[i + 1]); + } + }; + + return LargePath; + }(Path); + + function createLarge(seriesModel, group, incremental) { + // TODO support polar + var data = seriesModel.getData(); + var startPoint = []; + var baseDimIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0; + startPoint[1 - baseDimIdx] = data.getLayout('valueAxisStart'); + var largeDataIndices = data.getLayout('largeDataIndices'); + var barWidth = data.getLayout('barWidth'); + var backgroundModel = seriesModel.getModel('backgroundStyle'); + var drawBackground = seriesModel.get('showBackground', true); + + if (drawBackground) { + var points = data.getLayout('largeBackgroundPoints'); + var backgroundStartPoint = []; + backgroundStartPoint[1 - baseDimIdx] = data.getLayout('backgroundStart'); + var bgEl = new LargePath({ + shape: { + points: points + }, + incremental: !!incremental, + silent: true, + z2: 0 + }); + bgEl.__startPoint = backgroundStartPoint; + bgEl.__baseDimIdx = baseDimIdx; + bgEl.__largeDataIndices = largeDataIndices; + bgEl.__barWidth = barWidth; + setLargeBackgroundStyle(bgEl, backgroundModel, data); + group.add(bgEl); + } + + var el = new LargePath({ + shape: { + points: data.getLayout('largePoints') + }, + incremental: !!incremental + }); + el.__startPoint = startPoint; + el.__baseDimIdx = baseDimIdx; + el.__largeDataIndices = largeDataIndices; + el.__barWidth = barWidth; + group.add(el); + setLargeStyle(el, seriesModel, data); // Enable tooltip and user mouse/touch event handlers. + + getECData(el).seriesIndex = seriesModel.seriesIndex; + + if (!seriesModel.get('silent')) { + el.on('mousedown', largePathUpdateDataIndex); + el.on('mousemove', largePathUpdateDataIndex); + } + } // Use throttle to avoid frequently traverse to find dataIndex. + + + var largePathUpdateDataIndex = throttle(function (event) { + var largePath = this; + var dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY); + getECData(largePath).dataIndex = dataIndex >= 0 ? dataIndex : null; + }, 30, false); + + function largePathFindDataIndex(largePath, x, y) { + var baseDimIdx = largePath.__baseDimIdx; + var valueDimIdx = 1 - baseDimIdx; + var points = largePath.shape.points; + var largeDataIndices = largePath.__largeDataIndices; + var barWidthHalf = Math.abs(largePath.__barWidth / 2); + var startValueVal = largePath.__startPoint[valueDimIdx]; + _eventPos[0] = x; + _eventPos[1] = y; + var pointerBaseVal = _eventPos[baseDimIdx]; + var pointerValueVal = _eventPos[1 - baseDimIdx]; + var baseLowerBound = pointerBaseVal - barWidthHalf; + var baseUpperBound = pointerBaseVal + barWidthHalf; + + for (var i = 0, len = points.length / 2; i < len; i++) { + var ii = i * 2; + var barBaseVal = points[ii + baseDimIdx]; + var barValueVal = points[ii + valueDimIdx]; + + if (barBaseVal >= baseLowerBound && barBaseVal <= baseUpperBound && (startValueVal <= barValueVal ? pointerValueVal >= startValueVal && pointerValueVal <= barValueVal : pointerValueVal >= barValueVal && pointerValueVal <= startValueVal)) { + return largeDataIndices[i]; + } + } + + return -1; + } + + function setLargeStyle(el, seriesModel, data) { + var globalStyle = data.getVisual('style'); + el.useStyle(extend({}, globalStyle)); // Use stroke instead of fill. + + el.style.fill = null; + el.style.stroke = globalStyle.fill; + el.style.lineWidth = data.getLayout('barWidth'); + } + + function setLargeBackgroundStyle(el, backgroundModel, data) { + var borderColor = backgroundModel.get('borderColor') || backgroundModel.get('color'); + var itemStyle = backgroundModel.getItemStyle(); + el.useStyle(itemStyle); + el.style.fill = null; + el.style.stroke = borderColor; + el.style.lineWidth = data.getLayout('barWidth'); + } + + function createBackgroundShape(isHorizontalOrRadial, layout, coord) { + if (isCoordinateSystemType(coord, 'cartesian2d')) { + var rectShape = layout; + var coordLayout = coord.getArea(); + return { + x: isHorizontalOrRadial ? rectShape.x : coordLayout.x, + y: isHorizontalOrRadial ? coordLayout.y : rectShape.y, + width: isHorizontalOrRadial ? rectShape.width : coordLayout.width, + height: isHorizontalOrRadial ? coordLayout.height : rectShape.height + }; + } else { + var coordLayout = coord.getArea(); + var sectorShape = layout; + return { + cx: coordLayout.cx, + cy: coordLayout.cy, + r0: isHorizontalOrRadial ? coordLayout.r0 : sectorShape.r0, + r: isHorizontalOrRadial ? coordLayout.r : sectorShape.r, + startAngle: isHorizontalOrRadial ? sectorShape.startAngle : 0, + endAngle: isHorizontalOrRadial ? sectorShape.endAngle : Math.PI * 2 + }; + } + } + + function createBackgroundEl(coord, isHorizontalOrRadial, layout) { + var ElementClz = coord.type === 'polar' ? Sector : Rect; + return new ElementClz({ + shape: createBackgroundShape(isHorizontalOrRadial, layout, coord), + silent: true, + z2: 0 + }); + } + + function install$3(registers) { + registers.registerChartView(BarView); + registers.registerSeriesModel(BarSeriesModel); + registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, curry(layout, 'bar')); // Use higher prority to avoid to be blocked by other overall layout, which do not + // only exist in this module, but probably also exist in other modules, like `barPolar`. + + registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, largeLayout); // Down sample after filter + + registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample('bar')); + /** + * @payload + * @property {string} [componentType=series] + * @property {number} [dx] + * @property {number} [dy] + * @property {number} [zoom] + * @property {number} [originX] + * @property {number} [originY] + */ + + registers.registerAction({ + type: 'changeAxisOrder', + event: 'changeAxisOrder', + update: 'update' + }, function (payload, ecModel) { + var componentType = payload.componentType || 'series'; + ecModel.eachComponent({ + mainType: componentType, + query: payload + }, function (componentModel) { + if (payload.sortInfo) { + componentModel.axis.setCategorySortInfo(payload.sortInfo); + } + }); + }); + } + + var PI2$8 = Math.PI * 2; + var RADIAN = Math.PI / 180; + + function getViewRect(seriesModel, api) { + return getLayoutRect(seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + } + + function getBasicPieLayout(seriesModel, api) { + var viewRect = getViewRect(seriesModel, api); + var center = seriesModel.get('center'); + var radius = seriesModel.get('radius'); + + if (!isArray(radius)) { + radius = [0, radius]; + } + + if (!isArray(center)) { + center = [center, center]; + } + + var width = parsePercent$1(viewRect.width, api.getWidth()); + var height = parsePercent$1(viewRect.height, api.getHeight()); + var size = Math.min(width, height); + var cx = parsePercent$1(center[0], width) + viewRect.x; + var cy = parsePercent$1(center[1], height) + viewRect.y; + var r0 = parsePercent$1(radius[0], size / 2); + var r = parsePercent$1(radius[1], size / 2); + return { + cx: cx, + cy: cy, + r0: r0, + r: r + }; + } + function pieLayout(seriesType, ecModel, api) { + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + var data = seriesModel.getData(); + var valueDim = data.mapDimension('value'); + var viewRect = getViewRect(seriesModel, api); + + var _a = getBasicPieLayout(seriesModel, api), + cx = _a.cx, + cy = _a.cy, + r = _a.r, + r0 = _a.r0; + + var startAngle = -seriesModel.get('startAngle') * RADIAN; + var minAngle = seriesModel.get('minAngle') * RADIAN; + var validDataCount = 0; + data.each(valueDim, function (value) { + !isNaN(value) && validDataCount++; + }); + var sum = data.getSum(valueDim); // Sum may be 0 + + var unitRadian = Math.PI / (sum || validDataCount) * 2; + var clockwise = seriesModel.get('clockwise'); + var roseType = seriesModel.get('roseType'); + var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); // [0...max] + + var extent = data.getDataExtent(valueDim); + extent[0] = 0; // In the case some sector angle is smaller than minAngle + + var restAngle = PI2$8; + var valueSumLargerThanMinAngle = 0; + var currentAngle = startAngle; + var dir = clockwise ? 1 : -1; + data.setLayout({ + viewRect: viewRect, + r: r + }); + data.each(valueDim, function (value, idx) { + var angle; + + if (isNaN(value)) { + data.setItemLayout(idx, { + angle: NaN, + startAngle: NaN, + endAngle: NaN, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: r0, + r: roseType ? NaN : r + }); + return; + } // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样? + + + if (roseType !== 'area') { + angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian; + } else { + angle = PI2$8 / validDataCount; + } + + if (angle < minAngle) { + angle = minAngle; + restAngle -= minAngle; + } else { + valueSumLargerThanMinAngle += value; + } + + var endAngle = currentAngle + dir * angle; + data.setItemLayout(idx, { + angle: angle, + startAngle: currentAngle, + endAngle: endAngle, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: r0, + r: roseType ? linearMap(value, extent, [r0, r]) : r + }); + currentAngle = endAngle; + }); // Some sector is constrained by minAngle + // Rest sectors needs recalculate angle + + if (restAngle < PI2$8 && validDataCount) { + // Average the angle if rest angle is not enough after all angles is + // Constrained by minAngle + if (restAngle <= 1e-3) { + var angle_1 = PI2$8 / validDataCount; + data.each(valueDim, function (value, idx) { + if (!isNaN(value)) { + var layout_1 = data.getItemLayout(idx); + layout_1.angle = angle_1; + layout_1.startAngle = startAngle + dir * idx * angle_1; + layout_1.endAngle = startAngle + dir * (idx + 1) * angle_1; + } + }); + } else { + unitRadian = restAngle / valueSumLargerThanMinAngle; + currentAngle = startAngle; + data.each(valueDim, function (value, idx) { + if (!isNaN(value)) { + var layout_2 = data.getItemLayout(idx); + var angle = layout_2.angle === minAngle ? minAngle : value * unitRadian; + layout_2.startAngle = currentAngle; + layout_2.endAngle = currentAngle + dir * angle; + currentAngle += dir * angle; + } + }); + } + } + }); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function dataFilter(seriesType) { + return { + seriesType: seriesType, + reset: function (seriesModel, ecModel) { + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + + if (!legendModels || !legendModels.length) { + return; + } + + var data = seriesModel.getData(); + data.filterSelf(function (idx) { + var name = data.getName(idx); // If in any legend component the status is not selected. + + for (var i = 0; i < legendModels.length; i++) { + // @ts-ignore FIXME: LegendModel + if (!legendModels[i].isSelected(name)) { + return false; + } + } + + return true; + }); + } + }; + } + + var RADIAN$1 = Math.PI / 180; + + function adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft, viewTop, farthestX) { + if (list.length < 2) { + return; + } + + function recalculateXOnSemiToAlignOnEllipseCurve(semi) { + var rB = semi.rB; + var rB2 = rB * rB; + + for (var i = 0; i < semi.list.length; i++) { + var item = semi.list[i]; + var dy = Math.abs(item.label.y - cy); // horizontal r is always same with original r because x is not changed. + + var rA = r + item.len; + var rA2 = rA * rA; // Use ellipse implicit function to calculate x + + var dx = Math.sqrt((1 - Math.abs(dy * dy / rB2)) * rA2); + item.label.x = cx + (dx + item.len2) * dir; + } + } // Adjust X based on the shifted y. Make tight labels aligned on an ellipse curve. + + + function recalculateX(items) { + // Extremes of + var topSemi = { + list: [], + maxY: 0 + }; + var bottomSemi = { + list: [], + maxY: 0 + }; + + for (var i = 0; i < items.length; i++) { + if (items[i].labelAlignTo !== 'none') { + continue; + } + + var item = items[i]; + var semi = item.label.y > cy ? bottomSemi : topSemi; + var dy = Math.abs(item.label.y - cy); + + if (dy > semi.maxY) { + var dx = item.label.x - cx - item.len2 * dir; // horizontal r is always same with original r because x is not changed. + + var rA = r + item.len; // Canculate rB based on the topest / bottemest label. + + var rB = Math.abs(dx) < rA ? Math.sqrt(dy * dy / (1 - dx * dx / rA / rA)) : rA; + semi.rB = rB; + semi.maxY = dy; + } + + semi.list.push(item); + } + + recalculateXOnSemiToAlignOnEllipseCurve(topSemi); + recalculateXOnSemiToAlignOnEllipseCurve(bottomSemi); + } + + var len = list.length; + + for (var i = 0; i < len; i++) { + if (list[i].position === 'outer' && list[i].labelAlignTo === 'labelLine') { + var dx = list[i].label.x - farthestX; + list[i].linePoints[1][0] += dx; + list[i].label.x = farthestX; + } + } + + if (shiftLayoutOnY(list, viewTop, viewTop + viewHeight)) { + recalculateX(list); + } + } + + function avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop) { + var leftList = []; + var rightList = []; + var leftmostX = Number.MAX_VALUE; + var rightmostX = -Number.MAX_VALUE; + + for (var i = 0; i < labelLayoutList.length; i++) { + var label = labelLayoutList[i].label; + + if (isPositionCenter(labelLayoutList[i])) { + continue; + } + + if (label.x < cx) { + leftmostX = Math.min(leftmostX, label.x); + leftList.push(labelLayoutList[i]); + } else { + rightmostX = Math.max(rightmostX, label.x); + rightList.push(labelLayoutList[i]); + } + } + + adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight, viewLeft, viewTop, rightmostX); + adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight, viewLeft, viewTop, leftmostX); + + for (var i = 0; i < labelLayoutList.length; i++) { + var layout = labelLayoutList[i]; + var label = layout.label; + + if (isPositionCenter(layout)) { + continue; + } + + var linePoints = layout.linePoints; + + if (linePoints) { + var isAlignToEdge = layout.labelAlignTo === 'edge'; + var realTextWidth = layout.rect.width; + var targetTextWidth = void 0; + + if (isAlignToEdge) { + if (label.x < cx) { + targetTextWidth = linePoints[2][0] - layout.labelDistance - viewLeft - layout.edgeDistance; + } else { + targetTextWidth = viewLeft + viewWidth - layout.edgeDistance - linePoints[2][0] - layout.labelDistance; + } + } else { + if (label.x < cx) { + targetTextWidth = label.x - viewLeft - layout.bleedMargin; + } else { + targetTextWidth = viewLeft + viewWidth - label.x - layout.bleedMargin; + } + } + + if (targetTextWidth < layout.rect.width) { + // TODOTODO + // layout.text = textContain.truncateText(layout.text, targetTextWidth, layout.font); + layout.label.style.width = targetTextWidth; + + if (layout.labelAlignTo === 'edge') { + realTextWidth = targetTextWidth; // realTextWidth = textContain.getWidth(layout.text, layout.font); + } + } + + var dist = linePoints[1][0] - linePoints[2][0]; + + if (isAlignToEdge) { + if (label.x < cx) { + linePoints[2][0] = viewLeft + layout.edgeDistance + realTextWidth + layout.labelDistance; + } else { + linePoints[2][0] = viewLeft + viewWidth - layout.edgeDistance - realTextWidth - layout.labelDistance; + } + } else { + if (label.x < cx) { + linePoints[2][0] = label.x + layout.labelDistance; + } else { + linePoints[2][0] = label.x - layout.labelDistance; + } + + linePoints[1][0] = linePoints[2][0] + dist; + } + + linePoints[1][1] = linePoints[2][1] = label.y; + } + } + } + + function isPositionCenter(sectorShape) { + // Not change x for center label + return sectorShape.position === 'center'; + } + + function pieLabelLayout(seriesModel) { + var data = seriesModel.getData(); + var labelLayoutList = []; + var cx; + var cy; + var hasLabelRotate = false; + var minShowLabelRadian = (seriesModel.get('minShowLabelAngle') || 0) * RADIAN$1; + var viewRect = data.getLayout('viewRect'); + var r = data.getLayout('r'); + var viewWidth = viewRect.width; + var viewLeft = viewRect.x; + var viewTop = viewRect.y; + var viewHeight = viewRect.height; + + function setNotShow(el) { + el.ignore = true; + } + + function isLabelShown(label) { + if (!label.ignore) { + return true; + } + + for (var key in label.states) { + if (label.states[key].ignore === false) { + return true; + } + } + + return false; + } + + data.each(function (idx) { + var sector = data.getItemGraphicEl(idx); + var sectorShape = sector.shape; + var label = sector.getTextContent(); + var labelLine = sector.getTextGuideLine(); + var itemModel = data.getItemModel(idx); + var labelModel = itemModel.getModel('label'); // Use position in normal or emphasis + + var labelPosition = labelModel.get('position') || itemModel.get(['emphasis', 'label', 'position']); + var labelDistance = labelModel.get('distanceToLabelLine'); + var labelAlignTo = labelModel.get('alignTo'); + var edgeDistance = parsePercent$1(labelModel.get('edgeDistance'), viewWidth); + var bleedMargin = labelModel.get('bleedMargin'); + var labelLineModel = itemModel.getModel('labelLine'); + var labelLineLen = labelLineModel.get('length'); + labelLineLen = parsePercent$1(labelLineLen, viewWidth); + var labelLineLen2 = labelLineModel.get('length2'); + labelLineLen2 = parsePercent$1(labelLineLen2, viewWidth); + + if (Math.abs(sectorShape.endAngle - sectorShape.startAngle) < minShowLabelRadian) { + each(label.states, setNotShow); + label.ignore = true; + return; + } + + if (!isLabelShown(label)) { + return; + } + + var midAngle = (sectorShape.startAngle + sectorShape.endAngle) / 2; + var nx = Math.cos(midAngle); + var ny = Math.sin(midAngle); + var textX; + var textY; + var linePoints; + var textAlign; + cx = sectorShape.cx; + cy = sectorShape.cy; + var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner'; + + if (labelPosition === 'center') { + textX = sectorShape.cx; + textY = sectorShape.cy; + textAlign = 'center'; + } else { + var x1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * nx : sectorShape.r * nx) + cx; + var y1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * ny : sectorShape.r * ny) + cy; + textX = x1 + nx * 3; + textY = y1 + ny * 3; + + if (!isLabelInside) { + // For roseType + var x2 = x1 + nx * (labelLineLen + r - sectorShape.r); + var y2 = y1 + ny * (labelLineLen + r - sectorShape.r); + var x3 = x2 + (nx < 0 ? -1 : 1) * labelLineLen2; + var y3 = y2; + + if (labelAlignTo === 'edge') { + // Adjust textX because text align of edge is opposite + textX = nx < 0 ? viewLeft + edgeDistance : viewLeft + viewWidth - edgeDistance; + } else { + textX = x3 + (nx < 0 ? -labelDistance : labelDistance); + } + + textY = y3; + linePoints = [[x1, y1], [x2, y2], [x3, y3]]; + } + + textAlign = isLabelInside ? 'center' : labelAlignTo === 'edge' ? nx > 0 ? 'right' : 'left' : nx > 0 ? 'left' : 'right'; + } + + var labelRotate; + var rotate = labelModel.get('rotate'); + + if (typeof rotate === 'number') { + labelRotate = rotate * (Math.PI / 180); + } else if (labelPosition === 'center') { + labelRotate = 0; + } else { + var radialAngle = nx < 0 ? -midAngle + Math.PI : -midAngle; + + if (rotate === 'radial' || rotate === true) { + labelRotate = radialAngle; + } else if (rotate === 'tangential' && labelPosition !== 'outside' && labelPosition !== 'outer') { + labelRotate = radialAngle + Math.PI / 2; + + if (labelRotate > Math.PI / 2) { + labelRotate -= Math.PI; + } + } else { + labelRotate = 0; + } + } + + hasLabelRotate = !!labelRotate; + label.x = textX; + label.y = textY; + label.rotation = labelRotate; + label.setStyle({ + verticalAlign: 'middle' + }); // Not sectorShape the inside label + + if (!isLabelInside) { + var textRect = label.getBoundingRect().clone(); + textRect.applyTransform(label.getComputedTransform()); // Text has a default 1px stroke. Exclude this. + + var margin = (label.style.margin || 0) + 2.1; + textRect.y -= margin / 2; + textRect.height += margin; + labelLayoutList.push({ + label: label, + labelLine: labelLine, + position: labelPosition, + len: labelLineLen, + len2: labelLineLen2, + minTurnAngle: labelLineModel.get('minTurnAngle'), + maxSurfaceAngle: labelLineModel.get('maxSurfaceAngle'), + surfaceNormal: new Point(nx, ny), + linePoints: linePoints, + textAlign: textAlign, + labelDistance: labelDistance, + labelAlignTo: labelAlignTo, + edgeDistance: edgeDistance, + bleedMargin: bleedMargin, + rect: textRect + }); + } else { + label.setStyle({ + align: textAlign + }); + var selectState = label.states.select; + + if (selectState) { + selectState.x += label.x; + selectState.y += label.y; + } + } + + sector.setTextConfig({ + inside: isLabelInside + }); + }); + + if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) { + avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop); + } + + for (var i = 0; i < labelLayoutList.length; i++) { + var layout = labelLayoutList[i]; + var label = layout.label; + var labelLine = layout.labelLine; + var notShowLabel = isNaN(label.x) || isNaN(label.y); + + if (label) { + label.setStyle({ + align: layout.textAlign + }); + + if (notShowLabel) { + each(label.states, setNotShow); + label.ignore = true; + } + + var selectState = label.states.select; + + if (selectState) { + selectState.x += label.x; + selectState.y += label.y; + } + } + + if (labelLine) { + var linePoints = layout.linePoints; + + if (notShowLabel || !linePoints) { + each(labelLine.states, setNotShow); + labelLine.ignore = true; + } else { + limitTurnAngle(linePoints, layout.minTurnAngle); + limitSurfaceAngle(linePoints, layout.surfaceNormal, layout.maxSurfaceAngle); + labelLine.setShape({ + points: linePoints + }); // Set the anchor to the midpoint of sector + + label.__hostTarget.textGuideLineConfig = { + anchor: new Point(linePoints[0][0], linePoints[0][1]) + }; + } + } + } + } + + function getSectorCornerRadius(model, shape, zeroIfNull) { + var cornerRadius = model.get('borderRadius'); + + if (cornerRadius == null) { + return zeroIfNull ? { + innerCornerRadius: 0, + cornerRadius: 0 + } : null; + } + + if (!isArray(cornerRadius)) { + cornerRadius = [cornerRadius, cornerRadius]; + } + + return { + innerCornerRadius: parsePercent(cornerRadius[0], shape.r0), + cornerRadius: parsePercent(cornerRadius[1], shape.r) + }; + } + + /** + * Piece of pie including Sector, Label, LabelLine + */ + + var PiePiece = + /** @class */ + function (_super) { + __extends(PiePiece, _super); + + function PiePiece(data, idx, startAngle) { + var _this = _super.call(this) || this; + + _this.z2 = 2; + var text = new ZRText(); + + _this.setTextContent(text); + + _this.updateData(data, idx, startAngle, true); + + return _this; + } + + PiePiece.prototype.updateData = function (data, idx, startAngle, firstCreate) { + var sector = this; + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var emphasisModel = itemModel.getModel('emphasis'); + var layout = data.getItemLayout(idx); // cornerRadius & innerCornerRadius doesn't exist in the item layout. Use `0` if null value is specified. + // see `setItemLayout` in `pieLayout.ts`. + + var sectorShape = extend(getSectorCornerRadius(itemModel.getModel('itemStyle'), layout, true), layout); // Ignore NaN data. + + if (isNaN(sectorShape.startAngle)) { + // Use NaN shape to avoid drawing shape. + sector.setShape(sectorShape); + return; + } + + if (firstCreate) { + sector.setShape(sectorShape); + var animationType = seriesModel.getShallow('animationType'); + + if (animationType === 'scale') { + sector.shape.r = layout.r0; + initProps(sector, { + shape: { + r: layout.r + } + }, seriesModel, idx); + } // Expansion + else { + if (startAngle != null) { + sector.setShape({ + startAngle: startAngle, + endAngle: startAngle + }); + initProps(sector, { + shape: { + startAngle: layout.startAngle, + endAngle: layout.endAngle + } + }, seriesModel, idx); + } else { + sector.shape.endAngle = layout.startAngle; + updateProps(sector, { + shape: { + endAngle: layout.endAngle + } + }, seriesModel, idx); + } + } + } else { + saveOldStyle(sector); // Transition animation from the old shape + + updateProps(sector, { + shape: sectorShape + }, seriesModel, idx); + } + + sector.useStyle(data.getItemVisual(idx, 'style')); + setStatesStylesFromModel(sector, itemModel); + var midAngle = (layout.startAngle + layout.endAngle) / 2; + var offset = seriesModel.get('selectedOffset'); + var dx = Math.cos(midAngle) * offset; + var dy = Math.sin(midAngle) * offset; + var cursorStyle = itemModel.getShallow('cursor'); + cursorStyle && sector.attr('cursor', cursorStyle); + + this._updateLabel(seriesModel, data, idx); + + sector.ensureState('emphasis').shape = __assign({ + r: layout.r + (emphasisModel.get('scale') ? emphasisModel.get('scaleSize') || 0 : 0) + }, getSectorCornerRadius(emphasisModel.getModel('itemStyle'), layout)); + extend(sector.ensureState('select'), { + x: dx, + y: dy, + shape: getSectorCornerRadius(itemModel.getModel(['select', 'itemStyle']), layout) + }); + extend(sector.ensureState('blur'), { + shape: getSectorCornerRadius(itemModel.getModel(['blur', 'itemStyle']), layout) + }); + var labelLine = sector.getTextGuideLine(); + var labelText = sector.getTextContent(); + labelLine && extend(labelLine.ensureState('select'), { + x: dx, + y: dy + }); // TODO: needs dx, dy in zrender? + + extend(labelText.ensureState('select'), { + x: dx, + y: dy + }); + enableHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope')); + }; + + PiePiece.prototype._updateLabel = function (seriesModel, data, idx) { + var sector = this; + var itemModel = data.getItemModel(idx); + var labelLineModel = itemModel.getModel('labelLine'); + var style = data.getItemVisual(idx, 'style'); + var visualColor = style && style.fill; + var visualOpacity = style && style.opacity; + setLabelStyle(sector, getLabelStatesModels(itemModel), { + labelFetcher: data.hostModel, + labelDataIndex: idx, + inheritColor: visualColor, + defaultOpacity: visualOpacity, + defaultText: seriesModel.getFormattedLabel(idx, 'normal') || data.getName(idx) + }); + var labelText = sector.getTextContent(); // Set textConfig on sector. + + sector.setTextConfig({ + // reset position, rotation + position: null, + rotation: null + }); // Make sure update style on labelText after setLabelStyle. + // Because setLabelStyle will replace a new style on it. + + labelText.attr({ + z2: 10 + }); + var labelPosition = seriesModel.get(['label', 'position']); + + if (labelPosition !== 'outside' && labelPosition !== 'outer') { + sector.removeTextGuideLine(); + } else { + var polyline = this.getTextGuideLine(); + + if (!polyline) { + polyline = new Polyline(); + this.setTextGuideLine(polyline); + } // Default use item visual color + + + setLabelLineStyle(this, getLabelLineStatesModels(itemModel), { + stroke: visualColor, + opacity: retrieve3(labelLineModel.get(['lineStyle', 'opacity']), visualOpacity, 1) + }); + } + }; + + return PiePiece; + }(Sector); // Pie view + + + var PieView = + /** @class */ + function (_super) { + __extends(PieView, _super); + + function PieView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.ignoreLabelLineUpdate = true; + return _this; + } + + PieView.prototype.init = function () { + var sectorGroup = new Group(); + this._sectorGroup = sectorGroup; + }; + + PieView.prototype.render = function (seriesModel, ecModel, api, payload) { + var data = seriesModel.getData(); + var oldData = this._data; + var group = this.group; + var startAngle; // First render + + if (!oldData && data.count() > 0) { + var shape = data.getItemLayout(0); + + for (var s = 1; isNaN(shape && shape.startAngle) && s < data.count(); ++s) { + shape = data.getItemLayout(s); + } + + if (shape) { + startAngle = shape.startAngle; + } + } // remove empty-circle if it exists + + + if (this._emptyCircleSector) { + group.remove(this._emptyCircleSector); + } // when all data are filtered, show lightgray empty circle + + + if (data.count() === 0 && seriesModel.get('showEmptyCircle')) { + var sector = new Sector({ + shape: getBasicPieLayout(seriesModel, api) + }); + sector.useStyle(seriesModel.getModel('emptyCircleStyle').getItemStyle()); + this._emptyCircleSector = sector; + group.add(sector); + } + + data.diff(oldData).add(function (idx) { + var piePiece = new PiePiece(data, idx, startAngle); + data.setItemGraphicEl(idx, piePiece); + group.add(piePiece); + }).update(function (newIdx, oldIdx) { + var piePiece = oldData.getItemGraphicEl(oldIdx); + piePiece.updateData(data, newIdx, startAngle); + piePiece.off('click'); + group.add(piePiece); + data.setItemGraphicEl(newIdx, piePiece); + }).remove(function (idx) { + var piePiece = oldData.getItemGraphicEl(idx); + removeElementWithFadeOut(piePiece, seriesModel, idx); + }).execute(); + pieLabelLayout(seriesModel); // Always use initial animation. + + if (seriesModel.get('animationTypeUpdate') !== 'expansion') { + this._data = data; + } + }; + + PieView.prototype.dispose = function () {}; + + PieView.prototype.containPoint = function (point, seriesModel) { + var data = seriesModel.getData(); + var itemLayout = data.getItemLayout(0); + + if (itemLayout) { + var dx = point[0] - itemLayout.cx; + var dy = point[1] - itemLayout.cy; + var radius = Math.sqrt(dx * dx + dy * dy); + return radius <= itemLayout.r && radius >= itemLayout.r0; + } + }; + + PieView.type = 'pie'; + return PieView; + }(ChartView); + + /** + * [Usage]: + * (1) + * createListSimply(seriesModel, ['value']); + * (2) + * createListSimply(seriesModel, { + * coordDimensions: ['value'], + * dimensionsCount: 5 + * }); + */ + + function createSeriesDataSimply(seriesModel, opt, nameList) { + opt = isArray(opt) && { + coordDimensions: opt + } || extend({ + encodeDefine: seriesModel.getEncode() + }, opt); + var source = seriesModel.getSource(); + var dimensions = prepareSeriesDataSchema(source, opt).dimensions; + var list = new SeriesData(dimensions, seriesModel); + list.initData(source, nameList); + return list; + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + /** + * LegendVisualProvider is an bridge that pick encoded color from data and + * provide to the legend component. + */ + var LegendVisualProvider = + /** @class */ + function () { + function LegendVisualProvider( // Function to get data after filtered. It stores all the encoding info + getDataWithEncodedVisual, // Function to get raw data before filtered. + getRawData) { + this._getDataWithEncodedVisual = getDataWithEncodedVisual; + this._getRawData = getRawData; + } + + LegendVisualProvider.prototype.getAllNames = function () { + var rawData = this._getRawData(); // We find the name from the raw data. In case it's filtered by the legend component. + // Normally, the name can be found in rawData, but can't be found in filtered data will display as gray. + + + return rawData.mapArray(rawData.getName); + }; + + LegendVisualProvider.prototype.containName = function (name) { + var rawData = this._getRawData(); + + return rawData.indexOfName(name) >= 0; + }; + + LegendVisualProvider.prototype.indexOfName = function (name) { + // Only get data when necessary. + // Because LegendVisualProvider constructor may be new in the stage that data is not prepared yet. + // Invoking Series#getData immediately will throw an error. + var dataWithEncodedVisual = this._getDataWithEncodedVisual(); + + return dataWithEncodedVisual.indexOfName(name); + }; + + LegendVisualProvider.prototype.getItemVisual = function (dataIndex, key) { + // Get encoded visual properties from final filtered data. + var dataWithEncodedVisual = this._getDataWithEncodedVisual(); + + return dataWithEncodedVisual.getItemVisual(dataIndex, key); + }; + + return LegendVisualProvider; + }(); + + var PieSeriesModel = + /** @class */ + function (_super) { + __extends(PieSeriesModel, _super); + + function PieSeriesModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @overwrite + */ + + + PieSeriesModel.prototype.init = function (option) { + _super.prototype.init.apply(this, arguments); // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + + + this.legendVisualProvider = new LegendVisualProvider(bind(this.getData, this), bind(this.getRawData, this)); + + this._defaultLabelLine(option); + }; + /** + * @overwrite + */ + + + PieSeriesModel.prototype.mergeOption = function () { + _super.prototype.mergeOption.apply(this, arguments); + }; + /** + * @overwrite + */ + + + PieSeriesModel.prototype.getInitialData = function () { + return createSeriesDataSimply(this, { + coordDimensions: ['value'], + encodeDefaulter: curry(makeSeriesEncodeForNameBased, this) + }); + }; + /** + * @overwrite + */ + + + PieSeriesModel.prototype.getDataParams = function (dataIndex) { + var data = this.getData(); + + var params = _super.prototype.getDataParams.call(this, dataIndex); // FIXME toFixed? + + + var valueList = []; + data.each(data.mapDimension('value'), function (value) { + valueList.push(value); + }); + params.percent = getPercentWithPrecision(valueList, dataIndex, data.hostModel.get('percentPrecision')); + params.$vars.push('percent'); + return params; + }; + + PieSeriesModel.prototype._defaultLabelLine = function (option) { + // Extend labelLine emphasis + defaultEmphasis(option, 'labelLine', ['show']); + var labelLineNormalOpt = option.labelLine; + var labelLineEmphasisOpt = option.emphasis.labelLine; // Not show label line if `label.normal.show = false` + + labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show; + labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show; + }; + + PieSeriesModel.type = 'series.pie'; + PieSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + legendHoverLink: true, + colorBy: 'data', + // 默认全局居中 + center: ['50%', '50%'], + radius: [0, '75%'], + // 默认顺时针 + clockwise: true, + startAngle: 90, + // 最小角度改为0 + minAngle: 0, + // If the angle of a sector less than `minShowLabelAngle`, + // the label will not be displayed. + minShowLabelAngle: 0, + // 选中时扇区偏移量 + selectedOffset: 10, + // 选择模式,默认关闭,可选single,multiple + // selectedMode: false, + // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积) + // roseType: null, + percentPrecision: 2, + // If still show when all data zero. + stillShowZeroSum: true, + // cursor: null, + left: 0, + top: 0, + right: 0, + bottom: 0, + width: null, + height: null, + label: { + // color: 'inherit', + // If rotate around circle + rotate: 0, + show: true, + overflow: 'truncate', + // 'outer', 'inside', 'center' + position: 'outer', + // 'none', 'labelLine', 'edge'. Works only when position is 'outer' + alignTo: 'none', + // Closest distance between label and chart edge. + // Works only position is 'outer' and alignTo is 'edge'. + edgeDistance: '25%', + // Works only position is 'outer' and alignTo is not 'edge'. + bleedMargin: 10, + // Distance between text and label line. + distanceToLabelLine: 5 // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + // 默认使用全局文本样式,详见TEXTSTYLE + // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数 + + }, + // Enabled when label.normal.position is 'outer' + labelLine: { + show: true, + // 引导线两段中的第一段长度 + length: 15, + // 引导线两段中的第二段长度 + length2: 15, + smooth: false, + minTurnAngle: 90, + maxSurfaceAngle: 90, + lineStyle: { + // color: 各异, + width: 1, + type: 'solid' + } + }, + itemStyle: { + borderWidth: 1, + borderJoin: 'round' + }, + showEmptyCircle: true, + emptyCircleStyle: { + color: 'lightgray', + opacity: 1 + }, + labelLayout: { + // Hide the overlapped label. + hideOverlap: true + }, + emphasis: { + scale: true, + scaleSize: 5 + }, + // If use strategy to avoid label overlapping + avoidLabelOverlap: true, + // Animation type. Valid values: expansion, scale + animationType: 'expansion', + animationDuration: 1000, + // Animation type when update. Valid values: transition, expansion + animationTypeUpdate: 'transition', + animationEasingUpdate: 'cubicInOut', + animationDurationUpdate: 500, + animationEasing: 'cubicInOut' + }; + return PieSeriesModel; + }(SeriesModel); + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function negativeDataFilter(seriesType) { + return { + seriesType: seriesType, + reset: function (seriesModel, ecModel) { + var data = seriesModel.getData(); + data.filterSelf(function (idx) { + // handle negative value condition + var valueDim = data.mapDimension('value'); + var curValue = data.get(valueDim, idx); + + if (typeof curValue === 'number' && !isNaN(curValue) && curValue < 0) { + return false; + } + + return true; + }); + } + }; + } + + function install$4(registers) { + registers.registerChartView(PieView); + registers.registerSeriesModel(PieSeriesModel); + createLegacyDataSelectAction('pie', registers.registerAction); + registers.registerLayout(curry(pieLayout, 'pie')); + registers.registerProcessor(dataFilter('pie')); + registers.registerProcessor(negativeDataFilter('pie')); + } + + var ScatterSeriesModel = + /** @class */ + function (_super) { + __extends(ScatterSeriesModel, _super); + + function ScatterSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ScatterSeriesModel.type; + _this.hasSymbolVisual = true; + return _this; + } + + ScatterSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesData(null, this, { + useEncodeDefaulter: true + }); + }; + + ScatterSeriesModel.prototype.getProgressive = function () { + var progressive = this.option.progressive; + + if (progressive == null) { + // PENDING + return this.option.large ? 5e3 : this.get('progressive'); + } + + return progressive; + }; + + ScatterSeriesModel.prototype.getProgressiveThreshold = function () { + var progressiveThreshold = this.option.progressiveThreshold; + + if (progressiveThreshold == null) { + // PENDING + return this.option.large ? 1e4 : this.get('progressiveThreshold'); + } + + return progressiveThreshold; + }; + + ScatterSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) { + return selectors.point(data.getItemLayout(dataIndex)); + }; + + ScatterSeriesModel.type = 'series.scatter'; + ScatterSeriesModel.dependencies = ['grid', 'polar', 'geo', 'singleAxis', 'calendar']; + ScatterSeriesModel.defaultOption = { + coordinateSystem: 'cartesian2d', + zlevel: 0, + z: 2, + legendHoverLink: true, + symbolSize: 10, + // symbolRotate: null, // 图形旋转控制 + large: false, + // Available when large is true + largeThreshold: 2000, + // cursor: null, + itemStyle: { + opacity: 0.8 // color: 各异 + + }, + emphasis: { + scale: true + }, + // If clip the overflow graphics + // Works on cartesian / polar series + clip: true, + select: { + itemStyle: { + borderColor: '#212121' + } + }, + universalTransition: { + divideShape: 'clone' + } // progressive: null + + }; + return ScatterSeriesModel; + }(SeriesModel); + + var BOOST_SIZE_THRESHOLD = 4; + + var LargeSymbolPathShape = + /** @class */ + function () { + function LargeSymbolPathShape() {} + + return LargeSymbolPathShape; + }(); + + var LargeSymbolPath = + /** @class */ + function (_super) { + __extends(LargeSymbolPath, _super); + + function LargeSymbolPath(opts) { + return _super.call(this, opts) || this; + } + + LargeSymbolPath.prototype.getDefaultShape = function () { + return new LargeSymbolPathShape(); + }; + + LargeSymbolPath.prototype.buildPath = function (path, shape) { + var points = shape.points; + var size = shape.size; + var symbolProxy = this.symbolProxy; + var symbolProxyShape = symbolProxy.shape; + var ctx = path.getContext ? path.getContext() : path; + var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD; // Do draw in afterBrush. + + if (canBoost) { + this._ctx = ctx; + return; + } + + this._ctx = null; + + for (var i = 0; i < points.length;) { + var x = points[i++]; + var y = points[i++]; + + if (isNaN(x) || isNaN(y)) { + continue; + } + + if (this.softClipShape && !this.softClipShape.contain(x, y)) { + continue; + } + + symbolProxyShape.x = x - size[0] / 2; + symbolProxyShape.y = y - size[1] / 2; + symbolProxyShape.width = size[0]; + symbolProxyShape.height = size[1]; + symbolProxy.buildPath(path, symbolProxyShape, true); + } + }; + + LargeSymbolPath.prototype.afterBrush = function () { + var shape = this.shape; + var points = shape.points; + var size = shape.size; + var ctx = this._ctx; + + if (!ctx) { + return; + } // PENDING If style or other canvas status changed? + + + for (var i = 0; i < points.length;) { + var x = points[i++]; + var y = points[i++]; + + if (isNaN(x) || isNaN(y)) { + continue; + } + + if (this.softClipShape && !this.softClipShape.contain(x, y)) { + continue; + } // fillRect is faster than building a rect path and draw. + // And it support light globalCompositeOperation. + + + ctx.fillRect(x - size[0] / 2, y - size[1] / 2, size[0], size[1]); + } + }; + + LargeSymbolPath.prototype.findDataIndex = function (x, y) { + // TODO ??? + // Consider transform + var shape = this.shape; + var points = shape.points; + var size = shape.size; + var w = Math.max(size[0], 4); + var h = Math.max(size[1], 4); // Not consider transform + // Treat each element as a rect + // top down traverse + + for (var idx = points.length / 2 - 1; idx >= 0; idx--) { + var i = idx * 2; + var x0 = points[i] - w / 2; + var y0 = points[i + 1] - h / 2; + + if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) { + return idx; + } + } + + return -1; + }; + + return LargeSymbolPath; + }(Path); + + var LargeSymbolDraw = + /** @class */ + function () { + function LargeSymbolDraw() { + this.group = new Group(); + } + + LargeSymbolDraw.prototype.isPersistent = function () { + return !this._incremental; + }; + /** + * Update symbols draw by new data + */ + + LargeSymbolDraw.prototype.updateData = function (data, opt) { + this.group.removeAll(); + var symbolEl = new LargeSymbolPath({ + rectHover: true, + cursor: 'default' + }); + symbolEl.setShape({ + points: data.getLayout('points') + }); + + this._setCommon(symbolEl, data, false, opt); + + this.group.add(symbolEl); + this._incremental = null; + }; + + LargeSymbolDraw.prototype.updateLayout = function (data) { + if (this._incremental) { + return; + } + + var points = data.getLayout('points'); + this.group.eachChild(function (child) { + if (child.startIndex != null) { + var len = (child.endIndex - child.startIndex) * 2; + var byteOffset = child.startIndex * 4 * 2; + points = new Float32Array(points.buffer, byteOffset, len); + } + + child.setShape('points', points); + }); + }; + + LargeSymbolDraw.prototype.incrementalPrepareUpdate = function (data) { + this.group.removeAll(); + + this._clearIncremental(); // Only use incremental displayables when data amount is larger than 2 million. + // PENDING Incremental data? + + + if (data.count() > 2e6) { + if (!this._incremental) { + this._incremental = new IncrementalDisplayable({ + silent: true + }); + } + + this.group.add(this._incremental); + } else { + this._incremental = null; + } + }; + + LargeSymbolDraw.prototype.incrementalUpdate = function (taskParams, data, opt) { + var symbolEl; + + if (this._incremental) { + symbolEl = new LargeSymbolPath(); + + this._incremental.addDisplayable(symbolEl, true); + } else { + symbolEl = new LargeSymbolPath({ + rectHover: true, + cursor: 'default', + startIndex: taskParams.start, + endIndex: taskParams.end + }); + symbolEl.incremental = true; + this.group.add(symbolEl); + } + + symbolEl.setShape({ + points: data.getLayout('points') + }); + + this._setCommon(symbolEl, data, !!this._incremental, opt); + }; + + LargeSymbolDraw.prototype._setCommon = function (symbolEl, data, isIncremental, opt) { + var hostModel = data.hostModel; + opt = opt || {}; + var size = data.getVisual('symbolSize'); + symbolEl.setShape('size', size instanceof Array ? size : [size, size]); + symbolEl.softClipShape = opt.clipShape || null; // Create symbolProxy to build path for each data + + symbolEl.symbolProxy = createSymbol(data.getVisual('symbol'), 0, 0, 0, 0); // Use symbolProxy setColor method + + symbolEl.setColor = symbolEl.symbolProxy.setColor; + var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD; + symbolEl.useStyle( // Draw shadow when doing fillRect is extremely slow. + hostModel.getModel('itemStyle').getItemStyle(extrudeShadow ? ['color', 'shadowBlur', 'shadowColor'] : ['color'])); + var globalStyle = data.getVisual('style'); + var visualColor = globalStyle && globalStyle.fill; + + if (visualColor) { + symbolEl.setColor(visualColor); + } + + if (!isIncremental) { + var ecData_1 = getECData(symbolEl); // Enable tooltip + // PENDING May have performance issue when path is extremely large + + ecData_1.seriesIndex = hostModel.seriesIndex; + symbolEl.on('mousemove', function (e) { + ecData_1.dataIndex = null; + var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY); + + if (dataIndex >= 0) { + // Provide dataIndex for tooltip + ecData_1.dataIndex = dataIndex + (symbolEl.startIndex || 0); + } + }); + } + }; + + LargeSymbolDraw.prototype.remove = function () { + this._clearIncremental(); + + this._incremental = null; + this.group.removeAll(); + }; + + LargeSymbolDraw.prototype._clearIncremental = function () { + var incremental = this._incremental; + + if (incremental) { + incremental.clearDisplaybles(); + } + }; + + return LargeSymbolDraw; + }(); + + var ScatterView = + /** @class */ + function (_super) { + __extends(ScatterView, _super); + + function ScatterView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ScatterView.type; + return _this; + } + + ScatterView.prototype.render = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var symbolDraw = this._updateSymbolDraw(data, seriesModel); + + symbolDraw.updateData(data, { + // TODO + // If this parameter should be a shape or a bounding volume + // shape will be more general. + // But bounding volume like bounding rect will be much faster in the contain calculation + clipShape: this._getClipShape(seriesModel) + }); + this._finished = true; + }; + + ScatterView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var symbolDraw = this._updateSymbolDraw(data, seriesModel); + + symbolDraw.incrementalPrepareUpdate(data); + this._finished = false; + }; + + ScatterView.prototype.incrementalRender = function (taskParams, seriesModel, ecModel) { + this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData(), { + clipShape: this._getClipShape(seriesModel) + }); + + this._finished = taskParams.end === seriesModel.getData().count(); + }; + + ScatterView.prototype.updateTransform = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); // Must mark group dirty and make sure the incremental layer will be cleared + // PENDING + + this.group.dirty(); + + if (!this._finished || data.count() > 1e4 || !this._symbolDraw.isPersistent()) { + return { + update: true + }; + } else { + var res = pointsLayout('').reset(seriesModel, ecModel, api); + + if (res.progress) { + res.progress({ + start: 0, + end: data.count(), + count: data.count() + }, data); + } + + this._symbolDraw.updateLayout(data); + } + }; + + ScatterView.prototype._getClipShape = function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var clipArea = coordSys && coordSys.getArea && coordSys.getArea(); + return seriesModel.get('clip', true) ? clipArea : null; + }; + + ScatterView.prototype._updateSymbolDraw = function (data, seriesModel) { + var symbolDraw = this._symbolDraw; + var pipelineContext = seriesModel.pipelineContext; + var isLargeDraw = pipelineContext.large; + + if (!symbolDraw || isLargeDraw !== this._isLargeDraw) { + symbolDraw && symbolDraw.remove(); + symbolDraw = this._symbolDraw = isLargeDraw ? new LargeSymbolDraw() : new SymbolDraw(); + this._isLargeDraw = isLargeDraw; + this.group.removeAll(); + } + + this.group.add(symbolDraw.group); + return symbolDraw; + }; + + ScatterView.prototype.remove = function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(true); + this._symbolDraw = null; + }; + + ScatterView.prototype.dispose = function () {}; + + ScatterView.type = 'scatter'; + return ScatterView; + }(ChartView); + + var GridModel = + /** @class */ + function (_super) { + __extends(GridModel, _super); + + function GridModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + + GridModel.type = 'grid'; + GridModel.dependencies = ['xAxis', 'yAxis']; + GridModel.layoutMode = 'box'; + GridModel.defaultOption = { + show: false, + zlevel: 0, + z: 0, + left: '10%', + top: 60, + right: '10%', + bottom: 70, + // If grid size contain label + containLabel: false, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 1, + borderColor: '#ccc' + }; + return GridModel; + }(ComponentModel); + + var CartesianAxisModel = + /** @class */ + function (_super) { + __extends(CartesianAxisModel, _super); + + function CartesianAxisModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + + CartesianAxisModel.prototype.getCoordSysModel = function () { + return this.getReferringComponents('grid', SINGLE_REFERRING).models[0]; + }; + + CartesianAxisModel.type = 'cartesian2dAxis'; + return CartesianAxisModel; + }(ComponentModel); + mixin(CartesianAxisModel, AxisModelCommonMixin); + + var defaultOption = { + show: true, + zlevel: 0, + z: 0, + // Inverse the axis. + inverse: false, + // Axis name displayed. + name: '', + // 'start' | 'middle' | 'end' + nameLocation: 'end', + // By degree. By default auto rotate by nameLocation. + nameRotate: null, + nameTruncate: { + maxWidth: null, + ellipsis: '...', + placeholder: '.' + }, + // Use global text style by default. + nameTextStyle: {}, + // The gap between axisName and axisLine. + nameGap: 15, + // Default `false` to support tooltip. + silent: false, + // Default `false` to avoid legacy user event listener fail. + triggerEvent: false, + tooltip: { + show: false + }, + axisPointer: {}, + axisLine: { + show: true, + onZero: true, + onZeroAxisIndex: null, + lineStyle: { + color: '#6E7079', + width: 1, + type: 'solid' + }, + // The arrow at both ends the the axis. + symbol: ['none', 'none'], + symbolSize: [10, 15] + }, + axisTick: { + show: true, + // Whether axisTick is inside the grid or outside the grid. + inside: false, + // The length of axisTick. + length: 5, + lineStyle: { + width: 1 + } + }, + axisLabel: { + show: true, + // Whether axisLabel is inside the grid or outside the grid. + inside: false, + rotate: 0, + // true | false | null/undefined (auto) + showMinLabel: null, + // true | false | null/undefined (auto) + showMaxLabel: null, + margin: 8, + // formatter: null, + fontSize: 12 + }, + splitLine: { + show: true, + lineStyle: { + color: ['#E0E6F1'], + width: 1, + type: 'solid' + } + }, + splitArea: { + show: false, + areaStyle: { + color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)'] + } + } + }; + var categoryAxis = merge({ + // The gap at both ends of the axis. For categoryAxis, boolean. + boundaryGap: true, + // Set false to faster category collection. + deduplication: null, + // splitArea: { + // show: false + // }, + splitLine: { + show: false + }, + axisTick: { + // If tick is align with label when boundaryGap is true + alignWithLabel: false, + interval: 'auto' + }, + axisLabel: { + interval: 'auto' + } + }, defaultOption); + var valueAxis = merge({ + boundaryGap: [0, 0], + axisLine: { + // Not shown when other axis is categoryAxis in cartesian + show: 'auto' + }, + axisTick: { + // Not shown when other axis is categoryAxis in cartesian + show: 'auto' + }, + // TODO + // min/max: [30, datamin, 60] or [20, datamin] or [datamin, 60] + splitNumber: 5, + minorTick: { + // Minor tick, not available for cateogry axis. + show: false, + // Split number of minor ticks. The value should be in range of (0, 100) + splitNumber: 5, + // Lenght of minor tick + length: 3, + // Line style + lineStyle: {// Default to be same with axisTick + } + }, + minorSplitLine: { + show: false, + lineStyle: { + color: '#F4F7FD', + width: 1 + } + } + }, defaultOption); + var timeAxis = merge({ + scale: true, + splitNumber: 6, + axisLabel: { + // To eliminate labels that are not nice + showMinLabel: false, + showMaxLabel: false, + rich: { + primary: { + fontWeight: 'bold' + } + } + }, + splitLine: { + show: false + } + }, valueAxis); + var logAxis = defaults({ + scale: true, + logBase: 10 + }, valueAxis); + var axisDefault = { + category: categoryAxis, + value: valueAxis, + time: timeAxis, + log: logAxis + }; + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var AXIS_TYPES = { + value: 1, + category: 1, + time: 1, + log: 1 + }; + + /** + * Generate sub axis model class + * @param axisName 'x' 'y' 'radius' 'angle' 'parallel' ... + */ + + function axisModelCreator(registers, axisName, BaseAxisModelClass, extraDefaultOption) { + each(AXIS_TYPES, function (v, axisType) { + var defaultOption = merge(merge({}, axisDefault[axisType], true), extraDefaultOption, true); + + var AxisModel = + /** @class */ + function (_super) { + __extends(AxisModel, _super); + + function AxisModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = axisName + 'Axis.' + axisType; + return _this; + } + + AxisModel.prototype.mergeDefaultAndTheme = function (option, ecModel) { + var layoutMode = fetchLayoutMode(this); + var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; + var themeModel = ecModel.getTheme(); + merge(option, themeModel.get(axisType + 'Axis')); + merge(option, this.getDefaultOption()); + option.type = getAxisType(option); + + if (layoutMode) { + mergeLayoutParam(option, inputPositionParams, layoutMode); + } + }; + + AxisModel.prototype.optionUpdated = function () { + var thisOption = this.option; + + if (thisOption.type === 'category') { + this.__ordinalMeta = OrdinalMeta.createByAxisModel(this); + } + }; + /** + * Should not be called before all of 'getInitailData' finished. + * Because categories are collected during initializing data. + */ + + + AxisModel.prototype.getCategories = function (rawData) { + var option = this.option; // FIXME + // warning if called before all of 'getInitailData' finished. + + if (option.type === 'category') { + if (rawData) { + return option.data; + } + + return this.__ordinalMeta.categories; + } + }; + + AxisModel.prototype.getOrdinalMeta = function () { + return this.__ordinalMeta; + }; + + AxisModel.type = axisName + 'Axis.' + axisType; + AxisModel.defaultOption = defaultOption; + return AxisModel; + }(BaseAxisModelClass); + + registers.registerComponentModel(AxisModel); + }); + registers.registerSubTypeDefaulter(axisName + 'Axis', getAxisType); + } + + function getAxisType(option) { + // Default axis with data is category axis + return option.type || (option.data ? 'category' : 'value'); + } + + var Cartesian = + /** @class */ + function () { + function Cartesian(name) { + this.type = 'cartesian'; + this._dimList = []; + this._axes = {}; + this.name = name || ''; + } + + Cartesian.prototype.getAxis = function (dim) { + return this._axes[dim]; + }; + + Cartesian.prototype.getAxes = function () { + return map(this._dimList, function (dim) { + return this._axes[dim]; + }, this); + }; + + Cartesian.prototype.getAxesByScale = function (scaleType) { + scaleType = scaleType.toLowerCase(); + return filter(this.getAxes(), function (axis) { + return axis.scale.type === scaleType; + }); + }; + + Cartesian.prototype.addAxis = function (axis) { + var dim = axis.dim; + this._axes[dim] = axis; + + this._dimList.push(dim); + }; + + return Cartesian; + }(); + + var cartesian2DDimensions = ['x', 'y']; + + function canCalculateAffineTransform(scale) { + return scale.type === 'interval' || scale.type === 'time'; + } + + var Cartesian2D = + /** @class */ + function (_super) { + __extends(Cartesian2D, _super); + + function Cartesian2D() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = 'cartesian2d'; + _this.dimensions = cartesian2DDimensions; + return _this; + } + /** + * Calculate an affine transform matrix if two axes are time or value. + * It's mainly for accelartion on the large time series data. + */ + + + Cartesian2D.prototype.calcAffineTransform = function () { + this._transform = this._invTransform = null; + var xAxisScale = this.getAxis('x').scale; + var yAxisScale = this.getAxis('y').scale; + + if (!canCalculateAffineTransform(xAxisScale) || !canCalculateAffineTransform(yAxisScale)) { + return; + } + + var xScaleExtent = xAxisScale.getExtent(); + var yScaleExtent = yAxisScale.getExtent(); + var start = this.dataToPoint([xScaleExtent[0], yScaleExtent[0]]); + var end = this.dataToPoint([xScaleExtent[1], yScaleExtent[1]]); + var xScaleSpan = xScaleExtent[1] - xScaleExtent[0]; + var yScaleSpan = yScaleExtent[1] - yScaleExtent[0]; + + if (!xScaleSpan || !yScaleSpan) { + return; + } // Accelerate data to point calculation on the special large time series data. + + + var scaleX = (end[0] - start[0]) / xScaleSpan; + var scaleY = (end[1] - start[1]) / yScaleSpan; + var translateX = start[0] - xScaleExtent[0] * scaleX; + var translateY = start[1] - yScaleExtent[0] * scaleY; + var m = this._transform = [scaleX, 0, 0, scaleY, translateX, translateY]; + this._invTransform = invert([], m); + }; + /** + * Base axis will be used on stacking. + */ + + + Cartesian2D.prototype.getBaseAxis = function () { + return this.getAxesByScale('ordinal')[0] || this.getAxesByScale('time')[0] || this.getAxis('x'); + }; + + Cartesian2D.prototype.containPoint = function (point) { + var axisX = this.getAxis('x'); + var axisY = this.getAxis('y'); + return axisX.contain(axisX.toLocalCoord(point[0])) && axisY.contain(axisY.toLocalCoord(point[1])); + }; + + Cartesian2D.prototype.containData = function (data) { + return this.getAxis('x').containData(data[0]) && this.getAxis('y').containData(data[1]); + }; + + Cartesian2D.prototype.dataToPoint = function (data, clamp, out) { + out = out || []; + var xVal = data[0]; + var yVal = data[1]; // Fast path + + if (this._transform // It's supported that if data is like `[Inifity, 123]`, where only Y pixel calculated. + && xVal != null && isFinite(xVal) && yVal != null && isFinite(yVal)) { + return applyTransform(out, data, this._transform); + } + + var xAxis = this.getAxis('x'); + var yAxis = this.getAxis('y'); + out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(xVal, clamp)); + out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(yVal, clamp)); + return out; + }; + + Cartesian2D.prototype.clampData = function (data, out) { + var xScale = this.getAxis('x').scale; + var yScale = this.getAxis('y').scale; + var xAxisExtent = xScale.getExtent(); + var yAxisExtent = yScale.getExtent(); + var x = xScale.parse(data[0]); + var y = yScale.parse(data[1]); + out = out || []; + out[0] = Math.min(Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x), Math.max(xAxisExtent[0], xAxisExtent[1])); + out[1] = Math.min(Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y), Math.max(yAxisExtent[0], yAxisExtent[1])); + return out; + }; + + Cartesian2D.prototype.pointToData = function (point, clamp) { + var out = []; + + if (this._invTransform) { + return applyTransform(out, point, this._invTransform); + } + + var xAxis = this.getAxis('x'); + var yAxis = this.getAxis('y'); + out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]), clamp); + out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]), clamp); + return out; + }; + + Cartesian2D.prototype.getOtherAxis = function (axis) { + return this.getAxis(axis.dim === 'x' ? 'y' : 'x'); + }; + /** + * Get rect area of cartesian. + * Area will have a contain function to determine if a point is in the coordinate system. + */ + + + Cartesian2D.prototype.getArea = function () { + var xExtent = this.getAxis('x').getGlobalExtent(); + var yExtent = this.getAxis('y').getGlobalExtent(); + var x = Math.min(xExtent[0], xExtent[1]); + var y = Math.min(yExtent[0], yExtent[1]); + var width = Math.max(xExtent[0], xExtent[1]) - x; + var height = Math.max(yExtent[0], yExtent[1]) - y; + return new BoundingRect(x, y, width, height); + }; + + return Cartesian2D; + }(Cartesian); + + var Axis2D = + /** @class */ + function (_super) { + __extends(Axis2D, _super); + + function Axis2D(dim, scale, coordExtent, axisType, position) { + var _this = _super.call(this, dim, scale, coordExtent) || this; + /** + * Index of axis, can be used as key + * Injected outside. + */ + + + _this.index = 0; + _this.type = axisType || 'value'; + _this.position = position || 'bottom'; + return _this; + } + + Axis2D.prototype.isHorizontal = function () { + var position = this.position; + return position === 'top' || position === 'bottom'; + }; + /** + * Each item cooresponds to this.getExtent(), which + * means globalExtent[0] may greater than globalExtent[1], + * unless `asc` is input. + * + * @param {boolean} [asc] + * @return {Array.} + */ + + + Axis2D.prototype.getGlobalExtent = function (asc) { + var ret = this.getExtent(); + ret[0] = this.toGlobalCoord(ret[0]); + ret[1] = this.toGlobalCoord(ret[1]); + asc && ret[0] > ret[1] && ret.reverse(); + return ret; + }; + + Axis2D.prototype.pointToData = function (point, clamp) { + return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp); + }; + /** + * Set ordinalSortInfo + * @param info new OrdinalSortInfo + */ + + + Axis2D.prototype.setCategorySortInfo = function (info) { + if (this.type !== 'category') { + return false; + } + + this.model.option.categorySortInfo = info; + this.scale.setSortInfo(info); + }; + + return Axis2D; + }(Axis); + + /** + * Can only be called after coordinate system creation stage. + * (Can be called before coordinate system update stage). + */ + + function layout$1(gridModel, axisModel, opt) { + opt = opt || {}; + var grid = gridModel.coordinateSystem; + var axis = axisModel.axis; + var layout = {}; + var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0]; + var rawAxisPosition = axis.position; + var axisPosition = otherAxisOnZeroOf ? 'onZero' : rawAxisPosition; + var axisDim = axis.dim; + var rect = grid.getRect(); + var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height]; + var idx = { + left: 0, + right: 1, + top: 0, + bottom: 1, + onZero: 2 + }; + var axisOffset = axisModel.get('offset') || 0; + var posBound = axisDim === 'x' ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset] : [rectBound[0] - axisOffset, rectBound[1] + axisOffset]; + + if (otherAxisOnZeroOf) { + var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0)); + posBound[idx.onZero] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]); + } // Axis position + + + layout.position = [axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0], axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3]]; // Axis rotation + + layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1); // Tick and label direction, x y is axisDim + + var dirMap = { + top: -1, + bottom: 1, + left: -1, + right: 1 + }; + layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition]; + layout.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx.onZero] : 0; + + if (axisModel.get(['axisTick', 'inside'])) { + layout.tickDirection = -layout.tickDirection; + } + + if (retrieve(opt.labelInside, axisModel.get(['axisLabel', 'inside']))) { + layout.labelDirection = -layout.labelDirection; + } // Special label rotation + + + var labelRotate = axisModel.get(['axisLabel', 'rotate']); + layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate; // Over splitLine and splitArea + + layout.z2 = 1; + return layout; + } + function isCartesian2DSeries(seriesModel) { + return seriesModel.get('coordinateSystem') === 'cartesian2d'; + } + function findAxisModels(seriesModel) { + var axisModelMap = { + xAxisModel: null, + yAxisModel: null + }; + each(axisModelMap, function (v, key) { + var axisType = key.replace(/Model$/, ''); + var axisModel = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0]; + + if ("development" !== 'production') { + if (!axisModel) { + throw new Error(axisType + ' "' + retrieve3(seriesModel.get(axisType + 'Index'), seriesModel.get(axisType + 'Id'), 0) + '" not found'); + } + } + + axisModelMap[key] = axisModel; + }); + return axisModelMap; + } + + var Grid = + /** @class */ + function () { + function Grid(gridModel, ecModel, api) { + // FIXME:TS where used (different from registered type 'cartesian2d')? + this.type = 'grid'; + this._coordsMap = {}; + this._coordsList = []; + this._axesMap = {}; + this._axesList = []; + this.axisPointerEnabled = true; + this.dimensions = cartesian2DDimensions; + + this._initCartesian(gridModel, ecModel, api); + + this.model = gridModel; + } + + Grid.prototype.getRect = function () { + return this._rect; + }; + + Grid.prototype.update = function (ecModel, api) { + var axesMap = this._axesMap; + + this._updateScale(ecModel, this.model); + + each(axesMap.x, function (xAxis) { + niceScaleExtent(xAxis.scale, xAxis.model); + }); + each(axesMap.y, function (yAxis) { + niceScaleExtent(yAxis.scale, yAxis.model); + }); // Key: axisDim_axisIndex, value: boolean, whether onZero target. + + var onZeroRecords = {}; + each(axesMap.x, function (xAxis) { + fixAxisOnZero(axesMap, 'y', xAxis, onZeroRecords); + }); + each(axesMap.y, function (yAxis) { + fixAxisOnZero(axesMap, 'x', yAxis, onZeroRecords); + }); // Resize again if containLabel is enabled + // FIXME It may cause getting wrong grid size in data processing stage + + this.resize(this.model, api); + }; + /** + * Resize the grid + */ + + + Grid.prototype.resize = function (gridModel, api, ignoreContainLabel) { + var boxLayoutParams = gridModel.getBoxLayoutParams(); + var isContainLabel = !ignoreContainLabel && gridModel.get('containLabel'); + var gridRect = getLayoutRect(boxLayoutParams, { + width: api.getWidth(), + height: api.getHeight() + }); + this._rect = gridRect; + var axesList = this._axesList; + adjustAxes(); // Minus label size + + if (isContainLabel) { + each(axesList, function (axis) { + if (!axis.model.get(['axisLabel', 'inside'])) { + var labelUnionRect = estimateLabelUnionRect(axis); + + if (labelUnionRect) { + var dim = axis.isHorizontal() ? 'height' : 'width'; + var margin = axis.model.get(['axisLabel', 'margin']); + gridRect[dim] -= labelUnionRect[dim] + margin; + + if (axis.position === 'top') { + gridRect.y += labelUnionRect.height + margin; + } else if (axis.position === 'left') { + gridRect.x += labelUnionRect.width + margin; + } + } + } + }); + adjustAxes(); + } + + each(this._coordsList, function (coord) { + // Calculate affine matrix to accelerate the data to point transform. + // If all the axes scales are time or value. + coord.calcAffineTransform(); + }); + + function adjustAxes() { + each(axesList, function (axis) { + var isHorizontal = axis.isHorizontal(); + var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height]; + var idx = axis.inverse ? 1 : 0; + axis.setExtent(extent[idx], extent[1 - idx]); + updateAxisTransform(axis, isHorizontal ? gridRect.x : gridRect.y); + }); + } + }; + + Grid.prototype.getAxis = function (dim, axisIndex) { + var axesMapOnDim = this._axesMap[dim]; + + if (axesMapOnDim != null) { + return axesMapOnDim[axisIndex || 0]; // if (axisIndex == null) { + // Find first axis + // for (let name in axesMapOnDim) { + // if (axesMapOnDim.hasOwnProperty(name)) { + // return axesMapOnDim[name]; + // } + // } + // } + // return axesMapOnDim[axisIndex]; + } + }; + + Grid.prototype.getAxes = function () { + return this._axesList.slice(); + }; + + Grid.prototype.getCartesian = function (xAxisIndex, yAxisIndex) { + if (xAxisIndex != null && yAxisIndex != null) { + var key = 'x' + xAxisIndex + 'y' + yAxisIndex; + return this._coordsMap[key]; + } + + if (isObject(xAxisIndex)) { + yAxisIndex = xAxisIndex.yAxisIndex; + xAxisIndex = xAxisIndex.xAxisIndex; + } + + for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) { + if (coordList[i].getAxis('x').index === xAxisIndex || coordList[i].getAxis('y').index === yAxisIndex) { + return coordList[i]; + } + } + }; + + Grid.prototype.getCartesians = function () { + return this._coordsList.slice(); + }; + /** + * @implements + */ + + + Grid.prototype.convertToPixel = function (ecModel, finder, value) { + var target = this._findConvertTarget(finder); + + return target.cartesian ? target.cartesian.dataToPoint(value) : target.axis ? target.axis.toGlobalCoord(target.axis.dataToCoord(value)) : null; + }; + /** + * @implements + */ + + + Grid.prototype.convertFromPixel = function (ecModel, finder, value) { + var target = this._findConvertTarget(finder); + + return target.cartesian ? target.cartesian.pointToData(value) : target.axis ? target.axis.coordToData(target.axis.toLocalCoord(value)) : null; + }; + + Grid.prototype._findConvertTarget = function (finder) { + var seriesModel = finder.seriesModel; + var xAxisModel = finder.xAxisModel || seriesModel && seriesModel.getReferringComponents('xAxis', SINGLE_REFERRING).models[0]; + var yAxisModel = finder.yAxisModel || seriesModel && seriesModel.getReferringComponents('yAxis', SINGLE_REFERRING).models[0]; + var gridModel = finder.gridModel; + var coordsList = this._coordsList; + var cartesian; + var axis; + + if (seriesModel) { + cartesian = seriesModel.coordinateSystem; + indexOf(coordsList, cartesian) < 0 && (cartesian = null); + } else if (xAxisModel && yAxisModel) { + cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex); + } else if (xAxisModel) { + axis = this.getAxis('x', xAxisModel.componentIndex); + } else if (yAxisModel) { + axis = this.getAxis('y', yAxisModel.componentIndex); + } // Lowest priority. + else if (gridModel) { + var grid = gridModel.coordinateSystem; + + if (grid === this) { + cartesian = this._coordsList[0]; + } + } + + return { + cartesian: cartesian, + axis: axis + }; + }; + /** + * @implements + */ + + + Grid.prototype.containPoint = function (point) { + var coord = this._coordsList[0]; + + if (coord) { + return coord.containPoint(point); + } + }; + /** + * Initialize cartesian coordinate systems + */ + + + Grid.prototype._initCartesian = function (gridModel, ecModel, api) { + var _this = this; + + var grid = this; + var axisPositionUsed = { + left: false, + right: false, + top: false, + bottom: false + }; + var axesMap = { + x: {}, + y: {} + }; + var axesCount = { + x: 0, + y: 0 + }; /// Create axis + + ecModel.eachComponent('xAxis', createAxisCreator('x'), this); + ecModel.eachComponent('yAxis', createAxisCreator('y'), this); + + if (!axesCount.x || !axesCount.y) { + // Roll back when there no either x or y axis + this._axesMap = {}; + this._axesList = []; + return; + } + + this._axesMap = axesMap; /// Create cartesian2d + + each(axesMap.x, function (xAxis, xAxisIndex) { + each(axesMap.y, function (yAxis, yAxisIndex) { + var key = 'x' + xAxisIndex + 'y' + yAxisIndex; + var cartesian = new Cartesian2D(key); + cartesian.master = _this; + cartesian.model = gridModel; + _this._coordsMap[key] = cartesian; + + _this._coordsList.push(cartesian); + + cartesian.addAxis(xAxis); + cartesian.addAxis(yAxis); + }); + }); + + function createAxisCreator(dimName) { + return function (axisModel, idx) { + if (!isAxisUsedInTheGrid(axisModel, gridModel)) { + return; + } + + var axisPosition = axisModel.get('position'); + + if (dimName === 'x') { + // Fix position + if (axisPosition !== 'top' && axisPosition !== 'bottom') { + // Default bottom of X + axisPosition = axisPositionUsed.bottom ? 'top' : 'bottom'; + } + } else { + // Fix position + if (axisPosition !== 'left' && axisPosition !== 'right') { + // Default left of Y + axisPosition = axisPositionUsed.left ? 'right' : 'left'; + } + } + + axisPositionUsed[axisPosition] = true; + var axis = new Axis2D(dimName, createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisPosition); + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); // Inject axis into axisModel + + axisModel.axis = axis; // Inject axisModel into axis + + axis.model = axisModel; // Inject grid info axis + + axis.grid = grid; // Index of axis, can be used as key + + axis.index = idx; + + grid._axesList.push(axis); + + axesMap[dimName][idx] = axis; + axesCount[dimName]++; + }; + } + }; + /** + * Update cartesian properties from series. + */ + + + Grid.prototype._updateScale = function (ecModel, gridModel) { + // Reset scale + each(this._axesList, function (axis) { + axis.scale.setExtent(Infinity, -Infinity); + + if (axis.type === 'category') { + var categorySortInfo = axis.model.get('categorySortInfo'); + axis.scale.setSortInfo(categorySortInfo); + } + }); + ecModel.eachSeries(function (seriesModel) { + if (isCartesian2DSeries(seriesModel)) { + var axesModelMap = findAxisModels(seriesModel); + var xAxisModel = axesModelMap.xAxisModel; + var yAxisModel = axesModelMap.yAxisModel; + + if (!isAxisUsedInTheGrid(xAxisModel, gridModel) || !isAxisUsedInTheGrid(yAxisModel, gridModel)) { + return; + } + + var cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex); + var data = seriesModel.getData(); + var xAxis = cartesian.getAxis('x'); + var yAxis = cartesian.getAxis('y'); + + if (data.type === 'list') { + unionExtent(data, xAxis); + unionExtent(data, yAxis); + } + } + }, this); + + function unionExtent(data, axis) { + each(getDataDimensionsOnAxis(data, axis.dim), function (dim) { + axis.scale.unionExtentFromData(data, dim); + }); + } + }; + /** + * @param dim 'x' or 'y' or 'auto' or null/undefined + */ + + + Grid.prototype.getTooltipAxes = function (dim) { + var baseAxes = []; + var otherAxes = []; + each(this.getCartesians(), function (cartesian) { + var baseAxis = dim != null && dim !== 'auto' ? cartesian.getAxis(dim) : cartesian.getBaseAxis(); + var otherAxis = cartesian.getOtherAxis(baseAxis); + indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis); + indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis); + }); + return { + baseAxes: baseAxes, + otherAxes: otherAxes + }; + }; + + Grid.create = function (ecModel, api) { + var grids = []; + ecModel.eachComponent('grid', function (gridModel, idx) { + var grid = new Grid(gridModel, ecModel, api); + grid.name = 'grid_' + idx; // dataSampling requires axis extent, so resize + // should be performed in create stage. + + grid.resize(gridModel, api, true); + gridModel.coordinateSystem = grid; + grids.push(grid); + }); // Inject the coordinateSystems into seriesModel + + ecModel.eachSeries(function (seriesModel) { + if (!isCartesian2DSeries(seriesModel)) { + return; + } + + var axesModelMap = findAxisModels(seriesModel); + var xAxisModel = axesModelMap.xAxisModel; + var yAxisModel = axesModelMap.yAxisModel; + var gridModel = xAxisModel.getCoordSysModel(); + + if ("development" !== 'production') { + if (!gridModel) { + throw new Error('Grid "' + retrieve3(xAxisModel.get('gridIndex'), xAxisModel.get('gridId'), 0) + '" not found'); + } + + if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) { + throw new Error('xAxis and yAxis must use the same grid'); + } + } + + var grid = gridModel.coordinateSystem; + seriesModel.coordinateSystem = grid.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex); + }); + return grids; + }; // For deciding which dimensions to use when creating list data + + + Grid.dimensions = cartesian2DDimensions; + return Grid; + }(); + /** + * Check if the axis is used in the specified grid. + */ + + + function isAxisUsedInTheGrid(axisModel, gridModel) { + return axisModel.getCoordSysModel() === gridModel; + } + + function fixAxisOnZero(axesMap, otherAxisDim, axis, // Key: see `getOnZeroRecordKey` + onZeroRecords) { + axis.getAxesOnZeroOf = function () { + // TODO: onZero of multiple axes. + return otherAxisOnZeroOf ? [otherAxisOnZeroOf] : []; + }; // onZero can not be enabled in these two situations: + // 1. When any other axis is a category axis. + // 2. When no axis is cross 0 point. + + + var otherAxes = axesMap[otherAxisDim]; + var otherAxisOnZeroOf; + var axisModel = axis.model; + var onZero = axisModel.get(['axisLine', 'onZero']); + var onZeroAxisIndex = axisModel.get(['axisLine', 'onZeroAxisIndex']); + + if (!onZero) { + return; + } // If target axis is specified. + + + if (onZeroAxisIndex != null) { + if (canOnZeroToAxis(otherAxes[onZeroAxisIndex])) { + otherAxisOnZeroOf = otherAxes[onZeroAxisIndex]; + } + } else { + // Find the first available other axis. + for (var idx in otherAxes) { + if (otherAxes.hasOwnProperty(idx) && canOnZeroToAxis(otherAxes[idx]) // Consider that two Y axes on one value axis, + // if both onZero, the two Y axes overlap. + && !onZeroRecords[getOnZeroRecordKey(otherAxes[idx])]) { + otherAxisOnZeroOf = otherAxes[idx]; + break; + } + } + } + + if (otherAxisOnZeroOf) { + onZeroRecords[getOnZeroRecordKey(otherAxisOnZeroOf)] = true; + } + + function getOnZeroRecordKey(axis) { + return axis.dim + '_' + axis.index; + } + } + + function canOnZeroToAxis(axis) { + return axis && axis.type !== 'category' && axis.type !== 'time' && ifAxisCrossZero(axis); + } + + function updateAxisTransform(axis, coordBase) { + var axisExtent = axis.getExtent(); + var axisExtentSum = axisExtent[0] + axisExtent[1]; // Fast transform + + axis.toGlobalCoord = axis.dim === 'x' ? function (coord) { + return coord + coordBase; + } : function (coord) { + return axisExtentSum - coord + coordBase; + }; + axis.toLocalCoord = axis.dim === 'x' ? function (coord) { + return coord - coordBase; + } : function (coord) { + return axisExtentSum - coord + coordBase; + }; + } + + var PI$5 = Math.PI; + /** + * A final axis is translated and rotated from a "standard axis". + * So opt.position and opt.rotation is required. + * + * A standard axis is and axis from [0, 0] to [0, axisExtent[1]], + * for example: (0, 0) ------------> (0, 50) + * + * nameDirection or tickDirection or labelDirection is 1 means tick + * or label is below the standard axis, whereas is -1 means above + * the standard axis. labelOffset means offset between label and axis, + * which is useful when 'onZero', where axisLabel is in the grid and + * label in outside grid. + * + * Tips: like always, + * positive rotation represents anticlockwise, and negative rotation + * represents clockwise. + * The direction of position coordinate is the same as the direction + * of screen coordinate. + * + * Do not need to consider axis 'inverse', which is auto processed by + * axis extent. + */ + + var AxisBuilder = + /** @class */ + function () { + function AxisBuilder(axisModel, opt) { + this.group = new Group(); + this.opt = opt; + this.axisModel = axisModel; // Default value + + defaults(opt, { + labelOffset: 0, + nameDirection: 1, + tickDirection: 1, + labelDirection: 1, + silent: true, + handleAutoShown: function () { + return true; + } + }); // FIXME Not use a seperate text group? + + var transformGroup = new Group({ + x: opt.position[0], + y: opt.position[1], + rotation: opt.rotation + }); // this.group.add(transformGroup); + // this._transformGroup = transformGroup; + + transformGroup.updateTransform(); + this._transformGroup = transformGroup; + } + + AxisBuilder.prototype.hasBuilder = function (name) { + return !!builders[name]; + }; + + AxisBuilder.prototype.add = function (name) { + builders[name](this.opt, this.axisModel, this.group, this._transformGroup); + }; + + AxisBuilder.prototype.getGroup = function () { + return this.group; + }; + + AxisBuilder.innerTextLayout = function (axisRotation, textRotation, direction) { + var rotationDiff = remRadian(textRotation - axisRotation); + var textAlign; + var textVerticalAlign; + + if (isRadianAroundZero(rotationDiff)) { + // Label is parallel with axis line. + textVerticalAlign = direction > 0 ? 'top' : 'bottom'; + textAlign = 'center'; + } else if (isRadianAroundZero(rotationDiff - PI$5)) { + // Label is inverse parallel with axis line. + textVerticalAlign = direction > 0 ? 'bottom' : 'top'; + textAlign = 'center'; + } else { + textVerticalAlign = 'middle'; + + if (rotationDiff > 0 && rotationDiff < PI$5) { + textAlign = direction > 0 ? 'right' : 'left'; + } else { + textAlign = direction > 0 ? 'left' : 'right'; + } + } + + return { + rotation: rotationDiff, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; + }; + + AxisBuilder.makeAxisEventDataBase = function (axisModel) { + var eventData = { + componentType: axisModel.mainType, + componentIndex: axisModel.componentIndex + }; + eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex; + return eventData; + }; + + AxisBuilder.isLabelSilent = function (axisModel) { + var tooltipOpt = axisModel.get('tooltip'); + return axisModel.get('silent') // Consider mouse cursor, add these restrictions. + || !(axisModel.get('triggerEvent') || tooltipOpt && tooltipOpt.show); + }; + + return AxisBuilder; + }(); + var builders = { + axisLine: function (opt, axisModel, group, transformGroup) { + var shown = axisModel.get(['axisLine', 'show']); + + if (shown === 'auto' && opt.handleAutoShown) { + shown = opt.handleAutoShown('axisLine'); + } + + if (!shown) { + return; + } + + var extent = axisModel.axis.getExtent(); + var matrix = transformGroup.transform; + var pt1 = [extent[0], 0]; + var pt2 = [extent[1], 0]; + + if (matrix) { + applyTransform(pt1, pt1, matrix); + applyTransform(pt2, pt2, matrix); + } + + var lineStyle = extend({ + lineCap: 'round' + }, axisModel.getModel(['axisLine', 'lineStyle']).getLineStyle()); + var line = new Line({ + // Id for animation + subPixelOptimize: true, + shape: { + x1: pt1[0], + y1: pt1[1], + x2: pt2[0], + y2: pt2[1] + }, + style: lineStyle, + strokeContainThreshold: opt.strokeContainThreshold || 5, + silent: true, + z2: 1 + }); + line.anid = 'line'; + group.add(line); + var arrows = axisModel.get(['axisLine', 'symbol']); + + if (arrows != null) { + var arrowSize = axisModel.get(['axisLine', 'symbolSize']); + + if (typeof arrows === 'string') { + // Use the same arrow for start and end point + arrows = [arrows, arrows]; + } + + if (typeof arrowSize === 'string' || typeof arrowSize === 'number') { + // Use the same size for width and height + arrowSize = [arrowSize, arrowSize]; + } + + var arrowOffset = normalizeSymbolOffset(axisModel.get(['axisLine', 'symbolOffset']) || 0, arrowSize); + var symbolWidth_1 = arrowSize[0]; + var symbolHeight_1 = arrowSize[1]; + each([{ + rotate: opt.rotation + Math.PI / 2, + offset: arrowOffset[0], + r: 0 + }, { + rotate: opt.rotation - Math.PI / 2, + offset: arrowOffset[1], + r: Math.sqrt((pt1[0] - pt2[0]) * (pt1[0] - pt2[0]) + (pt1[1] - pt2[1]) * (pt1[1] - pt2[1])) + }], function (point, index) { + if (arrows[index] !== 'none' && arrows[index] != null) { + var symbol = createSymbol(arrows[index], -symbolWidth_1 / 2, -symbolHeight_1 / 2, symbolWidth_1, symbolHeight_1, lineStyle.stroke, true); // Calculate arrow position with offset + + var r = point.r + point.offset; + symbol.attr({ + rotation: point.rotate, + x: pt1[0] + r * Math.cos(opt.rotation), + y: pt1[1] - r * Math.sin(opt.rotation), + silent: true, + z2: 11 + }); + group.add(symbol); + } + }); + } + }, + axisTickLabel: function (opt, axisModel, group, transformGroup) { + var ticksEls = buildAxisMajorTicks(group, transformGroup, axisModel, opt); + var labelEls = buildAxisLabel(group, transformGroup, axisModel, opt); + fixMinMaxLabelShow(axisModel, labelEls, ticksEls); + buildAxisMinorTicks(group, transformGroup, axisModel, opt.tickDirection); // This bit fixes the label overlap issue for the time chart. + // See https://github.com/apache/echarts/issues/14266 for more. + + if (axisModel.get(['axisLabel', 'hideOverlap'])) { + var labelList = prepareLayoutList(map(labelEls, function (label) { + return { + label: label, + priority: label.z2, + defaultAttr: { + ignore: label.ignore + } + }; + })); + hideOverlap(labelList); + } + }, + axisName: function (opt, axisModel, group, transformGroup) { + var name = retrieve(opt.axisName, axisModel.get('name')); + + if (!name) { + return; + } + + var nameLocation = axisModel.get('nameLocation'); + var nameDirection = opt.nameDirection; + var textStyleModel = axisModel.getModel('nameTextStyle'); + var gap = axisModel.get('nameGap') || 0; + var extent = axisModel.axis.getExtent(); + var gapSignal = extent[0] > extent[1] ? -1 : 1; + var pos = [nameLocation === 'start' ? extent[0] - gapSignal * gap : nameLocation === 'end' ? extent[1] + gapSignal * gap : (extent[0] + extent[1]) / 2, // Reuse labelOffset. + isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0]; + var labelLayout; + var nameRotation = axisModel.get('nameRotate'); + + if (nameRotation != null) { + nameRotation = nameRotation * PI$5 / 180; // To radian. + } + + var axisNameAvailableWidth; + + if (isNameLocationCenter(nameLocation)) { + labelLayout = AxisBuilder.innerTextLayout(opt.rotation, nameRotation != null ? nameRotation : opt.rotation, // Adapt to axis. + nameDirection); + } else { + labelLayout = endTextLayout(opt.rotation, nameLocation, nameRotation || 0, extent); + axisNameAvailableWidth = opt.axisNameAvailableWidth; + + if (axisNameAvailableWidth != null) { + axisNameAvailableWidth = Math.abs(axisNameAvailableWidth / Math.sin(labelLayout.rotation)); + !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null); + } + } + + var textFont = textStyleModel.getFont(); + var truncateOpt = axisModel.get('nameTruncate', true) || {}; + var ellipsis = truncateOpt.ellipsis; + var maxWidth = retrieve(opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth); + var textEl = new ZRText({ + x: pos[0], + y: pos[1], + rotation: labelLayout.rotation, + silent: AxisBuilder.isLabelSilent(axisModel), + style: createTextStyle(textStyleModel, { + text: name, + font: textFont, + overflow: 'truncate', + width: maxWidth, + ellipsis: ellipsis, + fill: textStyleModel.getTextColor() || axisModel.get(['axisLine', 'lineStyle', 'color']), + align: textStyleModel.get('align') || labelLayout.textAlign, + verticalAlign: textStyleModel.get('verticalAlign') || labelLayout.textVerticalAlign + }), + z2: 1 + }); + setTooltipConfig({ + el: textEl, + componentModel: axisModel, + itemName: name + }); + textEl.__fullText = name; // Id for animation + + textEl.anid = 'name'; + + if (axisModel.get('triggerEvent')) { + var eventData = AxisBuilder.makeAxisEventDataBase(axisModel); + eventData.targetType = 'axisName'; + eventData.name = name; + getECData(textEl).eventData = eventData; + } // FIXME + + + transformGroup.add(textEl); + textEl.updateTransform(); + group.add(textEl); + textEl.decomposeTransform(); + } + }; + + function endTextLayout(rotation, textPosition, textRotate, extent) { + var rotationDiff = remRadian(textRotate - rotation); + var textAlign; + var textVerticalAlign; + var inverse = extent[0] > extent[1]; + var onLeft = textPosition === 'start' && !inverse || textPosition !== 'start' && inverse; + + if (isRadianAroundZero(rotationDiff - PI$5 / 2)) { + textVerticalAlign = onLeft ? 'bottom' : 'top'; + textAlign = 'center'; + } else if (isRadianAroundZero(rotationDiff - PI$5 * 1.5)) { + textVerticalAlign = onLeft ? 'top' : 'bottom'; + textAlign = 'center'; + } else { + textVerticalAlign = 'middle'; + + if (rotationDiff < PI$5 * 1.5 && rotationDiff > PI$5 / 2) { + textAlign = onLeft ? 'left' : 'right'; + } else { + textAlign = onLeft ? 'right' : 'left'; + } + } + + return { + rotation: rotationDiff, + textAlign: textAlign, + textVerticalAlign: textVerticalAlign + }; + } + + function fixMinMaxLabelShow(axisModel, labelEls, tickEls) { + if (shouldShowAllLabels(axisModel.axis)) { + return; + } // If min or max are user set, we need to check + // If the tick on min(max) are overlap on their neighbour tick + // If they are overlapped, we need to hide the min(max) tick label + + + var showMinLabel = axisModel.get(['axisLabel', 'showMinLabel']); + var showMaxLabel = axisModel.get(['axisLabel', 'showMaxLabel']); // FIXME + // Have not consider onBand yet, where tick els is more than label els. + + labelEls = labelEls || []; + tickEls = tickEls || []; + var firstLabel = labelEls[0]; + var nextLabel = labelEls[1]; + var lastLabel = labelEls[labelEls.length - 1]; + var prevLabel = labelEls[labelEls.length - 2]; + var firstTick = tickEls[0]; + var nextTick = tickEls[1]; + var lastTick = tickEls[tickEls.length - 1]; + var prevTick = tickEls[tickEls.length - 2]; + + if (showMinLabel === false) { + ignoreEl(firstLabel); + ignoreEl(firstTick); + } else if (isTwoLabelOverlapped(firstLabel, nextLabel)) { + if (showMinLabel) { + ignoreEl(nextLabel); + ignoreEl(nextTick); + } else { + ignoreEl(firstLabel); + ignoreEl(firstTick); + } + } + + if (showMaxLabel === false) { + ignoreEl(lastLabel); + ignoreEl(lastTick); + } else if (isTwoLabelOverlapped(prevLabel, lastLabel)) { + if (showMaxLabel) { + ignoreEl(prevLabel); + ignoreEl(prevTick); + } else { + ignoreEl(lastLabel); + ignoreEl(lastTick); + } + } + } + + function ignoreEl(el) { + el && (el.ignore = true); + } + + function isTwoLabelOverlapped(current, next) { + // current and next has the same rotation. + var firstRect = current && current.getBoundingRect().clone(); + var nextRect = next && next.getBoundingRect().clone(); + + if (!firstRect || !nextRect) { + return; + } // When checking intersect of two rotated labels, we use mRotationBack + // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`. + + + var mRotationBack = identity([]); + rotate(mRotationBack, mRotationBack, -current.rotation); + firstRect.applyTransform(mul$1([], mRotationBack, current.getLocalTransform())); + nextRect.applyTransform(mul$1([], mRotationBack, next.getLocalTransform())); + return firstRect.intersect(nextRect); + } + + function isNameLocationCenter(nameLocation) { + return nameLocation === 'middle' || nameLocation === 'center'; + } + + function createTicks(ticksCoords, tickTransform, tickEndCoord, tickLineStyle, anidPrefix) { + var tickEls = []; + var pt1 = []; + var pt2 = []; + + for (var i = 0; i < ticksCoords.length; i++) { + var tickCoord = ticksCoords[i].coord; + pt1[0] = tickCoord; + pt1[1] = 0; + pt2[0] = tickCoord; + pt2[1] = tickEndCoord; + + if (tickTransform) { + applyTransform(pt1, pt1, tickTransform); + applyTransform(pt2, pt2, tickTransform); + } // Tick line, Not use group transform to have better line draw + + + var tickEl = new Line({ + subPixelOptimize: true, + shape: { + x1: pt1[0], + y1: pt1[1], + x2: pt2[0], + y2: pt2[1] + }, + style: tickLineStyle, + z2: 2, + autoBatch: true, + silent: true + }); + tickEl.anid = anidPrefix + '_' + ticksCoords[i].tickValue; + tickEls.push(tickEl); + } + + return tickEls; + } + + function buildAxisMajorTicks(group, transformGroup, axisModel, opt) { + var axis = axisModel.axis; + var tickModel = axisModel.getModel('axisTick'); + var shown = tickModel.get('show'); + + if (shown === 'auto' && opt.handleAutoShown) { + shown = opt.handleAutoShown('axisTick'); + } + + if (!shown || axis.scale.isBlank()) { + return; + } + + var lineStyleModel = tickModel.getModel('lineStyle'); + var tickEndCoord = opt.tickDirection * tickModel.get('length'); + var ticksCoords = axis.getTicksCoords(); + var ticksEls = createTicks(ticksCoords, transformGroup.transform, tickEndCoord, defaults(lineStyleModel.getLineStyle(), { + stroke: axisModel.get(['axisLine', 'lineStyle', 'color']) + }), 'ticks'); + + for (var i = 0; i < ticksEls.length; i++) { + group.add(ticksEls[i]); + } + + return ticksEls; + } + + function buildAxisMinorTicks(group, transformGroup, axisModel, tickDirection) { + var axis = axisModel.axis; + var minorTickModel = axisModel.getModel('minorTick'); + + if (!minorTickModel.get('show') || axis.scale.isBlank()) { + return; + } + + var minorTicksCoords = axis.getMinorTicksCoords(); + + if (!minorTicksCoords.length) { + return; + } + + var lineStyleModel = minorTickModel.getModel('lineStyle'); + var tickEndCoord = tickDirection * minorTickModel.get('length'); + var minorTickLineStyle = defaults(lineStyleModel.getLineStyle(), defaults(axisModel.getModel('axisTick').getLineStyle(), { + stroke: axisModel.get(['axisLine', 'lineStyle', 'color']) + })); + + for (var i = 0; i < minorTicksCoords.length; i++) { + var minorTicksEls = createTicks(minorTicksCoords[i], transformGroup.transform, tickEndCoord, minorTickLineStyle, 'minorticks_' + i); + + for (var k = 0; k < minorTicksEls.length; k++) { + group.add(minorTicksEls[k]); + } + } + } + + function buildAxisLabel(group, transformGroup, axisModel, opt) { + var axis = axisModel.axis; + var show = retrieve(opt.axisLabelShow, axisModel.get(['axisLabel', 'show'])); + + if (!show || axis.scale.isBlank()) { + return; + } + + var labelModel = axisModel.getModel('axisLabel'); + var labelMargin = labelModel.get('margin'); + var labels = axis.getViewLabels(); // Special label rotate. + + var labelRotation = (retrieve(opt.labelRotate, labelModel.get('rotate')) || 0) * PI$5 / 180; + var labelLayout = AxisBuilder.innerTextLayout(opt.rotation, labelRotation, opt.labelDirection); + var rawCategoryData = axisModel.getCategories && axisModel.getCategories(true); + var labelEls = []; + var silent = AxisBuilder.isLabelSilent(axisModel); + var triggerEvent = axisModel.get('triggerEvent'); + each(labels, function (labelItem, index) { + var tickValue = axis.scale.type === 'ordinal' ? axis.scale.getRawOrdinalNumber(labelItem.tickValue) : labelItem.tickValue; + var formattedLabel = labelItem.formattedLabel; + var rawLabel = labelItem.rawLabel; + var itemLabelModel = labelModel; + + if (rawCategoryData && rawCategoryData[tickValue]) { + var rawCategoryItem = rawCategoryData[tickValue]; + + if (isObject(rawCategoryItem) && rawCategoryItem.textStyle) { + itemLabelModel = new Model(rawCategoryItem.textStyle, labelModel, axisModel.ecModel); + } + } + + var textColor = itemLabelModel.getTextColor() || axisModel.get(['axisLine', 'lineStyle', 'color']); + var tickCoord = axis.dataToCoord(tickValue); + var textEl = new ZRText({ + x: tickCoord, + y: opt.labelOffset + opt.labelDirection * labelMargin, + rotation: labelLayout.rotation, + silent: silent, + z2: 10 + (labelItem.level || 0), + style: createTextStyle(itemLabelModel, { + text: formattedLabel, + align: itemLabelModel.getShallow('align', true) || labelLayout.textAlign, + verticalAlign: itemLabelModel.getShallow('verticalAlign', true) || itemLabelModel.getShallow('baseline', true) || labelLayout.textVerticalAlign, + fill: typeof textColor === 'function' ? textColor( // (1) In category axis with data zoom, tick is not the original + // index of axis.data. So tick should not be exposed to user + // in category axis. + // (2) Compatible with previous version, which always use formatted label as + // input. But in interval scale the formatted label is like '223,445', which + // maked user repalce ','. So we modify it to return original val but remain + // it as 'string' to avoid error in replacing. + axis.type === 'category' ? rawLabel : axis.type === 'value' ? tickValue + '' : tickValue, index) : textColor + }) + }); + textEl.anid = 'label_' + tickValue; // Pack data for mouse event + + if (triggerEvent) { + var eventData = AxisBuilder.makeAxisEventDataBase(axisModel); + eventData.targetType = 'axisLabel'; + eventData.value = rawLabel; + getECData(textEl).eventData = eventData; + } // FIXME + + + transformGroup.add(textEl); + textEl.updateTransform(); + labelEls.push(textEl); + group.add(textEl); + textEl.decomposeTransform(); + }); + return labelEls; + } + + // allAxesInfo should be updated when setOption performed. + + function collect(ecModel, api) { + var result = { + /** + * key: makeKey(axis.model) + * value: { + * axis, + * coordSys, + * axisPointerModel, + * triggerTooltip, + * involveSeries, + * snap, + * seriesModels, + * seriesDataCount + * } + */ + axesInfo: {}, + seriesInvolved: false, + + /** + * key: makeKey(coordSys.model) + * value: Object: key makeKey(axis.model), value: axisInfo + */ + coordSysAxesInfo: {}, + coordSysMap: {} + }; + collectAxesInfo(result, ecModel, api); // Check seriesInvolved for performance, in case too many series in some chart. + + result.seriesInvolved && collectSeriesInfo(result, ecModel); + return result; + } + + function collectAxesInfo(result, ecModel, api) { + var globalTooltipModel = ecModel.getComponent('tooltip'); + var globalAxisPointerModel = ecModel.getComponent('axisPointer'); // links can only be set on global. + + var linksOption = globalAxisPointerModel.get('link', true) || []; + var linkGroups = []; // Collect axes info. + + each(api.getCoordinateSystems(), function (coordSys) { + // Some coordinate system do not support axes, like geo. + if (!coordSys.axisPointerEnabled) { + return; + } + + var coordSysKey = makeKey(coordSys.model); + var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {}; + result.coordSysMap[coordSysKey] = coordSys; // Set tooltip (like 'cross') is a convienent way to show axisPointer + // for user. So we enable seting tooltip on coordSys model. + + var coordSysModel = coordSys.model; + var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel); + each(coordSys.getAxes(), curry(saveTooltipAxisInfo, false, null)); // If axis tooltip used, choose tooltip axis for each coordSys. + // Notice this case: coordSys is `grid` but not `cartesian2D` here. + + if (coordSys.getTooltipAxes && globalTooltipModel // If tooltip.showContent is set as false, tooltip will not + // show but axisPointer will show as normal. + && baseTooltipModel.get('show')) { + // Compatible with previous logic. But series.tooltip.trigger: 'axis' + // or series.data[n].tooltip.trigger: 'axis' are not support any more. + var triggerAxis = baseTooltipModel.get('trigger') === 'axis'; + var cross = baseTooltipModel.get(['axisPointer', 'type']) === 'cross'; + var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get(['axisPointer', 'axis'])); + + if (triggerAxis || cross) { + each(tooltipAxes.baseAxes, curry(saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis)); + } + + if (cross) { + each(tooltipAxes.otherAxes, curry(saveTooltipAxisInfo, 'cross', false)); + } + } // fromTooltip: true | false | 'cross' + // triggerTooltip: true | false | null + + + function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) { + var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel); + var axisPointerShow = axisPointerModel.get('show'); + + if (!axisPointerShow || axisPointerShow === 'auto' && !fromTooltip && !isHandleTrigger(axisPointerModel)) { + return; + } + + if (triggerTooltip == null) { + triggerTooltip = axisPointerModel.get('triggerTooltip'); + } + + axisPointerModel = fromTooltip ? makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) : axisPointerModel; + var snap = axisPointerModel.get('snap'); + var axisKey = makeKey(axis.model); + var involveSeries = triggerTooltip || snap || axis.type === 'category'; // If result.axesInfo[key] exist, override it (tooltip has higher priority). + + var axisInfo = result.axesInfo[axisKey] = { + key: axisKey, + axis: axis, + coordSys: coordSys, + axisPointerModel: axisPointerModel, + triggerTooltip: triggerTooltip, + involveSeries: involveSeries, + snap: snap, + useHandle: isHandleTrigger(axisPointerModel), + seriesModels: [], + linkGroup: null + }; + axesInfoInCoordSys[axisKey] = axisInfo; + result.seriesInvolved = result.seriesInvolved || involveSeries; + var groupIndex = getLinkGroupIndex(linksOption, axis); + + if (groupIndex != null) { + var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = { + axesInfo: {} + }); + linkGroup.axesInfo[axisKey] = axisInfo; + linkGroup.mapper = linksOption[groupIndex].mapper; + axisInfo.linkGroup = linkGroup; + } + } + }); + } + + function makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) { + var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer'); + var fields = ['type', 'snap', 'lineStyle', 'shadowStyle', 'label', 'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z']; + var volatileOption = {}; + each(fields, function (field) { + volatileOption[field] = clone(tooltipAxisPointerModel.get(field)); + }); // category axis do not auto snap, otherwise some tick that do not + // has value can not be hovered. value/time/log axis default snap if + // triggered from tooltip and trigger tooltip. + + volatileOption.snap = axis.type !== 'category' && !!triggerTooltip; // Compatibel with previous behavior, tooltip axis do not show label by default. + // Only these properties can be overrided from tooltip to axisPointer. + + if (tooltipAxisPointerModel.get('type') === 'cross') { + volatileOption.type = 'line'; + } + + var labelOption = volatileOption.label || (volatileOption.label = {}); // Follow the convention, do not show label when triggered by tooltip by default. + + labelOption.show == null && (labelOption.show = false); + + if (fromTooltip === 'cross') { + // When 'cross', both axes show labels. + var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get(['label', 'show']); + labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true; // If triggerTooltip, this is a base axis, which should better not use cross style + // (cross style is dashed by default) + + if (!triggerTooltip) { + var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get('crossStyle'); + crossStyle && defaults(labelOption, crossStyle.textStyle); + } + } + + return axis.model.getModel('axisPointer', new Model(volatileOption, globalAxisPointerModel, ecModel)); + } + + function collectSeriesInfo(result, ecModel) { + // Prepare data for axis trigger + ecModel.eachSeries(function (seriesModel) { + // Notice this case: this coordSys is `cartesian2D` but not `grid`. + var coordSys = seriesModel.coordinateSystem; + var seriesTooltipTrigger = seriesModel.get(['tooltip', 'trigger'], true); + var seriesTooltipShow = seriesModel.get(['tooltip', 'show'], true); + + if (!coordSys || seriesTooltipTrigger === 'none' || seriesTooltipTrigger === false || seriesTooltipTrigger === 'item' || seriesTooltipShow === false || seriesModel.get(['axisPointer', 'show'], true) === false) { + return; + } + + each(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) { + var axis = axisInfo.axis; + + if (coordSys.getAxis(axis.dim) === axis) { + axisInfo.seriesModels.push(seriesModel); + axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0); + axisInfo.seriesDataCount += seriesModel.getData().count(); + } + }); + }); + } + /** + * For example: + * { + * axisPointer: { + * links: [{ + * xAxisIndex: [2, 4], + * yAxisIndex: 'all' + * }, { + * xAxisId: ['a5', 'a7'], + * xAxisName: 'xxx' + * }] + * } + * } + */ + + + function getLinkGroupIndex(linksOption, axis) { + var axisModel = axis.model; + var dim = axis.dim; + + for (var i = 0; i < linksOption.length; i++) { + var linkOption = linksOption[i] || {}; + + if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id) || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex) || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name)) { + return i; + } + } + } + + function checkPropInLink(linkPropValue, axisPropValue) { + return linkPropValue === 'all' || isArray(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0 || linkPropValue === axisPropValue; + } + + function fixValue(axisModel) { + var axisInfo = getAxisInfo(axisModel); + + if (!axisInfo) { + return; + } + + var axisPointerModel = axisInfo.axisPointerModel; + var scale = axisInfo.axis.scale; + var option = axisPointerModel.option; + var status = axisPointerModel.get('status'); + var value = axisPointerModel.get('value'); // Parse init value for category and time axis. + + if (value != null) { + value = scale.parse(value); + } + + var useHandle = isHandleTrigger(axisPointerModel); // If `handle` used, `axisPointer` will always be displayed, so value + // and status should be initialized. + + if (status == null) { + option.status = useHandle ? 'show' : 'hide'; + } + + var extent = scale.getExtent().slice(); + extent[0] > extent[1] && extent.reverse(); + + if ( // Pick a value on axis when initializing. + value == null // If both `handle` and `dataZoom` are used, value may be out of axis extent, + // where we should re-pick a value to keep `handle` displaying normally. + || value > extent[1]) { + // Make handle displayed on the end of the axis when init, which looks better. + value = extent[1]; + } + + if (value < extent[0]) { + value = extent[0]; + } + + option.value = value; + + if (useHandle) { + option.status = axisInfo.axis.scale.isBlank() ? 'hide' : 'show'; + } + } + function getAxisInfo(axisModel) { + var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo; + return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)]; + } + function getAxisPointerModel(axisModel) { + var axisInfo = getAxisInfo(axisModel); + return axisInfo && axisInfo.axisPointerModel; + } + + function isHandleTrigger(axisPointerModel) { + return !!axisPointerModel.get(['handle', 'show']); + } + /** + * @param {module:echarts/model/Model} model + * @return {string} unique key + */ + + + function makeKey(model) { + return model.type + '||' + model.id; + } + + var axisPointerClazz = {}; + /** + * Base class of AxisView. + */ + + var AxisView = + /** @class */ + function (_super) { + __extends(AxisView, _super); + + function AxisView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = AxisView.type; + return _this; + } + /** + * @override + */ + + + AxisView.prototype.render = function (axisModel, ecModel, api, payload) { + // FIXME + // This process should proformed after coordinate systems updated + // (axis scale updated), and should be performed each time update. + // So put it here temporarily, although it is not appropriate to + // put a model-writing procedure in `view`. + this.axisPointerClass && fixValue(axisModel); + + _super.prototype.render.apply(this, arguments); + + this._doUpdateAxisPointerClass(axisModel, api, true); + }; + /** + * Action handler. + */ + + + AxisView.prototype.updateAxisPointer = function (axisModel, ecModel, api, payload) { + this._doUpdateAxisPointerClass(axisModel, api, false); + }; + /** + * @override + */ + + + AxisView.prototype.remove = function (ecModel, api) { + var axisPointer = this._axisPointer; + axisPointer && axisPointer.remove(api); + }; + /** + * @override + */ + + + AxisView.prototype.dispose = function (ecModel, api) { + this._disposeAxisPointer(api); + + _super.prototype.dispose.apply(this, arguments); + }; + + AxisView.prototype._doUpdateAxisPointerClass = function (axisModel, api, forceRender) { + var Clazz = AxisView.getAxisPointerClass(this.axisPointerClass); + + if (!Clazz) { + return; + } + + var axisPointerModel = getAxisPointerModel(axisModel); + axisPointerModel ? (this._axisPointer || (this._axisPointer = new Clazz())).render(axisModel, axisPointerModel, api, forceRender) : this._disposeAxisPointer(api); + }; + + AxisView.prototype._disposeAxisPointer = function (api) { + this._axisPointer && this._axisPointer.dispose(api); + this._axisPointer = null; + }; + + AxisView.registerAxisPointerClass = function (type, clazz) { + if ("development" !== 'production') { + if (axisPointerClazz[type]) { + throw new Error('axisPointer ' + type + ' exists'); + } + } + + axisPointerClazz[type] = clazz; + }; + + AxisView.getAxisPointerClass = function (type) { + return type && axisPointerClazz[type]; + }; + AxisView.type = 'axis'; + return AxisView; + }(ComponentView); + + var inner$6 = makeInner(); + function rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } // TODO: TYPE + + + var splitAreaModel = axisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + var gridRect = gridModel.coordinateSystem.getRect(); + var ticksCoords = axis.getTicksCoords({ + tickModel: splitAreaModel, + clamp: true + }); + + if (!ticksCoords.length) { + return; + } // For Making appropriate splitArea animation, the color and anid + // should be corresponding to previous one if possible. + + + var areaColorsLen = areaColors.length; + var lastSplitAreaColors = inner$6(axisView).splitAreaColors; + var newSplitAreaColors = createHashMap(); + var colorIndex = 0; + + if (lastSplitAreaColors) { + for (var i = 0; i < ticksCoords.length; i++) { + var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue); + + if (cIndex != null) { + colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen; + break; + } + } + } + + var prev = axis.toGlobalCoord(ticksCoords[0].coord); + var areaStyle = areaStyleModel.getAreaStyle(); + areaColors = isArray(areaColors) ? areaColors : [areaColors]; + + for (var i = 1; i < ticksCoords.length; i++) { + var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); + var x = void 0; + var y = void 0; + var width = void 0; + var height = void 0; + + if (axis.isHorizontal()) { + x = prev; + y = gridRect.y; + width = tickCoord - x; + height = gridRect.height; + prev = x + width; + } else { + x = gridRect.x; + y = prev; + width = gridRect.width; + height = tickCoord - y; + prev = y + height; + } + + var tickValue = ticksCoords[i - 1].tickValue; + tickValue != null && newSplitAreaColors.set(tickValue, colorIndex); + axisGroup.add(new Rect({ + anid: tickValue != null ? 'area_' + tickValue : null, + shape: { + x: x, + y: y, + width: width, + height: height + }, + style: defaults({ + fill: areaColors[colorIndex] + }, areaStyle), + autoBatch: true, + silent: true + })); + colorIndex = (colorIndex + 1) % areaColorsLen; + } + + inner$6(axisView).splitAreaColors = newSplitAreaColors; + } + function rectCoordAxisHandleRemove(axisView) { + inner$6(axisView).splitAreaColors = null; + } + + var axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName']; + var selfBuilderAttrs = ['splitArea', 'splitLine', 'minorSplitLine']; + + var CartesianAxisView = + /** @class */ + function (_super) { + __extends(CartesianAxisView, _super); + + function CartesianAxisView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CartesianAxisView.type; + _this.axisPointerClass = 'CartesianAxisPointer'; + return _this; + } + /** + * @override + */ + + + CartesianAxisView.prototype.render = function (axisModel, ecModel, api, payload) { + this.group.removeAll(); + var oldAxisGroup = this._axisGroup; + this._axisGroup = new Group(); + this.group.add(this._axisGroup); + + if (!axisModel.get('show')) { + return; + } + + var gridModel = axisModel.getCoordSysModel(); + var layout = layout$1(gridModel, axisModel); + var axisBuilder = new AxisBuilder(axisModel, extend({ + handleAutoShown: function (elementType) { + var cartesians = gridModel.coordinateSystem.getCartesians(); + + for (var i = 0; i < cartesians.length; i++) { + var otherAxisType = cartesians[i].getOtherAxis(axisModel.axis).type; + + if (otherAxisType === 'value' || otherAxisType === 'log') { + // Still show axis tick or axisLine if other axis is value / log + return true; + } + } // Not show axisTick or axisLine if other axis is category / time + + + return false; + } + }, layout)); + each(axisBuilderAttrs, axisBuilder.add, axisBuilder); + + this._axisGroup.add(axisBuilder.getGroup()); + + each(selfBuilderAttrs, function (name) { + if (axisModel.get([name, 'show'])) { + axisElementBuilders[name](this, this._axisGroup, axisModel, gridModel); + } + }, this); // THIS is a special case for bar racing chart. + // Update the axis label from the natural initial layout to + // sorted layout should has no animation. + + var isInitialSortFromBarRacing = payload && payload.type === 'changeAxisOrder' && payload.isInitSort; + + if (!isInitialSortFromBarRacing) { + groupTransition(oldAxisGroup, this._axisGroup, axisModel); + } + + _super.prototype.render.call(this, axisModel, ecModel, api, payload); + }; + + CartesianAxisView.prototype.remove = function () { + rectCoordAxisHandleRemove(this); + }; + + CartesianAxisView.type = 'cartesianAxis'; + return CartesianAxisView; + }(AxisView); + + var axisElementBuilders = { + splitLine: function (axisView, axisGroup, axisModel, gridModel) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } + + var splitLineModel = axisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + lineColors = isArray(lineColors) ? lineColors : [lineColors]; + var gridRect = gridModel.coordinateSystem.getRect(); + var isHorizontal = axis.isHorizontal(); + var lineCount = 0; + var ticksCoords = axis.getTicksCoords({ + tickModel: splitLineModel + }); + var p1 = []; + var p2 = []; + var lineStyle = lineStyleModel.getLineStyle(); + + for (var i = 0; i < ticksCoords.length; i++) { + var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); + + if (isHorizontal) { + p1[0] = tickCoord; + p1[1] = gridRect.y; + p2[0] = tickCoord; + p2[1] = gridRect.y + gridRect.height; + } else { + p1[0] = gridRect.x; + p1[1] = tickCoord; + p2[0] = gridRect.x + gridRect.width; + p2[1] = tickCoord; + } + + var colorIndex = lineCount++ % lineColors.length; + var tickValue = ticksCoords[i].tickValue; + axisGroup.add(new Line({ + anid: tickValue != null ? 'line_' + ticksCoords[i].tickValue : null, + subPixelOptimize: true, + autoBatch: true, + shape: { + x1: p1[0], + y1: p1[1], + x2: p2[0], + y2: p2[1] + }, + style: defaults({ + stroke: lineColors[colorIndex] + }, lineStyle), + silent: true + })); + } + }, + minorSplitLine: function (axisView, axisGroup, axisModel, gridModel) { + var axis = axisModel.axis; + var minorSplitLineModel = axisModel.getModel('minorSplitLine'); + var lineStyleModel = minorSplitLineModel.getModel('lineStyle'); + var gridRect = gridModel.coordinateSystem.getRect(); + var isHorizontal = axis.isHorizontal(); + var minorTicksCoords = axis.getMinorTicksCoords(); + + if (!minorTicksCoords.length) { + return; + } + + var p1 = []; + var p2 = []; + var lineStyle = lineStyleModel.getLineStyle(); + + for (var i = 0; i < minorTicksCoords.length; i++) { + for (var k = 0; k < minorTicksCoords[i].length; k++) { + var tickCoord = axis.toGlobalCoord(minorTicksCoords[i][k].coord); + + if (isHorizontal) { + p1[0] = tickCoord; + p1[1] = gridRect.y; + p2[0] = tickCoord; + p2[1] = gridRect.y + gridRect.height; + } else { + p1[0] = gridRect.x; + p1[1] = tickCoord; + p2[0] = gridRect.x + gridRect.width; + p2[1] = tickCoord; + } + + axisGroup.add(new Line({ + anid: 'minor_line_' + minorTicksCoords[i][k].tickValue, + subPixelOptimize: true, + autoBatch: true, + shape: { + x1: p1[0], + y1: p1[1], + x2: p2[0], + y2: p2[1] + }, + style: lineStyle, + silent: true + })); + } + } + }, + splitArea: function (axisView, axisGroup, axisModel, gridModel) { + rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel); + } + }; + + var CartesianXAxisView = + /** @class */ + function (_super) { + __extends(CartesianXAxisView, _super); + + function CartesianXAxisView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CartesianXAxisView.type; + return _this; + } + + CartesianXAxisView.type = 'xAxis'; + return CartesianXAxisView; + }(CartesianAxisView); + + var CartesianYAxisView = + /** @class */ + function (_super) { + __extends(CartesianYAxisView, _super); + + function CartesianYAxisView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CartesianXAxisView.type; + return _this; + } + + CartesianYAxisView.type = 'yAxis'; + return CartesianYAxisView; + }(CartesianAxisView); + + var GridView = + /** @class */ + function (_super) { + __extends(GridView, _super); + + function GridView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = 'grid'; + return _this; + } + + GridView.prototype.render = function (gridModel, ecModel) { + this.group.removeAll(); + + if (gridModel.get('show')) { + this.group.add(new Rect({ + shape: gridModel.coordinateSystem.getRect(), + style: defaults({ + fill: gridModel.get('backgroundColor') + }, gridModel.getItemStyle()), + silent: true, + z2: -1 + })); + } + }; + + GridView.type = 'grid'; + return GridView; + }(ComponentView); + + var extraOption = { + // gridIndex: 0, + // gridId: '', + offset: 0 + }; + function install$5(registers) { + registers.registerComponentView(GridView); + registers.registerComponentModel(GridModel); + registers.registerCoordinateSystem('cartesian2d', Grid); + axisModelCreator(registers, 'x', CartesianAxisModel, extraOption); + axisModelCreator(registers, 'y', CartesianAxisModel, extraOption); + registers.registerComponentView(CartesianXAxisView); + registers.registerComponentView(CartesianYAxisView); + registers.registerPreprocessor(function (option) { + // Only create grid when need + if (option.xAxis && option.yAxis && !option.grid) { + option.grid = {}; + } + }); + } + + function install$6(registers) { + // In case developer forget to include grid component + use(install$5); + registers.registerSeriesModel(ScatterSeriesModel); + registers.registerChartView(ScatterView); + registers.registerLayout(pointsLayout('scatter')); + } + + function radarLayout(ecModel) { + ecModel.eachSeriesByType('radar', function (seriesModel) { + var data = seriesModel.getData(); + var points = []; + var coordSys = seriesModel.coordinateSystem; + + if (!coordSys) { + return; + } + + var axes = coordSys.getIndicatorAxes(); + each(axes, function (axis, axisIndex) { + data.each(data.mapDimension(axes[axisIndex].dim), function (val, dataIndex) { + points[dataIndex] = points[dataIndex] || []; + var point = coordSys.dataToPoint(val, axisIndex); + points[dataIndex][axisIndex] = isValidPoint(point) ? point : getValueMissingPoint(coordSys); + }); + }); // Close polygon + + data.each(function (idx) { + // TODO + // Is it appropriate to connect to the next data when some data is missing? + // Or, should trade it like `connectNull` in line chart? + var firstPoint = find(points[idx], function (point) { + return isValidPoint(point); + }) || getValueMissingPoint(coordSys); // Copy the first actual point to the end of the array + + points[idx].push(firstPoint.slice()); + data.setItemLayout(idx, points[idx]); + }); + }); + } + + function isValidPoint(point) { + return !isNaN(point[0]) && !isNaN(point[1]); + } + + function getValueMissingPoint(coordSys) { + // It is error-prone to input [NaN, NaN] into polygon, polygon. + // (probably cause problem when refreshing or animating) + return [coordSys.cx, coordSys.cy]; + } + + function radarBackwardCompat(option) { + var polarOptArr = option.polar; + + if (polarOptArr) { + if (!isArray(polarOptArr)) { + polarOptArr = [polarOptArr]; + } + + var polarNotRadar_1 = []; + each(polarOptArr, function (polarOpt, idx) { + if (polarOpt.indicator) { + if (polarOpt.type && !polarOpt.shape) { + polarOpt.shape = polarOpt.type; + } + + option.radar = option.radar || []; + + if (!isArray(option.radar)) { + option.radar = [option.radar]; + } + + option.radar.push(polarOpt); + } else { + polarNotRadar_1.push(polarOpt); + } + }); + option.polar = polarNotRadar_1; + } + + each(option.series, function (seriesOpt) { + if (seriesOpt && seriesOpt.type === 'radar' && seriesOpt.polarIndex) { + seriesOpt.radarIndex = seriesOpt.polarIndex; + } + }); + } + + var RadarView = + /** @class */ + function (_super) { + __extends(RadarView, _super); + + function RadarView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = RadarView.type; + return _this; + } + + RadarView.prototype.render = function (seriesModel, ecModel, api) { + var polar = seriesModel.coordinateSystem; + var group = this.group; + var data = seriesModel.getData(); + var oldData = this._data; + + function createSymbol$1(data, idx) { + var symbolType = data.getItemVisual(idx, 'symbol') || 'circle'; + + if (symbolType === 'none') { + return; + } + + var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize')); + var symbolPath = createSymbol(symbolType, -1, -1, 2, 2); + var symbolRotate = data.getItemVisual(idx, 'symbolRotate') || 0; + symbolPath.attr({ + style: { + strokeNoScale: true + }, + z2: 100, + scaleX: symbolSize[0] / 2, + scaleY: symbolSize[1] / 2, + rotation: symbolRotate * Math.PI / 180 || 0 + }); + return symbolPath; + } + + function updateSymbols(oldPoints, newPoints, symbolGroup, data, idx, isInit) { + // Simply rerender all + symbolGroup.removeAll(); + + for (var i = 0; i < newPoints.length - 1; i++) { + var symbolPath = createSymbol$1(data, idx); + + if (symbolPath) { + symbolPath.__dimIdx = i; + + if (oldPoints[i]) { + symbolPath.setPosition(oldPoints[i]); + graphic[isInit ? 'initProps' : 'updateProps'](symbolPath, { + x: newPoints[i][0], + y: newPoints[i][1] + }, seriesModel, idx); + } else { + symbolPath.setPosition(newPoints[i]); + } + + symbolGroup.add(symbolPath); + } + } + } + + function getInitialPoints(points) { + return map(points, function (pt) { + return [polar.cx, polar.cy]; + }); + } + + data.diff(oldData).add(function (idx) { + var points = data.getItemLayout(idx); + + if (!points) { + return; + } + + var polygon = new Polygon(); + var polyline = new Polyline(); + var target = { + shape: { + points: points + } + }; + polygon.shape.points = getInitialPoints(points); + polyline.shape.points = getInitialPoints(points); + initProps(polygon, target, seriesModel, idx); + initProps(polyline, target, seriesModel, idx); + var itemGroup = new Group(); + var symbolGroup = new Group(); + itemGroup.add(polyline); + itemGroup.add(polygon); + itemGroup.add(symbolGroup); + updateSymbols(polyline.shape.points, points, symbolGroup, data, idx, true); + data.setItemGraphicEl(idx, itemGroup); + }).update(function (newIdx, oldIdx) { + var itemGroup = oldData.getItemGraphicEl(oldIdx); + var polyline = itemGroup.childAt(0); + var polygon = itemGroup.childAt(1); + var symbolGroup = itemGroup.childAt(2); + var target = { + shape: { + points: data.getItemLayout(newIdx) + } + }; + + if (!target.shape.points) { + return; + } + + updateSymbols(polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false); + saveOldStyle(polygon); + saveOldStyle(polyline); + updateProps(polyline, target, seriesModel); + updateProps(polygon, target, seriesModel); + data.setItemGraphicEl(newIdx, itemGroup); + }).remove(function (idx) { + group.remove(oldData.getItemGraphicEl(idx)); + }).execute(); + data.eachItemGraphicEl(function (itemGroup, idx) { + var itemModel = data.getItemModel(idx); + var polyline = itemGroup.childAt(0); + var polygon = itemGroup.childAt(1); + var symbolGroup = itemGroup.childAt(2); // Radar uses the visual encoded from itemStyle. + + var itemStyle = data.getItemVisual(idx, 'style'); + var color = itemStyle.fill; + group.add(itemGroup); + polyline.useStyle(defaults(itemModel.getModel('lineStyle').getLineStyle(), { + fill: 'none', + stroke: color + })); + setStatesStylesFromModel(polyline, itemModel, 'lineStyle'); + setStatesStylesFromModel(polygon, itemModel, 'areaStyle'); + var areaStyleModel = itemModel.getModel('areaStyle'); + var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty(); + polygon.ignore = polygonIgnore; + each(['emphasis', 'select', 'blur'], function (stateName) { + var stateModel = itemModel.getModel([stateName, 'areaStyle']); + var stateIgnore = stateModel.isEmpty() && stateModel.parentModel.isEmpty(); // Won't be ignore if normal state is not ignore. + + polygon.ensureState(stateName).ignore = stateIgnore && polygonIgnore; + }); + polygon.useStyle(defaults(areaStyleModel.getAreaStyle(), { + fill: color, + opacity: 0.7, + decal: itemStyle.decal + })); + var emphasisModel = itemModel.getModel('emphasis'); + var itemHoverStyle = emphasisModel.getModel('itemStyle').getItemStyle(); + symbolGroup.eachChild(function (symbolPath) { + if (symbolPath instanceof ZRImage) { + var pathStyle = symbolPath.style; + symbolPath.useStyle(extend({ + // TODO other properties like x, y ? + image: pathStyle.image, + x: pathStyle.x, + y: pathStyle.y, + width: pathStyle.width, + height: pathStyle.height + }, itemStyle)); + } else { + symbolPath.useStyle(itemStyle); + symbolPath.setColor(color); + symbolPath.style.strokeNoScale = true; + } + + var pathEmphasisState = symbolPath.ensureState('emphasis'); + pathEmphasisState.style = clone(itemHoverStyle); + var defaultText = data.getStore().get(data.getDimensionIndex(symbolPath.__dimIdx), idx); + (defaultText == null || isNaN(defaultText)) && (defaultText = ''); + setLabelStyle(symbolPath, getLabelStatesModels(itemModel), { + labelFetcher: data.hostModel, + labelDataIndex: idx, + labelDimIndex: symbolPath.__dimIdx, + defaultText: defaultText, + inheritColor: color, + defaultOpacity: itemStyle.opacity + }); + }); + enableHoverEmphasis(itemGroup, emphasisModel.get('focus'), emphasisModel.get('blurScope')); + }); + this._data = data; + }; + + RadarView.prototype.remove = function () { + this.group.removeAll(); + this._data = null; + }; + + RadarView.type = 'radar'; + return RadarView; + }(ChartView); + + var RadarSeriesModel = + /** @class */ + function (_super) { + __extends(RadarSeriesModel, _super); + + function RadarSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = RadarSeriesModel.type; + _this.hasSymbolVisual = true; + return _this; + } // Overwrite + + + RadarSeriesModel.prototype.init = function (option) { + _super.prototype.init.apply(this, arguments); // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + + + this.legendVisualProvider = new LegendVisualProvider(bind(this.getData, this), bind(this.getRawData, this)); + }; + + RadarSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesDataSimply(this, { + generateCoord: 'indicator_', + generateCoordCount: Infinity + }); + }; + + RadarSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + var data = this.getData(); + var coordSys = this.coordinateSystem; + var indicatorAxes = coordSys.getIndicatorAxes(); + var name = this.getData().getName(dataIndex); + var nameToDisplay = name === '' ? this.name : name; + var markerColor = retrieveVisualColorForTooltipMarker(this, dataIndex); + return createTooltipMarkup('section', { + header: nameToDisplay, + sortBlocks: true, + blocks: map(indicatorAxes, function (axis) { + var val = data.get(data.mapDimension(axis.dim), dataIndex); + return createTooltipMarkup('nameValue', { + markerType: 'subItem', + markerColor: markerColor, + name: axis.name, + value: val, + sortParam: val + }); + }) + }); + }; + + RadarSeriesModel.prototype.getTooltipPosition = function (dataIndex) { + if (dataIndex != null) { + var data_1 = this.getData(); + var coordSys = this.coordinateSystem; + var values = data_1.getValues(map(coordSys.dimensions, function (dim) { + return data_1.mapDimension(dim); + }), dataIndex); + + for (var i = 0, len = values.length; i < len; i++) { + if (!isNaN(values[i])) { + var indicatorAxes = coordSys.getIndicatorAxes(); + return coordSys.coordToPoint(indicatorAxes[i].dataToCoord(values[i]), i); + } + } + } + }; + + RadarSeriesModel.type = 'series.radar'; + RadarSeriesModel.dependencies = ['radar']; + RadarSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + colorBy: 'data', + coordinateSystem: 'radar', + legendHoverLink: true, + radarIndex: 0, + lineStyle: { + width: 2, + type: 'solid', + join: 'round' + }, + label: { + position: 'top' + }, + // areaStyle: { + // }, + // itemStyle: {} + symbolSize: 8 // symbolRotate: null + + }; + return RadarSeriesModel; + }(SeriesModel); + + var valueAxisDefault = axisDefault.value; + + function defaultsShow(opt, show) { + return defaults({ + show: show + }, opt); + } + + var RadarModel = + /** @class */ + function (_super) { + __extends(RadarModel, _super); + + function RadarModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = RadarModel.type; + return _this; + } + + RadarModel.prototype.optionUpdated = function () { + var boundaryGap = this.get('boundaryGap'); + var splitNumber = this.get('splitNumber'); + var scale = this.get('scale'); + var axisLine = this.get('axisLine'); + var axisTick = this.get('axisTick'); // let axisType = this.get('axisType'); + + var axisLabel = this.get('axisLabel'); + var nameTextStyle = this.get('axisName'); + var showName = this.get(['axisName', 'show']); + var nameFormatter = this.get(['axisName', 'formatter']); + var nameGap = this.get('axisNameGap'); + var triggerEvent = this.get('triggerEvent'); + var indicatorModels = map(this.get('indicator') || [], function (indicatorOpt) { + // PENDING + if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) { + indicatorOpt.min = 0; + } else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) { + indicatorOpt.max = 0; + } + + var iNameTextStyle = nameTextStyle; + + if (indicatorOpt.color != null) { + iNameTextStyle = defaults({ + color: indicatorOpt.color + }, nameTextStyle); + } // Use same configuration + + + var innerIndicatorOpt = merge(clone(indicatorOpt), { + boundaryGap: boundaryGap, + splitNumber: splitNumber, + scale: scale, + axisLine: axisLine, + axisTick: axisTick, + // axisType: axisType, + axisLabel: axisLabel, + // Compatible with 2 and use text + name: indicatorOpt.text, + nameLocation: 'end', + nameGap: nameGap, + // min: 0, + nameTextStyle: iNameTextStyle, + triggerEvent: triggerEvent + }, false); + + if (!showName) { + innerIndicatorOpt.name = ''; + } + + if (typeof nameFormatter === 'string') { + var indName = innerIndicatorOpt.name; + innerIndicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : ''); + } else if (typeof nameFormatter === 'function') { + innerIndicatorOpt.name = nameFormatter(innerIndicatorOpt.name, innerIndicatorOpt); + } + + var model = new Model(innerIndicatorOpt, null, this.ecModel); + mixin(model, AxisModelCommonMixin.prototype); // For triggerEvent. + + model.mainType = 'radar'; + model.componentIndex = this.componentIndex; + return model; + }, this); + this._indicatorModels = indicatorModels; + }; + + RadarModel.prototype.getIndicatorModels = function () { + return this._indicatorModels; + }; + + RadarModel.type = 'radar'; + RadarModel.defaultOption = { + zlevel: 0, + z: 0, + center: ['50%', '50%'], + radius: '75%', + startAngle: 90, + axisName: { + show: true // formatter: null + // textStyle: {} + + }, + boundaryGap: [0, 0], + splitNumber: 5, + axisNameGap: 15, + scale: false, + // Polygon or circle + shape: 'polygon', + axisLine: merge({ + lineStyle: { + color: '#bbb' + } + }, valueAxisDefault.axisLine), + axisLabel: defaultsShow(valueAxisDefault.axisLabel, false), + axisTick: defaultsShow(valueAxisDefault.axisTick, false), + // axisType: 'value', + splitLine: defaultsShow(valueAxisDefault.splitLine, true), + splitArea: defaultsShow(valueAxisDefault.splitArea, true), + // {text, min, max} + indicator: [] + }; + return RadarModel; + }(ComponentModel); + + var axisBuilderAttrs$1 = ['axisLine', 'axisTickLabel', 'axisName']; + + var RadarView$1 = + /** @class */ + function (_super) { + __extends(RadarView, _super); + + function RadarView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = RadarView.type; + return _this; + } + + RadarView.prototype.render = function (radarModel, ecModel, api) { + var group = this.group; + group.removeAll(); + + this._buildAxes(radarModel); + + this._buildSplitLineAndArea(radarModel); + }; + + RadarView.prototype._buildAxes = function (radarModel) { + var radar = radarModel.coordinateSystem; + var indicatorAxes = radar.getIndicatorAxes(); + var axisBuilders = map(indicatorAxes, function (indicatorAxis) { + var axisBuilder = new AxisBuilder(indicatorAxis.model, { + position: [radar.cx, radar.cy], + rotation: indicatorAxis.angle, + labelDirection: -1, + tickDirection: -1, + nameDirection: 1 + }); + return axisBuilder; + }); + each(axisBuilders, function (axisBuilder) { + each(axisBuilderAttrs$1, axisBuilder.add, axisBuilder); + this.group.add(axisBuilder.getGroup()); + }, this); + }; + + RadarView.prototype._buildSplitLineAndArea = function (radarModel) { + var radar = radarModel.coordinateSystem; + var indicatorAxes = radar.getIndicatorAxes(); + + if (!indicatorAxes.length) { + return; + } + + var shape = radarModel.get('shape'); + var splitLineModel = radarModel.getModel('splitLine'); + var splitAreaModel = radarModel.getModel('splitArea'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var showSplitLine = splitLineModel.get('show'); + var showSplitArea = splitAreaModel.get('show'); + var splitLineColors = lineStyleModel.get('color'); + var splitAreaColors = areaStyleModel.get('color'); + var splitLineColorsArr = isArray(splitLineColors) ? splitLineColors : [splitLineColors]; + var splitAreaColorsArr = isArray(splitAreaColors) ? splitAreaColors : [splitAreaColors]; + var splitLines = []; + var splitAreas = []; + + function getColorIndex(areaOrLine, areaOrLineColorList, idx) { + var colorIndex = idx % areaOrLineColorList.length; + areaOrLine[colorIndex] = areaOrLine[colorIndex] || []; + return colorIndex; + } + + if (shape === 'circle') { + var ticksRadius = indicatorAxes[0].getTicksCoords(); + var cx = radar.cx; + var cy = radar.cy; + + for (var i = 0; i < ticksRadius.length; i++) { + if (showSplitLine) { + var colorIndex = getColorIndex(splitLines, splitLineColorsArr, i); + splitLines[colorIndex].push(new Circle({ + shape: { + cx: cx, + cy: cy, + r: ticksRadius[i].coord + } + })); + } + + if (showSplitArea && i < ticksRadius.length - 1) { + var colorIndex = getColorIndex(splitAreas, splitAreaColorsArr, i); + splitAreas[colorIndex].push(new Ring({ + shape: { + cx: cx, + cy: cy, + r0: ticksRadius[i].coord, + r: ticksRadius[i + 1].coord + } + })); + } + } + } // Polyyon + else { + var realSplitNumber_1; + var axesTicksPoints = map(indicatorAxes, function (indicatorAxis, idx) { + var ticksCoords = indicatorAxis.getTicksCoords(); + realSplitNumber_1 = realSplitNumber_1 == null ? ticksCoords.length - 1 : Math.min(ticksCoords.length - 1, realSplitNumber_1); + return map(ticksCoords, function (tickCoord) { + return radar.coordToPoint(tickCoord.coord, idx); + }); + }); + var prevPoints = []; + + for (var i = 0; i <= realSplitNumber_1; i++) { + var points = []; + + for (var j = 0; j < indicatorAxes.length; j++) { + points.push(axesTicksPoints[j][i]); + } // Close + + + if (points[0]) { + points.push(points[0].slice()); + } else { + if ("development" !== 'production') { + console.error('Can\'t draw value axis ' + i); + } + } + + if (showSplitLine) { + var colorIndex = getColorIndex(splitLines, splitLineColorsArr, i); + splitLines[colorIndex].push(new Polyline({ + shape: { + points: points + } + })); + } + + if (showSplitArea && prevPoints) { + var colorIndex = getColorIndex(splitAreas, splitAreaColorsArr, i - 1); + splitAreas[colorIndex].push(new Polygon({ + shape: { + points: points.concat(prevPoints) + } + })); + } + + prevPoints = points.slice().reverse(); + } + } + + var lineStyle = lineStyleModel.getLineStyle(); + var areaStyle = areaStyleModel.getAreaStyle(); // Add splitArea before splitLine + + each(splitAreas, function (splitAreas, idx) { + this.group.add(mergePath$1(splitAreas, { + style: defaults({ + stroke: 'none', + fill: splitAreaColorsArr[idx % splitAreaColorsArr.length] + }, areaStyle), + silent: true + })); + }, this); + each(splitLines, function (splitLines, idx) { + this.group.add(mergePath$1(splitLines, { + style: defaults({ + fill: 'none', + stroke: splitLineColorsArr[idx % splitLineColorsArr.length] + }, lineStyle), + silent: true + })); + }, this); + }; + + RadarView.type = 'radar'; + return RadarView; + }(ComponentView); + + var IndicatorAxis = + /** @class */ + function (_super) { + __extends(IndicatorAxis, _super); + + function IndicatorAxis(dim, scale, radiusExtent) { + var _this = _super.call(this, dim, scale, radiusExtent) || this; + + _this.type = 'value'; + _this.angle = 0; + _this.name = ''; + return _this; + } + + return IndicatorAxis; + }(Axis); + + var Radar = + /** @class */ + function () { + function Radar(radarModel, ecModel, api) { + /** + * + * Radar dimensions + */ + this.dimensions = []; + this._model = radarModel; + this._indicatorAxes = map(radarModel.getIndicatorModels(), function (indicatorModel, idx) { + var dim = 'indicator_' + idx; + var indicatorAxis = new IndicatorAxis(dim, new IntervalScale() // (indicatorModel.get('axisType') === 'log') ? new LogScale() : new IntervalScale() + ); + indicatorAxis.name = indicatorModel.get('name'); // Inject model and axis + + indicatorAxis.model = indicatorModel; + indicatorModel.axis = indicatorAxis; + this.dimensions.push(dim); + return indicatorAxis; + }, this); + this.resize(radarModel, api); + } + + Radar.prototype.getIndicatorAxes = function () { + return this._indicatorAxes; + }; + + Radar.prototype.dataToPoint = function (value, indicatorIndex) { + var indicatorAxis = this._indicatorAxes[indicatorIndex]; + return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex); + }; // TODO: API should be coordToPoint([coord, indicatorIndex]) + + + Radar.prototype.coordToPoint = function (coord, indicatorIndex) { + var indicatorAxis = this._indicatorAxes[indicatorIndex]; + var angle = indicatorAxis.angle; + var x = this.cx + coord * Math.cos(angle); + var y = this.cy - coord * Math.sin(angle); + return [x, y]; + }; + + Radar.prototype.pointToData = function (pt) { + var dx = pt[0] - this.cx; + var dy = pt[1] - this.cy; + var radius = Math.sqrt(dx * dx + dy * dy); + dx /= radius; + dy /= radius; + var radian = Math.atan2(-dy, dx); // Find the closest angle + // FIXME index can calculated directly + + var minRadianDiff = Infinity; + var closestAxis; + var closestAxisIdx = -1; + + for (var i = 0; i < this._indicatorAxes.length; i++) { + var indicatorAxis = this._indicatorAxes[i]; + var diff = Math.abs(radian - indicatorAxis.angle); + + if (diff < minRadianDiff) { + closestAxis = indicatorAxis; + closestAxisIdx = i; + minRadianDiff = diff; + } + } + + return [closestAxisIdx, +(closestAxis && closestAxis.coordToData(radius))]; + }; + + Radar.prototype.resize = function (radarModel, api) { + var center = radarModel.get('center'); + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + var viewSize = Math.min(viewWidth, viewHeight) / 2; + this.cx = parsePercent$1(center[0], viewWidth); + this.cy = parsePercent$1(center[1], viewHeight); + this.startAngle = radarModel.get('startAngle') * Math.PI / 180; // radius may be single value like `20`, `'80%'`, or array like `[10, '80%']` + + var radius = radarModel.get('radius'); + + if (typeof radius === 'string' || typeof radius === 'number') { + radius = [0, radius]; + } + + this.r0 = parsePercent$1(radius[0], viewSize); + this.r = parsePercent$1(radius[1], viewSize); + each(this._indicatorAxes, function (indicatorAxis, idx) { + indicatorAxis.setExtent(this.r0, this.r); + var angle = this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length; // Normalize to [-PI, PI] + + angle = Math.atan2(Math.sin(angle), Math.cos(angle)); + indicatorAxis.angle = angle; + }, this); + }; + + Radar.prototype.update = function (ecModel, api) { + var indicatorAxes = this._indicatorAxes; + var radarModel = this._model; + each(indicatorAxes, function (indicatorAxis) { + indicatorAxis.scale.setExtent(Infinity, -Infinity); + }); + ecModel.eachSeriesByType('radar', function (radarSeries, idx) { + if (radarSeries.get('coordinateSystem') !== 'radar' // @ts-ignore + || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel) { + return; + } + + var data = radarSeries.getData(); + each(indicatorAxes, function (indicatorAxis) { + indicatorAxis.scale.unionExtentFromData(data, data.mapDimension(indicatorAxis.dim)); + }); + }, this); + var splitNumber = radarModel.get('splitNumber'); + + function increaseInterval(interval) { + var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10)); // Increase interval + + var f = interval / exp10; + + if (f === 2) { + f = 5; + } else { + // f is 2 or 5 + f *= 2; + } + + return f * exp10; + } // Force all the axis fixing the maxSplitNumber. + + + each(indicatorAxes, function (indicatorAxis, idx) { + var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model).extent; + niceScaleExtent(indicatorAxis.scale, indicatorAxis.model); + var axisModel = indicatorAxis.model; + var scale = indicatorAxis.scale; + var fixedMin = parseAxisModelMinMax(scale, axisModel.get('min', true)); + var fixedMax = parseAxisModelMinMax(scale, axisModel.get('max', true)); + var interval = scale.getInterval(); + + if (fixedMin != null && fixedMax != null) { + // User set min, max, divide to get new interval + scale.setExtent(+fixedMin, +fixedMax); + scale.setInterval((fixedMax - fixedMin) / splitNumber); + } else if (fixedMin != null) { + var max = void 0; // User set min, expand extent on the other side + + do { + max = fixedMin + interval * splitNumber; + scale.setExtent(+fixedMin, max); // Interval must been set after extent + // FIXME + + scale.setInterval(interval); + interval = increaseInterval(interval); + } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1])); + } else if (fixedMax != null) { + var min = void 0; // User set min, expand extent on the other side + + do { + min = fixedMax - interval * splitNumber; + scale.setExtent(min, +fixedMax); + scale.setInterval(interval); + interval = increaseInterval(interval); + } while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0])); + } else { + var nicedSplitNumber = scale.getTicks().length - 1; + + if (nicedSplitNumber > splitNumber) { + interval = increaseInterval(interval); + } // TODO + + + var max = Math.ceil(rawExtent[1] / interval) * interval; + var min = round(max - interval * splitNumber); + scale.setExtent(min, max); + scale.setInterval(interval); + } + }); + }; + + Radar.prototype.convertToPixel = function (ecModel, finder, value) { + console.warn('Not implemented.'); + return null; + }; + + Radar.prototype.convertFromPixel = function (ecModel, finder, pixel) { + console.warn('Not implemented.'); + return null; + }; + + Radar.prototype.containPoint = function (point) { + console.warn('Not implemented.'); + return false; + }; + + Radar.create = function (ecModel, api) { + var radarList = []; + ecModel.eachComponent('radar', function (radarModel) { + var radar = new Radar(radarModel, ecModel, api); + radarList.push(radar); + radarModel.coordinateSystem = radar; + }); + ecModel.eachSeriesByType('radar', function (radarSeries) { + if (radarSeries.get('coordinateSystem') === 'radar') { + // Inject coordinate system + // @ts-ignore + radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0]; + } + }); + return radarList; + }; + /** + * Radar dimensions is based on the data + */ + + + Radar.dimensions = []; + return Radar; + }(); + + function install$7(registers) { + registers.registerCoordinateSystem('radar', Radar); + registers.registerComponentModel(RadarModel); + registers.registerComponentView(RadarView$1); + registers.registerVisual({ + seriesType: 'radar', + reset: function (seriesModel) { + var data = seriesModel.getData(); // itemVisual symbol is for selected data + + data.each(function (idx) { + data.setItemVisual(idx, 'legendIcon', 'roundRect'); + }); // visual is for unselected data + + data.setVisual('legendIcon', 'roundRect'); + } + }); + } + + function install$8(registers) { + use(install$7); + registers.registerChartView(RadarView); + registers.registerSeriesModel(RadarSeriesModel); + registers.registerLayout(radarLayout); + registers.registerProcessor(dataFilter('radar')); + registers.registerPreprocessor(radarBackwardCompat); + } + + var ATTR = '\0_ec_interaction_mutex'; + function take(zr, resourceKey, userKey) { + var store = getStore(zr); + store[resourceKey] = userKey; + } + function release(zr, resourceKey, userKey) { + var store = getStore(zr); + var uKey = store[resourceKey]; + + if (uKey === userKey) { + store[resourceKey] = null; + } + } + function isTaken(zr, resourceKey) { + return !!getStore(zr)[resourceKey]; + } + + function getStore(zr) { + return zr[ATTR] || (zr[ATTR] = {}); + } + /** + * payload: { + * type: 'takeGlobalCursor', + * key: 'dataZoomSelect', or 'brush', or ..., + * If no userKey, release global cursor. + * } + */ + // TODO: SELF REGISTERED. + + + registerAction({ + type: 'takeGlobalCursor', + event: 'globalCursorTaken', + update: 'update' + }, function () {}); + + var RoamController = + /** @class */ + function (_super) { + __extends(RoamController, _super); + + function RoamController(zr) { + var _this = _super.call(this) || this; + + _this._zr = zr; // Avoid two roamController bind the same handler + + var mousedownHandler = bind(_this._mousedownHandler, _this); + var mousemoveHandler = bind(_this._mousemoveHandler, _this); + var mouseupHandler = bind(_this._mouseupHandler, _this); + var mousewheelHandler = bind(_this._mousewheelHandler, _this); + var pinchHandler = bind(_this._pinchHandler, _this); + /** + * Notice: only enable needed types. For example, if 'zoom' + * is not needed, 'zoom' should not be enabled, otherwise + * default mousewheel behaviour (scroll page) will be disabled. + */ + + _this.enable = function (controlType, opt) { + // Disable previous first + this.disable(); + this._opt = defaults(clone(opt) || {}, { + zoomOnMouseWheel: true, + moveOnMouseMove: true, + // By default, wheel do not trigger move. + moveOnMouseWheel: false, + preventDefaultMouseMove: true + }); + + if (controlType == null) { + controlType = true; + } + + if (controlType === true || controlType === 'move' || controlType === 'pan') { + zr.on('mousedown', mousedownHandler); + zr.on('mousemove', mousemoveHandler); + zr.on('mouseup', mouseupHandler); + } + + if (controlType === true || controlType === 'scale' || controlType === 'zoom') { + zr.on('mousewheel', mousewheelHandler); + zr.on('pinch', pinchHandler); + } + }; + + _this.disable = function () { + zr.off('mousedown', mousedownHandler); + zr.off('mousemove', mousemoveHandler); + zr.off('mouseup', mouseupHandler); + zr.off('mousewheel', mousewheelHandler); + zr.off('pinch', pinchHandler); + }; + + return _this; + } + + RoamController.prototype.isDragging = function () { + return this._dragging; + }; + + RoamController.prototype.isPinching = function () { + return this._pinching; + }; + + RoamController.prototype.setPointerChecker = function (pointerChecker) { + this.pointerChecker = pointerChecker; + }; + + RoamController.prototype.dispose = function () { + this.disable(); + }; + + RoamController.prototype._mousedownHandler = function (e) { + if (isMiddleOrRightButtonOnMouseUpDown(e) || e.target && e.target.draggable) { + return; + } + + var x = e.offsetX; + var y = e.offsetY; // Only check on mosedown, but not mousemove. + // Mouse can be out of target when mouse moving. + + if (this.pointerChecker && this.pointerChecker(e, x, y)) { + this._x = x; + this._y = y; + this._dragging = true; + } + }; + + RoamController.prototype._mousemoveHandler = function (e) { + if (!this._dragging || !isAvailableBehavior('moveOnMouseMove', e, this._opt) || e.gestureEvent === 'pinch' || isTaken(this._zr, 'globalPan')) { + return; + } + + var x = e.offsetX; + var y = e.offsetY; + var oldX = this._x; + var oldY = this._y; + var dx = x - oldX; + var dy = y - oldY; + this._x = x; + this._y = y; + this._opt.preventDefaultMouseMove && stop(e.event); + trigger(this, 'pan', 'moveOnMouseMove', e, { + dx: dx, + dy: dy, + oldX: oldX, + oldY: oldY, + newX: x, + newY: y, + isAvailableBehavior: null + }); + }; + + RoamController.prototype._mouseupHandler = function (e) { + if (!isMiddleOrRightButtonOnMouseUpDown(e)) { + this._dragging = false; + } + }; + + RoamController.prototype._mousewheelHandler = function (e) { + var shouldZoom = isAvailableBehavior('zoomOnMouseWheel', e, this._opt); + var shouldMove = isAvailableBehavior('moveOnMouseWheel', e, this._opt); + var wheelDelta = e.wheelDelta; + var absWheelDeltaDelta = Math.abs(wheelDelta); + var originX = e.offsetX; + var originY = e.offsetY; // wheelDelta maybe -0 in chrome mac. + + if (wheelDelta === 0 || !shouldZoom && !shouldMove) { + return; + } // If both `shouldZoom` and `shouldMove` is true, trigger + // their event both, and the final behavior is determined + // by event listener themselves. + + + if (shouldZoom) { + // Convenience: + // Mac and VM Windows on Mac: scroll up: zoom out. + // Windows: scroll up: zoom in. + // FIXME: Should do more test in different environment. + // wheelDelta is too complicated in difference nvironment + // (https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel), + // although it has been normallized by zrender. + // wheelDelta of mouse wheel is bigger than touch pad. + var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1; + var scale = wheelDelta > 0 ? factor : 1 / factor; + checkPointerAndTrigger(this, 'zoom', 'zoomOnMouseWheel', e, { + scale: scale, + originX: originX, + originY: originY, + isAvailableBehavior: null + }); + } + + if (shouldMove) { + // FIXME: Should do more test in different environment. + var absDelta = Math.abs(wheelDelta); // wheelDelta of mouse wheel is bigger than touch pad. + + var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? 0.4 : absDelta > 1 ? 0.15 : 0.05); + checkPointerAndTrigger(this, 'scrollMove', 'moveOnMouseWheel', e, { + scrollDelta: scrollDelta, + originX: originX, + originY: originY, + isAvailableBehavior: null + }); + } + }; + + RoamController.prototype._pinchHandler = function (e) { + if (isTaken(this._zr, 'globalPan')) { + return; + } + + var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1; + checkPointerAndTrigger(this, 'zoom', null, e, { + scale: scale, + originX: e.pinchX, + originY: e.pinchY, + isAvailableBehavior: null + }); + }; + + return RoamController; + }(Eventful); + + function checkPointerAndTrigger(controller, eventName, behaviorToCheck, e, contollerEvent) { + if (controller.pointerChecker && controller.pointerChecker(e, contollerEvent.originX, contollerEvent.originY)) { + // When mouse is out of roamController rect, + // default befavoius should not be be disabled, otherwise + // page sliding is disabled, contrary to expectation. + stop(e.event); + trigger(controller, eventName, behaviorToCheck, e, contollerEvent); + } + } + + function trigger(controller, eventName, behaviorToCheck, e, contollerEvent) { + // Also provide behavior checker for event listener, for some case that + // multiple components share one listener. + contollerEvent.isAvailableBehavior = bind(isAvailableBehavior, null, behaviorToCheck, e); // TODO should not have type issue. + + controller.trigger(eventName, contollerEvent); + } // settings: { + // zoomOnMouseWheel + // moveOnMouseMove + // moveOnMouseWheel + // } + // The value can be: true / false / 'shift' / 'ctrl' / 'alt'. + + + function isAvailableBehavior(behaviorToCheck, e, settings) { + var setting = settings[behaviorToCheck]; + return !behaviorToCheck || setting && (!isString(setting) || e.event[setting + 'Key']); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + /** + * For geo and graph. + */ + function updateViewOnPan(controllerHost, dx, dy) { + var target = controllerHost.target; + target.x += dx; + target.y += dy; + target.dirty(); + } + /** + * For geo and graph. + */ + + function updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) { + var target = controllerHost.target; + var zoomLimit = controllerHost.zoomLimit; + var newZoom = controllerHost.zoom = controllerHost.zoom || 1; + newZoom *= zoomDelta; + + if (zoomLimit) { + var zoomMin = zoomLimit.min || 0; + var zoomMax = zoomLimit.max || Infinity; + newZoom = Math.max(Math.min(zoomMax, newZoom), zoomMin); + } + + var zoomScale = newZoom / controllerHost.zoom; + controllerHost.zoom = newZoom; // Keep the mouse center when scaling + + target.x -= (zoomX - target.x) * (zoomScale - 1); + target.y -= (zoomY - target.y) * (zoomScale - 1); + target.scaleX *= zoomScale; + target.scaleY *= zoomScale; + target.dirty(); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var IRRELEVANT_EXCLUDES = { + 'axisPointer': 1, + 'tooltip': 1, + 'brush': 1 + }; + /** + * Avoid that: mouse click on a elements that is over geo or graph, + * but roam is triggered. + */ + + function onIrrelevantElement(e, api, targetCoordSysModel) { + var model = api.getComponentByElement(e.topTarget); // If model is axisModel, it works only if it is injected with coordinateSystem. + + var coordSys = model && model.coordinateSystem; + return model && model !== targetCoordSysModel && !IRRELEVANT_EXCLUDES.hasOwnProperty(model.mainType) && coordSys && coordSys.model !== targetCoordSysModel; + } + + /** + * Only these tags enable use `itemStyle` if they are named in SVG. + * Other tags like might not suitable for `itemStyle`. + * They will not be considered to be styled until some requirements come. + */ + + var OPTION_STYLE_ENABLED_TAGS = ['rect', 'circle', 'line', 'ellipse', 'polygon', 'polyline', 'path']; + var OPTION_STYLE_ENABLED_TAG_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS); + var STATE_TRIGGER_TAG_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(['g'])); + var LABEL_HOST_MAP = createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(['g'])); + var mapLabelRaw = makeInner(); + + function getFixedItemStyle(model) { + var itemStyle = model.getItemStyle(); + var areaColor = model.get('areaColor'); // If user want the color not to be changed when hover, + // they should both set areaColor and color to be null. + + if (areaColor != null) { + itemStyle.fill = areaColor; + } + + return itemStyle; + } + + var MapDraw = + /** @class */ + function () { + function MapDraw(api) { + var group = new Group(); + this.uid = getUID('ec_map_draw'); + this._controller = new RoamController(api.getZr()); + this._controllerHost = { + target: group + }; + this.group = group; + group.add(this._regionsGroup = new Group()); + group.add(this._svgGroup = new Group()); + } + + MapDraw.prototype.draw = function (mapOrGeoModel, ecModel, api, fromView, payload) { + var isGeo = mapOrGeoModel.mainType === 'geo'; // Map series has data. GEO model that controlled by map series + // will be assigned with map data. Other GEO model has no data. + + var data = mapOrGeoModel.getData && mapOrGeoModel.getData(); + isGeo && ecModel.eachComponent({ + mainType: 'series', + subType: 'map' + }, function (mapSeries) { + if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) { + data = mapSeries.getData(); + } + }); + var geo = mapOrGeoModel.coordinateSystem; + var regionsGroup = this._regionsGroup; + var group = this.group; + var transformInfo = geo.getTransformInfo(); + var transformInfoRaw = transformInfo.raw; + var transformInfoRoam = transformInfo.roam; // No animation when first draw or in action + + var isFirstDraw = !regionsGroup.childAt(0) || payload; + + if (isFirstDraw) { + group.x = transformInfoRoam.x; + group.y = transformInfoRoam.y; + group.scaleX = transformInfoRoam.scaleX; + group.scaleY = transformInfoRoam.scaleY; + group.dirty(); + } else { + updateProps(group, transformInfoRoam, mapOrGeoModel); + } + + var isVisualEncodedByVisualMap = data && data.getVisual('visualMeta') && data.getVisual('visualMeta').length > 0; + var viewBuildCtx = { + api: api, + geo: geo, + mapOrGeoModel: mapOrGeoModel, + data: data, + isVisualEncodedByVisualMap: isVisualEncodedByVisualMap, + isGeo: isGeo, + transformInfoRaw: transformInfoRaw + }; + + if (geo.resourceType === 'geoJSON') { + this._buildGeoJSON(viewBuildCtx); + } else if (geo.resourceType === 'geoSVG') { + this._buildSVG(viewBuildCtx); + } + + this._updateController(mapOrGeoModel, ecModel, api); + + this._updateMapSelectHandler(mapOrGeoModel, regionsGroup, api, fromView); + }; + + MapDraw.prototype._buildGeoJSON = function (viewBuildCtx) { + var regionsGroupByName = this._regionsGroupByName = createHashMap(); + var regionsInfoByName = createHashMap(); + var regionsGroup = this._regionsGroup; + var transformInfoRaw = viewBuildCtx.transformInfoRaw; + var mapOrGeoModel = viewBuildCtx.mapOrGeoModel; + var data = viewBuildCtx.data; + + var transformPoint = function (point) { + return [point[0] * transformInfoRaw.scaleX + transformInfoRaw.x, point[1] * transformInfoRaw.scaleY + transformInfoRaw.y]; + }; + + regionsGroup.removeAll(); // Only when the resource is GeoJSON, there is `geo.regions`. + + each(viewBuildCtx.geo.regions, function (region) { + var regionName = region.name; // Consider in GeoJson properties.name may be duplicated, for example, + // there is multiple region named "United Kindom" or "France" (so many + // colonies). And it is not appropriate to merge them in geo, which + // will make them share the same label and bring trouble in label + // location calculation. + + var regionGroup = regionsGroupByName.get(regionName); + + var _a = regionsInfoByName.get(regionName) || {}, + dataIdx = _a.dataIdx, + regionModel = _a.regionModel; + + if (!regionGroup) { + regionGroup = regionsGroupByName.set(regionName, new Group()); + regionsGroup.add(regionGroup); + dataIdx = data ? data.indexOfName(regionName) : null; + regionModel = viewBuildCtx.isGeo ? mapOrGeoModel.getRegionModel(regionName) : data ? data.getItemModel(dataIdx) : null; + regionsInfoByName.set(regionName, { + dataIdx: dataIdx, + regionModel: regionModel + }); + } + + var compoundPath = new CompoundPath({ + segmentIgnoreThreshold: 1, + shape: { + paths: [] + } + }); + regionGroup.add(compoundPath); + each(region.geometries, function (geometry) { + if (geometry.type !== 'polygon') { + return; + } + + var points = []; + + for (var i = 0; i < geometry.exterior.length; ++i) { + points.push(transformPoint(geometry.exterior[i])); + } + + compoundPath.shape.paths.push(new Polygon({ + segmentIgnoreThreshold: 1, + shape: { + points: points + } + })); + + for (var i = 0; i < (geometry.interiors ? geometry.interiors.length : 0); ++i) { + var interior = geometry.interiors[i]; + var points_1 = []; + + for (var j = 0; j < interior.length; ++j) { + points_1.push(transformPoint(interior[j])); + } + + compoundPath.shape.paths.push(new Polygon({ + segmentIgnoreThreshold: 1, + shape: { + points: points_1 + } + })); + } + }); + applyOptionStyleForRegion(viewBuildCtx, compoundPath, dataIdx, regionModel); + + if (compoundPath instanceof Displayable) { + compoundPath.culling = true; + } + + var centerPt = transformPoint(region.getCenter()); + resetLabelForRegion(viewBuildCtx, compoundPath, regionName, regionModel, mapOrGeoModel, dataIdx, centerPt); + }); // Ensure children have been added to `regionGroup` before calling them. + + regionsGroupByName.each(function (regionGroup, regionName) { + var _a = regionsInfoByName.get(regionName), + dataIdx = _a.dataIdx, + regionModel = _a.regionModel; + + resetEventTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel, dataIdx); + resetTooltipForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel); + resetStateTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel); + }, this); + }; + + MapDraw.prototype._buildSVG = function (viewBuildCtx) { + var mapName = viewBuildCtx.geo.map; + var transformInfoRaw = viewBuildCtx.transformInfoRaw; + this._svgGroup.x = transformInfoRaw.x; + this._svgGroup.y = transformInfoRaw.y; + this._svgGroup.scaleX = transformInfoRaw.scaleX; + this._svgGroup.scaleY = transformInfoRaw.scaleY; + + if (this._svgResourceChanged(mapName)) { + this._freeSVG(); + + this._useSVG(mapName); + } + + var svgDispatcherMap = this._svgDispatcherMap = createHashMap(); + var focusSelf = false; + each(this._svgGraphicRecord.named, function (namedItem) { + // Note that we also allow different elements have the same name. + // For example, a glyph of a city and the label of the city have + // the same name and their tooltip info can be defined in a single + // region option. + var regionName = namedItem.name; + var mapOrGeoModel = viewBuildCtx.mapOrGeoModel; + var data = viewBuildCtx.data; + var svgNodeTagLower = namedItem.svgNodeTagLower; + var el = namedItem.el; + var dataIdx = data ? data.indexOfName(regionName) : null; + var regionModel = mapOrGeoModel.getRegionModel(regionName); + + if (OPTION_STYLE_ENABLED_TAG_MAP.get(svgNodeTagLower) != null && el instanceof Displayable) { + applyOptionStyleForRegion(viewBuildCtx, el, dataIdx, regionModel); + } + + if (el instanceof Displayable) { + el.culling = true; + } // We do not know how the SVG like so we'd better not to change z2. + // Otherwise it might bring some unexpected result. For example, + // an area hovered that make some inner city can not be clicked. + + + el.z2EmphasisLift = 0; // If self named: + + if (!namedItem.namedFrom) { + // label should batter to be displayed based on the center of + // if it is named rather than displayed on each child. + if (LABEL_HOST_MAP.get(svgNodeTagLower) != null) { + resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx, null); + } + + resetEventTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx); + resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel); + + if (STATE_TRIGGER_TAG_MAP.get(svgNodeTagLower) != null) { + var focus_1 = resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel); + + if (focus_1 === 'self') { + focusSelf = true; + } + + var els = svgDispatcherMap.get(regionName) || svgDispatcherMap.set(regionName, []); + els.push(el); + } + } + }, this); + + this._enableBlurEntireSVG(focusSelf, viewBuildCtx); + }; + + MapDraw.prototype._enableBlurEntireSVG = function (focusSelf, viewBuildCtx) { + // It's a little complicated to support blurring the entire geoSVG in series-map. + // So do not suport it until some requirements come. + // At present, in series-map, only regions can be blurred. + if (focusSelf && viewBuildCtx.isGeo) { + var blurStyle = viewBuildCtx.mapOrGeoModel.getModel(['blur', 'itemStyle']).getItemStyle(); // Only suport `opacity` here. Because not sure that other props are suitable for + // all of the elements generated by SVG (especially for Text/TSpan/Image/... ). + + var opacity_1 = blurStyle.opacity; + + this._svgGraphicRecord.root.traverse(function (el) { + if (!el.isGroup) { + // PENDING: clear those settings to SVG elements when `_freeSVG`. + // (Currently it happen not to be needed.) + setDefaultStateProxy(el); + var style = el.ensureState('blur').style || {}; // Do not overwrite the region style that already set from region option. + + if (style.opacity == null && opacity_1 != null) { + style.opacity = opacity_1; + } // If `ensureState('blur').style = {}`, there will be default opacity. + // Enable `stateTransition` (animation). + + + el.ensureState('emphasis'); + } + }); + } + }; + + MapDraw.prototype.remove = function () { + this._regionsGroup.removeAll(); + + this._regionsGroupByName = null; + + this._svgGroup.removeAll(); + + this._freeSVG(); + + this._controller.dispose(); + + this._controllerHost = null; + }; + + MapDraw.prototype.findHighDownDispatchers = function (name, geoModel) { + if (name == null) { + return []; + } + + var geo = geoModel.coordinateSystem; + + if (geo.resourceType === 'geoJSON') { + var regionsGroupByName = this._regionsGroupByName; + + if (regionsGroupByName) { + var regionGroup = regionsGroupByName.get(name); + return regionGroup ? [regionGroup] : []; + } + } else if (geo.resourceType === 'geoSVG') { + return this._svgDispatcherMap && this._svgDispatcherMap.get(name) || []; + } + }; + + MapDraw.prototype._svgResourceChanged = function (mapName) { + return this._svgMapName !== mapName; + }; + + MapDraw.prototype._useSVG = function (mapName) { + var resource = geoSourceManager.getGeoResource(mapName); + + if (resource && resource.type === 'geoSVG') { + var svgGraphic = resource.useGraphic(this.uid); + + this._svgGroup.add(svgGraphic.root); + + this._svgGraphicRecord = svgGraphic; + this._svgMapName = mapName; + } + }; + + MapDraw.prototype._freeSVG = function () { + var mapName = this._svgMapName; + + if (mapName == null) { + return; + } + + var resource = geoSourceManager.getGeoResource(mapName); + + if (resource && resource.type === 'geoSVG') { + resource.freeGraphic(this.uid); + } + + this._svgGraphicRecord = null; + this._svgDispatcherMap = null; + + this._svgGroup.removeAll(); + + this._svgMapName = null; + }; + + MapDraw.prototype._updateController = function (mapOrGeoModel, ecModel, api) { + var geo = mapOrGeoModel.coordinateSystem; + var controller = this._controller; + var controllerHost = this._controllerHost; // @ts-ignore FIXME:TS + + controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit'); + controllerHost.zoom = geo.getZoom(); // roamType is will be set default true if it is null + // @ts-ignore FIXME:TS + + controller.enable(mapOrGeoModel.get('roam') || false); + var mainType = mapOrGeoModel.mainType; + + function makeActionBase() { + var action = { + type: 'geoRoam', + componentType: mainType + }; + action[mainType + 'Id'] = mapOrGeoModel.id; + return action; + } + + controller.off('pan').on('pan', function (e) { + this._mouseDownFlag = false; + updateViewOnPan(controllerHost, e.dx, e.dy); + api.dispatchAction(extend(makeActionBase(), { + dx: e.dx, + dy: e.dy + })); + }, this); + controller.off('zoom').on('zoom', function (e) { + this._mouseDownFlag = false; + updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); + api.dispatchAction(extend(makeActionBase(), { + zoom: e.scale, + originX: e.originX, + originY: e.originY + })); + }, this); + controller.setPointerChecker(function (e, x, y) { + return geo.containPoint([x, y]) && !onIrrelevantElement(e, api, mapOrGeoModel); + }); + }; + /** + * FIXME: this is a temporarily workaround. + * When `geoRoam` the elements need to be reset in `MapView['render']`, because the props like + * `ignore` might have been modified by `LabelManager`, and `LabelManager#addLabelsOfSeries` + * will subsequently cache `defaultAttr` like `ignore`. If do not do this reset, the modified + * props will have no chance to be restored. + * Note: this reset should be after `clearStates` in `renderSeries` becuase `useStates` in + * `renderSeries` will cache the modified `ignore` to `el._normalState`. + * TODO: + * Use clone/immutable in `LabelManager`? + */ + + + MapDraw.prototype.resetForLabelLayout = function () { + this.group.traverse(function (el) { + var label = el.getTextContent(); + + if (label) { + label.ignore = mapLabelRaw(label).ignore; + } + }); + }; + + MapDraw.prototype._updateMapSelectHandler = function (mapOrGeoModel, regionsGroup, api, fromView) { + var mapDraw = this; + regionsGroup.off('mousedown'); + regionsGroup.off('click'); // @ts-ignore FIXME:TS resolve type conflict + + if (mapOrGeoModel.get('selectedMode')) { + regionsGroup.on('mousedown', function () { + mapDraw._mouseDownFlag = true; + }); + regionsGroup.on('click', function (e) { + if (!mapDraw._mouseDownFlag) { + return; + } + + mapDraw._mouseDownFlag = false; + }); + } + }; + + return MapDraw; + }(); + + function applyOptionStyleForRegion(viewBuildCtx, el, dataIndex, regionModel) { + // All of the path are using `itemStyle`, becuase + // (1) Some SVG also use fill on polyline (The different between + // polyline and polygon is "open" or "close" but not fill or not). + // (2) For the common props like opacity, if some use itemStyle + // and some use `lineStyle`, it might confuse users. + // (3) Most SVG use , where can not detect wether draw a "line" + // or a filled shape, so use `itemStyle` for . + var normalStyleModel = regionModel.getModel('itemStyle'); + var emphasisStyleModel = regionModel.getModel(['emphasis', 'itemStyle']); + var blurStyleModel = regionModel.getModel(['blur', 'itemStyle']); + var selectStyleModel = regionModel.getModel(['select', 'itemStyle']); // NOTE: DONT use 'style' in visual when drawing map. + // This component is used for drawing underlying map for both geo component and map series. + + var normalStyle = getFixedItemStyle(normalStyleModel); + var emphasisStyle = getFixedItemStyle(emphasisStyleModel); + var selectStyle = getFixedItemStyle(selectStyleModel); + var blurStyle = getFixedItemStyle(blurStyleModel); // Update the itemStyle if has data visual + + var data = viewBuildCtx.data; + + if (data) { + // Only visual color of each item will be used. It can be encoded by visualMap + // But visual color of series is used in symbol drawing + // Visual color for each series is for the symbol draw + var style = data.getItemVisual(dataIndex, 'style'); + var decal = data.getItemVisual(dataIndex, 'decal'); + + if (viewBuildCtx.isVisualEncodedByVisualMap && style.fill) { + normalStyle.fill = style.fill; + } + + if (decal) { + normalStyle.decal = createOrUpdatePatternFromDecal(decal, viewBuildCtx.api); + } + } // SVG text, tspan and image can be named but not supporeted + // to be styled by region option yet. + + + el.setStyle(normalStyle); + el.style.strokeNoScale = true; + el.ensureState('emphasis').style = emphasisStyle; + el.ensureState('select').style = selectStyle; + el.ensureState('blur').style = blurStyle; // Enable blur + + setDefaultStateProxy(el); + } + + function resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, // Exist only if `viewBuildCtx.data` exists. + dataIdx, // If labelXY not provided, use `textConfig.position: 'inside'` + labelXY) { + var data = viewBuildCtx.data; + var isGeo = viewBuildCtx.isGeo; + var isDataNaN = data && isNaN(data.get(data.mapDimension('value'), dataIdx)); + var itemLayout = data && data.getItemLayout(dataIdx); // In the following cases label will be drawn + // 1. In map series and data value is NaN + // 2. In geo component + // 3. Region has no series legendIcon, which will be add a showLabel flag in mapSymbolLayout + + if (isGeo || isDataNaN || itemLayout && itemLayout.showLabel) { + var query = !isGeo ? dataIdx : regionName; + var labelFetcher = void 0; // Consider dataIdx not found. + + if (!data || dataIdx >= 0) { + labelFetcher = mapOrGeoModel; + } + + var specifiedTextOpt = labelXY ? { + normal: { + align: 'center', + verticalAlign: 'middle' + } + } : null; // Caveat: must be called after `setDefaultStateProxy(el);` called. + // because textContent will be assign with `el.stateProxy` inside. + + setLabelStyle(el, getLabelStatesModels(regionModel), { + labelFetcher: labelFetcher, + labelDataIndex: query, + defaultText: regionName + }, specifiedTextOpt); + var textEl = el.getTextContent(); + + if (textEl) { + mapLabelRaw(textEl).ignore = textEl.ignore; + + if (el.textConfig && labelXY) { + // Compute a relative offset based on the el bounding rect. + var rect = el.getBoundingRect().clone(); // Need to make sure the percent position base on the same rect in normal and + // emphasis state. Otherwise if using boundingRect of el, but the emphasis state + // has borderWidth (even 0.5px), the text position will be changed obviously + // if the position is very big like ['1234%', '1345%']. + + el.textConfig.layoutRect = rect; + el.textConfig.position = [(labelXY[0] - rect.x) / rect.width * 100 + '%', (labelXY[1] - rect.y) / rect.height * 100 + '%']; + } + } // PENDING: + // If labelLayout is enabled (test/label-layout.html), el.dataIndex should be specified. + // But el.dataIndex is also used to determine whether user event should be triggered, + // where el.seriesIndex or el.dataModel must be specified. At present for a single el + // there is not case that "only label layout enabled but user event disabled", so here + // we depends `resetEventTriggerForRegion` to do the job of setting `el.dataIndex`. + + + el.disableLabelAnimation = true; + } else { + el.removeTextContent(); + el.removeTextConfig(); + el.disableLabelAnimation = null; + } + } + + function resetEventTriggerForRegion(viewBuildCtx, eventTrigger, regionName, regionModel, mapOrGeoModel, // Exist only if `viewBuildCtx.data` exists. + dataIdx) { + // setItemGraphicEl, setHoverStyle after all polygons and labels + // are added to the rigionGroup + if (viewBuildCtx.data) { + // FIXME: when series-map use a SVG map, and there are duplicated name specified + // on different SVG elements, after `data.setItemGraphicEl(...)`: + // (1) all of them will be mounted with `dataIndex`, `seriesIndex`, so that tooltip + // can be triggered only mouse hover. That's correct. + // (2) only the last element will be kept in `data`, so that if trigger tooltip + // by `dispatchAction`, only the last one can be found and triggered. That might be + // not correct. We will fix it in future if anyone demanding that. + viewBuildCtx.data.setItemGraphicEl(dataIdx, eventTrigger); + } // series-map will not trigger "geoselectchange" no matter it is + // based on a declared geo component. Becuause series-map will + // trigger "selectchange". If it trigger both the two events, + // If users call `chart.dispatchAction({type: 'toggleSelect'})`, + // it not easy to also fire event "geoselectchanged". + else { + // Package custom mouse event for geo component + getECData(eventTrigger).eventData = { + componentType: 'geo', + componentIndex: mapOrGeoModel.componentIndex, + geoIndex: mapOrGeoModel.componentIndex, + name: regionName, + region: regionModel && regionModel.option || {} + }; + } + } + + function resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) { + if (!viewBuildCtx.data) { + setTooltipConfig({ + el: el, + componentModel: mapOrGeoModel, + itemName: regionName, + // @ts-ignore FIXME:TS fix the "compatible with each other"? + itemTooltipOption: regionModel.get('tooltip') + }); + } + } + + function resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) { + // @ts-ignore FIXME:TS fix the "compatible with each other"? + el.highDownSilentOnTouch = !!mapOrGeoModel.get('selectedMode'); // @ts-ignore FIXME:TS fix the "compatible with each other"? + + var emphasisModel = regionModel.getModel('emphasis'); + var focus = emphasisModel.get('focus'); + enableHoverEmphasis(el, focus, emphasisModel.get('blurScope')); + + if (viewBuildCtx.isGeo) { + enableComponentHighDownFeatures(el, mapOrGeoModel, regionName); + } + + return focus; + } + // @ts-ignore FIXME:TS fix the "compatible with each other"? + + var MapView = + /** @class */ + function (_super) { + __extends(MapView, _super); + + function MapView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MapView.type; + return _this; + } + + MapView.prototype.render = function (mapModel, ecModel, api, payload) { + // Not render if it is an toggleSelect action from self + if (payload && payload.type === 'mapToggleSelect' && payload.from === this.uid) { + return; + } + + var group = this.group; + group.removeAll(); + + if (mapModel.getHostGeoModel()) { + return; + } + + if (this._mapDraw && payload && payload.type === 'geoRoam') { + this._mapDraw.resetForLabelLayout(); + } // Not update map if it is an roam action from self + + + if (!(payload && payload.type === 'geoRoam' && payload.componentType === 'series' && payload.seriesId === mapModel.id)) { + if (mapModel.needsDrawMap) { + var mapDraw = this._mapDraw || new MapDraw(api); + group.add(mapDraw.group); + mapDraw.draw(mapModel, ecModel, api, this, payload); + this._mapDraw = mapDraw; + } else { + // Remove drawed map + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + } + } else { + var mapDraw = this._mapDraw; + mapDraw && group.add(mapDraw.group); + } + + mapModel.get('showLegendSymbol') && ecModel.getComponent('legend') && this._renderSymbols(mapModel, ecModel, api); + }; + + MapView.prototype.remove = function () { + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + this.group.removeAll(); + }; + + MapView.prototype.dispose = function () { + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + }; + + MapView.prototype._renderSymbols = function (mapModel, ecModel, api) { + var originalData = mapModel.originalData; + var group = this.group; + originalData.each(originalData.mapDimension('value'), function (value, originalDataIndex) { + if (isNaN(value)) { + return; + } + + var layout = originalData.getItemLayout(originalDataIndex); + + if (!layout || !layout.point) { + // Not exists in map + return; + } + + var point = layout.point; + var offset = layout.offset; + var circle = new Circle({ + style: { + // Because the special of map draw. + // Which needs statistic of multiple series and draw on one map. + // And each series also need a symbol with legend color + // + // Layout and visual are put one the different data + // TODO + fill: mapModel.getData().getVisual('style').fill + }, + shape: { + cx: point[0] + offset * 9, + cy: point[1], + r: 3 + }, + silent: true, + // Do not overlap the first series, on which labels are displayed. + z2: 8 + (!offset ? Z2_EMPHASIS_LIFT + 1 : 0) + }); // Only the series that has the first value on the same region is in charge of rendering the label. + // But consider the case: + // series: [ + // {id: 'X', type: 'map', map: 'm', {data: [{name: 'A', value: 11}, {name: 'B', {value: 22}]}, + // {id: 'Y', type: 'map', map: 'm', {data: [{name: 'A', value: 21}, {name: 'C', {value: 33}]} + // ] + // The offset `0` of item `A` is at series `X`, but of item `C` is at series `Y`. + // For backward compatibility, we follow the rule that render label `A` by the + // settings on series `X` but render label `C` by the settings on series `Y`. + + if (!offset) { + var fullData = mapModel.mainSeries.getData(); + var name_1 = originalData.getName(originalDataIndex); + var fullIndex_1 = fullData.indexOfName(name_1); + var itemModel = originalData.getItemModel(originalDataIndex); + var labelModel = itemModel.getModel('label'); + var regionGroup = fullData.getItemGraphicEl(fullIndex_1); // `getFormattedLabel` needs to use `getData` inside. Here + // `mapModel.getData()` is shallow cloned from `mainSeries.getData()`. + // FIXME + // If this is not the `mainSeries`, the item model (like label formatter) + // set on original data item will never get. But it has been working + // like that from the begining, and this scenario is rarely encountered. + // So it won't be fixed until have to. + + setLabelStyle(circle, getLabelStatesModels(itemModel), { + labelFetcher: { + getFormattedLabel: function (idx, state) { + return mapModel.getFormattedLabel(fullIndex_1, state); + } + } + }); + circle.disableLabelAnimation = true; + + if (!labelModel.get('position')) { + circle.setTextConfig({ + position: 'bottom' + }); + } + + regionGroup.onHoverStateChange = function (toState) { + setStatesFlag(circle, toState); + }; + } + + group.add(circle); + }); + }; + + MapView.type = 'map'; + return MapView; + }(ChartView); + + var MapSeries = + /** @class */ + function (_super) { + __extends(MapSeries, _super); + + function MapSeries() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MapSeries.type; // Only first map series of same mapType will drawMap. + + _this.needsDrawMap = false; // Group of all map series with same mapType + + _this.seriesGroup = []; + + _this.getTooltipPosition = function (dataIndex) { + if (dataIndex != null) { + var name_1 = this.getData().getName(dataIndex); + var geo = this.coordinateSystem; + var region = geo.getRegion(name_1); + return region && geo.dataToPoint(region.getCenter()); + } + }; + + return _this; + } + + MapSeries.prototype.getInitialData = function (option) { + var data = createSeriesDataSimply(this, { + coordDimensions: ['value'], + encodeDefaulter: curry(makeSeriesEncodeForNameBased, this) + }); + var dataNameMap = createHashMap(); + var toAppendNames = []; + + for (var i = 0, len = data.count(); i < len; i++) { + var name_2 = data.getName(i); + dataNameMap.set(name_2, true); + } + + var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap, this.option.nameProperty); + each(geoSource.regions, function (region) { + var name = region.name; + + if (!dataNameMap.get(name)) { + toAppendNames.push(name); + } + }); // Complete data with missing regions. The consequent processes (like visual + // map and render) can not be performed without a "full data". For example, + // find `dataIndex` by name. + + data.appendValues([], toAppendNames); + return data; + }; + /** + * If no host geo model, return null, which means using a + * inner exclusive geo model. + */ + + + MapSeries.prototype.getHostGeoModel = function () { + var geoIndex = this.option.geoIndex; + return geoIndex != null ? this.ecModel.getComponent('geo', geoIndex) : null; + }; + + MapSeries.prototype.getMapType = function () { + return (this.getHostGeoModel() || this).option.map; + }; // _fillOption(option, mapName) { + // Shallow clone + // option = zrUtil.extend({}, option); + // option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap); + // return option; + // } + + + MapSeries.prototype.getRawValue = function (dataIndex) { + // Use value stored in data instead because it is calculated from multiple series + // FIXME Provide all value of multiple series ? + var data = this.getData(); + return data.get(data.mapDimension('value'), dataIndex); + }; + /** + * Get model of region + */ + + + MapSeries.prototype.getRegionModel = function (regionName) { + var data = this.getData(); + return data.getItemModel(data.indexOfName(regionName)); + }; + /** + * Map tooltip formatter + */ + + + MapSeries.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + // FIXME orignalData and data is a bit confusing + var data = this.getData(); + var value = this.getRawValue(dataIndex); + var name = data.getName(dataIndex); + var seriesGroup = this.seriesGroup; + var seriesNames = []; + + for (var i = 0; i < seriesGroup.length; i++) { + var otherIndex = seriesGroup[i].originalData.indexOfName(name); + var valueDim = data.mapDimension('value'); + + if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) { + seriesNames.push(seriesGroup[i].name); + } + } + + return createTooltipMarkup('section', { + header: seriesNames.join(', '), + noHeader: !seriesNames.length, + blocks: [createTooltipMarkup('nameValue', { + name: name, + value: value + })] + }); + }; + + MapSeries.prototype.setZoom = function (zoom) { + this.option.zoom = zoom; + }; + + MapSeries.prototype.setCenter = function (center) { + this.option.center = center; + }; + + MapSeries.prototype.getLegendIcon = function (opt) { + var iconType = opt.icon || 'roundRect'; + var icon = createSymbol(iconType, 0, 0, opt.itemWidth, opt.itemHeight, opt.itemStyle.fill); + icon.setStyle(opt.itemStyle); // Map do not use itemStyle.borderWidth as border width + + icon.style.stroke = 'none'; // No rotation because no series visual symbol for map + + if (iconType.indexOf('empty') > -1) { + icon.style.stroke = icon.style.fill; + icon.style.fill = '#fff'; + icon.style.lineWidth = 2; + } + + return icon; + }; + + MapSeries.type = 'series.map'; + MapSeries.dependencies = ['geo']; + MapSeries.layoutMode = 'box'; + MapSeries.defaultOption = { + // 一级层叠 + zlevel: 0, + // 二级层叠 + z: 2, + coordinateSystem: 'geo', + // map should be explicitly specified since ec3. + map: '', + // If `geoIndex` is not specified, a exclusive geo will be + // created. Otherwise use the specified geo component, and + // `map` and `mapType` are ignored. + // geoIndex: 0, + // 'center' | 'left' | 'right' | 'x%' | {number} + left: 'center', + // 'center' | 'top' | 'bottom' | 'x%' | {number} + top: 'center', + // right + // bottom + // width: + // height + // Aspect is width / height. Inited to be geoJson bbox aspect + // This parameter is used for scale this aspect + // Default value: + // for geoSVG source: 1, + // for geoJSON source: 0.75. + aspectScale: null, + ///// Layout with center and size + // If you wan't to put map in a fixed size box with right aspect ratio + // This two properties may more conveninet + // layoutCenter: [50%, 50%] + // layoutSize: 100 + showLegendSymbol: true, + // Define left-top, right-bottom coords to control view + // For example, [ [180, 90], [-180, -90] ], + // higher priority than center and zoom + boundingCoords: null, + // Default on center of map + center: null, + zoom: 1, + scaleLimit: null, + selectedMode: true, + label: { + show: false, + color: '#000' + }, + // scaleLimit: null, + itemStyle: { + borderWidth: 0.5, + borderColor: '#444', + areaColor: '#eee' + }, + emphasis: { + label: { + show: true, + color: 'rgb(100,0,0)' + }, + itemStyle: { + areaColor: 'rgba(255,215,0,0.8)' + } + }, + select: { + label: { + show: true, + color: 'rgb(100,0,0)' + }, + itemStyle: { + color: 'rgba(255,215,0,0.8)' + } + }, + nameProperty: 'name' + }; + return MapSeries; + }(SeriesModel); + + function dataStatistics(datas, statisticType) { + var dataNameMap = {}; + each(datas, function (data) { + data.each(data.mapDimension('value'), function (value, idx) { + // Add prefix to avoid conflict with Object.prototype. + var mapKey = 'ec-' + data.getName(idx); + dataNameMap[mapKey] = dataNameMap[mapKey] || []; + + if (!isNaN(value)) { + dataNameMap[mapKey].push(value); + } + }); + }); + return datas[0].map(datas[0].mapDimension('value'), function (value, idx) { + var mapKey = 'ec-' + datas[0].getName(idx); + var sum = 0; + var min = Infinity; + var max = -Infinity; + var len = dataNameMap[mapKey].length; + + for (var i = 0; i < len; i++) { + min = Math.min(min, dataNameMap[mapKey][i]); + max = Math.max(max, dataNameMap[mapKey][i]); + sum += dataNameMap[mapKey][i]; + } + + var result; + + if (statisticType === 'min') { + result = min; + } else if (statisticType === 'max') { + result = max; + } else if (statisticType === 'average') { + result = sum / len; + } else { + result = sum; + } + + return len === 0 ? NaN : result; + }); + } + + function mapDataStatistic(ecModel) { + var seriesGroups = {}; + ecModel.eachSeriesByType('map', function (seriesModel) { + var hostGeoModel = seriesModel.getHostGeoModel(); + var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType(); + (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel); + }); + each(seriesGroups, function (seriesList, key) { + var data = dataStatistics(map(seriesList, function (seriesModel) { + return seriesModel.getData(); + }), seriesList[0].get('mapValueCalculation')); + + for (var i = 0; i < seriesList.length; i++) { + seriesList[i].originalData = seriesList[i].getData(); + } // FIXME Put where? + + + for (var i = 0; i < seriesList.length; i++) { + seriesList[i].seriesGroup = seriesList; + seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel(); + seriesList[i].setData(data.cloneShallow()); + seriesList[i].mainSeries = seriesList[0]; + } + }); + } + + function mapSymbolLayout(ecModel) { + var processedMapType = {}; + ecModel.eachSeriesByType('map', function (mapSeries) { + var mapType = mapSeries.getMapType(); + + if (mapSeries.getHostGeoModel() || processedMapType[mapType]) { + return; + } + + var mapSymbolOffsets = {}; + each(mapSeries.seriesGroup, function (subMapSeries) { + var geo = subMapSeries.coordinateSystem; + var data = subMapSeries.originalData; + + if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) { + data.each(data.mapDimension('value'), function (value, idx) { + var name = data.getName(idx); + var region = geo.getRegion(name); // If input series.data is [11, 22, '-'/null/undefined, 44], + // it will be filled with NaN: [11, 22, NaN, 44] and NaN will + // not be drawn. So here must validate if value is NaN. + + if (!region || isNaN(value)) { + return; + } + + var offset = mapSymbolOffsets[name] || 0; + var point = geo.dataToPoint(region.getCenter()); + mapSymbolOffsets[name] = offset + 1; + data.setItemLayout(idx, { + point: point, + offset: offset + }); + }); + } + }); // Show label of those region not has legendIcon (which is offset 0) + + var data = mapSeries.getData(); + data.each(function (idx) { + var name = data.getName(idx); + var layout = data.getItemLayout(idx) || {}; + layout.showLabel = !mapSymbolOffsets[name]; + data.setItemLayout(idx, layout); + }); + processedMapType[mapType] = true; + }); + } + + var v2ApplyTransform = applyTransform; + + var View = + /** @class */ + function (_super) { + __extends(View, _super); + + function View(name) { + var _this = _super.call(this) || this; + + _this.type = 'view'; + _this.dimensions = ['x', 'y']; + /** + * Represents the transform brought by roam/zoom. + * If `View['_viewRect']` applies roam transform, + * we can get the final displayed rect. + */ + + _this._roamTransformable = new Transformable(); + /** + * Represents the transform from `View['_rect']` to `View['_viewRect']`. + */ + + _this._rawTransformable = new Transformable(); + _this.name = name; + return _this; + } + + View.prototype.setBoundingRect = function (x, y, width, height) { + this._rect = new BoundingRect(x, y, width, height); + return this._rect; + }; + /** + * @return {module:zrender/core/BoundingRect} + */ + + + View.prototype.getBoundingRect = function () { + return this._rect; + }; + + View.prototype.setViewRect = function (x, y, width, height) { + this._transformTo(x, y, width, height); + + this._viewRect = new BoundingRect(x, y, width, height); + }; + /** + * Transformed to particular position and size + */ + + + View.prototype._transformTo = function (x, y, width, height) { + var rect = this.getBoundingRect(); + var rawTransform = this._rawTransformable; + rawTransform.transform = rect.calculateTransform(new BoundingRect(x, y, width, height)); + var rawParent = rawTransform.parent; + rawTransform.parent = null; + rawTransform.decomposeTransform(); + rawTransform.parent = rawParent; + + this._updateTransform(); + }; + /** + * Set center of view + */ + + + View.prototype.setCenter = function (centerCoord) { + if (!centerCoord) { + return; + } + + this._center = centerCoord; + + this._updateCenterAndZoom(); + }; + + View.prototype.setZoom = function (zoom) { + zoom = zoom || 1; + var zoomLimit = this.zoomLimit; + + if (zoomLimit) { + if (zoomLimit.max != null) { + zoom = Math.min(zoomLimit.max, zoom); + } + + if (zoomLimit.min != null) { + zoom = Math.max(zoomLimit.min, zoom); + } + } + + this._zoom = zoom; + + this._updateCenterAndZoom(); + }; + /** + * Get default center without roam + */ + + + View.prototype.getDefaultCenter = function () { + // Rect before any transform + var rawRect = this.getBoundingRect(); + var cx = rawRect.x + rawRect.width / 2; + var cy = rawRect.y + rawRect.height / 2; + return [cx, cy]; + }; + + View.prototype.getCenter = function () { + return this._center || this.getDefaultCenter(); + }; + + View.prototype.getZoom = function () { + return this._zoom || 1; + }; + + View.prototype.getRoamTransform = function () { + return this._roamTransformable.getLocalTransform(); + }; + /** + * Remove roam + */ + + + View.prototype._updateCenterAndZoom = function () { + // Must update after view transform updated + var rawTransformMatrix = this._rawTransformable.getLocalTransform(); + + var roamTransform = this._roamTransformable; + var defaultCenter = this.getDefaultCenter(); + var center = this.getCenter(); + var zoom = this.getZoom(); + center = applyTransform([], center, rawTransformMatrix); + defaultCenter = applyTransform([], defaultCenter, rawTransformMatrix); + roamTransform.originX = center[0]; + roamTransform.originY = center[1]; + roamTransform.x = defaultCenter[0] - center[0]; + roamTransform.y = defaultCenter[1] - center[1]; + roamTransform.scaleX = roamTransform.scaleY = zoom; + + this._updateTransform(); + }; + /** + * Update transform props on `this` based on the current + * `this._roamTransformable` and `this._rawTransformable`. + */ + + + View.prototype._updateTransform = function () { + var roamTransformable = this._roamTransformable; + var rawTransformable = this._rawTransformable; + rawTransformable.parent = roamTransformable; + roamTransformable.updateTransform(); + rawTransformable.updateTransform(); + copy$1(this.transform || (this.transform = []), rawTransformable.transform || create$1()); + this._rawTransform = rawTransformable.getLocalTransform(); + this.invTransform = this.invTransform || []; + invert(this.invTransform, this.transform); + this.decomposeTransform(); + }; + + View.prototype.getTransformInfo = function () { + var rawTransformable = this._rawTransformable; + var roamTransformable = this._roamTransformable; // Becuase roamTransformabel has `originX/originY` modified, + // but the caller of `getTransformInfo` can not handle `originX/originY`, + // so need to recalcualte them. + + var dummyTransformable = new Transformable(); + dummyTransformable.transform = roamTransformable.transform; + dummyTransformable.decomposeTransform(); + return { + roam: { + x: dummyTransformable.x, + y: dummyTransformable.y, + scaleX: dummyTransformable.scaleX, + scaleY: dummyTransformable.scaleY + }, + raw: { + x: rawTransformable.x, + y: rawTransformable.y, + scaleX: rawTransformable.scaleX, + scaleY: rawTransformable.scaleY + } + }; + }; + + View.prototype.getViewRect = function () { + return this._viewRect; + }; + /** + * Get view rect after roam transform + */ + + + View.prototype.getViewRectAfterRoam = function () { + var rect = this.getBoundingRect().clone(); + rect.applyTransform(this.transform); + return rect; + }; + /** + * Convert a single (lon, lat) data item to (x, y) point. + */ + + + View.prototype.dataToPoint = function (data, noRoam, out) { + var transform = noRoam ? this._rawTransform : this.transform; + out = out || []; + return transform ? v2ApplyTransform(out, data, transform) : copy(out, data); + }; + /** + * Convert a (x, y) point to (lon, lat) data + */ + + + View.prototype.pointToData = function (point) { + var invTransform = this.invTransform; + return invTransform ? v2ApplyTransform([], point, invTransform) : [point[0], point[1]]; + }; + + View.prototype.convertToPixel = function (ecModel, finder, value) { + var coordSys = getCoordSys(finder); + return coordSys === this ? coordSys.dataToPoint(value) : null; + }; + + View.prototype.convertFromPixel = function (ecModel, finder, pixel) { + var coordSys = getCoordSys(finder); + return coordSys === this ? coordSys.pointToData(pixel) : null; + }; + /** + * @implements + */ + + + View.prototype.containPoint = function (point) { + return this.getViewRectAfterRoam().contain(point[0], point[1]); + }; + + View.dimensions = ['x', 'y']; + return View; + }(Transformable); + + function getCoordSys(finder) { + var seriesModel = finder.seriesModel; + return seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph. + } + + var GEO_DEFAULT_PARAMS = { + 'geoJSON': { + aspectScale: 0.75, + invertLongitute: true + }, + 'geoSVG': { + aspectScale: 1, + invertLongitute: false + } + }; + var geo2DDimensions = ['lng', 'lat']; + + var Geo = + /** @class */ + function (_super) { + __extends(Geo, _super); + + function Geo(name, map, opt) { + var _this = _super.call(this, name) || this; + + _this.dimensions = geo2DDimensions; + _this.type = 'geo'; // Only store specified name coord via `addGeoCoord`. + + _this._nameCoordMap = createHashMap(); + _this.map = map; + var source = geoSourceManager.load(map, opt.nameMap, opt.nameProperty); + var resource = geoSourceManager.getGeoResource(map); + _this.resourceType = resource ? resource.type : null; + var defaultParmas = GEO_DEFAULT_PARAMS[resource.type]; + _this._regionsMap = source.regionsMap; + _this._invertLongitute = defaultParmas.invertLongitute; + _this.regions = source.regions; + _this.aspectScale = retrieve2(opt.aspectScale, defaultParmas.aspectScale); + var boundingRect = source.boundingRect; + + _this.setBoundingRect(boundingRect.x, boundingRect.y, boundingRect.width, boundingRect.height); + + return _this; + } + /** + * Whether contain the given [lng, lat] coord. + */ + // Never used yet. + // containCoord(coord: number[]) { + // const regions = this.regions; + // for (let i = 0; i < regions.length; i++) { + // const region = regions[i]; + // if (region.type === 'geoJSON' && (region as GeoJSONRegion).contain(coord)) { + // return true; + // } + // } + // return false; + // } + + + Geo.prototype._transformTo = function (x, y, width, height) { + var rect = this.getBoundingRect(); + var invertLongitute = this._invertLongitute; + rect = rect.clone(); + + if (invertLongitute) { + // Longitute is inverted + rect.y = -rect.y - rect.height; + } + + var rawTransformable = this._rawTransformable; + rawTransformable.transform = rect.calculateTransform(new BoundingRect(x, y, width, height)); + var rawParent = rawTransformable.parent; + rawTransformable.parent = null; + rawTransformable.decomposeTransform(); + rawTransformable.parent = rawParent; + + if (invertLongitute) { + rawTransformable.scaleY = -rawTransformable.scaleY; + } + + this._updateTransform(); + }; + + Geo.prototype.getRegion = function (name) { + return this._regionsMap.get(name); + }; + + Geo.prototype.getRegionByCoord = function (coord) { + var regions = this.regions; + + for (var i = 0; i < regions.length; i++) { + var region = regions[i]; + + if (region.type === 'geoJSON' && region.contain(coord)) { + return regions[i]; + } + } + }; + /** + * Add geoCoord for indexing by name + */ + + + Geo.prototype.addGeoCoord = function (name, geoCoord) { + this._nameCoordMap.set(name, geoCoord); + }; + /** + * Get geoCoord by name + */ + + + Geo.prototype.getGeoCoord = function (name) { + var region = this._regionsMap.get(name); // calcualte center only on demand. + + + return this._nameCoordMap.get(name) || region && region.getCenter(); + }; + + Geo.prototype.dataToPoint = function (data, noRoam, out) { + if (typeof data === 'string') { + // Map area name to geoCoord + data = this.getGeoCoord(data); + } + + if (data) { + return View.prototype.dataToPoint.call(this, data, noRoam, out); + } + }; + + Geo.prototype.convertToPixel = function (ecModel, finder, value) { + var coordSys = getCoordSys$1(finder); + return coordSys === this ? coordSys.dataToPoint(value) : null; + }; + + Geo.prototype.convertFromPixel = function (ecModel, finder, pixel) { + var coordSys = getCoordSys$1(finder); + return coordSys === this ? coordSys.pointToData(pixel) : null; + }; + + return Geo; + }(View); + mixin(Geo, View); + + function getCoordSys$1(finder) { + var geoModel = finder.geoModel; + var seriesModel = finder.seriesModel; + return geoModel ? geoModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem // For map series. + || (seriesModel.getReferringComponents('geo', SINGLE_REFERRING).models[0] || {}).coordinateSystem : null; + } + + /** + * Resize method bound to the geo + */ + + function resizeGeo(geoModel, api) { + var boundingCoords = geoModel.get('boundingCoords'); + + if (boundingCoords != null) { + var leftTop = boundingCoords[0]; + var rightBottom = boundingCoords[1]; + + if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) { + if ("development" !== 'production') { + console.error('Invalid boundingCoords'); + } + } else { + this.setBoundingRect(leftTop[0], leftTop[1], rightBottom[0] - leftTop[0], rightBottom[1] - leftTop[1]); + } + } + + var rect = this.getBoundingRect(); + var centerOption = geoModel.get('layoutCenter'); + var sizeOption = geoModel.get('layoutSize'); + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + var aspect = rect.width / rect.height * this.aspectScale; + var useCenterAndSize = false; + var center; + var size; + + if (centerOption && sizeOption) { + center = [parsePercent$1(centerOption[0], viewWidth), parsePercent$1(centerOption[1], viewHeight)]; + size = parsePercent$1(sizeOption, Math.min(viewWidth, viewHeight)); + + if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) { + useCenterAndSize = true; + } else { + if ("development" !== 'production') { + console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.'); + } + } + } + + var viewRect; + + if (useCenterAndSize) { + viewRect = {}; + + if (aspect > 1) { + // Width is same with size + viewRect.width = size; + viewRect.height = size / aspect; + } else { + viewRect.height = size; + viewRect.width = size * aspect; + } + + viewRect.y = center[1] - viewRect.height / 2; + viewRect.x = center[0] - viewRect.width / 2; + } else { + // Use left/top/width/height + var boxLayoutOption = geoModel.getBoxLayoutParams(); + boxLayoutOption.aspect = aspect; + viewRect = getLayoutRect(boxLayoutOption, { + width: viewWidth, + height: viewHeight + }); + } + + this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height); + this.setCenter(geoModel.get('center')); + this.setZoom(geoModel.get('zoom')); + } // Back compat for ECharts2, where the coord map is set on map series: + // {type: 'map', geoCoord: {'cityA': [116.46,39.92], 'cityA': [119.12,24.61]}}, + + + function setGeoCoords(geo, model) { + each(model.get('geoCoord'), function (geoCoord, name) { + geo.addGeoCoord(name, geoCoord); + }); + } + + var GeoCreator = + /** @class */ + function () { + function GeoCreator() { + // For deciding which dimensions to use when creating list data + this.dimensions = geo2DDimensions; + } + + GeoCreator.prototype.create = function (ecModel, api) { + var geoList = []; // FIXME Create each time may be slow + + ecModel.eachComponent('geo', function (geoModel, idx) { + var name = geoModel.get('map'); + var geo = new Geo(name + idx, name, { + nameMap: geoModel.get('nameMap'), + nameProperty: geoModel.get('nameProperty'), + aspectScale: geoModel.get('aspectScale') + }); + geo.zoomLimit = geoModel.get('scaleLimit'); + geoList.push(geo); // setGeoCoords(geo, geoModel); + + geoModel.coordinateSystem = geo; + geo.model = geoModel; // Inject resize method + + geo.resize = resizeGeo; + geo.resize(geoModel, api); + }); + ecModel.eachSeries(function (seriesModel) { + var coordSys = seriesModel.get('coordinateSystem'); + + if (coordSys === 'geo') { + var geoIndex = seriesModel.get('geoIndex') || 0; + seriesModel.coordinateSystem = geoList[geoIndex]; + } + }); // If has map series + + var mapModelGroupBySeries = {}; + ecModel.eachSeriesByType('map', function (seriesModel) { + if (!seriesModel.getHostGeoModel()) { + var mapType = seriesModel.getMapType(); + mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || []; + mapModelGroupBySeries[mapType].push(seriesModel); + } + }); + each(mapModelGroupBySeries, function (mapSeries, mapType) { + var nameMapList = map(mapSeries, function (singleMapSeries) { + return singleMapSeries.get('nameMap'); + }); + var geo = new Geo(mapType, mapType, { + nameMap: mergeAll(nameMapList), + nameProperty: mapSeries[0].get('nameProperty'), + aspectScale: mapSeries[0].get('aspectScale') + }); + geo.zoomLimit = retrieve.apply(null, map(mapSeries, function (singleMapSeries) { + return singleMapSeries.get('scaleLimit'); + })); + geoList.push(geo); // Inject resize method + + geo.resize = resizeGeo; + geo.resize(mapSeries[0], api); + each(mapSeries, function (singleMapSeries) { + singleMapSeries.coordinateSystem = geo; + setGeoCoords(geo, singleMapSeries); + }); + }); + return geoList; + }; + /** + * Fill given regions array + */ + + + GeoCreator.prototype.getFilledRegions = function (originRegionArr, mapName, nameMap, nameProperty) { + // Not use the original + var regionsArr = (originRegionArr || []).slice(); + var dataNameMap = createHashMap(); + + for (var i = 0; i < regionsArr.length; i++) { + dataNameMap.set(regionsArr[i].name, regionsArr[i]); + } + + var source = geoSourceManager.load(mapName, nameMap, nameProperty); + each(source.regions, function (region) { + var name = region.name; + !dataNameMap.get(name) && regionsArr.push({ + name: name + }); + }); + return regionsArr; + }; + + return GeoCreator; + }(); + + var geoCreator = new GeoCreator(); + + var GeoModel = + /** @class */ + function (_super) { + __extends(GeoModel, _super); + + function GeoModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = GeoModel.type; + return _this; + } + + GeoModel.prototype.init = function (option, parentModel, ecModel) { + var source = geoSourceManager.getGeoResource(option.map); + + if (source && source.type === 'geoJSON') { + var itemStyle = option.itemStyle = option.itemStyle || {}; + + if (!('color' in itemStyle)) { + itemStyle.color = '#eee'; + } + } + + this.mergeDefaultAndTheme(option, ecModel); // Default label emphasis `show` + + defaultEmphasis(option, 'label', ['show']); + }; + + GeoModel.prototype.optionUpdated = function () { + var _this = this; + + var option = this.option; + option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap, option.nameProperty); + var selectedMap = {}; + this._optionModelMap = reduce(option.regions || [], function (optionModelMap, regionOpt) { + var regionName = regionOpt.name; + + if (regionName) { + optionModelMap.set(regionName, new Model(regionOpt, _this, _this.ecModel)); + + if (regionOpt.selected) { + selectedMap[regionName] = true; + } + } + + return optionModelMap; + }, createHashMap()); + + if (!option.selectedMap) { + option.selectedMap = selectedMap; + } + }; + /** + * Get model of region. + */ + + + GeoModel.prototype.getRegionModel = function (name) { + return this._optionModelMap.get(name) || new Model(null, this, this.ecModel); + }; + /** + * Format label + * @param name Region name + */ + + + GeoModel.prototype.getFormattedLabel = function (name, status) { + var regionModel = this.getRegionModel(name); + var formatter = status === 'normal' ? regionModel.get(['label', 'formatter']) : regionModel.get(['emphasis', 'label', 'formatter']); + var params = { + name: name + }; + + if (typeof formatter === 'function') { + params.status = status; + return formatter(params); + } else if (typeof formatter === 'string') { + return formatter.replace('{a}', name != null ? name : ''); + } + }; + + GeoModel.prototype.setZoom = function (zoom) { + this.option.zoom = zoom; + }; + + GeoModel.prototype.setCenter = function (center) { + this.option.center = center; + }; // PENGING If selectedMode is null ? + + + GeoModel.prototype.select = function (name) { + var option = this.option; + var selectedMode = option.selectedMode; + + if (!selectedMode) { + return; + } + + if (selectedMode !== 'multiple') { + option.selectedMap = null; + } + + var selectedMap = option.selectedMap || (option.selectedMap = {}); + selectedMap[name] = true; + }; + + GeoModel.prototype.unSelect = function (name) { + var selectedMap = this.option.selectedMap; + + if (selectedMap) { + selectedMap[name] = false; + } + }; + + GeoModel.prototype.toggleSelected = function (name) { + this[this.isSelected(name) ? 'unSelect' : 'select'](name); + }; + + GeoModel.prototype.isSelected = function (name) { + var selectedMap = this.option.selectedMap; + return !!(selectedMap && selectedMap[name]); + }; + + GeoModel.type = 'geo'; + GeoModel.layoutMode = 'box'; + GeoModel.defaultOption = { + zlevel: 0, + z: 0, + show: true, + left: 'center', + top: 'center', + // Default value: + // for geoSVG source: 1, + // for geoJSON source: 0.75. + aspectScale: null, + ///// Layout with center and size + // If you wan't to put map in a fixed size box with right aspect ratio + // This two properties may more conveninet + // layoutCenter: [50%, 50%] + // layoutSize: 100 + silent: false, + // Map type + map: '', + // Define left-top, right-bottom coords to control view + // For example, [ [180, 90], [-180, -90] ] + boundingCoords: null, + // Default on center of map + center: null, + zoom: 1, + scaleLimit: null, + // selectedMode: false + label: { + show: false, + color: '#000' + }, + itemStyle: { + borderWidth: 0.5, + borderColor: '#444' // Default color: + // + geoJSON: #eee + // + geoSVG: null (use SVG original `fill`) + // color: '#eee' + + }, + emphasis: { + label: { + show: true, + color: 'rgb(100,0,0)' + }, + itemStyle: { + color: 'rgba(255,215,0,0.8)' + } + }, + select: { + label: { + show: true, + color: 'rgb(100,0,0)' + }, + itemStyle: { + color: 'rgba(255,215,0,0.8)' + } + }, + regions: [] // tooltip: { + // show: false + // } + + }; + return GeoModel; + }(ComponentModel); + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function updateCenterAndZoom(view, payload, zoomLimit) { + var previousZoom = view.getZoom(); + var center = view.getCenter(); + var zoom = payload.zoom; + var point = view.dataToPoint(center); + + if (payload.dx != null && payload.dy != null) { + point[0] -= payload.dx; + point[1] -= payload.dy; + view.setCenter(view.pointToData(point)); + } + + if (zoom != null) { + if (zoomLimit) { + var zoomMin = zoomLimit.min || 0; + var zoomMax = zoomLimit.max || Infinity; + zoom = Math.max(Math.min(previousZoom * zoom, zoomMax), zoomMin) / previousZoom; + } // Zoom on given point(originX, originY) + + + view.scaleX *= zoom; + view.scaleY *= zoom; + var fixX = (payload.originX - view.x) * (zoom - 1); + var fixY = (payload.originY - view.y) * (zoom - 1); + view.x -= fixX; + view.y -= fixY; + view.updateTransform(); // Get the new center + + view.setCenter(view.pointToData(point)); + view.setZoom(zoom * previousZoom); + } + + return { + center: view.getCenter(), + zoom: view.getZoom() + }; + } + + var GeoView = + /** @class */ + function (_super) { + __extends(GeoView, _super); + + function GeoView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = GeoView.type; + _this.focusBlurEnabled = true; + return _this; + } + + GeoView.prototype.init = function (ecModel, api) { + this._api = api; + }; + + GeoView.prototype.render = function (geoModel, ecModel, api, payload) { + this._model = geoModel; + + if (!geoModel.get('show')) { + this._mapDraw && this._mapDraw.remove(); + this._mapDraw = null; + return; + } + + if (!this._mapDraw) { + this._mapDraw = new MapDraw(api); + } + + var mapDraw = this._mapDraw; + mapDraw.draw(geoModel, ecModel, api, this, payload); + mapDraw.group.on('click', this._handleRegionClick, this); + mapDraw.group.silent = geoModel.get('silent'); + this.group.add(mapDraw.group); + this.updateSelectStatus(geoModel, ecModel, api); + }; + + GeoView.prototype._handleRegionClick = function (e) { + var eventData; + findEventDispatcher(e.target, function (current) { + return (eventData = getECData(current).eventData) != null; + }, true); + + if (eventData) { + this._api.dispatchAction({ + type: 'geoToggleSelect', + geoId: this._model.id, + name: eventData.name + }); + } + }; + + GeoView.prototype.updateSelectStatus = function (model, ecModel, api) { + var _this = this; + + this._mapDraw.group.traverse(function (node) { + var eventData = getECData(node).eventData; + + if (eventData) { + _this._model.isSelected(eventData.name) ? api.enterSelect(node) : api.leaveSelect(node); // No need to traverse children. + + return true; + } + }); + }; + + GeoView.prototype.findHighDownDispatchers = function (name) { + return this._mapDraw && this._mapDraw.findHighDownDispatchers(name, this._model); + }; + + GeoView.prototype.dispose = function () { + this._mapDraw && this._mapDraw.remove(); + }; + + GeoView.type = 'geo'; + return GeoView; + }(ComponentView); + + function install$9(registers) { + registers.registerCoordinateSystem('geo', geoCreator); + registers.registerComponentModel(GeoModel); + registers.registerComponentView(GeoView); + + function makeAction(method, actionInfo) { + actionInfo.update = 'geo:updateSelectStatus'; + registers.registerAction(actionInfo, function (payload, ecModel) { + var selected = {}; + var allSelected = []; + ecModel.eachComponent({ + mainType: 'geo', + query: payload + }, function (geoModel) { + geoModel[method](payload.name); + var geo = geoModel.coordinateSystem; + each(geo.regions, function (region) { + selected[region.name] = geoModel.isSelected(region.name) || false; + }); // Notice: there might be duplicated name in different regions. + + var names = []; + each(selected, function (v, name) { + selected[name] && names.push(name); + }); + allSelected.push({ + geoIndex: geoModel.componentIndex, + // Use singular, the same naming convention as the event `selectchanged`. + name: names + }); + }); + return { + selected: selected, + allSelected: allSelected, + name: payload.name + }; + }); + } + + makeAction('toggleSelected', { + type: 'geoToggleSelect', + event: 'geoselectchanged' + }); + makeAction('select', { + type: 'geoSelect', + event: 'geoselected' + }); + makeAction('unSelect', { + type: 'geoUnSelect', + event: 'geounselected' + }); + /** + * @payload + * @property {string} [componentType=series] + * @property {number} [dx] + * @property {number} [dy] + * @property {number} [zoom] + * @property {number} [originX] + * @property {number} [originY] + */ + + registers.registerAction({ + type: 'geoRoam', + event: 'geoRoam', + update: 'updateTransform' + }, function (payload, ecModel) { + var componentType = payload.componentType || 'series'; + ecModel.eachComponent({ + mainType: componentType, + query: payload + }, function (componentModel) { + var geo = componentModel.coordinateSystem; + + if (geo.type !== 'geo') { + return; + } + + var res = updateCenterAndZoom(geo, payload, componentModel.get('scaleLimit')); + componentModel.setCenter && componentModel.setCenter(res.center); + componentModel.setZoom && componentModel.setZoom(res.zoom); // All map series with same `map` use the same geo coordinate system + // So the center and zoom must be in sync. Include the series not selected by legend + + if (componentType === 'series') { + each(componentModel.seriesGroup, function (seriesModel) { + seriesModel.setCenter(res.center); + seriesModel.setZoom(res.zoom); + }); + } + }); + }); + } + + function install$a(registers) { + use(install$9); + registers.registerChartView(MapView); + registers.registerSeriesModel(MapSeries); + registers.registerLayout(mapSymbolLayout); + registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic); + createLegacyDataSelectAction('map', registers.registerAction); + } + + /** + * Initialize all computational message for following algorithm. + */ + + function init$2(inRoot) { + var root = inRoot; + root.hierNode = { + defaultAncestor: null, + ancestor: root, + prelim: 0, + modifier: 0, + change: 0, + shift: 0, + i: 0, + thread: null + }; + var nodes = [root]; + var node; + var children; + + while (node = nodes.pop()) { + // jshint ignore:line + children = node.children; + + if (node.isExpand && children.length) { + var n = children.length; + + for (var i = n - 1; i >= 0; i--) { + var child = children[i]; + child.hierNode = { + defaultAncestor: null, + ancestor: child, + prelim: 0, + modifier: 0, + change: 0, + shift: 0, + i: i, + thread: null + }; + nodes.push(child); + } + } + } + } + /** + * The implementation of this function was originally copied from "d3.js" + * + * with some modifications made for this program. + * See the license statement at the head of this file. + * + * Computes a preliminary x coordinate for node. Before that, this function is + * applied recursively to the children of node, as well as the function + * apportion(). After spacing out the children by calling executeShifts(), the + * node is placed to the midpoint of its outermost children. + */ + + function firstWalk(node, separation) { + var children = node.isExpand ? node.children : []; + var siblings = node.parentNode.children; + var subtreeW = node.hierNode.i ? siblings[node.hierNode.i - 1] : null; + + if (children.length) { + executeShifts(node); + var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2; + + if (subtreeW) { + node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW); + node.hierNode.modifier = node.hierNode.prelim - midPoint; + } else { + node.hierNode.prelim = midPoint; + } + } else if (subtreeW) { + node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW); + } + + node.parentNode.hierNode.defaultAncestor = apportion(node, subtreeW, node.parentNode.hierNode.defaultAncestor || siblings[0], separation); + } + /** + * The implementation of this function was originally copied from "d3.js" + * + * with some modifications made for this program. + * See the license statement at the head of this file. + * + * Computes all real x-coordinates by summing up the modifiers recursively. + */ + + function secondWalk(node) { + var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier; + node.setLayout({ + x: nodeX + }, true); + node.hierNode.modifier += node.parentNode.hierNode.modifier; + } + function separation(cb) { + return arguments.length ? cb : defaultSeparation; + } + /** + * Transform the common coordinate to radial coordinate. + */ + + function radialCoordinate(rad, r) { + rad -= Math.PI / 2; + return { + x: r * Math.cos(rad), + y: r * Math.sin(rad) + }; + } + /** + * Get the layout position of the whole view. + */ + + function getViewRect$1(seriesModel, api) { + return getLayoutRect(seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + } + /** + * All other shifts, applied to the smaller subtrees between w- and w+, are + * performed by this function. + * + * The implementation of this function was originally copied from "d3.js" + * + * with some modifications made for this program. + * See the license statement at the head of this file. + */ + + function executeShifts(node) { + var children = node.children; + var n = children.length; + var shift = 0; + var change = 0; + + while (--n >= 0) { + var child = children[n]; + child.hierNode.prelim += shift; + child.hierNode.modifier += shift; + change += child.hierNode.change; + shift += child.hierNode.shift + change; + } + } + /** + * The implementation of this function was originally copied from "d3.js" + * + * with some modifications made for this program. + * See the license statement at the head of this file. + * + * The core of the algorithm. Here, a new subtree is combined with the + * previous subtrees. Threads are used to traverse the inside and outside + * contours of the left and right subtree up to the highest common level. + * Whenever two nodes of the inside contours conflict, we compute the left + * one of the greatest uncommon ancestors using the function nextAncestor() + * and call moveSubtree() to shift the subtree and prepare the shifts of + * smaller subtrees. Finally, we add a new thread (if necessary). + */ + + + function apportion(subtreeV, subtreeW, ancestor, separation) { + if (subtreeW) { + var nodeOutRight = subtreeV; + var nodeInRight = subtreeV; + var nodeOutLeft = nodeInRight.parentNode.children[0]; + var nodeInLeft = subtreeW; + var sumOutRight = nodeOutRight.hierNode.modifier; + var sumInRight = nodeInRight.hierNode.modifier; + var sumOutLeft = nodeOutLeft.hierNode.modifier; + var sumInLeft = nodeInLeft.hierNode.modifier; + + while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) { + nodeOutRight = nextRight(nodeOutRight); + nodeOutLeft = nextLeft(nodeOutLeft); + nodeOutRight.hierNode.ancestor = subtreeV; + var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim - sumInRight + separation(nodeInLeft, nodeInRight); + + if (shift > 0) { + moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift); + sumInRight += shift; + sumOutRight += shift; + } + + sumInLeft += nodeInLeft.hierNode.modifier; + sumInRight += nodeInRight.hierNode.modifier; + sumOutRight += nodeOutRight.hierNode.modifier; + sumOutLeft += nodeOutLeft.hierNode.modifier; + } + + if (nodeInLeft && !nextRight(nodeOutRight)) { + nodeOutRight.hierNode.thread = nodeInLeft; + nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight; + } + + if (nodeInRight && !nextLeft(nodeOutLeft)) { + nodeOutLeft.hierNode.thread = nodeInRight; + nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft; + ancestor = subtreeV; + } + } + + return ancestor; + } + /** + * This function is used to traverse the right contour of a subtree. + * It returns the rightmost child of node or the thread of node. The function + * returns null if and only if node is on the highest depth of its subtree. + */ + + + function nextRight(node) { + var children = node.children; + return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread; + } + /** + * This function is used to traverse the left contour of a subtree (or a subforest). + * It returns the leftmost child of node or the thread of node. The function + * returns null if and only if node is on the highest depth of its subtree. + */ + + + function nextLeft(node) { + var children = node.children; + return children.length && node.isExpand ? children[0] : node.hierNode.thread; + } + /** + * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s ancestor. + * Otherwise, returns the specified ancestor. + */ + + + function nextAncestor(nodeInLeft, node, ancestor) { + return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode ? nodeInLeft.hierNode.ancestor : ancestor; + } + /** + * The implementation of this function was originally copied from "d3.js" + * + * with some modifications made for this program. + * See the license statement at the head of this file. + * + * Shifts the current subtree rooted at wr. + * This is done by increasing prelim(w+) and modifier(w+) by shift. + */ + + + function moveSubtree(wl, wr, shift) { + var change = shift / (wr.hierNode.i - wl.hierNode.i); + wr.hierNode.change -= change; + wr.hierNode.shift += shift; + wr.hierNode.modifier += shift; + wr.hierNode.prelim += shift; + wl.hierNode.change += change; + } + /** + * The implementation of this function was originally copied from "d3.js" + * + * with some modifications made for this program. + * See the license statement at the head of this file. + */ + + + function defaultSeparation(node1, node2) { + return node1.parentNode === node2.parentNode ? 1 : 2; + } + + var TreeEdgeShape = + /** @class */ + function () { + function TreeEdgeShape() { + this.parentPoint = []; + this.childPoints = []; + } + + return TreeEdgeShape; + }(); + + var TreePath = + /** @class */ + function (_super) { + __extends(TreePath, _super); + + function TreePath(opts) { + return _super.call(this, opts) || this; + } + + TreePath.prototype.getDefaultStyle = function () { + return { + stroke: '#000', + fill: null + }; + }; + + TreePath.prototype.getDefaultShape = function () { + return new TreeEdgeShape(); + }; + + TreePath.prototype.buildPath = function (ctx, shape) { + var childPoints = shape.childPoints; + var childLen = childPoints.length; + var parentPoint = shape.parentPoint; + var firstChildPos = childPoints[0]; + var lastChildPos = childPoints[childLen - 1]; + + if (childLen === 1) { + ctx.moveTo(parentPoint[0], parentPoint[1]); + ctx.lineTo(firstChildPos[0], firstChildPos[1]); + return; + } + + var orient = shape.orient; + var forkDim = orient === 'TB' || orient === 'BT' ? 0 : 1; + var otherDim = 1 - forkDim; + var forkPosition = parsePercent$1(shape.forkPosition, 1); + var tmpPoint = []; + tmpPoint[forkDim] = parentPoint[forkDim]; + tmpPoint[otherDim] = parentPoint[otherDim] + (lastChildPos[otherDim] - parentPoint[otherDim]) * forkPosition; + ctx.moveTo(parentPoint[0], parentPoint[1]); + ctx.lineTo(tmpPoint[0], tmpPoint[1]); + ctx.moveTo(firstChildPos[0], firstChildPos[1]); + tmpPoint[forkDim] = firstChildPos[forkDim]; + ctx.lineTo(tmpPoint[0], tmpPoint[1]); + tmpPoint[forkDim] = lastChildPos[forkDim]; + ctx.lineTo(tmpPoint[0], tmpPoint[1]); + ctx.lineTo(lastChildPos[0], lastChildPos[1]); + + for (var i = 1; i < childLen - 1; i++) { + var point = childPoints[i]; + ctx.moveTo(point[0], point[1]); + tmpPoint[forkDim] = point[forkDim]; + ctx.lineTo(tmpPoint[0], tmpPoint[1]); + } + }; + + return TreePath; + }(Path); + + var TreeView = + /** @class */ + function (_super) { + __extends(TreeView, _super); + + function TreeView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TreeView.type; + _this._mainGroup = new Group(); + return _this; + } + + TreeView.prototype.init = function (ecModel, api) { + this._controller = new RoamController(api.getZr()); + this._controllerHost = { + target: this.group + }; + this.group.add(this._mainGroup); + }; + + TreeView.prototype.render = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var layoutInfo = seriesModel.layoutInfo; + var group = this._mainGroup; + var layout = seriesModel.get('layout'); + + if (layout === 'radial') { + group.x = layoutInfo.x + layoutInfo.width / 2; + group.y = layoutInfo.y + layoutInfo.height / 2; + } else { + group.x = layoutInfo.x; + group.y = layoutInfo.y; + } + + this._updateViewCoordSys(seriesModel); + + this._updateController(seriesModel, ecModel, api); + + var oldData = this._data; + data.diff(oldData).add(function (newIdx) { + if (symbolNeedsDraw$1(data, newIdx)) { + // Create node and edge + updateNode(data, newIdx, null, group, seriesModel); + } + }).update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); + + if (!symbolNeedsDraw$1(data, newIdx)) { + symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel); + return; + } // Update node and edge + + + updateNode(data, newIdx, symbolEl, group, seriesModel); + }).remove(function (oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); // When remove a collapsed node of subtree, since the collapsed + // node haven't been initialized with a symbol element, + // you can't found it's symbol element through index. + // so if we want to remove the symbol element we should insure + // that the symbol element is not null. + + if (symbolEl) { + removeNode(oldData, oldIdx, symbolEl, group, seriesModel); + } + }).execute(); + this._nodeScaleRatio = seriesModel.get('nodeScaleRatio'); + + this._updateNodeAndLinkScale(seriesModel); + + if (seriesModel.get('expandAndCollapse') === true) { + data.eachItemGraphicEl(function (el, dataIndex) { + el.off('click').on('click', function () { + api.dispatchAction({ + type: 'treeExpandAndCollapse', + seriesId: seriesModel.id, + dataIndex: dataIndex + }); + }); + }); + } + + this._data = data; + }; + + TreeView.prototype._updateViewCoordSys = function (seriesModel) { + var data = seriesModel.getData(); + var points = []; + data.each(function (idx) { + var layout = data.getItemLayout(idx); + + if (layout && !isNaN(layout.x) && !isNaN(layout.y)) { + points.push([+layout.x, +layout.y]); + } + }); + var min = []; + var max = []; + fromPoints(points, min, max); // If don't Store min max when collapse the root node after roam, + // the root node will disappear. + + var oldMin = this._min; + var oldMax = this._max; // If width or height is 0 + + if (max[0] - min[0] === 0) { + min[0] = oldMin ? oldMin[0] : min[0] - 1; + max[0] = oldMax ? oldMax[0] : max[0] + 1; + } + + if (max[1] - min[1] === 0) { + min[1] = oldMin ? oldMin[1] : min[1] - 1; + max[1] = oldMax ? oldMax[1] : max[1] + 1; + } + + var viewCoordSys = seriesModel.coordinateSystem = new View(); + viewCoordSys.zoomLimit = seriesModel.get('scaleLimit'); + viewCoordSys.setBoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]); + viewCoordSys.setCenter(seriesModel.get('center')); + viewCoordSys.setZoom(seriesModel.get('zoom')); // Here we use viewCoordSys just for computing the 'position' and 'scale' of the group + + this.group.attr({ + x: viewCoordSys.x, + y: viewCoordSys.y, + scaleX: viewCoordSys.scaleX, + scaleY: viewCoordSys.scaleY + }); + this._min = min; + this._max = max; + }; + + TreeView.prototype._updateController = function (seriesModel, ecModel, api) { + var _this = this; + + var controller = this._controller; + var controllerHost = this._controllerHost; + var group = this.group; + controller.setPointerChecker(function (e, x, y) { + var rect = group.getBoundingRect(); + rect.applyTransform(group.transform); + return rect.contain(x, y) && !onIrrelevantElement(e, api, seriesModel); + }); + controller.enable(seriesModel.get('roam')); + controllerHost.zoomLimit = seriesModel.get('scaleLimit'); + controllerHost.zoom = seriesModel.coordinateSystem.getZoom(); + controller.off('pan').off('zoom').on('pan', function (e) { + updateViewOnPan(controllerHost, e.dx, e.dy); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'treeRoam', + dx: e.dx, + dy: e.dy + }); + }).on('zoom', function (e) { + updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'treeRoam', + zoom: e.scale, + originX: e.originX, + originY: e.originY + }); + + _this._updateNodeAndLinkScale(seriesModel); // Only update label layout on zoom + + + api.updateLabelLayout(); + }); + }; + + TreeView.prototype._updateNodeAndLinkScale = function (seriesModel) { + var data = seriesModel.getData(); + + var nodeScale = this._getNodeGlobalScale(seriesModel); + + data.eachItemGraphicEl(function (el, idx) { + el.setSymbolScale(nodeScale); + }); + }; + + TreeView.prototype._getNodeGlobalScale = function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys.type !== 'view') { + return 1; + } + + var nodeScaleRatio = this._nodeScaleRatio; + var groupZoom = coordSys.scaleX || 1; // Scale node when zoom changes + + var roamZoom = coordSys.getZoom(); + var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1; + return nodeScale / groupZoom; + }; + + TreeView.prototype.dispose = function () { + this._controller && this._controller.dispose(); + this._controllerHost = null; + }; + + TreeView.prototype.remove = function () { + this._mainGroup.removeAll(); + + this._data = null; + }; + + TreeView.type = 'tree'; + return TreeView; + }(ChartView); + + function symbolNeedsDraw$1(data, dataIndex) { + var layout = data.getItemLayout(dataIndex); + return layout && !isNaN(layout.x) && !isNaN(layout.y); + } + + function updateNode(data, dataIndex, symbolEl, group, seriesModel) { + var isInit = !symbolEl; + var node = data.tree.getNodeByDataIndex(dataIndex); + var itemModel = node.getModel(); + var visualColor = node.getVisual('style').fill; + var symbolInnerColor = node.isExpand === false && node.children.length !== 0 ? visualColor : '#fff'; + var virtualRoot = data.tree.root; + var source = node.parentNode === virtualRoot ? node : node.parentNode || node; + var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex); + var sourceLayout = source.getLayout(); + var sourceOldLayout = sourceSymbolEl ? { + x: sourceSymbolEl.__oldX, + y: sourceSymbolEl.__oldY, + rawX: sourceSymbolEl.__radialOldRawX, + rawY: sourceSymbolEl.__radialOldRawY + } : sourceLayout; + var targetLayout = node.getLayout(); + + if (isInit) { + symbolEl = new Symbol(data, dataIndex, null, { + symbolInnerColor: symbolInnerColor, + useNameLabel: true + }); + symbolEl.x = sourceOldLayout.x; + symbolEl.y = sourceOldLayout.y; + } else { + symbolEl.updateData(data, dataIndex, null, { + symbolInnerColor: symbolInnerColor, + useNameLabel: true + }); + } + + symbolEl.__radialOldRawX = symbolEl.__radialRawX; + symbolEl.__radialOldRawY = symbolEl.__radialRawY; + symbolEl.__radialRawX = targetLayout.rawX; + symbolEl.__radialRawY = targetLayout.rawY; + group.add(symbolEl); + data.setItemGraphicEl(dataIndex, symbolEl); + symbolEl.__oldX = symbolEl.x; + symbolEl.__oldY = symbolEl.y; + updateProps(symbolEl, { + x: targetLayout.x, + y: targetLayout.y + }, seriesModel); + var symbolPath = symbolEl.getSymbolPath(); + + if (seriesModel.get('layout') === 'radial') { + var realRoot = virtualRoot.children[0]; + var rootLayout = realRoot.getLayout(); + var length_1 = realRoot.children.length; + var rad = void 0; + var isLeft = void 0; + + if (targetLayout.x === rootLayout.x && node.isExpand === true) { + var center = { + x: (realRoot.children[0].getLayout().x + realRoot.children[length_1 - 1].getLayout().x) / 2, + y: (realRoot.children[0].getLayout().y + realRoot.children[length_1 - 1].getLayout().y) / 2 + }; + rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x); + + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + + isLeft = center.x < rootLayout.x; + + if (isLeft) { + rad = rad - Math.PI; + } + } else { + rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x); + + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + + if (node.children.length === 0 || node.children.length !== 0 && node.isExpand === false) { + isLeft = targetLayout.x < rootLayout.x; + + if (isLeft) { + rad = rad - Math.PI; + } + } else { + isLeft = targetLayout.x > rootLayout.x; + + if (!isLeft) { + rad = rad - Math.PI; + } + } + } + + var textPosition = isLeft ? 'left' : 'right'; + var normalLabelModel = itemModel.getModel('label'); + var rotate = normalLabelModel.get('rotate'); + var labelRotateRadian = rotate * (Math.PI / 180); + var textContent = symbolPath.getTextContent(); + + if (textContent) { + symbolPath.setTextConfig({ + position: normalLabelModel.get('position') || textPosition, + rotation: rotate == null ? -rad : labelRotateRadian, + origin: 'center' + }); + textContent.setStyle('verticalAlign', 'middle'); + } + } // Handle status + + + var focus = itemModel.get(['emphasis', 'focus']); + var focusDataIndices = focus === 'ancestor' ? node.getAncestorsIndices() : focus === 'descendant' ? node.getDescendantIndices() : null; + + if (focusDataIndices) { + // Modify the focus to data indices. + getECData(symbolEl).focus = focusDataIndices; + } + + drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group); + + if (symbolEl.__edge) { + symbolEl.onHoverStateChange = function (toState) { + if (toState !== 'blur') { + // NOTE: Ensure the parent elements will been blurred firstly. + // According to the return of getAncestorsIndices and getDescendantIndices + // TODO: A bit tricky. + var parentEl = node.parentNode && data.getItemGraphicEl(node.parentNode.dataIndex); + + if (!(parentEl && parentEl.hoverState === HOVER_STATE_BLUR)) { + setStatesFlag(symbolEl.__edge, toState); + } + } + }; + } + } + + function drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group) { + var itemModel = node.getModel(); + var edgeShape = seriesModel.get('edgeShape'); + var layout = seriesModel.get('layout'); + var orient = seriesModel.getOrient(); + var curvature = seriesModel.get(['lineStyle', 'curveness']); + var edgeForkPosition = seriesModel.get('edgeForkPosition'); + var lineStyle = itemModel.getModel('lineStyle').getLineStyle(); + var edge = symbolEl.__edge; + + if (edgeShape === 'curve') { + if (node.parentNode && node.parentNode !== virtualRoot) { + if (!edge) { + edge = symbolEl.__edge = new BezierCurve({ + shape: getEdgeShape(layout, orient, curvature, sourceOldLayout, sourceOldLayout) + }); + } + + updateProps(edge, { + shape: getEdgeShape(layout, orient, curvature, sourceLayout, targetLayout) + }, seriesModel); + } + } else if (edgeShape === 'polyline') { + if (layout === 'orthogonal') { + if (node !== virtualRoot && node.children && node.children.length !== 0 && node.isExpand === true) { + var children = node.children; + var childPoints = []; + + for (var i = 0; i < children.length; i++) { + var childLayout = children[i].getLayout(); + childPoints.push([childLayout.x, childLayout.y]); + } + + if (!edge) { + edge = symbolEl.__edge = new TreePath({ + shape: { + parentPoint: [targetLayout.x, targetLayout.y], + childPoints: [[targetLayout.x, targetLayout.y]], + orient: orient, + forkPosition: edgeForkPosition + } + }); + } + + updateProps(edge, { + shape: { + parentPoint: [targetLayout.x, targetLayout.y], + childPoints: childPoints + } + }, seriesModel); + } + } else { + if ("development" !== 'production') { + throw new Error('The polyline edgeShape can only be used in orthogonal layout'); + } + } + } + + if (edge) { + edge.useStyle(defaults({ + strokeNoScale: true, + fill: null + }, lineStyle)); + setStatesStylesFromModel(edge, itemModel, 'lineStyle'); + setDefaultStateProxy(edge); + group.add(edge); + } + } + + function removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt) { + var virtualRoot = data.tree.root; + + var _a = getSourceNode(virtualRoot, node), + source = _a.source, + sourceLayout = _a.sourceLayout; + + var symbolEl = data.getItemGraphicEl(node.dataIndex); + + if (!symbolEl) { + return; + } + + var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex); + var sourceEdge = sourceSymbolEl.__edge; // 1. when expand the sub tree, delete the children node should delete the edge of + // the source at the same time. because the polyline edge shape is only owned by the source. + // 2.when the node is the only children of the source, delete the node should delete the edge of + // the source at the same time. the same reason as above. + + var edge = symbolEl.__edge || (source.isExpand === false || source.children.length === 1 ? sourceEdge : undefined); + var edgeShape = seriesModel.get('edgeShape'); + var layoutOpt = seriesModel.get('layout'); + var orient = seriesModel.get('orient'); + var curvature = seriesModel.get(['lineStyle', 'curveness']); + + if (edge) { + if (edgeShape === 'curve') { + removeElement(edge, { + shape: getEdgeShape(layoutOpt, orient, curvature, sourceLayout, sourceLayout), + style: { + opacity: 0 + } + }, seriesModel, { + cb: function () { + group.remove(edge); + }, + removeOpt: removeAnimationOpt + }); + } else if (edgeShape === 'polyline' && seriesModel.get('layout') === 'orthogonal') { + removeElement(edge, { + shape: { + parentPoint: [sourceLayout.x, sourceLayout.y], + childPoints: [[sourceLayout.x, sourceLayout.y]] + }, + style: { + opacity: 0 + } + }, seriesModel, { + cb: function () { + group.remove(edge); + }, + removeOpt: removeAnimationOpt + }); + } + } + } + + function getSourceNode(virtualRoot, node) { + var source = node.parentNode === virtualRoot ? node : node.parentNode || node; + var sourceLayout; + + while (sourceLayout = source.getLayout(), sourceLayout == null) { + source = source.parentNode === virtualRoot ? source : source.parentNode || source; + } + + return { + source: source, + sourceLayout: sourceLayout + }; + } + + function removeNode(data, dataIndex, symbolEl, group, seriesModel) { + var node = data.tree.getNodeByDataIndex(dataIndex); + var virtualRoot = data.tree.root; + var sourceLayout = getSourceNode(virtualRoot, node).sourceLayout; // Use same duration and easing with update to have more consistent animation. + + var removeAnimationOpt = { + duration: seriesModel.get('animationDurationUpdate'), + easing: seriesModel.get('animationEasingUpdate') + }; + removeElement(symbolEl, { + x: sourceLayout.x + 1, + y: sourceLayout.y + 1 + }, seriesModel, { + cb: function () { + group.remove(symbolEl); + data.setItemGraphicEl(dataIndex, null); + }, + removeOpt: removeAnimationOpt + }); + symbolEl.fadeOut(null, { + fadeLabel: true, + animation: removeAnimationOpt + }); // remove edge as parent node + + node.children.forEach(function (childNode) { + removeNodeEdge(childNode, data, group, seriesModel, removeAnimationOpt); + }); // remove edge as child node + + removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt); + } + + function getEdgeShape(layoutOpt, orient, curvature, sourceLayout, targetLayout) { + var cpx1; + var cpy1; + var cpx2; + var cpy2; + var x1; + var x2; + var y1; + var y2; + + if (layoutOpt === 'radial') { + x1 = sourceLayout.rawX; + y1 = sourceLayout.rawY; + x2 = targetLayout.rawX; + y2 = targetLayout.rawY; + var radialCoor1 = radialCoordinate(x1, y1); + var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * curvature); + var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * curvature); + var radialCoor4 = radialCoordinate(x2, y2); + return { + x1: radialCoor1.x || 0, + y1: radialCoor1.y || 0, + x2: radialCoor4.x || 0, + y2: radialCoor4.y || 0, + cpx1: radialCoor2.x || 0, + cpy1: radialCoor2.y || 0, + cpx2: radialCoor3.x || 0, + cpy2: radialCoor3.y || 0 + }; + } else { + x1 = sourceLayout.x; + y1 = sourceLayout.y; + x2 = targetLayout.x; + y2 = targetLayout.y; + + if (orient === 'LR' || orient === 'RL') { + cpx1 = x1 + (x2 - x1) * curvature; + cpy1 = y1; + cpx2 = x2 + (x1 - x2) * curvature; + cpy2 = y2; + } + + if (orient === 'TB' || orient === 'BT') { + cpx1 = x1; + cpy1 = y1 + (y2 - y1) * curvature; + cpx2 = x2; + cpy2 = y2 + (y1 - y2) * curvature; + } + } + + return { + x1: x1, + y1: y1, + x2: x2, + y2: y2, + cpx1: cpx1, + cpy1: cpy1, + cpx2: cpx2, + cpy2: cpy2 + }; + } + + var inner$7 = makeInner(); + + function linkSeriesData(opt) { + var mainData = opt.mainData; + var datas = opt.datas; + + if (!datas) { + datas = { + main: mainData + }; + opt.datasAttr = { + main: 'data' + }; + } + + opt.datas = opt.mainData = null; + linkAll(mainData, datas, opt); // Porxy data original methods. + + each(datas, function (data) { + each(mainData.TRANSFERABLE_METHODS, function (methodName) { + data.wrapMethod(methodName, curry(transferInjection, opt)); + }); + }); // Beyond transfer, additional features should be added to `cloneShallow`. + + mainData.wrapMethod('cloneShallow', curry(cloneShallowInjection, opt)); // Only mainData trigger change, because struct.update may trigger + // another changable methods, which may bring about dead lock. + + each(mainData.CHANGABLE_METHODS, function (methodName) { + mainData.wrapMethod(methodName, curry(changeInjection, opt)); + }); // Make sure datas contains mainData. + + assert(datas[mainData.dataType] === mainData); + } + + function transferInjection(opt, res) { + if (isMainData(this)) { + // Transfer datas to new main data. + var datas = extend({}, inner$7(this).datas); + datas[this.dataType] = res; + linkAll(res, datas, opt); + } else { + // Modify the reference in main data to point newData. + linkSingle(res, this.dataType, inner$7(this).mainData, opt); + } + + return res; + } + + function changeInjection(opt, res) { + opt.struct && opt.struct.update(); + return res; + } + + function cloneShallowInjection(opt, res) { + // cloneShallow, which brings about some fragilities, may be inappropriate + // to be exposed as an API. So for implementation simplicity we can make + // the restriction that cloneShallow of not-mainData should not be invoked + // outside, but only be invoked here. + each(inner$7(res).datas, function (data, dataType) { + data !== res && linkSingle(data.cloneShallow(), dataType, res, opt); + }); + return res; + } + /** + * Supplement method to List. + * + * @public + * @param [dataType] If not specified, return mainData. + */ + + + function getLinkedData(dataType) { + var mainData = inner$7(this).mainData; + return dataType == null || mainData == null ? mainData : inner$7(mainData).datas[dataType]; + } + /** + * Get list of all linked data + */ + + + function getLinkedDataAll() { + var mainData = inner$7(this).mainData; + return mainData == null ? [{ + data: mainData + }] : map(keys(inner$7(mainData).datas), function (type) { + return { + type: type, + data: inner$7(mainData).datas[type] + }; + }); + } + + function isMainData(data) { + return inner$7(data).mainData === data; + } + + function linkAll(mainData, datas, opt) { + inner$7(mainData).datas = {}; + each(datas, function (data, dataType) { + linkSingle(data, dataType, mainData, opt); + }); + } + + function linkSingle(data, dataType, mainData, opt) { + inner$7(mainData).datas[dataType] = data; + inner$7(data).mainData = mainData; + data.dataType = dataType; + + if (opt.struct) { + data[opt.structAttr] = opt.struct; + opt.struct[opt.datasAttr[dataType]] = data; + } // Supplement method. + + + data.getLinkedData = getLinkedData; + data.getLinkedDataAll = getLinkedDataAll; + } + + var TreeNode = + /** @class */ + function () { + function TreeNode(name, hostTree) { + this.depth = 0; + this.height = 0; + /** + * Reference to list item. + * Do not persistent dataIndex outside, + * besause it may be changed by list. + * If dataIndex -1, + * this node is logical deleted (filtered) in list. + */ + + this.dataIndex = -1; + this.children = []; + this.viewChildren = []; + this.isExpand = false; + this.name = name || ''; + this.hostTree = hostTree; + } + /** + * The node is removed. + */ + + + TreeNode.prototype.isRemoved = function () { + return this.dataIndex < 0; + }; + + TreeNode.prototype.eachNode = function (options, cb, context) { + if (typeof options === 'function') { + context = cb; + cb = options; + options = null; + } + + options = options || {}; + + if (isString(options)) { + options = { + order: options + }; + } + + var order = options.order || 'preorder'; + var children = this[options.attr || 'children']; + var suppressVisitSub; + order === 'preorder' && (suppressVisitSub = cb.call(context, this)); + + for (var i = 0; !suppressVisitSub && i < children.length; i++) { + children[i].eachNode(options, cb, context); + } + + order === 'postorder' && cb.call(context, this); + }; + /** + * Update depth and height of this subtree. + */ + + + TreeNode.prototype.updateDepthAndHeight = function (depth) { + var height = 0; + this.depth = depth; + + for (var i = 0; i < this.children.length; i++) { + var child = this.children[i]; + child.updateDepthAndHeight(depth + 1); + + if (child.height > height) { + height = child.height; + } + } + + this.height = height + 1; + }; + + TreeNode.prototype.getNodeById = function (id) { + if (this.getId() === id) { + return this; + } + + for (var i = 0, children = this.children, len = children.length; i < len; i++) { + var res = children[i].getNodeById(id); + + if (res) { + return res; + } + } + }; + + TreeNode.prototype.contains = function (node) { + if (node === this) { + return true; + } + + for (var i = 0, children = this.children, len = children.length; i < len; i++) { + var res = children[i].contains(node); + + if (res) { + return res; + } + } + }; + /** + * @param includeSelf Default false. + * @return order: [root, child, grandchild, ...] + */ + + + TreeNode.prototype.getAncestors = function (includeSelf) { + var ancestors = []; + var node = includeSelf ? this : this.parentNode; + + while (node) { + ancestors.push(node); + node = node.parentNode; + } + + ancestors.reverse(); + return ancestors; + }; + + TreeNode.prototype.getAncestorsIndices = function () { + var indices = []; + var currNode = this; + + while (currNode) { + indices.push(currNode.dataIndex); + currNode = currNode.parentNode; + } + + indices.reverse(); + return indices; + }; + + TreeNode.prototype.getDescendantIndices = function () { + var indices = []; + this.eachNode(function (childNode) { + indices.push(childNode.dataIndex); + }); + return indices; + }; + + TreeNode.prototype.getValue = function (dimension) { + var data = this.hostTree.data; + return data.getStore().get(data.getDimensionIndex(dimension || 'value'), this.dataIndex); + }; + + TreeNode.prototype.setLayout = function (layout, merge) { + this.dataIndex >= 0 && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge); + }; + /** + * @return {Object} layout + */ + + + TreeNode.prototype.getLayout = function () { + return this.hostTree.data.getItemLayout(this.dataIndex); + }; // @depcrecated + // getModel(path: S): Model + // eslint-disable-next-line @typescript-eslint/no-unused-vars + + + TreeNode.prototype.getModel = function (path) { + if (this.dataIndex < 0) { + return; + } + + var hostTree = this.hostTree; + var itemModel = hostTree.data.getItemModel(this.dataIndex); + return itemModel.getModel(path); + }; // TODO: TYPE More specific model + + + TreeNode.prototype.getLevelModel = function () { + return (this.hostTree.levelModels || [])[this.depth]; + }; + + TreeNode.prototype.setVisual = function (key, value) { + this.dataIndex >= 0 && this.hostTree.data.setItemVisual(this.dataIndex, key, value); + }; + /** + * Get item visual + * FIXME: make return type better + */ + + + TreeNode.prototype.getVisual = function (key) { + return this.hostTree.data.getItemVisual(this.dataIndex, key); + }; + + TreeNode.prototype.getRawIndex = function () { + return this.hostTree.data.getRawIndex(this.dataIndex); + }; + + TreeNode.prototype.getId = function () { + return this.hostTree.data.getId(this.dataIndex); + }; + /** + * index in parent's children + */ + + + TreeNode.prototype.getChildIndex = function () { + if (this.parentNode) { + var children = this.parentNode.children; + + for (var i = 0; i < children.length; ++i) { + if (children[i] === this) { + return i; + } + } + + return -1; + } + + return -1; + }; + /** + * if this is an ancestor of another node + * + * @param node another node + * @return if is ancestor + */ + + + TreeNode.prototype.isAncestorOf = function (node) { + var parent = node.parentNode; + + while (parent) { + if (parent === this) { + return true; + } + + parent = parent.parentNode; + } + + return false; + }; + /** + * if this is an descendant of another node + * + * @param node another node + * @return if is descendant + */ + + + TreeNode.prototype.isDescendantOf = function (node) { + return node !== this && node.isAncestorOf(this); + }; + + return TreeNode; + }(); + + var Tree = + /** @class */ + function () { + function Tree(hostModel) { + this.type = 'tree'; + this._nodes = []; + this.hostModel = hostModel; + } + + Tree.prototype.eachNode = function (options, cb, context) { + this.root.eachNode(options, cb, context); + }; + + Tree.prototype.getNodeByDataIndex = function (dataIndex) { + var rawIndex = this.data.getRawIndex(dataIndex); + return this._nodes[rawIndex]; + }; + + Tree.prototype.getNodeById = function (name) { + return this.root.getNodeById(name); + }; + /** + * Update item available by list, + * when list has been performed options like 'filterSelf' or 'map'. + */ + + + Tree.prototype.update = function () { + var data = this.data; + var nodes = this._nodes; + + for (var i = 0, len = nodes.length; i < len; i++) { + nodes[i].dataIndex = -1; + } + + for (var i = 0, len = data.count(); i < len; i++) { + nodes[data.getRawIndex(i)].dataIndex = i; + } + }; + /** + * Clear all layouts + */ + + + Tree.prototype.clearLayouts = function () { + this.data.clearItemLayouts(); + }; + /** + * data node format: + * { + * name: ... + * value: ... + * children: [ + * { + * name: ... + * value: ... + * children: ... + * }, + * ... + * ] + * } + */ + + + Tree.createTree = function (dataRoot, hostModel, beforeLink) { + var tree = new Tree(hostModel); + var listData = []; + var dimMax = 1; + buildHierarchy(dataRoot); + + function buildHierarchy(dataNode, parentNode) { + var value = dataNode.value; + dimMax = Math.max(dimMax, isArray(value) ? value.length : 1); + listData.push(dataNode); + var node = new TreeNode(convertOptionIdName(dataNode.name, ''), tree); + parentNode ? addChild(node, parentNode) : tree.root = node; + + tree._nodes.push(node); + + var children = dataNode.children; + + if (children) { + for (var i = 0; i < children.length; i++) { + buildHierarchy(children[i], node); + } + } + } + + tree.root.updateDepthAndHeight(0); + var dimensions = prepareSeriesDataSchema(listData, { + coordDimensions: ['value'], + dimensionsCount: dimMax + }).dimensions; + var list = new SeriesData(dimensions, hostModel); + list.initData(listData); + beforeLink && beforeLink(list); + linkSeriesData({ + mainData: list, + struct: tree, + structAttr: 'tree' + }); + tree.update(); + return tree; + }; + + return Tree; + }(); + /** + * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote, + * so this function is not ready and not necessary to be public. + */ + + + function addChild(child, node) { + var children = node.children; + + if (child.parentNode === node) { + return; + } + + children.push(child); + child.parentNode = node; + } + + function retrieveTargetInfo(payload, validPayloadTypes, seriesModel) { + if (payload && indexOf(validPayloadTypes, payload.type) >= 0) { + var root = seriesModel.getData().tree.root; + var targetNode = payload.targetNode; + + if (typeof targetNode === 'string') { + targetNode = root.getNodeById(targetNode); + } + + if (targetNode && root.contains(targetNode)) { + return { + node: targetNode + }; + } + + var targetNodeId = payload.targetNodeId; + + if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) { + return { + node: targetNode + }; + } + } + } // Not includes the given node at the last item. + + function getPathToRoot(node) { + var path = []; + + while (node) { + node = node.parentNode; + node && path.push(node); + } + + return path.reverse(); + } + function aboveViewRoot(viewRoot, node) { + var viewPath = getPathToRoot(viewRoot); + return indexOf(viewPath, node) >= 0; + } // From root to the input node (the input node will be included). + + function wrapTreePathInfo(node, seriesModel) { + var treePathInfo = []; + + while (node) { + var nodeDataIndex = node.dataIndex; + treePathInfo.push({ + name: node.name, + dataIndex: nodeDataIndex, + value: seriesModel.getRawValue(nodeDataIndex) + }); + node = node.parentNode; + } + + treePathInfo.reverse(); + return treePathInfo; + } + + var TreeSeriesModel = + /** @class */ + function (_super) { + __extends(TreeSeriesModel, _super); + + function TreeSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.hasSymbolVisual = true; // Do it self. + + _this.ignoreStyleOnData = true; + return _this; + } + /** + * Init a tree data structure from data in option series + */ + + + TreeSeriesModel.prototype.getInitialData = function (option) { + //create an virtual root + var root = { + name: option.name, + children: option.data + }; + var leaves = option.leaves || {}; + var leavesModel = new Model(leaves, this, this.ecModel); + var tree = Tree.createTree(root, this, beforeLink); + + function beforeLink(nodeData) { + nodeData.wrapMethod('getItemModel', function (model, idx) { + var node = tree.getNodeByDataIndex(idx); + + if (!(node && node.children.length && node.isExpand)) { + model.parentModel = leavesModel; + } + + return model; + }); + } + + var treeDepth = 0; + tree.eachNode('preorder', function (node) { + if (node.depth > treeDepth) { + treeDepth = node.depth; + } + }); + var expandAndCollapse = option.expandAndCollapse; + var expandTreeDepth = expandAndCollapse && option.initialTreeDepth >= 0 ? option.initialTreeDepth : treeDepth; + tree.root.eachNode('preorder', function (node) { + var item = node.hostTree.data.getRawDataItem(node.dataIndex); // Add item.collapsed != null, because users can collapse node original in the series.data. + + node.isExpand = item && item.collapsed != null ? !item.collapsed : node.depth <= expandTreeDepth; + }); + return tree.data; + }; + /** + * Make the configuration 'orient' backward compatibly, with 'horizontal = LR', 'vertical = TB'. + * @returns {string} orient + */ + + + TreeSeriesModel.prototype.getOrient = function () { + var orient = this.get('orient'); + + if (orient === 'horizontal') { + orient = 'LR'; + } else if (orient === 'vertical') { + orient = 'TB'; + } + + return orient; + }; + + TreeSeriesModel.prototype.setZoom = function (zoom) { + this.option.zoom = zoom; + }; + + TreeSeriesModel.prototype.setCenter = function (center) { + this.option.center = center; + }; + + TreeSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + var tree = this.getData().tree; + var realRoot = tree.root.children[0]; + var node = tree.getNodeByDataIndex(dataIndex); + var value = node.getValue(); + var name = node.name; + + while (node && node !== realRoot) { + name = node.parentNode.name + '.' + name; + node = node.parentNode; + } + + return createTooltipMarkup('nameValue', { + name: name, + value: value, + noValue: isNaN(value) || value == null + }); + }; // Add tree path to tooltip param + + + TreeSeriesModel.prototype.getDataParams = function (dataIndex) { + var params = _super.prototype.getDataParams.apply(this, arguments); + + var node = this.getData().tree.getNodeByDataIndex(dataIndex); + params.treeAncestors = wrapTreePathInfo(node, this); + return params; + }; + + TreeSeriesModel.type = 'series.tree'; // can support the position parameters 'left', 'top','right','bottom', 'width', + // 'height' in the setOption() with 'merge' mode normal. + + TreeSeriesModel.layoutMode = 'box'; + TreeSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + coordinateSystem: 'view', + // the position of the whole view + left: '12%', + top: '12%', + right: '12%', + bottom: '12%', + // the layout of the tree, two value can be selected, 'orthogonal' or 'radial' + layout: 'orthogonal', + // value can be 'polyline' + edgeShape: 'curve', + edgeForkPosition: '50%', + // true | false | 'move' | 'scale', see module:component/helper/RoamController. + roam: false, + // Symbol size scale ratio in roam + nodeScaleRatio: 0.4, + // Default on center of graph + center: null, + zoom: 1, + orient: 'LR', + symbol: 'emptyCircle', + symbolSize: 7, + expandAndCollapse: true, + initialTreeDepth: 2, + lineStyle: { + color: '#ccc', + width: 1.5, + curveness: 0.5 + }, + itemStyle: { + color: 'lightsteelblue', + // borderColor: '#c23531', + borderWidth: 1.5 + }, + label: { + show: true + }, + animationEasing: 'linear', + animationDuration: 700, + animationDurationUpdate: 500 + }; + return TreeSeriesModel; + }(SeriesModel); + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + /** + * Traverse the tree from bottom to top and do something + */ + function eachAfter(root, callback, separation) { + var nodes = [root]; + var next = []; + var node; + + while (node = nodes.pop()) { + // jshint ignore:line + next.push(node); + + if (node.isExpand) { + var children = node.children; + + if (children.length) { + for (var i = 0; i < children.length; i++) { + nodes.push(children[i]); + } + } + } + } + + while (node = next.pop()) { + // jshint ignore:line + callback(node, separation); + } + } + /** + * Traverse the tree from top to bottom and do something + */ + + + function eachBefore(root, callback) { + var nodes = [root]; + var node; + + while (node = nodes.pop()) { + // jshint ignore:line + callback(node); + + if (node.isExpand) { + var children = node.children; + + if (children.length) { + for (var i = children.length - 1; i >= 0; i--) { + nodes.push(children[i]); + } + } + } + } + } + + function treeLayout(ecModel, api) { + ecModel.eachSeriesByType('tree', function (seriesModel) { + commonLayout(seriesModel, api); + }); + } + + function commonLayout(seriesModel, api) { + var layoutInfo = getViewRect$1(seriesModel, api); + seriesModel.layoutInfo = layoutInfo; + var layout = seriesModel.get('layout'); + var width = 0; + var height = 0; + var separation$1 = null; + + if (layout === 'radial') { + width = 2 * Math.PI; + height = Math.min(layoutInfo.height, layoutInfo.width) / 2; + separation$1 = separation(function (node1, node2) { + return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth; + }); + } else { + width = layoutInfo.width; + height = layoutInfo.height; + separation$1 = separation(); + } + + var virtualRoot = seriesModel.getData().tree.root; + var realRoot = virtualRoot.children[0]; + + if (realRoot) { + init$2(virtualRoot); + eachAfter(realRoot, firstWalk, separation$1); + virtualRoot.hierNode.modifier = -realRoot.hierNode.prelim; + eachBefore(realRoot, secondWalk); + var left_1 = realRoot; + var right_1 = realRoot; + var bottom_1 = realRoot; + eachBefore(realRoot, function (node) { + var x = node.getLayout().x; + + if (x < left_1.getLayout().x) { + left_1 = node; + } + + if (x > right_1.getLayout().x) { + right_1 = node; + } + + if (node.depth > bottom_1.depth) { + bottom_1 = node; + } + }); + var delta = left_1 === right_1 ? 1 : separation$1(left_1, right_1) / 2; + var tx_1 = delta - left_1.getLayout().x; + var kx_1 = 0; + var ky_1 = 0; + var coorX_1 = 0; + var coorY_1 = 0; + + if (layout === 'radial') { + kx_1 = width / (right_1.getLayout().x + delta + tx_1); // here we use (node.depth - 1), bucause the real root's depth is 1 + + ky_1 = height / (bottom_1.depth - 1 || 1); + eachBefore(realRoot, function (node) { + coorX_1 = (node.getLayout().x + tx_1) * kx_1; + coorY_1 = (node.depth - 1) * ky_1; + var finalCoor = radialCoordinate(coorX_1, coorY_1); + node.setLayout({ + x: finalCoor.x, + y: finalCoor.y, + rawX: coorX_1, + rawY: coorY_1 + }, true); + }); + } else { + var orient_1 = seriesModel.getOrient(); + + if (orient_1 === 'RL' || orient_1 === 'LR') { + ky_1 = height / (right_1.getLayout().x + delta + tx_1); + kx_1 = width / (bottom_1.depth - 1 || 1); + eachBefore(realRoot, function (node) { + coorY_1 = (node.getLayout().x + tx_1) * ky_1; + coorX_1 = orient_1 === 'LR' ? (node.depth - 1) * kx_1 : width - (node.depth - 1) * kx_1; + node.setLayout({ + x: coorX_1, + y: coorY_1 + }, true); + }); + } else if (orient_1 === 'TB' || orient_1 === 'BT') { + kx_1 = width / (right_1.getLayout().x + delta + tx_1); + ky_1 = height / (bottom_1.depth - 1 || 1); + eachBefore(realRoot, function (node) { + coorX_1 = (node.getLayout().x + tx_1) * kx_1; + coorY_1 = orient_1 === 'TB' ? (node.depth - 1) * ky_1 : height - (node.depth - 1) * ky_1; + node.setLayout({ + x: coorX_1, + y: coorY_1 + }, true); + }); + } + } + } + } + + function treeVisual(ecModel) { + ecModel.eachSeriesByType('tree', function (seriesModel) { + var data = seriesModel.getData(); + var tree = data.tree; + tree.eachNode(function (node) { + var model = node.getModel(); // TODO Optimize + + var style = model.getModel('itemStyle').getItemStyle(); + var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, 'style'); + extend(existsStyle, style); + }); + }); + } + + function installTreeAction(registers) { + registers.registerAction({ + type: 'treeExpandAndCollapse', + event: 'treeExpandAndCollapse', + update: 'update' + }, function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'series', + subType: 'tree', + query: payload + }, function (seriesModel) { + var dataIndex = payload.dataIndex; + var tree = seriesModel.getData().tree; + var node = tree.getNodeByDataIndex(dataIndex); + node.isExpand = !node.isExpand; + }); + }); + registers.registerAction({ + type: 'treeRoam', + event: 'treeRoam', + // Here we set 'none' instead of 'update', because roam action + // just need to update the transform matrix without having to recalculate + // the layout. So don't need to go through the whole update process, such + // as 'dataPrcocess', 'coordSystemUpdate', 'layout' and so on. + update: 'none' + }, function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'series', + subType: 'tree', + query: payload + }, function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var res = updateCenterAndZoom(coordSys, payload); + seriesModel.setCenter && seriesModel.setCenter(res.center); + seriesModel.setZoom && seriesModel.setZoom(res.zoom); + }); + }); + } + + function install$b(registers) { + registers.registerChartView(TreeView); + registers.registerSeriesModel(TreeSeriesModel); + registers.registerLayout(treeLayout); + registers.registerVisual(treeVisual); + installTreeAction(registers); + } + + var noop$1 = function () {}; + + var actionTypes = ['treemapZoomToNode', 'treemapRender', 'treemapMove']; + function installTreemapAction(registers) { + for (var i = 0; i < actionTypes.length; i++) { + registers.registerAction({ + type: actionTypes[i], + update: 'updateView' + }, noop$1); + } + + registers.registerAction({ + type: 'treemapRootToNode', + update: 'updateView' + }, function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'series', + subType: 'treemap', + query: payload + }, handleRootToNode); + + function handleRootToNode(model, index) { + var types = ['treemapZoomToNode', 'treemapRootToNode']; + var targetInfo = retrieveTargetInfo(payload, types, model); + + if (targetInfo) { + var originViewRoot = model.getViewRoot(); + + if (originViewRoot) { + payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) ? 'rollUp' : 'drillDown'; + } + + model.resetViewRoot(targetInfo.node); + } + } + }); + } + + function enableAriaDecalForTree(seriesModel) { + var data = seriesModel.getData(); + var tree = data.tree; + var decalPaletteScope = {}; + tree.eachNode(function (node) { + // Use decal of level 1 node + var current = node; + + while (current && current.depth > 1) { + current = current.parentNode; + } + + var decal = getDecalFromPalette(seriesModel.ecModel, current.name || current.dataIndex + '', decalPaletteScope); + node.setVisual('decal', decal); + }); + } + + var TreemapSeriesModel = + /** @class */ + function (_super) { + __extends(TreemapSeriesModel, _super); + + function TreemapSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TreemapSeriesModel.type; + _this.preventUsingHoverLayer = true; + return _this; + } + /** + * @override + */ + + + TreemapSeriesModel.prototype.getInitialData = function (option, ecModel) { + // Create a virtual root. + var root = { + name: option.name, + children: option.data + }; + completeTreeValue(root); + var levels = option.levels || []; // Used in "visual priority" in `treemapVisual.js`. + // This way is a little tricky, must satisfy the precondition: + // 1. There is no `treeNode.getModel('itemStyle.xxx')` used. + // 2. The `Model.prototype.getModel()` will not use any clone-like way. + + var designatedVisualItemStyle = this.designatedVisualItemStyle = {}; + var designatedVisualModel = new Model({ + itemStyle: designatedVisualItemStyle + }, this, ecModel); + levels = option.levels = setDefault(levels, ecModel); + var levelModels = map(levels || [], function (levelDefine) { + return new Model(levelDefine, designatedVisualModel, ecModel); + }, this); // Make sure always a new tree is created when setOption, + // in TreemapView, we check whether oldTree === newTree + // to choose mappings approach among old shapes and new shapes. + + var tree = Tree.createTree(root, this, beforeLink); + + function beforeLink(nodeData) { + nodeData.wrapMethod('getItemModel', function (model, idx) { + var node = tree.getNodeByDataIndex(idx); + var levelModel = node ? levelModels[node.depth] : null; // If no levelModel, we also need `designatedVisualModel`. + + model.parentModel = levelModel || designatedVisualModel; + return model; + }); + } + + return tree.data; + }; + + TreemapSeriesModel.prototype.optionUpdated = function () { + this.resetViewRoot(); + }; + /** + * @override + * @param {number} dataIndex + * @param {boolean} [mutipleSeries=false] + */ + + + TreemapSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + var data = this.getData(); + var value = this.getRawValue(dataIndex); + var name = data.getName(dataIndex); + return createTooltipMarkup('nameValue', { + name: name, + value: value + }); + }; + /** + * Add tree path to tooltip param + * + * @override + * @param {number} dataIndex + * @return {Object} + */ + + + TreemapSeriesModel.prototype.getDataParams = function (dataIndex) { + var params = _super.prototype.getDataParams.apply(this, arguments); + + var node = this.getData().tree.getNodeByDataIndex(dataIndex); + params.treeAncestors = wrapTreePathInfo(node, this); // compatitable the previous code. + + params.treePathInfo = params.treeAncestors; + return params; + }; + /** + * @public + * @param {Object} layoutInfo { + * x: containerGroup x + * y: containerGroup y + * width: containerGroup width + * height: containerGroup height + * } + */ + + + TreemapSeriesModel.prototype.setLayoutInfo = function (layoutInfo) { + /** + * @readOnly + * @type {Object} + */ + this.layoutInfo = this.layoutInfo || {}; + extend(this.layoutInfo, layoutInfo); + }; + /** + * @param {string} id + * @return {number} index + */ + + + TreemapSeriesModel.prototype.mapIdToIndex = function (id) { + // A feature is implemented: + // index is monotone increasing with the sequence of + // input id at the first time. + // This feature can make sure that each data item and its + // mapped color have the same index between data list and + // color list at the beginning, which is useful for user + // to adjust data-color mapping. + + /** + * @private + * @type {Object} + */ + var idIndexMap = this._idIndexMap; + + if (!idIndexMap) { + idIndexMap = this._idIndexMap = createHashMap(); + /** + * @private + * @type {number} + */ + + this._idIndexMapCount = 0; + } + + var index = idIndexMap.get(id); + + if (index == null) { + idIndexMap.set(id, index = this._idIndexMapCount++); + } + + return index; + }; + + TreemapSeriesModel.prototype.getViewRoot = function () { + return this._viewRoot; + }; + + TreemapSeriesModel.prototype.resetViewRoot = function (viewRoot) { + viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot; + var root = this.getRawData().tree.root; + + if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) { + this._viewRoot = root; + } + }; + + TreemapSeriesModel.prototype.enableAriaDecal = function () { + enableAriaDecalForTree(this); + }; + + TreemapSeriesModel.type = 'series.treemap'; + TreemapSeriesModel.layoutMode = 'box'; + TreemapSeriesModel.defaultOption = { + // Disable progressive rendering + progressive: 0, + // size: ['80%', '80%'], // deprecated, compatible with ec2. + left: 'center', + top: 'middle', + width: '80%', + height: '80%', + sort: true, + clipWindow: 'origin', + squareRatio: 0.5 * (1 + Math.sqrt(5)), + leafDepth: null, + drillDownIcon: '▶', + // to align specialized icon. ▷▶❒❐▼✚ + zoomToNodeRatio: 0.32 * 0.32, + roam: true, + nodeClick: 'zoomToNode', + animation: true, + animationDurationUpdate: 900, + animationEasing: 'quinticInOut', + breadcrumb: { + show: true, + height: 22, + left: 'center', + top: 'bottom', + // right + // bottom + emptyItemWidth: 25, + itemStyle: { + color: 'rgba(0,0,0,0.7)', + textStyle: { + color: '#fff' + } + } + }, + label: { + show: true, + // Do not use textDistance, for ellipsis rect just the same as treemap node rect. + distance: 0, + padding: 5, + position: 'inside', + // formatter: null, + color: '#fff', + overflow: 'truncate' // align + // verticalAlign + + }, + upperLabel: { + show: false, + position: [0, '50%'], + height: 20, + // formatter: null, + // color: '#fff', + overflow: 'truncate', + // align: null, + verticalAlign: 'middle' + }, + itemStyle: { + color: null, + colorAlpha: null, + colorSaturation: null, + borderWidth: 0, + gapWidth: 0, + borderColor: '#fff', + borderColorSaturation: null // If specified, borderColor will be ineffective, and the + // border color is evaluated by color of current node and + // borderColorSaturation. + + }, + emphasis: { + upperLabel: { + show: true, + position: [0, '50%'], + ellipsis: true, + verticalAlign: 'middle' + } + }, + visualDimension: 0, + visualMin: null, + visualMax: null, + color: [], + // level[n].color (if necessary). + // + Specify color list of each level. level[0].color would be global + // color list if not specified. (see method `setDefault`). + // + But set as a empty array to forbid fetch color from global palette + // when using nodeModel.get('color'), otherwise nodes on deep level + // will always has color palette set and are not able to inherit color + // from parent node. + // + TreemapSeries.color can not be set as 'none', otherwise effect + // legend color fetching (see seriesColor.js). + colorAlpha: null, + colorSaturation: null, + colorMappingBy: 'index', + visibleMin: 10, + // be rendered. Only works when sort is 'asc' or 'desc'. + childrenVisibleMin: null, + // grandchildren will not show. + // Why grandchildren? If not grandchildren but children, + // some siblings show children and some not, + // the appearance may be mess and not consistent, + levels: [] // Each item: { + // visibleMin, itemStyle, visualDimension, label + // } + // data: { + // value: [], + // children: [], + // link: 'http://xxx.xxx.xxx', + // target: 'blank' or 'self' + // } + + }; + return TreemapSeriesModel; + }(SeriesModel); + /** + * @param {Object} dataNode + */ + + + function completeTreeValue(dataNode) { + // Postorder travel tree. + // If value of none-leaf node is not set, + // calculate it by suming up the value of all children. + var sum = 0; + each(dataNode.children, function (child) { + completeTreeValue(child); + var childValue = child.value; + isArray(childValue) && (childValue = childValue[0]); + sum += childValue; + }); + var thisValue = dataNode.value; + + if (isArray(thisValue)) { + thisValue = thisValue[0]; + } + + if (thisValue == null || isNaN(thisValue)) { + thisValue = sum; + } // Value should not less than 0. + + + if (thisValue < 0) { + thisValue = 0; + } + + isArray(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue; + } + /** + * set default to level configuration + */ + + + function setDefault(levels, ecModel) { + var globalColorList = normalizeToArray(ecModel.get('color')); + var globalDecalList = normalizeToArray(ecModel.get(['aria', 'decal', 'decals'])); + + if (!globalColorList) { + return; + } + + levels = levels || []; + var hasColorDefine; + var hasDecalDefine; + each(levels, function (levelDefine) { + var model = new Model(levelDefine); + var modelColor = model.get('color'); + var modelDecal = model.get('decal'); + + if (model.get(['itemStyle', 'color']) || modelColor && modelColor !== 'none') { + hasColorDefine = true; + } + + if (model.get(['itemStyle', 'decal']) || modelDecal && modelDecal !== 'none') { + hasDecalDefine = true; + } + }); + var level0 = levels[0] || (levels[0] = {}); + + if (!hasColorDefine) { + level0.color = globalColorList.slice(); + } + + if (!hasDecalDefine && globalDecalList) { + level0.decal = globalDecalList.slice(); + } + + return levels; + } + + var TEXT_PADDING = 8; + var ITEM_GAP = 8; + var ARRAY_LENGTH = 5; + + var Breadcrumb = + /** @class */ + function () { + function Breadcrumb(containerGroup) { + this.group = new Group(); + containerGroup.add(this.group); + } + + Breadcrumb.prototype.render = function (seriesModel, api, targetNode, onSelect) { + var model = seriesModel.getModel('breadcrumb'); + var thisGroup = this.group; + thisGroup.removeAll(); + + if (!model.get('show') || !targetNode) { + return; + } + + var normalStyleModel = model.getModel('itemStyle'); // let emphasisStyleModel = model.getModel('emphasis.itemStyle'); + + var textStyleModel = normalStyleModel.getModel('textStyle'); + var layoutParam = { + pos: { + left: model.get('left'), + right: model.get('right'), + top: model.get('top'), + bottom: model.get('bottom') + }, + box: { + width: api.getWidth(), + height: api.getHeight() + }, + emptyItemWidth: model.get('emptyItemWidth'), + totalWidth: 0, + renderList: [] + }; + + this._prepare(targetNode, layoutParam, textStyleModel); + + this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect); + + positionElement(thisGroup, layoutParam.pos, layoutParam.box); + }; + /** + * Prepare render list and total width + * @private + */ + + + Breadcrumb.prototype._prepare = function (targetNode, layoutParam, textStyleModel) { + for (var node = targetNode; node; node = node.parentNode) { + var text = convertOptionIdName(node.getModel().get('name'), ''); + var textRect = textStyleModel.getTextRect(text); + var itemWidth = Math.max(textRect.width + TEXT_PADDING * 2, layoutParam.emptyItemWidth); + layoutParam.totalWidth += itemWidth + ITEM_GAP; + layoutParam.renderList.push({ + node: node, + text: text, + width: itemWidth + }); + } + }; + /** + * @private + */ + + + Breadcrumb.prototype._renderContent = function (seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect) { + // Start rendering. + var lastX = 0; + var emptyItemWidth = layoutParam.emptyItemWidth; + var height = seriesModel.get(['breadcrumb', 'height']); + var availableSize = getAvailableSize(layoutParam.pos, layoutParam.box); + var totalWidth = layoutParam.totalWidth; + var renderList = layoutParam.renderList; + + for (var i = renderList.length - 1; i >= 0; i--) { + var item = renderList[i]; + var itemNode = item.node; + var itemWidth = item.width; + var text = item.text; // Hdie text and shorten width if necessary. + + if (totalWidth > availableSize.width) { + totalWidth -= itemWidth - emptyItemWidth; + itemWidth = emptyItemWidth; + text = null; + } + + var el = new Polygon({ + shape: { + points: makeItemPoints(lastX, 0, itemWidth, height, i === renderList.length - 1, i === 0) + }, + style: defaults(normalStyleModel.getItemStyle(), { + lineJoin: 'bevel' + }), + textContent: new ZRText({ + style: { + text: text, + fill: textStyleModel.getTextColor(), + font: textStyleModel.getFont() + } + }), + textConfig: { + position: 'inside' + }, + z2: Z2_EMPHASIS_LIFT * 1e4, + onclick: curry(onSelect, itemNode) + }); + el.disableLabelAnimation = true; + this.group.add(el); + packEventData(el, seriesModel, itemNode); + lastX += itemWidth + ITEM_GAP; + } + }; + + Breadcrumb.prototype.remove = function () { + this.group.removeAll(); + }; + + return Breadcrumb; + }(); + + function makeItemPoints(x, y, itemWidth, itemHeight, head, tail) { + var points = [[head ? x : x - ARRAY_LENGTH, y], [x + itemWidth, y], [x + itemWidth, y + itemHeight], [head ? x : x - ARRAY_LENGTH, y + itemHeight]]; + !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]); + !head && points.push([x, y + itemHeight / 2]); + return points; + } // Package custom mouse event. + + + function packEventData(el, seriesModel, itemNode) { + getECData(el).eventData = { + componentType: 'series', + componentSubType: 'treemap', + componentIndex: seriesModel.componentIndex, + seriesIndex: seriesModel.seriesIndex, + seriesName: seriesModel.name, + seriesType: 'treemap', + selfType: 'breadcrumb', + nodeData: { + dataIndex: itemNode && itemNode.dataIndex, + name: itemNode && itemNode.name + }, + treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel) + }; + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + /** + * Animate multiple elements with a single done-callback. + * + * @example + * animation + * .createWrap() + * .add(el1, {x: 10, y: 10}) + * .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400) + * .done(function () { // done }) + * .start('cubicOut'); + */ + var AnimationWrap = + /** @class */ + function () { + function AnimationWrap() { + this._storage = []; + this._elExistsMap = {}; + } + /** + * Caution: a el can only be added once, otherwise 'done' + * might not be called. This method checks this (by el.id), + * suppresses adding and returns false when existing el found. + * + * @return Whether adding succeeded. + */ + + + AnimationWrap.prototype.add = function (el, target, duration, delay, easing) { + if (this._elExistsMap[el.id]) { + return false; + } + + this._elExistsMap[el.id] = true; + + this._storage.push({ + el: el, + target: target, + duration: duration, + delay: delay, + easing: easing + }); + + return true; + }; + /** + * Only execute when animation done/aborted. + */ + + + AnimationWrap.prototype.finished = function (callback) { + this._finishedCallback = callback; + return this; + }; + /** + * Will stop exist animation firstly. + */ + + + AnimationWrap.prototype.start = function () { + var _this = this; + + var count = this._storage.length; + + var checkTerminate = function () { + count--; + + if (count <= 0) { + // Guard. + _this._storage.length = 0; + _this._elExistsMap = {}; + _this._finishedCallback && _this._finishedCallback(); + } + }; + + for (var i = 0, len = this._storage.length; i < len; i++) { + var item = this._storage[i]; + item.el.animateTo(item.target, { + duration: item.duration, + delay: item.delay, + easing: item.easing, + setToFinal: true, + done: checkTerminate, + aborted: checkTerminate + }); + } + + return this; + }; + + return AnimationWrap; + }(); + + function createWrap() { + return new AnimationWrap(); + } + + var Group$1 = Group; + var Rect$1 = Rect; + var DRAG_THRESHOLD = 3; + var PATH_LABEL_NOAMAL = 'label'; + var PATH_UPPERLABEL_NORMAL = 'upperLabel'; // Should larger than emphasis states lift z + + var Z2_BASE = Z2_EMPHASIS_LIFT * 10; // Should bigger than every z2. + + var Z2_BG = Z2_EMPHASIS_LIFT * 2; + var Z2_CONTENT = Z2_EMPHASIS_LIFT * 3; + var getStateItemStyle = makeStyleMapper([['fill', 'color'], // `borderColor` and `borderWidth` has been occupied, + // so use `stroke` to indicate the stroke of the rect. + ['stroke', 'strokeColor'], ['lineWidth', 'strokeWidth'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`. + // So do not transfer decal directly. + ]); + + var getItemStyleNormal = function (model) { + // Normal style props should include emphasis style props. + var itemStyle = getStateItemStyle(model); // Clear styles set by emphasis. + + itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null; + return itemStyle; + }; + + var inner$8 = makeInner(); + + var TreemapView = + /** @class */ + function (_super) { + __extends(TreemapView, _super); + + function TreemapView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TreemapView.type; + _this._state = 'ready'; + _this._storage = createStorage(); + return _this; + } + /** + * @override + */ + + + TreemapView.prototype.render = function (seriesModel, ecModel, api, payload) { + var models = ecModel.findComponents({ + mainType: 'series', + subType: 'treemap', + query: payload + }); + + if (indexOf(models, seriesModel) < 0) { + return; + } + + this.seriesModel = seriesModel; + this.api = api; + this.ecModel = ecModel; + var types = ['treemapZoomToNode', 'treemapRootToNode']; + var targetInfo = retrieveTargetInfo(payload, types, seriesModel); + var payloadType = payload && payload.type; + var layoutInfo = seriesModel.layoutInfo; + var isInit = !this._oldTree; + var thisStorage = this._storage; // Mark new root when action is treemapRootToNode. + + var reRoot = payloadType === 'treemapRootToNode' && targetInfo && thisStorage ? { + rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()], + direction: payload.direction + } : null; + + var containerGroup = this._giveContainerGroup(layoutInfo); + + var hasAnimation = seriesModel.get('animation'); + + var renderResult = this._doRender(containerGroup, seriesModel, reRoot); + + hasAnimation && !isInit && (!payloadType || payloadType === 'treemapZoomToNode' || payloadType === 'treemapRootToNode') ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) : renderResult.renderFinally(); + + this._resetController(api); + + this._renderBreadcrumb(seriesModel, api, targetInfo); + }; + + TreemapView.prototype._giveContainerGroup = function (layoutInfo) { + var containerGroup = this._containerGroup; + + if (!containerGroup) { + // FIXME + // 加一层containerGroup是为了clip,但是现在clip功能并没有实现。 + containerGroup = this._containerGroup = new Group$1(); + + this._initEvents(containerGroup); + + this.group.add(containerGroup); + } + + containerGroup.x = layoutInfo.x; + containerGroup.y = layoutInfo.y; + return containerGroup; + }; + + TreemapView.prototype._doRender = function (containerGroup, seriesModel, reRoot) { + var thisTree = seriesModel.getData().tree; + var oldTree = this._oldTree; // Clear last shape records. + + var lastsForAnimation = createStorage(); + var thisStorage = createStorage(); + var oldStorage = this._storage; + var willInvisibleEls = []; + + function doRenderNode(thisNode, oldNode, parentGroup, depth) { + return renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth); + } // Notice: when thisTree and oldTree are the same tree (see list.cloneShallow), + // the oldTree is actually losted, so we can not find all of the old graphic + // elements from tree. So we use this stragegy: make element storage, move + // from old storage to new storage, clear old storage. + + + dualTravel(thisTree.root ? [thisTree.root] : [], oldTree && oldTree.root ? [oldTree.root] : [], containerGroup, thisTree === oldTree || !oldTree, 0); // Process all removing. + + var willDeleteEls = clearStorage(oldStorage); + this._oldTree = thisTree; + this._storage = thisStorage; + return { + lastsForAnimation: lastsForAnimation, + willDeleteEls: willDeleteEls, + renderFinally: renderFinally + }; + + function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) { + // When 'render' is triggered by action, + // 'this' and 'old' may be the same tree, + // we use rawIndex in that case. + if (sameTree) { + oldViewChildren = thisViewChildren; + each(thisViewChildren, function (child, index) { + !child.isRemoved() && processNode(index, index); + }); + } // Diff hierarchically (diff only in each subtree, but not whole). + // because, consistency of view is important. + else { + new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey).add(processNode).update(processNode).remove(curry(processNode, null)).execute(); + } + + function getKey(node) { + // Identify by name or raw index. + return node.getId(); + } + + function processNode(newIndex, oldIndex) { + var thisNode = newIndex != null ? thisViewChildren[newIndex] : null; + var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null; + var group = doRenderNode(thisNode, oldNode, parentGroup, depth); + group && dualTravel(thisNode && thisNode.viewChildren || [], oldNode && oldNode.viewChildren || [], group, sameTree, depth + 1); + } + } + + function clearStorage(storage) { + var willDeleteEls = createStorage(); + storage && each(storage, function (store, storageName) { + var delEls = willDeleteEls[storageName]; + each(store, function (el) { + el && (delEls.push(el), inner$8(el).willDelete = true); + }); + }); + return willDeleteEls; + } + + function renderFinally() { + each(willDeleteEls, function (els) { + each(els, function (el) { + el.parent && el.parent.remove(el); + }); + }); + each(willInvisibleEls, function (el) { + el.invisible = true; // Setting invisible is for optimizing, so no need to set dirty, + // just mark as invisible. + + el.dirty(); + }); + } + }; + + TreemapView.prototype._doAnimation = function (containerGroup, renderResult, seriesModel, reRoot) { + var durationOption = seriesModel.get('animationDurationUpdate'); + var easingOption = seriesModel.get('animationEasing'); // TODO: do not support function until necessary. + + var duration = (isFunction(durationOption) ? 0 : durationOption) || 0; + var easing = (isFunction(easingOption) ? null : easingOption) || 'cubicOut'; + var animationWrap = createWrap(); // Make delete animations. + + each(renderResult.willDeleteEls, function (store, storageName) { + each(store, function (el, rawIndex) { + if (el.invisible) { + return; + } + + var parent = el.parent; // Always has parent, and parent is nodeGroup. + + var target; + var innerStore = inner$8(parent); + + if (reRoot && reRoot.direction === 'drillDown') { + target = parent === reRoot.rootNodeGroup // This is the content element of view root. + // Only `content` will enter this branch, because + // `background` and `nodeGroup` will not be deleted. + ? { + shape: { + x: 0, + y: 0, + width: innerStore.nodeWidth, + height: innerStore.nodeHeight + }, + style: { + opacity: 0 + } + } // Others. + : { + style: { + opacity: 0 + } + }; + } else { + var targetX = 0; + var targetY = 0; + + if (!innerStore.willDelete) { + // Let node animate to right-bottom corner, cooperating with fadeout, + // which is appropriate for user understanding. + // Divided by 2 for reRoot rolling up effect. + targetX = innerStore.nodeWidth / 2; + targetY = innerStore.nodeHeight / 2; + } + + target = storageName === 'nodeGroup' ? { + x: targetX, + y: targetY, + style: { + opacity: 0 + } + } : { + shape: { + x: targetX, + y: targetY, + width: 0, + height: 0 + }, + style: { + opacity: 0 + } + }; + } // TODO: do not support delay until necessary. + + + target && animationWrap.add(el, target, duration, 0, easing); + }); + }); // Make other animations + + each(this._storage, function (store, storageName) { + each(store, function (el, rawIndex) { + var last = renderResult.lastsForAnimation[storageName][rawIndex]; + var target = {}; + + if (!last) { + return; + } + + if (el instanceof Group) { + if (last.oldX != null) { + target.x = el.x; + target.y = el.y; + el.x = last.oldX; + el.y = last.oldY; + } + } else { + if (last.oldShape) { + target.shape = extend({}, el.shape); + el.setShape(last.oldShape); + } + + if (last.fadein) { + el.setStyle('opacity', 0); + target.style = { + opacity: 1 + }; + } // When animation is stopped for succedent animation starting, + // el.style.opacity might not be 1 + else if (el.style.opacity !== 1) { + target.style = { + opacity: 1 + }; + } + } + + animationWrap.add(el, target, duration, 0, easing); + }); + }, this); + this._state = 'animating'; + animationWrap.finished(bind(function () { + this._state = 'ready'; + renderResult.renderFinally(); + }, this)).start(); + }; + + TreemapView.prototype._resetController = function (api) { + var controller = this._controller; // Init controller. + + if (!controller) { + controller = this._controller = new RoamController(api.getZr()); + controller.enable(this.seriesModel.get('roam')); + controller.on('pan', bind(this._onPan, this)); + controller.on('zoom', bind(this._onZoom, this)); + } + + var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight()); + controller.setPointerChecker(function (e, x, y) { + return rect.contain(x, y); + }); + }; + + TreemapView.prototype._clearController = function () { + var controller = this._controller; + + if (controller) { + controller.dispose(); + controller = null; + } + }; + + TreemapView.prototype._onPan = function (e) { + if (this._state !== 'animating' && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)) { + // These param must not be cached. + var root = this.seriesModel.getData().tree.root; + + if (!root) { + return; + } + + var rootLayout = root.getLayout(); + + if (!rootLayout) { + return; + } + + this.api.dispatchAction({ + type: 'treemapMove', + from: this.uid, + seriesId: this.seriesModel.id, + rootRect: { + x: rootLayout.x + e.dx, + y: rootLayout.y + e.dy, + width: rootLayout.width, + height: rootLayout.height + } + }); + } + }; + + TreemapView.prototype._onZoom = function (e) { + var mouseX = e.originX; + var mouseY = e.originY; + + if (this._state !== 'animating') { + // These param must not be cached. + var root = this.seriesModel.getData().tree.root; + + if (!root) { + return; + } + + var rootLayout = root.getLayout(); + + if (!rootLayout) { + return; + } + + var rect = new BoundingRect(rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height); + var layoutInfo = this.seriesModel.layoutInfo; // Transform mouse coord from global to containerGroup. + + mouseX -= layoutInfo.x; + mouseY -= layoutInfo.y; // Scale root bounding rect. + + var m = create$1(); + translate(m, m, [-mouseX, -mouseY]); + scale$1(m, m, [e.scale, e.scale]); + translate(m, m, [mouseX, mouseY]); + rect.applyTransform(m); + this.api.dispatchAction({ + type: 'treemapRender', + from: this.uid, + seriesId: this.seriesModel.id, + rootRect: { + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + } + }); + } + }; + + TreemapView.prototype._initEvents = function (containerGroup) { + var _this = this; + + containerGroup.on('click', function (e) { + if (_this._state !== 'ready') { + return; + } + + var nodeClick = _this.seriesModel.get('nodeClick', true); + + if (!nodeClick) { + return; + } + + var targetInfo = _this.findTarget(e.offsetX, e.offsetY); + + if (!targetInfo) { + return; + } + + var node = targetInfo.node; + + if (node.getLayout().isLeafRoot) { + _this._rootToNode(targetInfo); + } else { + if (nodeClick === 'zoomToNode') { + _this._zoomToNode(targetInfo); + } else if (nodeClick === 'link') { + var itemModel = node.hostTree.data.getItemModel(node.dataIndex); + var link = itemModel.get('link', true); + var linkTarget = itemModel.get('target', true) || 'blank'; + link && windowOpen(link, linkTarget); + } + } + }, this); + }; + + TreemapView.prototype._renderBreadcrumb = function (seriesModel, api, targetInfo) { + var _this = this; + + if (!targetInfo) { + targetInfo = seriesModel.get('leafDepth', true) != null ? { + node: seriesModel.getViewRoot() + } // FIXME + // better way? + // Find breadcrumb tail on center of containerGroup. + : this.findTarget(api.getWidth() / 2, api.getHeight() / 2); + + if (!targetInfo) { + targetInfo = { + node: seriesModel.getData().tree.root + }; + } + } + + (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))).render(seriesModel, api, targetInfo.node, function (node) { + if (_this._state !== 'animating') { + aboveViewRoot(seriesModel.getViewRoot(), node) ? _this._rootToNode({ + node: node + }) : _this._zoomToNode({ + node: node + }); + } + }); + }; + /** + * @override + */ + + + TreemapView.prototype.remove = function () { + this._clearController(); + + this._containerGroup && this._containerGroup.removeAll(); + this._storage = createStorage(); + this._state = 'ready'; + this._breadcrumb && this._breadcrumb.remove(); + }; + + TreemapView.prototype.dispose = function () { + this._clearController(); + }; + + TreemapView.prototype._zoomToNode = function (targetInfo) { + this.api.dispatchAction({ + type: 'treemapZoomToNode', + from: this.uid, + seriesId: this.seriesModel.id, + targetNode: targetInfo.node + }); + }; + + TreemapView.prototype._rootToNode = function (targetInfo) { + this.api.dispatchAction({ + type: 'treemapRootToNode', + from: this.uid, + seriesId: this.seriesModel.id, + targetNode: targetInfo.node + }); + }; + /** + * @public + * @param {number} x Global coord x. + * @param {number} y Global coord y. + * @return {Object} info If not found, return undefined; + * @return {number} info.node Target node. + * @return {number} info.offsetX x refer to target node. + * @return {number} info.offsetY y refer to target node. + */ + + + TreemapView.prototype.findTarget = function (x, y) { + var targetInfo; + var viewRoot = this.seriesModel.getViewRoot(); + viewRoot.eachNode({ + attr: 'viewChildren', + order: 'preorder' + }, function (node) { + var bgEl = this._storage.background[node.getRawIndex()]; // If invisible, there might be no element. + + + if (bgEl) { + var point = bgEl.transformCoordToLocal(x, y); + var shape = bgEl.shape; // For performance consideration, dont use 'getBoundingRect'. + + if (shape.x <= point[0] && point[0] <= shape.x + shape.width && shape.y <= point[1] && point[1] <= shape.y + shape.height) { + targetInfo = { + node: node, + offsetX: point[0], + offsetY: point[1] + }; + } else { + return false; // Suppress visit subtree. + } + } + }, this); + return targetInfo; + }; + + TreemapView.type = 'treemap'; + return TreemapView; + }(ChartView); + /** + * @inner + */ + + + function createStorage() { + return { + nodeGroup: [], + background: [], + content: [] + }; + } + /** + * @inner + * @return Return undefined means do not travel further. + */ + + + function renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth) { + // Whether under viewRoot. + if (!thisNode) { + // Deleting nodes will be performed finally. This method just find + // element from old storage, or create new element, set them to new + // storage, and set styles. + return; + } // ------------------------------------------------------------------- + // Start of closure variables available in "Procedures in renderNode". + + + var thisLayout = thisNode.getLayout(); + var data = seriesModel.getData(); + var nodeModel = thisNode.getModel(); // Only for enabling highlight/downplay. Clear firstly. + // Because some node will not be rendered. + + data.setItemGraphicEl(thisNode.dataIndex, null); + + if (!thisLayout || !thisLayout.isInView) { + return; + } + + var thisWidth = thisLayout.width; + var thisHeight = thisLayout.height; + var borderWidth = thisLayout.borderWidth; + var thisInvisible = thisLayout.invisible; + var thisRawIndex = thisNode.getRawIndex(); + var oldRawIndex = oldNode && oldNode.getRawIndex(); + var thisViewChildren = thisNode.viewChildren; + var upperHeight = thisLayout.upperHeight; + var isParent = thisViewChildren && thisViewChildren.length; + var itemStyleNormalModel = nodeModel.getModel('itemStyle'); + var itemStyleEmphasisModel = nodeModel.getModel(['emphasis', 'itemStyle']); + var itemStyleBlurModel = nodeModel.getModel(['blur', 'itemStyle']); + var itemStyleSelectModel = nodeModel.getModel(['select', 'itemStyle']); + var borderRadius = itemStyleNormalModel.get('borderRadius') || 0; // End of closure ariables available in "Procedures in renderNode". + // ----------------------------------------------------------------- + // Node group + + var group = giveGraphic('nodeGroup', Group$1); + + if (!group) { + return; + } + + parentGroup.add(group); // x,y are not set when el is above view root. + + group.x = thisLayout.x || 0; + group.y = thisLayout.y || 0; + group.markRedraw(); + inner$8(group).nodeWidth = thisWidth; + inner$8(group).nodeHeight = thisHeight; + + if (thisLayout.isAboveViewRoot) { + return group; + } // Background + + + var bg = giveGraphic('background', Rect$1, depth, Z2_BG); + bg && renderBackground(group, bg, isParent && thisLayout.upperLabelHeight); + var focus = nodeModel.get(['emphasis', 'focus']); + var blurScope = nodeModel.get(['emphasis', 'blurScope']); + var focusOrIndices = focus === 'ancestor' ? thisNode.getAncestorsIndices() : focus === 'descendant' ? thisNode.getDescendantIndices() : focus; // No children, render content. + + if (isParent) { + // Because of the implementation about "traverse" in graphic hover style, we + // can not set hover listener on the "group" of non-leaf node. Otherwise the + // hover event from the descendents will be listenered. + if (isHighDownDispatcher(group)) { + setAsHighDownDispatcher(group, false); + } + + if (bg) { + setAsHighDownDispatcher(bg, true); // Only for enabling highlight/downplay. + + data.setItemGraphicEl(thisNode.dataIndex, bg); + enableHoverFocus(bg, focusOrIndices, blurScope); + } + } else { + var content = giveGraphic('content', Rect$1, depth, Z2_CONTENT); + content && renderContent(group, content); + bg.disableMorphing = true; + + if (bg && isHighDownDispatcher(bg)) { + setAsHighDownDispatcher(bg, false); + } + + setAsHighDownDispatcher(group, true); // Only for enabling highlight/downplay. + + data.setItemGraphicEl(thisNode.dataIndex, group); + enableHoverFocus(group, focusOrIndices, blurScope); + } + + return group; // ---------------------------- + // | Procedures in renderNode | + // ---------------------------- + + function renderBackground(group, bg, useUpperLabel) { + var ecData = getECData(bg); // For tooltip. + + ecData.dataIndex = thisNode.dataIndex; + ecData.seriesIndex = seriesModel.seriesIndex; + bg.setShape({ + x: 0, + y: 0, + width: thisWidth, + height: thisHeight, + r: borderRadius + }); + + if (thisInvisible) { + // If invisible, do not set visual, otherwise the element will + // change immediately before animation. We think it is OK to + // remain its origin color when moving out of the view window. + processInvisible(bg); + } else { + bg.invisible = false; + var style = thisNode.getVisual('style'); + var visualBorderColor = style.stroke; + var normalStyle = getItemStyleNormal(itemStyleNormalModel); + normalStyle.fill = visualBorderColor; + var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel); + emphasisStyle.fill = itemStyleEmphasisModel.get('borderColor'); + var blurStyle = getStateItemStyle(itemStyleBlurModel); + blurStyle.fill = itemStyleBlurModel.get('borderColor'); + var selectStyle = getStateItemStyle(itemStyleSelectModel); + selectStyle.fill = itemStyleSelectModel.get('borderColor'); + + if (useUpperLabel) { + var upperLabelWidth = thisWidth - 2 * borderWidth; + prepareText( // PENDING: convert ZRColor to ColorString for text. + bg, visualBorderColor, style.opacity, { + x: borderWidth, + y: 0, + width: upperLabelWidth, + height: upperHeight + }); + } // For old bg. + else { + bg.removeTextContent(); + } + + bg.setStyle(normalStyle); + bg.ensureState('emphasis').style = emphasisStyle; + bg.ensureState('blur').style = blurStyle; + bg.ensureState('select').style = selectStyle; + setDefaultStateProxy(bg); + } + + group.add(bg); + } + + function renderContent(group, content) { + var ecData = getECData(content); // For tooltip. + + ecData.dataIndex = thisNode.dataIndex; + ecData.seriesIndex = seriesModel.seriesIndex; + var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0); + var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0); + content.culling = true; + content.setShape({ + x: borderWidth, + y: borderWidth, + width: contentWidth, + height: contentHeight, + r: borderRadius + }); + + if (thisInvisible) { + // If invisible, do not set visual, otherwise the element will + // change immediately before animation. We think it is OK to + // remain its origin color when moving out of the view window. + processInvisible(content); + } else { + content.invisible = false; + var nodeStyle = thisNode.getVisual('style'); + var visualColor = nodeStyle.fill; + var normalStyle = getItemStyleNormal(itemStyleNormalModel); + normalStyle.fill = visualColor; + normalStyle.decal = nodeStyle.decal; + var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel); + var blurStyle = getStateItemStyle(itemStyleBlurModel); + var selectStyle = getStateItemStyle(itemStyleSelectModel); // PENDING: convert ZRColor to ColorString for text. + + prepareText(content, visualColor, nodeStyle.opacity, null); + content.setStyle(normalStyle); + content.ensureState('emphasis').style = emphasisStyle; + content.ensureState('blur').style = blurStyle; + content.ensureState('select').style = selectStyle; + setDefaultStateProxy(content); + } + + group.add(content); + } + + function processInvisible(element) { + // Delay invisible setting utill animation finished, + // avoid element vanish suddenly before animation. + !element.invisible && willInvisibleEls.push(element); + } + + function prepareText(rectEl, visualColor, visualOpacity, // Can be null/undefined + upperLabelRect) { + var normalLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL); + var defaultText = convertOptionIdName(nodeModel.get('name'), null); + var isShow = normalLabelModel.getShallow('show'); + setLabelStyle(rectEl, getLabelStatesModels(nodeModel, upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL), { + defaultText: isShow ? defaultText : null, + inheritColor: visualColor, + defaultOpacity: visualOpacity, + labelFetcher: seriesModel, + labelDataIndex: thisNode.dataIndex + }); + var textEl = rectEl.getTextContent(); + + if (!textEl) { + return; + } + + var textStyle = textEl.style; + var textPadding = normalizeCssArray(textStyle.padding || 0); + + if (upperLabelRect) { + rectEl.setTextConfig({ + layoutRect: upperLabelRect + }); + textEl.disableLabelLayout = true; + } + + textEl.beforeUpdate = function () { + var width = Math.max((upperLabelRect ? upperLabelRect.width : rectEl.shape.width) - textPadding[1] - textPadding[3], 0); + var height = Math.max((upperLabelRect ? upperLabelRect.height : rectEl.shape.height) - textPadding[0] - textPadding[2], 0); + + if (textStyle.width !== width || textStyle.height !== height) { + textEl.setStyle({ + width: width, + height: height + }); + } + }; + + textStyle.truncateMinChar = 2; + textStyle.lineOverflow = 'truncate'; + addDrillDownIcon(textStyle, upperLabelRect, thisLayout); + var textEmphasisState = textEl.getState('emphasis'); + addDrillDownIcon(textEmphasisState ? textEmphasisState.style : null, upperLabelRect, thisLayout); + } + + function addDrillDownIcon(style, upperLabelRect, thisLayout) { + var text = style ? style.text : null; + + if (!upperLabelRect && thisLayout.isLeafRoot && text != null) { + var iconChar = seriesModel.get('drillDownIcon', true); + style.text = iconChar ? iconChar + ' ' + text : text; + } + } + + function giveGraphic(storageName, Ctor, depth, z) { + var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex]; + var lasts = lastsForAnimation[storageName]; + + if (element) { + // Remove from oldStorage + oldStorage[storageName][oldRawIndex] = null; + prepareAnimationWhenHasOld(lasts, element); + } // If invisible and no old element, do not create new element (for optimizing). + else if (!thisInvisible) { + element = new Ctor(); + + if (element instanceof Displayable) { + element.z2 = calculateZ2(depth, z); + } + + prepareAnimationWhenNoOld(lasts, element); + } // Set to thisStorage + + + return thisStorage[storageName][thisRawIndex] = element; + } + + function prepareAnimationWhenHasOld(lasts, element) { + var lastCfg = lasts[thisRawIndex] = {}; + + if (element instanceof Group$1) { + lastCfg.oldX = element.x; + lastCfg.oldY = element.y; + } else { + lastCfg.oldShape = extend({}, element.shape); + } + } // If a element is new, we need to find the animation start point carefully, + // otherwise it will looks strange when 'zoomToNode'. + + + function prepareAnimationWhenNoOld(lasts, element) { + var lastCfg = lasts[thisRawIndex] = {}; + var parentNode = thisNode.parentNode; + var isGroup = element instanceof Group; + + if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) { + var parentOldX = 0; + var parentOldY = 0; // New nodes appear from right-bottom corner in 'zoomToNode' animation. + // For convenience, get old bounding rect from background. + + var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()]; + + if (!reRoot && parentOldBg && parentOldBg.oldShape) { + parentOldX = parentOldBg.oldShape.width; + parentOldY = parentOldBg.oldShape.height; + } // When no parent old shape found, its parent is new too, + // so we can just use {x:0, y:0}. + + + if (isGroup) { + lastCfg.oldX = 0; + lastCfg.oldY = parentOldY; + } else { + lastCfg.oldShape = { + x: parentOldX, + y: parentOldY, + width: 0, + height: 0 + }; + } + } // Fade in, user can be aware that these nodes are new. + + + lastCfg.fadein = !isGroup; + } + } // We can not set all backgroud with the same z, Because the behaviour of + // drill down and roll up differ background creation sequence from tree + // hierarchy sequence, which cause that lowser background element overlap + // upper ones. So we calculate z based on depth. + // Moreover, we try to shrink down z interval to [0, 1] to avoid that + // treemap with large z overlaps other components. + + + function calculateZ2(depth, z2InLevel) { + return depth * Z2_BASE + z2InLevel; + } + + var each$3 = each; + var isObject$3 = isObject; + var CATEGORY_DEFAULT_VISUAL_INDEX = -1; + + var VisualMapping = + /** @class */ + function () { + function VisualMapping(option) { + var mappingMethod = option.mappingMethod; + var visualType = option.type; + var thisOption = this.option = clone(option); + this.type = visualType; + this.mappingMethod = mappingMethod; + this._normalizeData = normalizers[mappingMethod]; + var visualHandler = VisualMapping.visualHandlers[visualType]; + this.applyVisual = visualHandler.applyVisual; + this.getColorMapper = visualHandler.getColorMapper; + this._normalizedToVisual = visualHandler._normalizedToVisual[mappingMethod]; + + if (mappingMethod === 'piecewise') { + normalizeVisualRange(thisOption); + preprocessForPiecewise(thisOption); + } else if (mappingMethod === 'category') { + thisOption.categories ? preprocessForSpecifiedCategory(thisOption) // categories is ordinal when thisOption.categories not specified, + // which need no more preprocess except normalize visual. + : normalizeVisualRange(thisOption, true); + } else { + // mappingMethod === 'linear' or 'fixed' + assert(mappingMethod !== 'linear' || thisOption.dataExtent); + normalizeVisualRange(thisOption); + } + } + + VisualMapping.prototype.mapValueToVisual = function (value) { + var normalized = this._normalizeData(value); + + return this._normalizedToVisual(normalized, value); + }; + + VisualMapping.prototype.getNormalizer = function () { + return bind(this._normalizeData, this); + }; + /** + * List available visual types. + * + * @public + * @return {Array.} + */ + + + VisualMapping.listVisualTypes = function () { + return keys(VisualMapping.visualHandlers); + }; // /** + // * @public + // */ + // static addVisualHandler(name, handler) { + // visualHandlers[name] = handler; + // } + + /** + * @public + */ + + + VisualMapping.isValidType = function (visualType) { + return VisualMapping.visualHandlers.hasOwnProperty(visualType); + }; + /** + * Convinent method. + * Visual can be Object or Array or primary type. + */ + + + VisualMapping.eachVisual = function (visual, callback, context) { + if (isObject(visual)) { + each(visual, callback, context); + } else { + callback.call(context, visual); + } + }; + + VisualMapping.mapVisual = function (visual, callback, context) { + var isPrimary; + var newVisual = isArray(visual) ? [] : isObject(visual) ? {} : (isPrimary = true, null); + VisualMapping.eachVisual(visual, function (v, key) { + var newVal = callback.call(context, v, key); + isPrimary ? newVisual = newVal : newVisual[key] = newVal; + }); + return newVisual; + }; + /** + * Retrieve visual properties from given object. + */ + + + VisualMapping.retrieveVisuals = function (obj) { + var ret = {}; + var hasVisual; + obj && each$3(VisualMapping.visualHandlers, function (h, visualType) { + if (obj.hasOwnProperty(visualType)) { + ret[visualType] = obj[visualType]; + hasVisual = true; + } + }); + return hasVisual ? ret : null; + }; + /** + * Give order to visual types, considering colorSaturation, colorAlpha depends on color. + * + * @public + * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...} + * IF Array, like: ['color', 'symbol', 'colorSaturation'] + * @return {Array.} Sorted visual types. + */ + + + VisualMapping.prepareVisualTypes = function (visualTypes) { + if (isArray(visualTypes)) { + visualTypes = visualTypes.slice(); + } else if (isObject$3(visualTypes)) { + var types_1 = []; + each$3(visualTypes, function (item, type) { + types_1.push(type); + }); + visualTypes = types_1; + } else { + return []; + } + + visualTypes.sort(function (type1, type2) { + // color should be front of colorSaturation, colorAlpha, ... + // symbol and symbolSize do not matter. + return type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0 ? 1 : -1; + }); + return visualTypes; + }; + /** + * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'. + * Other visuals are only depends on themself. + */ + + + VisualMapping.dependsOn = function (visualType1, visualType2) { + return visualType2 === 'color' ? !!(visualType1 && visualType1.indexOf(visualType2) === 0) : visualType1 === visualType2; + }; + /** + * @param value + * @param pieceList [{value: ..., interval: [min, max]}, ...] + * Always from small to big. + * @param findClosestWhenOutside Default to be false + * @return index + */ + + + VisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) { + var possibleI; + var abs = Infinity; // value has the higher priority. + + for (var i = 0, len = pieceList.length; i < len; i++) { + var pieceValue = pieceList[i].value; + + if (pieceValue != null) { + if (pieceValue === value // FIXME + // It is supposed to compare value according to value type of dimension, + // but currently value type can exactly be string or number. + // Compromise for numeric-like string (like '12'), especially + // in the case that visualMap.categories is ['22', '33']. + || typeof pieceValue === 'string' && pieceValue === value + '') { + return i; + } + + findClosestWhenOutside && updatePossible(pieceValue, i); + } + } + + for (var i = 0, len = pieceList.length; i < len; i++) { + var piece = pieceList[i]; + var interval = piece.interval; + var close_1 = piece.close; + + if (interval) { + if (interval[0] === -Infinity) { + if (littleThan(close_1[1], value, interval[1])) { + return i; + } + } else if (interval[1] === Infinity) { + if (littleThan(close_1[0], interval[0], value)) { + return i; + } + } else if (littleThan(close_1[0], interval[0], value) && littleThan(close_1[1], value, interval[1])) { + return i; + } + + findClosestWhenOutside && updatePossible(interval[0], i); + findClosestWhenOutside && updatePossible(interval[1], i); + } + } + + if (findClosestWhenOutside) { + return value === Infinity ? pieceList.length - 1 : value === -Infinity ? 0 : possibleI; + } + + function updatePossible(val, index) { + var newAbs = Math.abs(val - value); + + if (newAbs < abs) { + abs = newAbs; + possibleI = index; + } + } + }; + + VisualMapping.visualHandlers = { + color: { + applyVisual: makeApplyVisual('color'), + getColorMapper: function () { + var thisOption = this.option; + return bind(thisOption.mappingMethod === 'category' ? function (value, isNormalized) { + !isNormalized && (value = this._normalizeData(value)); + return doMapCategory.call(this, value); + } : function (value, isNormalized, out) { + // If output rgb array + // which will be much faster and useful in pixel manipulation + var returnRGBArray = !!out; + !isNormalized && (value = this._normalizeData(value)); + out = fastLerp(value, thisOption.parsedVisual, out); + return returnRGBArray ? out : stringify(out, 'rgba'); + }, this); + }, + _normalizedToVisual: { + linear: function (normalized) { + return stringify(fastLerp(normalized, this.option.parsedVisual), 'rgba'); + }, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + + if (result == null) { + result = stringify(fastLerp(normalized, this.option.parsedVisual), 'rgba'); + } + + return result; + }, + fixed: doMapFixed + } + }, + colorHue: makePartialColorVisualHandler(function (color$1, value) { + return modifyHSL(color$1, value); + }), + colorSaturation: makePartialColorVisualHandler(function (color$1, value) { + return modifyHSL(color$1, null, value); + }), + colorLightness: makePartialColorVisualHandler(function (color$1, value) { + return modifyHSL(color$1, null, null, value); + }), + colorAlpha: makePartialColorVisualHandler(function (color$1, value) { + return modifyAlpha(color$1, value); + }), + decal: { + applyVisual: makeApplyVisual('decal'), + _normalizedToVisual: { + linear: null, + category: doMapCategory, + piecewise: null, + fixed: null + } + }, + opacity: { + applyVisual: makeApplyVisual('opacity'), + _normalizedToVisual: createNormalizedToNumericVisual([0, 1]) + }, + liftZ: { + applyVisual: makeApplyVisual('liftZ'), + _normalizedToVisual: { + linear: doMapFixed, + category: doMapFixed, + piecewise: doMapFixed, + fixed: doMapFixed + } + }, + symbol: { + applyVisual: function (value, getter, setter) { + var symbolCfg = this.mapValueToVisual(value); + setter('symbol', symbolCfg); + }, + _normalizedToVisual: { + linear: doMapToArray, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + + if (result == null) { + result = doMapToArray.call(this, normalized); + } + + return result; + }, + fixed: doMapFixed + } + }, + symbolSize: { + applyVisual: makeApplyVisual('symbolSize'), + _normalizedToVisual: createNormalizedToNumericVisual([0, 1]) + } + }; + return VisualMapping; + }(); + + function preprocessForPiecewise(thisOption) { + var pieceList = thisOption.pieceList; + thisOption.hasSpecialVisual = false; + each(pieceList, function (piece, index) { + piece.originIndex = index; // piece.visual is "result visual value" but not + // a visual range, so it does not need to be normalized. + + if (piece.visual != null) { + thisOption.hasSpecialVisual = true; + } + }); + } + + function preprocessForSpecifiedCategory(thisOption) { + // Hash categories. + var categories = thisOption.categories; + var categoryMap = thisOption.categoryMap = {}; + var visual = thisOption.visual; + each$3(categories, function (cate, index) { + categoryMap[cate] = index; + }); // Process visual map input. + + if (!isArray(visual)) { + var visualArr_1 = []; + + if (isObject(visual)) { + each$3(visual, function (v, cate) { + var index = categoryMap[cate]; + visualArr_1[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v; + }); + } else { + // Is primary type, represents default visual. + visualArr_1[CATEGORY_DEFAULT_VISUAL_INDEX] = visual; + } + + visual = setVisualToOption(thisOption, visualArr_1); + } // Remove categories that has no visual, + // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX. + + + for (var i = categories.length - 1; i >= 0; i--) { + if (visual[i] == null) { + delete categoryMap[categories[i]]; + categories.pop(); + } + } + } + + function normalizeVisualRange(thisOption, isCategory) { + var visual = thisOption.visual; + var visualArr = []; + + if (isObject(visual)) { + each$3(visual, function (v) { + visualArr.push(v); + }); + } else if (visual != null) { + visualArr.push(visual); + } + + var doNotNeedPair = { + color: 1, + symbol: 1 + }; + + if (!isCategory && visualArr.length === 1 && !doNotNeedPair.hasOwnProperty(thisOption.type)) { + // Do not care visualArr.length === 0, which is illegal. + visualArr[1] = visualArr[0]; + } + + setVisualToOption(thisOption, visualArr); + } + + function makePartialColorVisualHandler(applyValue) { + return { + applyVisual: function (value, getter, setter) { + // Only used in HSL + var colorChannel = this.mapValueToVisual(value); // Must not be array value + + setter('color', applyValue(getter('color'), colorChannel)); + }, + _normalizedToVisual: createNormalizedToNumericVisual([0, 1]) + }; + } + + function doMapToArray(normalized) { + var visual = this.option.visual; + return visual[Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true))] || {}; // TODO {}? + } + + function makeApplyVisual(visualType) { + return function (value, getter, setter) { + setter(visualType, this.mapValueToVisual(value)); + }; + } + + function doMapCategory(normalized) { + var visual = this.option.visual; + return visual[this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX ? normalized % visual.length : normalized]; + } + + function doMapFixed() { + // visual will be convert to array. + return this.option.visual[0]; + } + /** + * Create mapped to numeric visual + */ + + + function createNormalizedToNumericVisual(sourceExtent) { + return { + linear: function (normalized) { + return linearMap(normalized, sourceExtent, this.option.visual, true); + }, + category: doMapCategory, + piecewise: function (normalized, value) { + var result = getSpecifiedVisual.call(this, value); + + if (result == null) { + result = linearMap(normalized, sourceExtent, this.option.visual, true); + } + + return result; + }, + fixed: doMapFixed + }; + } + + function getSpecifiedVisual(value) { + var thisOption = this.option; + var pieceList = thisOption.pieceList; + + if (thisOption.hasSpecialVisual) { + var pieceIndex = VisualMapping.findPieceIndex(value, pieceList); + var piece = pieceList[pieceIndex]; + + if (piece && piece.visual) { + return piece.visual[this.type]; + } + } + } + + function setVisualToOption(thisOption, visualArr) { + thisOption.visual = visualArr; + + if (thisOption.type === 'color') { + thisOption.parsedVisual = map(visualArr, function (item) { + return parse(item); + }); + } + + return visualArr; + } + /** + * Normalizers by mapping methods. + */ + + + var normalizers = { + linear: function (value) { + return linearMap(value, this.option.dataExtent, [0, 1], true); + }, + piecewise: function (value) { + var pieceList = this.option.pieceList; + var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true); + + if (pieceIndex != null) { + return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true); + } + }, + category: function (value) { + var index = this.option.categories ? this.option.categoryMap[value] : value; // ordinal value + + return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index; + }, + fixed: noop + }; + + function littleThan(close, a, b) { + return close ? a <= b : a < b; + } + + var ITEM_STYLE_NORMAL = 'itemStyle'; + var inner$9 = makeInner(); + var treemapVisual = { + seriesType: 'treemap', + reset: function (seriesModel) { + var tree = seriesModel.getData().tree; + var root = tree.root; + + if (root.isRemoved()) { + return; + } + + travelTree(root, // Visual should calculate from tree root but not view root. + {}, seriesModel.getViewRoot().getAncestors(), seriesModel); + } + }; + + function travelTree(node, designatedVisual, viewRootAncestors, seriesModel) { + var nodeModel = node.getModel(); + var nodeLayout = node.getLayout(); + var data = node.hostTree.data; // Optimize + + if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) { + return; + } + + var nodeItemStyleModel = nodeModel.getModel(ITEM_STYLE_NORMAL); + var visuals = buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel); + var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, 'style'); // calculate border color + + var borderColor = nodeItemStyleModel.get('borderColor'); + var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation'); + var thisNodeColor; + + if (borderColorSaturation != null) { + // For performance, do not always execute 'calculateColor'. + thisNodeColor = calculateColor(visuals); + borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor); + } + + existsStyle.stroke = borderColor; + var viewChildren = node.viewChildren; + + if (!viewChildren || !viewChildren.length) { + thisNodeColor = calculateColor(visuals); // Apply visual to this node. + + existsStyle.fill = thisNodeColor; + } else { + var mapping_1 = buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren); // Designate visual to children. + + each(viewChildren, function (child, index) { + // If higher than viewRoot, only ancestors of viewRoot is needed to visit. + if (child.depth >= viewRootAncestors.length || child === viewRootAncestors[child.depth]) { + var childVisual = mapVisual(nodeModel, visuals, child, index, mapping_1, seriesModel); + travelTree(child, childVisual, viewRootAncestors, seriesModel); + } + }); + } + } + + function buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel) { + var visuals = extend({}, designatedVisual); + var designatedVisualItemStyle = seriesModel.designatedVisualItemStyle; + each(['color', 'colorAlpha', 'colorSaturation'], function (visualName) { + // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel + designatedVisualItemStyle[visualName] = designatedVisual[visualName]; + var val = nodeItemStyleModel.get(visualName); + designatedVisualItemStyle[visualName] = null; + val != null && (visuals[visualName] = val); + }); + return visuals; + } + + function calculateColor(visuals) { + var color = getValueVisualDefine(visuals, 'color'); + + if (color) { + var colorAlpha = getValueVisualDefine(visuals, 'colorAlpha'); + var colorSaturation = getValueVisualDefine(visuals, 'colorSaturation'); + + if (colorSaturation) { + color = modifyHSL(color, null, null, colorSaturation); + } + + if (colorAlpha) { + color = modifyAlpha(color, colorAlpha); + } + + return color; + } + } + + function calculateBorderColor(borderColorSaturation, thisNodeColor) { + return thisNodeColor != null // Can only be string + ? modifyHSL(thisNodeColor, null, null, borderColorSaturation) : null; + } + + function getValueVisualDefine(visuals, name) { + var value = visuals[name]; + + if (value != null && value !== 'none') { + return value; + } + } + + function buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren) { + if (!viewChildren || !viewChildren.length) { + return; + } + + var rangeVisual = getRangeVisual(nodeModel, 'color') || visuals.color != null && visuals.color !== 'none' && (getRangeVisual(nodeModel, 'colorAlpha') || getRangeVisual(nodeModel, 'colorSaturation')); + + if (!rangeVisual) { + return; + } + + var visualMin = nodeModel.get('visualMin'); + var visualMax = nodeModel.get('visualMax'); + var dataExtent = nodeLayout.dataExtent.slice(); + visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin); + visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax); + var colorMappingBy = nodeModel.get('colorMappingBy'); + var opt = { + type: rangeVisual.name, + dataExtent: dataExtent, + visual: rangeVisual.range + }; + + if (opt.type === 'color' && (colorMappingBy === 'index' || colorMappingBy === 'id')) { + opt.mappingMethod = 'category'; + opt.loop = true; // categories is ordinal, so do not set opt.categories. + } else { + opt.mappingMethod = 'linear'; + } + + var mapping = new VisualMapping(opt); + inner$9(mapping).drColorMappingBy = colorMappingBy; + return mapping; + } // Notice: If we dont have the attribute 'colorRange', but only use + // attribute 'color' to represent both concepts of 'colorRange' and 'color', + // (It means 'colorRange' when 'color' is Array, means 'color' when not array), + // this problem will be encountered: + // If a level-1 node dont have children, and its siblings has children, + // and colorRange is set on level-1, then the node can not be colored. + // So we separate 'colorRange' and 'color' to different attributes. + + + function getRangeVisual(nodeModel, name) { + // 'colorRange', 'colorARange', 'colorSRange'. + // If not exsits on this node, fetch from levels and series. + var range = nodeModel.get(name); + return isArray(range) && range.length ? { + name: name, + range: range + } : null; + } + + function mapVisual(nodeModel, visuals, child, index, mapping, seriesModel) { + var childVisuals = extend({}, visuals); + + if (mapping) { + // Only support color, colorAlpha, colorSaturation. + var mappingType = mapping.type; + var colorMappingBy = mappingType === 'color' && inner$9(mapping).drColorMappingBy; + var value = colorMappingBy === 'index' ? index : colorMappingBy === 'id' ? seriesModel.mapIdToIndex(child.getId()) : child.getValue(nodeModel.get('visualDimension')); + childVisuals[mappingType] = mapping.mapValueToVisual(value); + } + + return childVisuals; + } + + var mathMax$7 = Math.max; + var mathMin$7 = Math.min; + var retrieveValue = retrieve; + var each$4 = each; + var PATH_BORDER_WIDTH = ['itemStyle', 'borderWidth']; + var PATH_GAP_WIDTH = ['itemStyle', 'gapWidth']; + var PATH_UPPER_LABEL_SHOW = ['upperLabel', 'show']; + var PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'height']; + /** + * @public + */ + + var treemapLayout = { + seriesType: 'treemap', + reset: function (seriesModel, ecModel, api, payload) { + // Layout result in each node: + // {x, y, width, height, area, borderWidth} + var ecWidth = api.getWidth(); + var ecHeight = api.getHeight(); + var seriesOption = seriesModel.option; + var layoutInfo = getLayoutRect(seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + var size = seriesOption.size || []; // Compatible with ec2. + + var containerWidth = parsePercent$1(retrieveValue(layoutInfo.width, size[0]), ecWidth); + var containerHeight = parsePercent$1(retrieveValue(layoutInfo.height, size[1]), ecHeight); // Fetch payload info. + + var payloadType = payload && payload.type; + var types = ['treemapZoomToNode', 'treemapRootToNode']; + var targetInfo = retrieveTargetInfo(payload, types, seriesModel); + var rootRect = payloadType === 'treemapRender' || payloadType === 'treemapMove' ? payload.rootRect : null; + var viewRoot = seriesModel.getViewRoot(); + var viewAbovePath = getPathToRoot(viewRoot); + + if (payloadType !== 'treemapMove') { + var rootSize = payloadType === 'treemapZoomToNode' ? estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) : rootRect ? [rootRect.width, rootRect.height] : [containerWidth, containerHeight]; + var sort_1 = seriesOption.sort; + + if (sort_1 && sort_1 !== 'asc' && sort_1 !== 'desc') { + // Default to be desc order. + sort_1 = 'desc'; + } + + var options = { + squareRatio: seriesOption.squareRatio, + sort: sort_1, + leafDepth: seriesOption.leafDepth + }; // layout should be cleared because using updateView but not update. + + viewRoot.hostTree.clearLayouts(); // TODO + // optimize: if out of view clip, do not layout. + // But take care that if do not render node out of view clip, + // how to calculate start po + + var viewRootLayout_1 = { + x: 0, + y: 0, + width: rootSize[0], + height: rootSize[1], + area: rootSize[0] * rootSize[1] + }; + viewRoot.setLayout(viewRootLayout_1); + squarify(viewRoot, options, false, 0); // Supplement layout. + + viewRootLayout_1 = viewRoot.getLayout(); + each$4(viewAbovePath, function (node, index) { + var childValue = (viewAbovePath[index + 1] || viewRoot).getValue(); + node.setLayout(extend({ + dataExtent: [childValue, childValue], + borderWidth: 0, + upperHeight: 0 + }, viewRootLayout_1)); + }); + } + + var treeRoot = seriesModel.getData().tree.root; + treeRoot.setLayout(calculateRootPosition(layoutInfo, rootRect, targetInfo), true); + seriesModel.setLayoutInfo(layoutInfo); // FIXME + // 现在没有clip功能,暂时取ec高宽。 + + prunning(treeRoot, // Transform to base element coordinate system. + new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight), viewAbovePath, viewRoot, 0); + } + }; + /** + * Layout treemap with squarify algorithm. + * The original presentation of this algorithm + * was made by Mark Bruls, Kees Huizing, and Jarke J. van Wijk + * . + * The implementation of this algorithm was originally copied from "d3.js" + * + * with some modifications made for this program. + * See the license statement at the head of this file. + * + * @protected + * @param {module:echarts/data/Tree~TreeNode} node + * @param {Object} options + * @param {string} options.sort 'asc' or 'desc' + * @param {number} options.squareRatio + * @param {boolean} hideChildren + * @param {number} depth + */ + + function squarify(node, options, hideChildren, depth) { + var width; + var height; + + if (node.isRemoved()) { + return; + } + + var thisLayout = node.getLayout(); + width = thisLayout.width; + height = thisLayout.height; // Considering border and gap + + var nodeModel = node.getModel(); + var borderWidth = nodeModel.get(PATH_BORDER_WIDTH); + var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2; + var upperLabelHeight = getUpperLabelHeight(nodeModel); + var upperHeight = Math.max(borderWidth, upperLabelHeight); + var layoutOffset = borderWidth - halfGapWidth; + var layoutOffsetUpper = upperHeight - halfGapWidth; + node.setLayout({ + borderWidth: borderWidth, + upperHeight: upperHeight, + upperLabelHeight: upperLabelHeight + }, true); + width = mathMax$7(width - 2 * layoutOffset, 0); + height = mathMax$7(height - layoutOffset - layoutOffsetUpper, 0); + var totalArea = width * height; + var viewChildren = initChildren(node, nodeModel, totalArea, options, hideChildren, depth); + + if (!viewChildren.length) { + return; + } + + var rect = { + x: layoutOffset, + y: layoutOffsetUpper, + width: width, + height: height + }; + var rowFixedLength = mathMin$7(width, height); + var best = Infinity; // the best row score so far + + var row = []; + row.area = 0; + + for (var i = 0, len = viewChildren.length; i < len;) { + var child = viewChildren[i]; + row.push(child); + row.area += child.getLayout().area; + var score = worst(row, rowFixedLength, options.squareRatio); // continue with this orientation + + if (score <= best) { + i++; + best = score; + } // abort, and try a different orientation + else { + row.area -= row.pop().getLayout().area; + position(row, rowFixedLength, rect, halfGapWidth, false); + rowFixedLength = mathMin$7(rect.width, rect.height); + row.length = row.area = 0; + best = Infinity; + } + } + + if (row.length) { + position(row, rowFixedLength, rect, halfGapWidth, true); + } + + if (!hideChildren) { + var childrenVisibleMin = nodeModel.get('childrenVisibleMin'); + + if (childrenVisibleMin != null && totalArea < childrenVisibleMin) { + hideChildren = true; + } + } + + for (var i = 0, len = viewChildren.length; i < len; i++) { + squarify(viewChildren[i], options, hideChildren, depth + 1); + } + } + /** + * Set area to each child, and calculate data extent for visual coding. + */ + + + function initChildren(node, nodeModel, totalArea, options, hideChildren, depth) { + var viewChildren = node.children || []; + var orderBy = options.sort; + orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null); + var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth; // leafDepth has higher priority. + + if (hideChildren && !overLeafDepth) { + return node.viewChildren = []; + } // Sort children, order by desc. + + + viewChildren = filter(viewChildren, function (child) { + return !child.isRemoved(); + }); + sort$1(viewChildren, orderBy); + var info = statistic(nodeModel, viewChildren, orderBy); + + if (info.sum === 0) { + return node.viewChildren = []; + } + + info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren); + + if (info.sum === 0) { + return node.viewChildren = []; + } // Set area to each child. + + + for (var i = 0, len = viewChildren.length; i < len; i++) { + var area = viewChildren[i].getValue() / info.sum * totalArea; // Do not use setLayout({...}, true), because it is needed to clear last layout. + + viewChildren[i].setLayout({ + area: area + }); + } + + if (overLeafDepth) { + viewChildren.length && node.setLayout({ + isLeafRoot: true + }, true); + viewChildren.length = 0; + } + + node.viewChildren = viewChildren; + node.setLayout({ + dataExtent: info.dataExtent + }, true); + return viewChildren; + } + /** + * Consider 'visibleMin'. Modify viewChildren and get new sum. + */ + + + function filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) { + // visibleMin is not supported yet when no option.sort. + if (!orderBy) { + return sum; + } + + var visibleMin = nodeModel.get('visibleMin'); + var len = orderedChildren.length; + var deletePoint = len; // Always travel from little value to big value. + + for (var i = len - 1; i >= 0; i--) { + var value = orderedChildren[orderBy === 'asc' ? len - i - 1 : i].getValue(); + + if (value / sum * totalArea < visibleMin) { + deletePoint = i; + sum -= value; + } + } + + orderBy === 'asc' ? orderedChildren.splice(0, len - deletePoint) : orderedChildren.splice(deletePoint, len - deletePoint); + return sum; + } + /** + * Sort + */ + + + function sort$1(viewChildren, orderBy) { + if (orderBy) { + viewChildren.sort(function (a, b) { + var diff = orderBy === 'asc' ? a.getValue() - b.getValue() : b.getValue() - a.getValue(); + return diff === 0 ? orderBy === 'asc' ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex : diff; + }); + } + + return viewChildren; + } + /** + * Statistic + */ + + + function statistic(nodeModel, children, orderBy) { + // Calculate sum. + var sum = 0; + + for (var i = 0, len = children.length; i < len; i++) { + sum += children[i].getValue(); + } // Statistic data extent for latter visual coding. + // Notice: data extent should be calculate based on raw children + // but not filtered view children, otherwise visual mapping will not + // be stable when zoom (where children is filtered by visibleMin). + + + var dimension = nodeModel.get('visualDimension'); + var dataExtent; // The same as area dimension. + + if (!children || !children.length) { + dataExtent = [NaN, NaN]; + } else if (dimension === 'value' && orderBy) { + dataExtent = [children[children.length - 1].getValue(), children[0].getValue()]; + orderBy === 'asc' && dataExtent.reverse(); + } // Other dimension. + else { + dataExtent = [Infinity, -Infinity]; + each$4(children, function (child) { + var value = child.getValue(dimension); + value < dataExtent[0] && (dataExtent[0] = value); + value > dataExtent[1] && (dataExtent[1] = value); + }); + } + + return { + sum: sum, + dataExtent: dataExtent + }; + } + /** + * Computes the score for the specified row, + * as the worst aspect ratio. + */ + + + function worst(row, rowFixedLength, ratio) { + var areaMax = 0; + var areaMin = Infinity; + + for (var i = 0, area = void 0, len = row.length; i < len; i++) { + area = row[i].getLayout().area; + + if (area) { + area < areaMin && (areaMin = area); + area > areaMax && (areaMax = area); + } + } + + var squareArea = row.area * row.area; + var f = rowFixedLength * rowFixedLength * ratio; + return squareArea ? mathMax$7(f * areaMax / squareArea, squareArea / (f * areaMin)) : Infinity; + } + /** + * Positions the specified row of nodes. Modifies `rect`. + */ + + + function position(row, rowFixedLength, rect, halfGapWidth, flush) { + // When rowFixedLength === rect.width, + // it is horizontal subdivision, + // rowFixedLength is the width of the subdivision, + // rowOtherLength is the height of the subdivision, + // and nodes will be positioned from left to right. + // wh[idx0WhenH] means: when horizontal, + // wh[idx0WhenH] => wh[0] => 'width'. + // xy[idx1WhenH] => xy[1] => 'y'. + var idx0WhenH = rowFixedLength === rect.width ? 0 : 1; + var idx1WhenH = 1 - idx0WhenH; + var xy = ['x', 'y']; + var wh = ['width', 'height']; + var last = rect[xy[idx0WhenH]]; + var rowOtherLength = rowFixedLength ? row.area / rowFixedLength : 0; + + if (flush || rowOtherLength > rect[wh[idx1WhenH]]) { + rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow + } + + for (var i = 0, rowLen = row.length; i < rowLen; i++) { + var node = row[i]; + var nodeLayout = {}; + var step = rowOtherLength ? node.getLayout().area / rowOtherLength : 0; + var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax$7(rowOtherLength - 2 * halfGapWidth, 0); // We use Math.max/min to avoid negative width/height when considering gap width. + + var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last; + var modWH = i === rowLen - 1 || remain < step ? remain : step; + var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax$7(modWH - 2 * halfGapWidth, 0); + nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin$7(halfGapWidth, wh1 / 2); + nodeLayout[xy[idx0WhenH]] = last + mathMin$7(halfGapWidth, wh0 / 2); + last += modWH; + node.setLayout(nodeLayout, true); + } + + rect[xy[idx1WhenH]] += rowOtherLength; + rect[wh[idx1WhenH]] -= rowOtherLength; + } // Return [containerWidth, containerHeight] as default. + + + function estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) { + // If targetInfo.node exists, we zoom to the node, + // so estimate whold width and heigth by target node. + var currNode = (targetInfo || {}).node; + var defaultSize = [containerWidth, containerHeight]; + + if (!currNode || currNode === viewRoot) { + return defaultSize; + } + + var parent; + var viewArea = containerWidth * containerHeight; + var area = viewArea * seriesModel.option.zoomToNodeRatio; + + while (parent = currNode.parentNode) { + // jshint ignore:line + var sum = 0; + var siblings = parent.children; + + for (var i = 0, len = siblings.length; i < len; i++) { + sum += siblings[i].getValue(); + } + + var currNodeValue = currNode.getValue(); + + if (currNodeValue === 0) { + return defaultSize; + } + + area *= sum / currNodeValue; // Considering border, suppose aspect ratio is 1. + + var parentModel = parent.getModel(); + var borderWidth = parentModel.get(PATH_BORDER_WIDTH); + var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel)); + area += 4 * borderWidth * borderWidth + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5); + area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER); + currNode = parent; + } + + area < viewArea && (area = viewArea); + var scale = Math.pow(area / viewArea, 0.5); + return [containerWidth * scale, containerHeight * scale]; + } // Root postion base on coord of containerGroup + + + function calculateRootPosition(layoutInfo, rootRect, targetInfo) { + if (rootRect) { + return { + x: rootRect.x, + y: rootRect.y + }; + } + + var defaultPosition = { + x: 0, + y: 0 + }; + + if (!targetInfo) { + return defaultPosition; + } // If targetInfo is fetched by 'retrieveTargetInfo', + // old tree and new tree are the same tree, + // so the node still exists and we can visit it. + + + var targetNode = targetInfo.node; + var layout = targetNode.getLayout(); + + if (!layout) { + return defaultPosition; + } // Transform coord from local to container. + + + var targetCenter = [layout.width / 2, layout.height / 2]; + var node = targetNode; + + while (node) { + var nodeLayout = node.getLayout(); + targetCenter[0] += nodeLayout.x; + targetCenter[1] += nodeLayout.y; + node = node.parentNode; + } + + return { + x: layoutInfo.width / 2 - targetCenter[0], + y: layoutInfo.height / 2 - targetCenter[1] + }; + } // Mark nodes visible for prunning when visual coding and rendering. + // Prunning depends on layout and root position, so we have to do it after layout. + + + function prunning(node, clipRect, viewAbovePath, viewRoot, depth) { + var nodeLayout = node.getLayout(); + var nodeInViewAbovePath = viewAbovePath[depth]; + var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node; + + if (nodeInViewAbovePath && !isAboveViewRoot || depth === viewAbovePath.length && node !== viewRoot) { + return; + } + + node.setLayout({ + // isInView means: viewRoot sub tree + viewAbovePath + isInView: true, + // invisible only means: outside view clip so that the node can not + // see but still layout for animation preparation but not render. + invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout), + isAboveViewRoot: isAboveViewRoot + }, true); // Transform to child coordinate. + + var childClipRect = new BoundingRect(clipRect.x - nodeLayout.x, clipRect.y - nodeLayout.y, clipRect.width, clipRect.height); + each$4(node.viewChildren || [], function (child) { + prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1); + }); + } + + function getUpperLabelHeight(model) { + return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0; + } + + function install$c(registers) { + registers.registerSeriesModel(TreemapSeriesModel); + registers.registerChartView(TreemapView); + registers.registerVisual(treemapVisual); + registers.registerLayout(treemapLayout); + installTreemapAction(registers); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function categoryFilter(ecModel) { + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + + if (!legendModels || !legendModels.length) { + return; + } + + ecModel.eachSeriesByType('graph', function (graphSeries) { + var categoriesData = graphSeries.getCategoriesData(); + var graph = graphSeries.getGraph(); + var data = graph.data; + var categoryNames = categoriesData.mapArray(categoriesData.getName); + data.filterSelf(function (idx) { + var model = data.getItemModel(idx); + var category = model.getShallow('category'); + + if (category != null) { + if (typeof category === 'number') { + category = categoryNames[category]; + } // If in any legend component the status is not selected. + + + for (var i = 0; i < legendModels.length; i++) { + if (!legendModels[i].isSelected(category)) { + return false; + } + } + } + + return true; + }); + }); + } + + function categoryVisual(ecModel) { + var paletteScope = {}; + ecModel.eachSeriesByType('graph', function (seriesModel) { + var categoriesData = seriesModel.getCategoriesData(); + var data = seriesModel.getData(); + var categoryNameIdxMap = {}; + categoriesData.each(function (idx) { + var name = categoriesData.getName(idx); // Add prefix to avoid conflict with Object.prototype. + + categoryNameIdxMap['ec-' + name] = idx; + var itemModel = categoriesData.getItemModel(idx); + var style = itemModel.getModel('itemStyle').getItemStyle(); + + if (!style.fill) { + // Get color from palette. + style.fill = seriesModel.getColorFromPalette(name, paletteScope); + } + + categoriesData.setItemVisual(idx, 'style', style); + var symbolVisualList = ['symbol', 'symbolSize', 'symbolKeepAspect']; + + for (var i = 0; i < symbolVisualList.length; i++) { + var symbolVisual = itemModel.getShallow(symbolVisualList[i], true); + + if (symbolVisual != null) { + categoriesData.setItemVisual(idx, symbolVisualList[i], symbolVisual); + } + } + }); // Assign category color to visual + + if (categoriesData.count()) { + data.each(function (idx) { + var model = data.getItemModel(idx); + var categoryIdx = model.getShallow('category'); + + if (categoryIdx != null) { + if (typeof categoryIdx === 'string') { + categoryIdx = categoryNameIdxMap['ec-' + categoryIdx]; + } + + var categoryStyle = categoriesData.getItemVisual(categoryIdx, 'style'); + var style = data.ensureUniqueItemVisual(idx, 'style'); + extend(style, categoryStyle); + var visualList = ['symbol', 'symbolSize', 'symbolKeepAspect']; + + for (var i = 0; i < visualList.length; i++) { + data.setItemVisual(idx, visualList[i], categoriesData.getItemVisual(categoryIdx, visualList[i])); + } + } + }); + } + }); + } + + function normalize$2(a) { + if (!(a instanceof Array)) { + a = [a, a]; + } + + return a; + } + + function graphEdgeVisual(ecModel) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + var graph = seriesModel.getGraph(); + var edgeData = seriesModel.getEdgeData(); + var symbolType = normalize$2(seriesModel.get('edgeSymbol')); + var symbolSize = normalize$2(seriesModel.get('edgeSymbolSize')); // const colorQuery = ['lineStyle', 'color'] as const; + // const opacityQuery = ['lineStyle', 'opacity'] as const; + + edgeData.setVisual('fromSymbol', symbolType && symbolType[0]); + edgeData.setVisual('toSymbol', symbolType && symbolType[1]); + edgeData.setVisual('fromSymbolSize', symbolSize && symbolSize[0]); + edgeData.setVisual('toSymbolSize', symbolSize && symbolSize[1]); + edgeData.setVisual('style', seriesModel.getModel('lineStyle').getLineStyle()); + edgeData.each(function (idx) { + var itemModel = edgeData.getItemModel(idx); + var edge = graph.getEdgeByIndex(idx); + var symbolType = normalize$2(itemModel.getShallow('symbol', true)); + var symbolSize = normalize$2(itemModel.getShallow('symbolSize', true)); // Edge visual must after node visual + + var style = itemModel.getModel('lineStyle').getLineStyle(); + var existsStyle = edgeData.ensureUniqueItemVisual(idx, 'style'); + extend(existsStyle, style); + + switch (existsStyle.stroke) { + case 'source': + { + var nodeStyle = edge.node1.getVisual('style'); + existsStyle.stroke = nodeStyle && nodeStyle.fill; + break; + } + + case 'target': + { + var nodeStyle = edge.node2.getVisual('style'); + existsStyle.stroke = nodeStyle && nodeStyle.fill; + break; + } + } + + symbolType[0] && edge.setVisual('fromSymbol', symbolType[0]); + symbolType[1] && edge.setVisual('toSymbol', symbolType[1]); + symbolSize[0] && edge.setVisual('fromSymbolSize', symbolSize[0]); + symbolSize[1] && edge.setVisual('toSymbolSize', symbolSize[1]); + }); + }); + } + + var KEY_DELIMITER = '-->'; + /** + * params handler + * @param {module:echarts/model/SeriesModel} seriesModel + * @returns {*} + */ + + var getAutoCurvenessParams = function (seriesModel) { + return seriesModel.get('autoCurveness') || null; + }; + /** + * Generate a list of edge curvatures, 20 is the default + * @param {module:echarts/model/SeriesModel} seriesModel + * @param {number} appendLength + * @return 20 => [0, -0.2, 0.2, -0.4, 0.4, -0.6, 0.6, -0.8, 0.8, -1, 1, -1.2, 1.2, -1.4, 1.4, -1.6, 1.6, -1.8, 1.8, -2] + */ + + + var createCurveness = function (seriesModel, appendLength) { + var autoCurvenessParmas = getAutoCurvenessParams(seriesModel); + var length = 20; + var curvenessList = []; // handler the function set + + if (typeof autoCurvenessParmas === 'number') { + length = autoCurvenessParmas; + } else if (isArray(autoCurvenessParmas)) { + seriesModel.__curvenessList = autoCurvenessParmas; + return; + } // append length + + + if (appendLength > length) { + length = appendLength; + } // make sure the length is even + + + var len = length % 2 ? length + 2 : length + 3; + curvenessList = []; + + for (var i = 0; i < len; i++) { + curvenessList.push((i % 2 ? i + 1 : i) / 10 * (i % 2 ? -1 : 1)); + } + + seriesModel.__curvenessList = curvenessList; + }; + /** + * Create different cache key data in the positive and negative directions, in order to set the curvature later + * @param {number|string|module:echarts/data/Graph.Node} n1 + * @param {number|string|module:echarts/data/Graph.Node} n2 + * @param {module:echarts/model/SeriesModel} seriesModel + * @returns {string} key + */ + + + var getKeyOfEdges = function (n1, n2, seriesModel) { + var source = [n1.id, n1.dataIndex].join('.'); + var target = [n2.id, n2.dataIndex].join('.'); + return [seriesModel.uid, source, target].join(KEY_DELIMITER); + }; + /** + * get opposite key + * @param {string} key + * @returns {string} + */ + + + var getOppositeKey = function (key) { + var keys = key.split(KEY_DELIMITER); + return [keys[0], keys[2], keys[1]].join(KEY_DELIMITER); + }; + /** + * get edgeMap with key + * @param edge + * @param {module:echarts/model/SeriesModel} seriesModel + */ + + + var getEdgeFromMap = function (edge, seriesModel) { + var key = getKeyOfEdges(edge.node1, edge.node2, seriesModel); + return seriesModel.__edgeMap[key]; + }; + /** + * calculate all cases total length + * @param edge + * @param seriesModel + * @returns {number} + */ + + + var getTotalLengthBetweenNodes = function (edge, seriesModel) { + var len = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node1, edge.node2, seriesModel), seriesModel); + var lenV = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node2, edge.node1, seriesModel), seriesModel); + return len + lenV; + }; + /** + * + * @param key + */ + + + var getEdgeMapLengthWithKey = function (key, seriesModel) { + var edgeMap = seriesModel.__edgeMap; + return edgeMap[key] ? edgeMap[key].length : 0; + }; + /** + * Count the number of edges between the same two points, used to obtain the curvature table and the parity of the edge + * @see /graph/GraphSeries.js@getInitialData + * @param {module:echarts/model/SeriesModel} seriesModel + */ + + + function initCurvenessList(seriesModel) { + if (!getAutoCurvenessParams(seriesModel)) { + return; + } + + seriesModel.__curvenessList = []; + seriesModel.__edgeMap = {}; // calc the array of curveness List + + createCurveness(seriesModel); + } + /** + * set edgeMap with key + * @param {number|string|module:echarts/data/Graph.Node} n1 + * @param {number|string|module:echarts/data/Graph.Node} n2 + * @param {module:echarts/model/SeriesModel} seriesModel + * @param {number} index + */ + + function createEdgeMapForCurveness(n1, n2, seriesModel, index) { + if (!getAutoCurvenessParams(seriesModel)) { + return; + } + + var key = getKeyOfEdges(n1, n2, seriesModel); + var edgeMap = seriesModel.__edgeMap; + var oppositeEdges = edgeMap[getOppositeKey(key)]; // set direction + + if (edgeMap[key] && !oppositeEdges) { + edgeMap[key].isForward = true; + } else if (oppositeEdges && edgeMap[key]) { + oppositeEdges.isForward = true; + edgeMap[key].isForward = false; + } + + edgeMap[key] = edgeMap[key] || []; + edgeMap[key].push(index); + } + /** + * get curvature for edge + * @param edge + * @param {module:echarts/model/SeriesModel} seriesModel + * @param index + */ + + function getCurvenessForEdge(edge, seriesModel, index, needReverse) { + var autoCurvenessParams = getAutoCurvenessParams(seriesModel); + var isArrayParam = isArray(autoCurvenessParams); + + if (!autoCurvenessParams) { + return null; + } + + var edgeArray = getEdgeFromMap(edge, seriesModel); + + if (!edgeArray) { + return null; + } + + var edgeIndex = -1; + + for (var i = 0; i < edgeArray.length; i++) { + if (edgeArray[i] === index) { + edgeIndex = i; + break; + } + } // if totalLen is Longer createCurveness + + + var totalLen = getTotalLengthBetweenNodes(edge, seriesModel); + createCurveness(seriesModel, totalLen); + edge.lineStyle = edge.lineStyle || {}; // if is opposite edge, must set curvenss to opposite number + + var curKey = getKeyOfEdges(edge.node1, edge.node2, seriesModel); + var curvenessList = seriesModel.__curvenessList; // if pass array no need parity + + var parityCorrection = isArrayParam ? 0 : totalLen % 2 ? 0 : 1; + + if (!edgeArray.isForward) { + // the opposite edge show outside + var oppositeKey = getOppositeKey(curKey); + var len = getEdgeMapLengthWithKey(oppositeKey, seriesModel); + var resValue = curvenessList[edgeIndex + len + parityCorrection]; // isNeedReverse, simple, force type need reverse the curveness in the junction of the forword and the opposite + + if (needReverse) { + // set as array may make the parity handle with the len of opposite + if (isArrayParam) { + if (autoCurvenessParams && autoCurvenessParams[0] === 0) { + return (len + parityCorrection) % 2 ? resValue : -resValue; + } else { + return ((len % 2 ? 0 : 1) + parityCorrection) % 2 ? resValue : -resValue; + } + } else { + return (len + parityCorrection) % 2 ? resValue : -resValue; + } + } else { + return curvenessList[edgeIndex + len + parityCorrection]; + } + } else { + return curvenessList[parityCorrection + edgeIndex]; + } + } + + function simpleLayout(seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && coordSys.type !== 'view') { + return; + } + + var graph = seriesModel.getGraph(); + graph.eachNode(function (node) { + var model = node.getModel(); + node.setLayout([+model.get('x'), +model.get('y')]); + }); + simpleLayoutEdge(graph, seriesModel); + } + function simpleLayoutEdge(graph, seriesModel) { + graph.eachEdge(function (edge, index) { + var curveness = retrieve3(edge.getModel().get(['lineStyle', 'curveness']), -getCurvenessForEdge(edge, seriesModel, index, true), 0); + var p1 = clone$1(edge.node1.getLayout()); + var p2 = clone$1(edge.node2.getLayout()); + var points = [p1, p2]; + + if (+curveness) { + points.push([(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness]); + } + + edge.setLayout(points); + }); + } + + function graphSimpleLayout(ecModel, api) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + var layout = seriesModel.get('layout'); + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && coordSys.type !== 'view') { + var data_1 = seriesModel.getData(); + var dimensions_1 = []; + each(coordSys.dimensions, function (coordDim) { + dimensions_1 = dimensions_1.concat(data_1.mapDimensionsAll(coordDim)); + }); + + for (var dataIndex = 0; dataIndex < data_1.count(); dataIndex++) { + var value = []; + var hasValue = false; + + for (var i = 0; i < dimensions_1.length; i++) { + var val = data_1.get(dimensions_1[i], dataIndex); + + if (!isNaN(val)) { + hasValue = true; + } + + value.push(val); + } + + if (hasValue) { + data_1.setItemLayout(dataIndex, coordSys.dataToPoint(value)); + } else { + // Also {Array.}, not undefined to avoid if...else... statement + data_1.setItemLayout(dataIndex, [NaN, NaN]); + } + } + + simpleLayoutEdge(data_1.graph, seriesModel); + } else if (!layout || layout === 'none') { + simpleLayout(seriesModel); + } + }); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function getNodeGlobalScale(seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys.type !== 'view') { + return 1; + } + + var nodeScaleRatio = seriesModel.option.nodeScaleRatio; + var groupZoom = coordSys.scaleX; // Scale node when zoom changes + + var roamZoom = coordSys.getZoom(); + var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1; + return nodeScale / groupZoom; + } + function getSymbolSize(node) { + var symbolSize = node.getVisual('symbolSize'); + + if (symbolSize instanceof Array) { + symbolSize = (symbolSize[0] + symbolSize[1]) / 2; + } + + return +symbolSize; + } + + var PI$6 = Math.PI; + var _symbolRadiansHalf = []; + /** + * `basedOn` can be: + * 'value': + * This layout is not accurate and have same bad case. For example, + * if the min value is very smaller than the max value, the nodes + * with the min value probably overlap even though there is enough + * space to layout them. So we only use this approach in the as the + * init layout of the force layout. + * FIXME + * Probably we do not need this method any more but use + * `basedOn: 'symbolSize'` in force layout if + * delay its init operations to GraphView. + * 'symbolSize': + * This approach work only if all of the symbol size calculated. + * That is, the progressive rendering is not applied to graph. + * FIXME + * If progressive rendering is applied to graph some day, + * probably we have to use `basedOn: 'value'`. + */ + + function circularLayout(seriesModel, basedOn) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && coordSys.type !== 'view') { + return; + } + + var rect = coordSys.getBoundingRect(); + var nodeData = seriesModel.getData(); + var graph = nodeData.graph; + var cx = rect.width / 2 + rect.x; + var cy = rect.height / 2 + rect.y; + var r = Math.min(rect.width, rect.height) / 2; + var count = nodeData.count(); + nodeData.setLayout({ + cx: cx, + cy: cy + }); + + if (!count) { + return; + } + + _layoutNodesBasedOn[basedOn](seriesModel, graph, nodeData, r, cx, cy, count); + + graph.eachEdge(function (edge, index) { + var curveness = retrieve3(edge.getModel().get(['lineStyle', 'curveness']), getCurvenessForEdge(edge, seriesModel, index), 0); + var p1 = clone$1(edge.node1.getLayout()); + var p2 = clone$1(edge.node2.getLayout()); + var cp1; + var x12 = (p1[0] + p2[0]) / 2; + var y12 = (p1[1] + p2[1]) / 2; + + if (+curveness) { + curveness *= 3; + cp1 = [cx * curveness + x12 * (1 - curveness), cy * curveness + y12 * (1 - curveness)]; + } + + edge.setLayout([p1, p2, cp1]); + }); + } + var _layoutNodesBasedOn = { + value: function (seriesModel, graph, nodeData, r, cx, cy, count) { + var angle = 0; + var sum = nodeData.getSum('value'); + var unitAngle = Math.PI * 2 / (sum || count); + graph.eachNode(function (node) { + var value = node.getValue('value'); + var radianHalf = unitAngle * (sum ? value : 1) / 2; + angle += radianHalf; + node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]); + angle += radianHalf; + }); + }, + symbolSize: function (seriesModel, graph, nodeData, r, cx, cy, count) { + var sumRadian = 0; + _symbolRadiansHalf.length = count; + var nodeScale = getNodeGlobalScale(seriesModel); + graph.eachNode(function (node) { + var symbolSize = getSymbolSize(node); // Normally this case will not happen, but we still add + // some the defensive code (2px is an arbitrary value). + + isNaN(symbolSize) && (symbolSize = 2); + symbolSize < 0 && (symbolSize = 0); + symbolSize *= nodeScale; + var symbolRadianHalf = Math.asin(symbolSize / 2 / r); // when `symbolSize / 2` is bigger than `r`. + + isNaN(symbolRadianHalf) && (symbolRadianHalf = PI$6 / 2); + _symbolRadiansHalf[node.dataIndex] = symbolRadianHalf; + sumRadian += symbolRadianHalf * 2; + }); + var halfRemainRadian = (2 * PI$6 - sumRadian) / count / 2; + var angle = 0; + graph.eachNode(function (node) { + var radianHalf = halfRemainRadian + _symbolRadiansHalf[node.dataIndex]; + angle += radianHalf; + node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]); + angle += radianHalf; + }); + } + }; + + function graphCircularLayout(ecModel) { + ecModel.eachSeriesByType('graph', function (seriesModel) { + if (seriesModel.get('layout') === 'circular') { + circularLayout(seriesModel, 'symbolSize'); + } + }); + } + + var scaleAndAdd$1 = scaleAndAdd; // function adjacentNode(n, e) { + // return e.n1 === n ? e.n2 : e.n1; + // } + + function forceLayout(inNodes, inEdges, opts) { + var nodes = inNodes; + var edges = inEdges; + var rect = opts.rect; + var width = rect.width; + var height = rect.height; + var center = [rect.x + width / 2, rect.y + height / 2]; // let scale = opts.scale || 1; + + var gravity = opts.gravity == null ? 0.1 : opts.gravity; // for (let i = 0; i < edges.length; i++) { + // let e = edges[i]; + // let n1 = e.n1; + // let n2 = e.n2; + // n1.edges = n1.edges || []; + // n2.edges = n2.edges || []; + // n1.edges.push(e); + // n2.edges.push(e); + // } + // Init position + + for (var i = 0; i < nodes.length; i++) { + var n = nodes[i]; + + if (!n.p) { + n.p = create(width * (Math.random() - 0.5) + center[0], height * (Math.random() - 0.5) + center[1]); + } + + n.pp = clone$1(n.p); + n.edges = null; + } // Formula in 'Graph Drawing by Force-directed Placement' + // let k = scale * Math.sqrt(width * height / nodes.length); + // let k2 = k * k; + + + var initialFriction = opts.friction == null ? 0.6 : opts.friction; + var friction = initialFriction; + var beforeStepCallback; + var afterStepCallback; + return { + warmUp: function () { + friction = initialFriction * 0.8; + }, + setFixed: function (idx) { + nodes[idx].fixed = true; + }, + setUnfixed: function (idx) { + nodes[idx].fixed = false; + }, + + /** + * Before step hook + */ + beforeStep: function (cb) { + beforeStepCallback = cb; + }, + + /** + * After step hook + */ + afterStep: function (cb) { + afterStepCallback = cb; + }, + + /** + * Some formulas were originally copied from "d3.js" + * https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/layout/force.js + * with some modifications made for this project. + * See the license statement at the head of this file. + */ + step: function (cb) { + beforeStepCallback && beforeStepCallback(nodes, edges); + var v12 = []; + var nLen = nodes.length; + + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + + if (e.ignoreForceLayout) { + continue; + } + + var n1 = e.n1; + var n2 = e.n2; + sub(v12, n2.p, n1.p); + var d = len(v12) - e.d; + var w = n2.w / (n1.w + n2.w); + + if (isNaN(w)) { + w = 0; + } + + normalize(v12, v12); + !n1.fixed && scaleAndAdd$1(n1.p, n1.p, v12, w * d * friction); + !n2.fixed && scaleAndAdd$1(n2.p, n2.p, v12, -(1 - w) * d * friction); + } // Gravity + + + for (var i = 0; i < nLen; i++) { + var n = nodes[i]; + + if (!n.fixed) { + sub(v12, center, n.p); // let d = vec2.len(v12); + // vec2.scale(v12, v12, 1 / d); + // let gravityFactor = gravity; + + scaleAndAdd$1(n.p, n.p, v12, gravity * friction); + } + } // Repulsive + // PENDING + + + for (var i = 0; i < nLen; i++) { + var n1 = nodes[i]; + + for (var j = i + 1; j < nLen; j++) { + var n2 = nodes[j]; + sub(v12, n2.p, n1.p); + var d = len(v12); + + if (d === 0) { + // Random repulse + set(v12, Math.random() - 0.5, Math.random() - 0.5); + d = 1; + } + + var repFact = (n1.rep + n2.rep) / d / d; + !n1.fixed && scaleAndAdd$1(n1.pp, n1.pp, v12, repFact); + !n2.fixed && scaleAndAdd$1(n2.pp, n2.pp, v12, -repFact); + } + } + + var v = []; + + for (var i = 0; i < nLen; i++) { + var n = nodes[i]; + + if (!n.fixed) { + sub(v, n.p, n.pp); + scaleAndAdd$1(n.p, n.p, v, friction); + copy(n.pp, n.p); + } + } + + friction = friction * 0.992; + var finished = friction < 0.01; + afterStepCallback && afterStepCallback(nodes, edges, finished); + cb && cb(finished); + } + }; + } + + function graphForceLayout(ecModel) { + ecModel.eachSeriesByType('graph', function (graphSeries) { + var coordSys = graphSeries.coordinateSystem; + + if (coordSys && coordSys.type !== 'view') { + return; + } + + if (graphSeries.get('layout') === 'force') { + var preservedPoints_1 = graphSeries.preservedPoints || {}; + var graph_1 = graphSeries.getGraph(); + var nodeData_1 = graph_1.data; + var edgeData = graph_1.edgeData; + var forceModel = graphSeries.getModel('force'); + var initLayout = forceModel.get('initLayout'); + + if (graphSeries.preservedPoints) { + nodeData_1.each(function (idx) { + var id = nodeData_1.getId(idx); + nodeData_1.setItemLayout(idx, preservedPoints_1[id] || [NaN, NaN]); + }); + } else if (!initLayout || initLayout === 'none') { + simpleLayout(graphSeries); + } else if (initLayout === 'circular') { + circularLayout(graphSeries, 'value'); + } + + var nodeDataExtent_1 = nodeData_1.getDataExtent('value'); + var edgeDataExtent_1 = edgeData.getDataExtent('value'); // let edgeDataExtent = edgeData.getDataExtent('value'); + + var repulsion = forceModel.get('repulsion'); + var edgeLength = forceModel.get('edgeLength'); + var repulsionArr_1 = isArray(repulsion) ? repulsion : [repulsion, repulsion]; + var edgeLengthArr_1 = isArray(edgeLength) ? edgeLength : [edgeLength, edgeLength]; // Larger value has smaller length + + edgeLengthArr_1 = [edgeLengthArr_1[1], edgeLengthArr_1[0]]; + var nodes_1 = nodeData_1.mapArray('value', function (value, idx) { + var point = nodeData_1.getItemLayout(idx); + var rep = linearMap(value, nodeDataExtent_1, repulsionArr_1); + + if (isNaN(rep)) { + rep = (repulsionArr_1[0] + repulsionArr_1[1]) / 2; + } + + return { + w: rep, + rep: rep, + fixed: nodeData_1.getItemModel(idx).get('fixed'), + p: !point || isNaN(point[0]) || isNaN(point[1]) ? null : point + }; + }); + var edges = edgeData.mapArray('value', function (value, idx) { + var edge = graph_1.getEdgeByIndex(idx); + var d = linearMap(value, edgeDataExtent_1, edgeLengthArr_1); + + if (isNaN(d)) { + d = (edgeLengthArr_1[0] + edgeLengthArr_1[1]) / 2; + } + + var edgeModel = edge.getModel(); + var curveness = retrieve3(edge.getModel().get(['lineStyle', 'curveness']), -getCurvenessForEdge(edge, graphSeries, idx, true), 0); + return { + n1: nodes_1[edge.node1.dataIndex], + n2: nodes_1[edge.node2.dataIndex], + d: d, + curveness: curveness, + ignoreForceLayout: edgeModel.get('ignoreForceLayout') + }; + }); // let coordSys = graphSeries.coordinateSystem; + + var rect = coordSys.getBoundingRect(); + var forceInstance = forceLayout(nodes_1, edges, { + rect: rect, + gravity: forceModel.get('gravity'), + friction: forceModel.get('friction') + }); + forceInstance.beforeStep(function (nodes, edges) { + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i].fixed) { + // Write back to layout instance + copy(nodes[i].p, graph_1.getNodeByIndex(i).getLayout()); + } + } + }); + forceInstance.afterStep(function (nodes, edges, stopped) { + for (var i = 0, l = nodes.length; i < l; i++) { + if (!nodes[i].fixed) { + graph_1.getNodeByIndex(i).setLayout(nodes[i].p); + } + + preservedPoints_1[nodeData_1.getId(i)] = nodes[i].p; + } + + for (var i = 0, l = edges.length; i < l; i++) { + var e = edges[i]; + var edge = graph_1.getEdgeByIndex(i); + var p1 = e.n1.p; + var p2 = e.n2.p; + var points = edge.getLayout(); + points = points ? points.slice() : []; + points[0] = points[0] || []; + points[1] = points[1] || []; + copy(points[0], p1); + copy(points[1], p2); + + if (+e.curveness) { + points[2] = [(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness]; + } + + edge.setLayout(points); + } + }); + graphSeries.forceLayout = forceInstance; + graphSeries.preservedPoints = preservedPoints_1; // Step to get the layout + + forceInstance.step(); + } else { + // Remove prev injected forceLayout instance + graphSeries.forceLayout = null; + } + }); + } + + function getViewRect$2(seriesModel, api, aspect) { + var option = extend(seriesModel.getBoxLayoutParams(), { + aspect: aspect + }); + return getLayoutRect(option, { + width: api.getWidth(), + height: api.getHeight() + }); + } + + function createViewCoordSys(ecModel, api) { + var viewList = []; + ecModel.eachSeriesByType('graph', function (seriesModel) { + var coordSysType = seriesModel.get('coordinateSystem'); + + if (!coordSysType || coordSysType === 'view') { + var data_1 = seriesModel.getData(); + var positions = data_1.mapArray(function (idx) { + var itemModel = data_1.getItemModel(idx); + return [+itemModel.get('x'), +itemModel.get('y')]; + }); + var min = []; + var max = []; + fromPoints(positions, min, max); // If width or height is 0 + + if (max[0] - min[0] === 0) { + max[0] += 1; + min[0] -= 1; + } + + if (max[1] - min[1] === 0) { + max[1] += 1; + min[1] -= 1; + } + + var aspect = (max[0] - min[0]) / (max[1] - min[1]); // FIXME If get view rect after data processed? + + var viewRect = getViewRect$2(seriesModel, api, aspect); // Position may be NaN, use view rect instead + + if (isNaN(aspect)) { + min = [viewRect.x, viewRect.y]; + max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height]; + } + + var bbWidth = max[0] - min[0]; + var bbHeight = max[1] - min[1]; + var viewWidth = viewRect.width; + var viewHeight = viewRect.height; + var viewCoordSys = seriesModel.coordinateSystem = new View(); + viewCoordSys.zoomLimit = seriesModel.get('scaleLimit'); + viewCoordSys.setBoundingRect(min[0], min[1], bbWidth, bbHeight); + viewCoordSys.setViewRect(viewRect.x, viewRect.y, viewWidth, viewHeight); // Update roam info + + viewCoordSys.setCenter(seriesModel.get('center')); + viewCoordSys.setZoom(seriesModel.get('zoom')); + viewList.push(viewCoordSys); + } + }); + return viewList; + } + + var straightLineProto = Line.prototype; + var bezierCurveProto = BezierCurve.prototype; + + var StraightLineShape = + /** @class */ + function () { + function StraightLineShape() { + // Start point + this.x1 = 0; + this.y1 = 0; // End point + + this.x2 = 0; + this.y2 = 0; + this.percent = 1; + } + + return StraightLineShape; + }(); + + var CurveShape = + /** @class */ + function (_super) { + __extends(CurveShape, _super); + + function CurveShape() { + return _super !== null && _super.apply(this, arguments) || this; + } + + return CurveShape; + }(StraightLineShape); + + function isStraightLine(shape) { + return isNaN(+shape.cpx1) || isNaN(+shape.cpy1); + } + + var ECLinePath = + /** @class */ + function (_super) { + __extends(ECLinePath, _super); + + function ECLinePath(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'ec-line'; + return _this; + } + + ECLinePath.prototype.getDefaultStyle = function () { + return { + stroke: '#000', + fill: null + }; + }; + + ECLinePath.prototype.getDefaultShape = function () { + return new StraightLineShape(); + }; + + ECLinePath.prototype.buildPath = function (ctx, shape) { + if (isStraightLine(shape)) { + straightLineProto.buildPath.call(this, ctx, shape); + } else { + bezierCurveProto.buildPath.call(this, ctx, shape); + } + }; + + ECLinePath.prototype.pointAt = function (t) { + if (isStraightLine(this.shape)) { + return straightLineProto.pointAt.call(this, t); + } else { + return bezierCurveProto.pointAt.call(this, t); + } + }; + + ECLinePath.prototype.tangentAt = function (t) { + var shape = this.shape; + var p = isStraightLine(shape) ? [shape.x2 - shape.x1, shape.y2 - shape.y1] : bezierCurveProto.tangentAt.call(this, t); + return normalize(p, p); + }; + + return ECLinePath; + }(Path); + + var SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol']; + + function makeSymbolTypeKey(symbolCategory) { + return '_' + symbolCategory + 'Type'; + } + /** + * @inner + */ + + + function createSymbol$1(name, lineData, idx) { + var symbolType = lineData.getItemVisual(idx, name); + + if (!symbolType || symbolType === 'none') { + return; + } + + var symbolSize = lineData.getItemVisual(idx, name + 'Size'); + var symbolRotate = lineData.getItemVisual(idx, name + 'Rotate'); + var symbolOffset = lineData.getItemVisual(idx, name + 'Offset'); + var symbolKeepAspect = lineData.getItemVisual(idx, name + 'KeepAspect'); + var symbolSizeArr = normalizeSymbolSize(symbolSize); + var symbolOffsetArr = normalizeSymbolOffset(symbolOffset || 0, symbolSizeArr); + var symbolPath = createSymbol(symbolType, -symbolSizeArr[0] / 2 + symbolOffsetArr[0], -symbolSizeArr[1] / 2 + symbolOffsetArr[1], symbolSizeArr[0], symbolSizeArr[1], null, symbolKeepAspect); + symbolPath.__specifiedRotation = symbolRotate == null || isNaN(symbolRotate) ? void 0 : +symbolRotate * Math.PI / 180 || 0; + symbolPath.name = name; + return symbolPath; + } + + function createLine(points) { + var line = new ECLinePath({ + name: 'line', + subPixelOptimize: true + }); + setLinePoints(line.shape, points); + return line; + } + + function setLinePoints(targetShape, points) { + targetShape.x1 = points[0][0]; + targetShape.y1 = points[0][1]; + targetShape.x2 = points[1][0]; + targetShape.y2 = points[1][1]; + targetShape.percent = 1; + var cp1 = points[2]; + + if (cp1) { + targetShape.cpx1 = cp1[0]; + targetShape.cpy1 = cp1[1]; + } else { + targetShape.cpx1 = NaN; + targetShape.cpy1 = NaN; + } + } + + var Line$1 = + /** @class */ + function (_super) { + __extends(Line, _super); + + function Line(lineData, idx, seriesScope) { + var _this = _super.call(this) || this; + + _this._createLine(lineData, idx, seriesScope); + + return _this; + } + + Line.prototype._createLine = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + var linePoints = lineData.getItemLayout(idx); + var line = createLine(linePoints); + line.shape.percent = 0; + initProps(line, { + shape: { + percent: 1 + } + }, seriesModel, idx); + this.add(line); + each(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbol = createSymbol$1(symbolCategory, lineData, idx); // symbols must added after line to make sure + // it will be updated after line#update. + // Or symbol position and rotation update in line#beforeUpdate will be one frame slow + + this.add(symbol); + this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory); + }, this); + + this._updateCommonStl(lineData, idx, seriesScope); + }; // TODO More strict on the List type in parameters? + + + Line.prototype.updateData = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + var line = this.childOfName('line'); + var linePoints = lineData.getItemLayout(idx); + var target = { + shape: {} + }; + setLinePoints(target.shape, linePoints); + updateProps(line, target, seriesModel, idx); + each(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbolType = lineData.getItemVisual(idx, symbolCategory); + var key = makeSymbolTypeKey(symbolCategory); // Symbol changed + + if (this[key] !== symbolType) { + this.remove(this.childOfName(symbolCategory)); + var symbol = createSymbol$1(symbolCategory, lineData, idx); + this.add(symbol); + } + + this[key] = symbolType; + }, this); + + this._updateCommonStl(lineData, idx, seriesScope); + }; + + Line.prototype.getLinePath = function () { + return this.childAt(0); + }; + + Line.prototype._updateCommonStl = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + var line = this.childOfName('line'); + var emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle; + var blurLineStyle = seriesScope && seriesScope.blurLineStyle; + var selectLineStyle = seriesScope && seriesScope.selectLineStyle; + var labelStatesModels = seriesScope && seriesScope.labelStatesModels; // Optimization for large dataset + + if (!seriesScope || lineData.hasItemOption) { + var itemModel = lineData.getItemModel(idx); + emphasisLineStyle = itemModel.getModel(['emphasis', 'lineStyle']).getLineStyle(); + blurLineStyle = itemModel.getModel(['blur', 'lineStyle']).getLineStyle(); + selectLineStyle = itemModel.getModel(['select', 'lineStyle']).getLineStyle(); + labelStatesModels = getLabelStatesModels(itemModel); + } + + var lineStyle = lineData.getItemVisual(idx, 'style'); + var visualColor = lineStyle.stroke; + line.useStyle(lineStyle); + line.style.fill = null; + line.style.strokeNoScale = true; + line.ensureState('emphasis').style = emphasisLineStyle; + line.ensureState('blur').style = blurLineStyle; + line.ensureState('select').style = selectLineStyle; // Update symbol + + each(SYMBOL_CATEGORIES, function (symbolCategory) { + var symbol = this.childOfName(symbolCategory); + + if (symbol) { + // Share opacity and color with line. + symbol.setColor(visualColor); + symbol.style.opacity = lineStyle.opacity; + + for (var i = 0; i < SPECIAL_STATES.length; i++) { + var stateName = SPECIAL_STATES[i]; + var lineState = line.getState(stateName); + + if (lineState) { + var lineStateStyle = lineState.style || {}; + var state = symbol.ensureState(stateName); + var stateStyle = state.style || (state.style = {}); + + if (lineStateStyle.stroke != null) { + stateStyle[symbol.__isEmptyBrush ? 'stroke' : 'fill'] = lineStateStyle.stroke; + } + + if (lineStateStyle.opacity != null) { + stateStyle.opacity = lineStateStyle.opacity; + } + } + } + + symbol.markRedraw(); + } + }, this); + var rawVal = seriesModel.getRawValue(idx); + setLabelStyle(this, labelStatesModels, { + labelDataIndex: idx, + labelFetcher: { + getFormattedLabel: function (dataIndex, stateName) { + return seriesModel.getFormattedLabel(dataIndex, stateName, lineData.dataType); + } + }, + inheritColor: visualColor || '#000', + defaultOpacity: lineStyle.opacity, + defaultText: (rawVal == null ? lineData.getName(idx) : isFinite(rawVal) ? round(rawVal) : rawVal) + '' + }); + var label = this.getTextContent(); // Always set `textStyle` even if `normalStyle.text` is null, because default + // values have to be set on `normalStyle`. + + if (label) { + var labelNormalModel = labelStatesModels.normal; + label.__align = label.style.align; + label.__verticalAlign = label.style.verticalAlign; // 'start', 'middle', 'end' + + label.__position = labelNormalModel.get('position') || 'middle'; + var distance = labelNormalModel.get('distance'); + + if (!isArray(distance)) { + distance = [distance, distance]; + } + + label.__labelDistance = distance; + } + + this.setTextConfig({ + position: null, + local: true, + inside: false // Can't be inside for stroke element. + + }); + enableHoverEmphasis(this); + }; + + Line.prototype.highlight = function () { + enterEmphasis(this); + }; + + Line.prototype.downplay = function () { + leaveEmphasis(this); + }; + + Line.prototype.updateLayout = function (lineData, idx) { + this.setLinePoints(lineData.getItemLayout(idx)); + }; + + Line.prototype.setLinePoints = function (points) { + var linePath = this.childOfName('line'); + setLinePoints(linePath.shape, points); + linePath.dirty(); + }; + + Line.prototype.beforeUpdate = function () { + var lineGroup = this; + var symbolFrom = lineGroup.childOfName('fromSymbol'); + var symbolTo = lineGroup.childOfName('toSymbol'); + var label = lineGroup.getTextContent(); // Quick reject + + if (!symbolFrom && !symbolTo && (!label || label.ignore)) { + return; + } + + var invScale = 1; + var parentNode = this.parent; + + while (parentNode) { + if (parentNode.scaleX) { + invScale /= parentNode.scaleX; + } + + parentNode = parentNode.parent; + } + + var line = lineGroup.childOfName('line'); // If line not changed + // FIXME Parent scale changed + + if (!this.__dirty && !line.__dirty) { + return; + } + + var percent = line.shape.percent; + var fromPos = line.pointAt(0); + var toPos = line.pointAt(percent); + var d = sub([], toPos, fromPos); + normalize(d, d); + + function setSymbolRotation(symbol, percent) { + // Fix #12388 + // when symbol is set to be 'arrow' in markLine, + // symbolRotate value will be ignored, and compulsively use tangent angle. + // rotate by default if symbol rotation is not specified + var specifiedRotation = symbol.__specifiedRotation; + + if (specifiedRotation == null) { + var tangent = line.tangentAt(percent); + symbol.attr('rotation', (percent === 1 ? -1 : 1) * Math.PI / 2 - Math.atan2(tangent[1], tangent[0])); + } else { + symbol.attr('rotation', specifiedRotation); + } + } + + if (symbolFrom) { + symbolFrom.setPosition(fromPos); + setSymbolRotation(symbolFrom, 0); + symbolFrom.scaleX = symbolFrom.scaleY = invScale * percent; + symbolFrom.markRedraw(); + } + + if (symbolTo) { + symbolTo.setPosition(toPos); + setSymbolRotation(symbolTo, 1); + symbolTo.scaleX = symbolTo.scaleY = invScale * percent; + symbolTo.markRedraw(); + } + + if (label && !label.ignore) { + label.x = label.y = 0; + label.originX = label.originY = 0; + var textAlign = void 0; + var textVerticalAlign = void 0; + var distance = label.__labelDistance; + var distanceX = distance[0] * invScale; + var distanceY = distance[1] * invScale; + var halfPercent = percent / 2; + var tangent = line.tangentAt(halfPercent); + var n = [tangent[1], -tangent[0]]; + var cp = line.pointAt(halfPercent); + + if (n[1] > 0) { + n[0] = -n[0]; + n[1] = -n[1]; + } + + var dir = tangent[0] < 0 ? -1 : 1; + + if (label.__position !== 'start' && label.__position !== 'end') { + var rotation = -Math.atan2(tangent[1], tangent[0]); + + if (toPos[0] < fromPos[0]) { + rotation = Math.PI + rotation; + } + + label.rotation = rotation; + } + + var dy = void 0; + + switch (label.__position) { + case 'insideStartTop': + case 'insideMiddleTop': + case 'insideEndTop': + case 'middle': + dy = -distanceY; + textVerticalAlign = 'bottom'; + break; + + case 'insideStartBottom': + case 'insideMiddleBottom': + case 'insideEndBottom': + dy = distanceY; + textVerticalAlign = 'top'; + break; + + default: + dy = 0; + textVerticalAlign = 'middle'; + } + + switch (label.__position) { + case 'end': + label.x = d[0] * distanceX + toPos[0]; + label.y = d[1] * distanceY + toPos[1]; + textAlign = d[0] > 0.8 ? 'left' : d[0] < -0.8 ? 'right' : 'center'; + textVerticalAlign = d[1] > 0.8 ? 'top' : d[1] < -0.8 ? 'bottom' : 'middle'; + break; + + case 'start': + label.x = -d[0] * distanceX + fromPos[0]; + label.y = -d[1] * distanceY + fromPos[1]; + textAlign = d[0] > 0.8 ? 'right' : d[0] < -0.8 ? 'left' : 'center'; + textVerticalAlign = d[1] > 0.8 ? 'bottom' : d[1] < -0.8 ? 'top' : 'middle'; + break; + + case 'insideStartTop': + case 'insideStart': + case 'insideStartBottom': + label.x = distanceX * dir + fromPos[0]; + label.y = fromPos[1] + dy; + textAlign = tangent[0] < 0 ? 'right' : 'left'; + label.originX = -distanceX * dir; + label.originY = -dy; + break; + + case 'insideMiddleTop': + case 'insideMiddle': + case 'insideMiddleBottom': + case 'middle': + label.x = cp[0]; + label.y = cp[1] + dy; + textAlign = 'center'; + label.originY = -dy; + break; + + case 'insideEndTop': + case 'insideEnd': + case 'insideEndBottom': + label.x = -distanceX * dir + toPos[0]; + label.y = toPos[1] + dy; + textAlign = tangent[0] >= 0 ? 'right' : 'left'; + label.originX = distanceX * dir; + label.originY = -dy; + break; + } + + label.scaleX = label.scaleY = invScale; + label.setStyle({ + // Use the user specified text align and baseline first + verticalAlign: label.__verticalAlign || textVerticalAlign, + align: label.__align || textAlign + }); + } + }; + + return Line; + }(Group); + + var LineDraw = + /** @class */ + function () { + function LineDraw(LineCtor) { + this.group = new Group(); + this._LineCtor = LineCtor || Line$1; + } + + LineDraw.prototype.isPersistent = function () { + return true; + }; + + LineDraw.prototype.updateData = function (lineData) { + var _this = this; + + var lineDraw = this; + var group = lineDraw.group; + var oldLineData = lineDraw._lineData; + lineDraw._lineData = lineData; // There is no oldLineData only when first rendering or switching from + // stream mode to normal mode, where previous elements should be removed. + + if (!oldLineData) { + group.removeAll(); + } + + var seriesScope = makeSeriesScope$1(lineData); + lineData.diff(oldLineData).add(function (idx) { + _this._doAdd(lineData, idx, seriesScope); + }).update(function (newIdx, oldIdx) { + _this._doUpdate(oldLineData, lineData, oldIdx, newIdx, seriesScope); + }).remove(function (idx) { + group.remove(oldLineData.getItemGraphicEl(idx)); + }).execute(); + }; + + LineDraw.prototype.updateLayout = function () { + var lineData = this._lineData; // Do not support update layout in incremental mode. + + if (!lineData) { + return; + } + + lineData.eachItemGraphicEl(function (el, idx) { + el.updateLayout(lineData, idx); + }, this); + }; + + LineDraw.prototype.incrementalPrepareUpdate = function (lineData) { + this._seriesScope = makeSeriesScope$1(lineData); + this._lineData = null; + this.group.removeAll(); + }; + + LineDraw.prototype.incrementalUpdate = function (taskParams, lineData) { + function updateIncrementalAndHover(el) { + if (!el.isGroup && !isEffectObject(el)) { + el.incremental = true; + el.ensureState('emphasis').hoverLayer = true; + } + } + + for (var idx = taskParams.start; idx < taskParams.end; idx++) { + var itemLayout = lineData.getItemLayout(idx); + + if (lineNeedsDraw(itemLayout)) { + var el = new this._LineCtor(lineData, idx, this._seriesScope); + el.traverse(updateIncrementalAndHover); + this.group.add(el); + lineData.setItemGraphicEl(idx, el); + } + } + }; + + LineDraw.prototype.remove = function () { + this.group.removeAll(); + }; + + LineDraw.prototype._doAdd = function (lineData, idx, seriesScope) { + var itemLayout = lineData.getItemLayout(idx); + + if (!lineNeedsDraw(itemLayout)) { + return; + } + + var el = new this._LineCtor(lineData, idx, seriesScope); + lineData.setItemGraphicEl(idx, el); + this.group.add(el); + }; + + LineDraw.prototype._doUpdate = function (oldLineData, newLineData, oldIdx, newIdx, seriesScope) { + var itemEl = oldLineData.getItemGraphicEl(oldIdx); + + if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) { + this.group.remove(itemEl); + return; + } + + if (!itemEl) { + itemEl = new this._LineCtor(newLineData, newIdx, seriesScope); + } else { + itemEl.updateData(newLineData, newIdx, seriesScope); + } + + newLineData.setItemGraphicEl(newIdx, itemEl); + this.group.add(itemEl); + }; + + return LineDraw; + }(); + + function isEffectObject(el) { + return el.animators && el.animators.length > 0; + } + + function makeSeriesScope$1(lineData) { + var hostModel = lineData.hostModel; + return { + lineStyle: hostModel.getModel('lineStyle').getLineStyle(), + emphasisLineStyle: hostModel.getModel(['emphasis', 'lineStyle']).getLineStyle(), + blurLineStyle: hostModel.getModel(['blur', 'lineStyle']).getLineStyle(), + selectLineStyle: hostModel.getModel(['select', 'lineStyle']).getLineStyle(), + labelStatesModels: getLabelStatesModels(hostModel) + }; + } + + function isPointNaN(pt) { + return isNaN(pt[0]) || isNaN(pt[1]); + } + + function lineNeedsDraw(pts) { + return !isPointNaN(pts[0]) && !isPointNaN(pts[1]); + } + + var v1 = []; + var v2 = []; + var v3 = []; + var quadraticAt$1 = quadraticAt; + var v2DistSquare = distSquare; + var mathAbs$2 = Math.abs; + + function intersectCurveCircle(curvePoints, center, radius) { + var p0 = curvePoints[0]; + var p1 = curvePoints[1]; + var p2 = curvePoints[2]; + var d = Infinity; + var t; + var radiusSquare = radius * radius; + var interval = 0.1; + + for (var _t = 0.1; _t <= 0.9; _t += 0.1) { + v1[0] = quadraticAt$1(p0[0], p1[0], p2[0], _t); + v1[1] = quadraticAt$1(p0[1], p1[1], p2[1], _t); + var diff = mathAbs$2(v2DistSquare(v1, center) - radiusSquare); + + if (diff < d) { + d = diff; + t = _t; + } + } // Assume the segment is monotone,Find root through Bisection method + // At most 32 iteration + + + for (var i = 0; i < 32; i++) { + // let prev = t - interval; + var next = t + interval; // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev); + // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev); + + v2[0] = quadraticAt$1(p0[0], p1[0], p2[0], t); + v2[1] = quadraticAt$1(p0[1], p1[1], p2[1], t); + v3[0] = quadraticAt$1(p0[0], p1[0], p2[0], next); + v3[1] = quadraticAt$1(p0[1], p1[1], p2[1], next); + var diff = v2DistSquare(v2, center) - radiusSquare; + + if (mathAbs$2(diff) < 1e-2) { + break; + } // let prevDiff = v2DistSquare(v1, center) - radiusSquare; + + + var nextDiff = v2DistSquare(v3, center) - radiusSquare; + interval /= 2; + + if (diff < 0) { + if (nextDiff >= 0) { + t = t + interval; + } else { + t = t - interval; + } + } else { + if (nextDiff >= 0) { + t = t - interval; + } else { + t = t + interval; + } + } + } + + return t; + } // Adjust edge to avoid + + + function adjustEdge(graph, scale) { + var tmp0 = []; + var quadraticSubdivide$1 = quadraticSubdivide; + var pts = [[], [], []]; + var pts2 = [[], []]; + var v = []; + scale /= 2; + graph.eachEdge(function (edge, idx) { + var linePoints = edge.getLayout(); + var fromSymbol = edge.getVisual('fromSymbol'); + var toSymbol = edge.getVisual('toSymbol'); + + if (!linePoints.__original) { + linePoints.__original = [clone$1(linePoints[0]), clone$1(linePoints[1])]; + + if (linePoints[2]) { + linePoints.__original.push(clone$1(linePoints[2])); + } + } + + var originalPoints = linePoints.__original; // Quadratic curve + + if (linePoints[2] != null) { + copy(pts[0], originalPoints[0]); + copy(pts[1], originalPoints[2]); + copy(pts[2], originalPoints[1]); + + if (fromSymbol && fromSymbol !== 'none') { + var symbolSize = getSymbolSize(edge.node1); + var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale); // Subdivide and get the second + + quadraticSubdivide$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0); + pts[0][0] = tmp0[3]; + pts[1][0] = tmp0[4]; + quadraticSubdivide$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0); + pts[0][1] = tmp0[3]; + pts[1][1] = tmp0[4]; + } + + if (toSymbol && toSymbol !== 'none') { + var symbolSize = getSymbolSize(edge.node2); + var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale); // Subdivide and get the first + + quadraticSubdivide$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0); + pts[1][0] = tmp0[1]; + pts[2][0] = tmp0[2]; + quadraticSubdivide$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0); + pts[1][1] = tmp0[1]; + pts[2][1] = tmp0[2]; + } // Copy back to layout + + + copy(linePoints[0], pts[0]); + copy(linePoints[1], pts[2]); + copy(linePoints[2], pts[1]); + } // Line + else { + copy(pts2[0], originalPoints[0]); + copy(pts2[1], originalPoints[1]); + sub(v, pts2[1], pts2[0]); + normalize(v, v); + + if (fromSymbol && fromSymbol !== 'none') { + var symbolSize = getSymbolSize(edge.node1); + scaleAndAdd(pts2[0], pts2[0], v, symbolSize * scale); + } + + if (toSymbol && toSymbol !== 'none') { + var symbolSize = getSymbolSize(edge.node2); + scaleAndAdd(pts2[1], pts2[1], v, -symbolSize * scale); + } + + copy(linePoints[0], pts2[0]); + copy(linePoints[1], pts2[1]); + } + }); + } + + function isViewCoordSys(coordSys) { + return coordSys.type === 'view'; + } + + var GraphView = + /** @class */ + function (_super) { + __extends(GraphView, _super); + + function GraphView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = GraphView.type; + return _this; + } + + GraphView.prototype.init = function (ecModel, api) { + var symbolDraw = new SymbolDraw(); + var lineDraw = new LineDraw(); + var group = this.group; + this._controller = new RoamController(api.getZr()); + this._controllerHost = { + target: group + }; + group.add(symbolDraw.group); + group.add(lineDraw.group); + this._symbolDraw = symbolDraw; + this._lineDraw = lineDraw; + this._firstRender = true; + }; + + GraphView.prototype.render = function (seriesModel, ecModel, api) { + var _this = this; + + var coordSys = seriesModel.coordinateSystem; + this._model = seriesModel; + var symbolDraw = this._symbolDraw; + var lineDraw = this._lineDraw; + var group = this.group; + + if (isViewCoordSys(coordSys)) { + var groupNewProp = { + x: coordSys.x, + y: coordSys.y, + scaleX: coordSys.scaleX, + scaleY: coordSys.scaleY + }; + + if (this._firstRender) { + group.attr(groupNewProp); + } else { + updateProps(group, groupNewProp, seriesModel); + } + } // Fix edge contact point with node + + + adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel)); + var data = seriesModel.getData(); + symbolDraw.updateData(data); + var edgeData = seriesModel.getEdgeData(); // TODO: TYPE + + lineDraw.updateData(edgeData); + + this._updateNodeAndLinkScale(); + + this._updateController(seriesModel, ecModel, api); + + clearTimeout(this._layoutTimeout); + var forceLayout = seriesModel.forceLayout; + var layoutAnimation = seriesModel.get(['force', 'layoutAnimation']); + + if (forceLayout) { + this._startForceLayoutIteration(forceLayout, layoutAnimation); + } + + data.graph.eachNode(function (node) { + var idx = node.dataIndex; + var el = node.getGraphicEl(); + var itemModel = node.getModel(); // Update draggable + + el.off('drag').off('dragend'); + var draggable = itemModel.get('draggable'); + + if (draggable) { + el.on('drag', function () { + if (forceLayout) { + forceLayout.warmUp(); + !_this._layouting && _this._startForceLayoutIteration(forceLayout, layoutAnimation); + forceLayout.setFixed(idx); // Write position back to layout + + data.setItemLayout(idx, [el.x, el.y]); + } + }).on('dragend', function () { + if (forceLayout) { + forceLayout.setUnfixed(idx); + } + }); + } + + el.setDraggable(draggable && !!forceLayout); + var focus = itemModel.get(['emphasis', 'focus']); + + if (focus === 'adjacency') { + getECData(el).focus = node.getAdjacentDataIndices(); + } + }); + data.graph.eachEdge(function (edge) { + var el = edge.getGraphicEl(); + var focus = edge.getModel().get(['emphasis', 'focus']); + + if (focus === 'adjacency') { + getECData(el).focus = { + edge: [edge.dataIndex], + node: [edge.node1.dataIndex, edge.node2.dataIndex] + }; + } + }); + var circularRotateLabel = seriesModel.get('layout') === 'circular' && seriesModel.get(['circular', 'rotateLabel']); + var cx = data.getLayout('cx'); + var cy = data.getLayout('cy'); + data.eachItemGraphicEl(function (el, idx) { + var itemModel = data.getItemModel(idx); + var labelRotate = itemModel.get(['label', 'rotate']) || 0; + var symbolPath = el.getSymbolPath(); + + if (circularRotateLabel) { + var pos = data.getItemLayout(idx); + var rad = Math.atan2(pos[1] - cy, pos[0] - cx); + + if (rad < 0) { + rad = Math.PI * 2 + rad; + } + + var isLeft = pos[0] < cx; + + if (isLeft) { + rad = rad - Math.PI; + } + + var textPosition = isLeft ? 'left' : 'right'; + symbolPath.setTextConfig({ + rotation: -rad, + position: textPosition, + origin: 'center' + }); + var emphasisState = symbolPath.ensureState('emphasis'); + extend(emphasisState.textConfig || (emphasisState.textConfig = {}), { + position: textPosition + }); + } else { + symbolPath.setTextConfig({ + rotation: labelRotate *= Math.PI / 180 + }); + } + }); + this._firstRender = false; + }; + + GraphView.prototype.dispose = function () { + this._controller && this._controller.dispose(); + this._controllerHost = null; + }; + + GraphView.prototype._startForceLayoutIteration = function (forceLayout, layoutAnimation) { + var self = this; + + (function step() { + forceLayout.step(function (stopped) { + self.updateLayout(self._model); + (self._layouting = !stopped) && (layoutAnimation ? self._layoutTimeout = setTimeout(step, 16) : step()); + }); + })(); + }; + + GraphView.prototype._updateController = function (seriesModel, ecModel, api) { + var _this = this; + + var controller = this._controller; + var controllerHost = this._controllerHost; + var group = this.group; + controller.setPointerChecker(function (e, x, y) { + var rect = group.getBoundingRect(); + rect.applyTransform(group.transform); + return rect.contain(x, y) && !onIrrelevantElement(e, api, seriesModel); + }); + + if (!isViewCoordSys(seriesModel.coordinateSystem)) { + controller.disable(); + return; + } + + controller.enable(seriesModel.get('roam')); + controllerHost.zoomLimit = seriesModel.get('scaleLimit'); + controllerHost.zoom = seriesModel.coordinateSystem.getZoom(); + controller.off('pan').off('zoom').on('pan', function (e) { + updateViewOnPan(controllerHost, e.dx, e.dy); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'graphRoam', + dx: e.dx, + dy: e.dy + }); + }).on('zoom', function (e) { + updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY); + api.dispatchAction({ + seriesId: seriesModel.id, + type: 'graphRoam', + zoom: e.scale, + originX: e.originX, + originY: e.originY + }); + + _this._updateNodeAndLinkScale(); + + adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel)); + + _this._lineDraw.updateLayout(); // Only update label layout on zoom + + + api.updateLabelLayout(); + }); + }; + + GraphView.prototype._updateNodeAndLinkScale = function () { + var seriesModel = this._model; + var data = seriesModel.getData(); + var nodeScale = getNodeGlobalScale(seriesModel); + data.eachItemGraphicEl(function (el, idx) { + el.setSymbolScale(nodeScale); + }); + }; + + GraphView.prototype.updateLayout = function (seriesModel) { + adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel)); + + this._symbolDraw.updateLayout(); + + this._lineDraw.updateLayout(); + }; + + GraphView.prototype.remove = function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(); + this._lineDraw && this._lineDraw.remove(); + }; + + GraphView.type = 'graph'; + return GraphView; + }(ChartView); + + function generateNodeKey(id) { + return '_EC_' + id; + } + + var Graph = + /** @class */ + function () { + function Graph(directed) { + this.type = 'graph'; + this.nodes = []; + this.edges = []; + this._nodesMap = {}; + /** + * @type {Object.} + * @private + */ + + this._edgesMap = {}; + this._directed = directed || false; + } + /** + * If is directed graph + */ + + + Graph.prototype.isDirected = function () { + return this._directed; + }; + /** + * Add a new node + */ + + Graph.prototype.addNode = function (id, dataIndex) { + id = id == null ? '' + dataIndex : '' + id; + var nodesMap = this._nodesMap; + + if (nodesMap[generateNodeKey(id)]) { + if ("development" !== 'production') { + console.error('Graph nodes have duplicate name or id'); + } + + return; + } + + var node = new GraphNode(id, dataIndex); + node.hostGraph = this; + this.nodes.push(node); + nodesMap[generateNodeKey(id)] = node; + return node; + }; + /** + * Get node by data index + */ + + Graph.prototype.getNodeByIndex = function (dataIndex) { + var rawIdx = this.data.getRawIndex(dataIndex); + return this.nodes[rawIdx]; + }; + /** + * Get node by id + */ + + Graph.prototype.getNodeById = function (id) { + return this._nodesMap[generateNodeKey(id)]; + }; + /** + * Add a new edge + */ + + Graph.prototype.addEdge = function (n1, n2, dataIndex) { + var nodesMap = this._nodesMap; + var edgesMap = this._edgesMap; // PNEDING + + if (typeof n1 === 'number') { + n1 = this.nodes[n1]; + } + + if (typeof n2 === 'number') { + n2 = this.nodes[n2]; + } + + if (!(n1 instanceof GraphNode)) { + n1 = nodesMap[generateNodeKey(n1)]; + } + + if (!(n2 instanceof GraphNode)) { + n2 = nodesMap[generateNodeKey(n2)]; + } + + if (!n1 || !n2) { + return; + } + + var key = n1.id + '-' + n2.id; + var edge = new GraphEdge(n1, n2, dataIndex); + edge.hostGraph = this; + + if (this._directed) { + n1.outEdges.push(edge); + n2.inEdges.push(edge); + } + + n1.edges.push(edge); + + if (n1 !== n2) { + n2.edges.push(edge); + } + + this.edges.push(edge); + edgesMap[key] = edge; + return edge; + }; + /** + * Get edge by data index + */ + + Graph.prototype.getEdgeByIndex = function (dataIndex) { + var rawIdx = this.edgeData.getRawIndex(dataIndex); + return this.edges[rawIdx]; + }; + /** + * Get edge by two linked nodes + */ + + Graph.prototype.getEdge = function (n1, n2) { + if (n1 instanceof GraphNode) { + n1 = n1.id; + } + + if (n2 instanceof GraphNode) { + n2 = n2.id; + } + + var edgesMap = this._edgesMap; + + if (this._directed) { + return edgesMap[n1 + '-' + n2]; + } else { + return edgesMap[n1 + '-' + n2] || edgesMap[n2 + '-' + n1]; + } + }; + /** + * Iterate all nodes + */ + + Graph.prototype.eachNode = function (cb, context) { + var nodes = this.nodes; + var len = nodes.length; + + for (var i = 0; i < len; i++) { + if (nodes[i].dataIndex >= 0) { + cb.call(context, nodes[i], i); + } + } + }; + /** + * Iterate all edges + */ + + Graph.prototype.eachEdge = function (cb, context) { + var edges = this.edges; + var len = edges.length; + + for (var i = 0; i < len; i++) { + if (edges[i].dataIndex >= 0 && edges[i].node1.dataIndex >= 0 && edges[i].node2.dataIndex >= 0) { + cb.call(context, edges[i], i); + } + } + }; + /** + * Breadth first traverse + * Return true to stop traversing + */ + + Graph.prototype.breadthFirstTraverse = function (cb, startNode, direction, context) { + if (!(startNode instanceof GraphNode)) { + startNode = this._nodesMap[generateNodeKey(startNode)]; + } + + if (!startNode) { + return; + } + + var edgeType = direction === 'out' ? 'outEdges' : direction === 'in' ? 'inEdges' : 'edges'; + + for (var i = 0; i < this.nodes.length; i++) { + this.nodes[i].__visited = false; + } + + if (cb.call(context, startNode, null)) { + return; + } + + var queue = [startNode]; + + while (queue.length) { + var currentNode = queue.shift(); + var edges = currentNode[edgeType]; + + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + var otherNode = e.node1 === currentNode ? e.node2 : e.node1; + + if (!otherNode.__visited) { + if (cb.call(context, otherNode, currentNode)) { + // Stop traversing + return; + } + + queue.push(otherNode); + otherNode.__visited = true; + } + } + } + }; + // depthFirstTraverse( + // cb, startNode, direction, context + // ) { + // }; + // Filter update + + Graph.prototype.update = function () { + var data = this.data; + var edgeData = this.edgeData; + var nodes = this.nodes; + var edges = this.edges; + + for (var i = 0, len = nodes.length; i < len; i++) { + nodes[i].dataIndex = -1; + } + + for (var i = 0, len = data.count(); i < len; i++) { + nodes[data.getRawIndex(i)].dataIndex = i; + } + + edgeData.filterSelf(function (idx) { + var edge = edges[edgeData.getRawIndex(idx)]; + return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0; + }); // Update edge + + for (var i = 0, len = edges.length; i < len; i++) { + edges[i].dataIndex = -1; + } + + for (var i = 0, len = edgeData.count(); i < len; i++) { + edges[edgeData.getRawIndex(i)].dataIndex = i; + } + }; + /** + * @return {module:echarts/data/Graph} + */ + + Graph.prototype.clone = function () { + var graph = new Graph(this._directed); + var nodes = this.nodes; + var edges = this.edges; + + for (var i = 0; i < nodes.length; i++) { + graph.addNode(nodes[i].id, nodes[i].dataIndex); + } + + for (var i = 0; i < edges.length; i++) { + var e = edges[i]; + graph.addEdge(e.node1.id, e.node2.id, e.dataIndex); + } + + return graph; + }; + return Graph; + }(); + + var GraphNode = + /** @class */ + function () { + function GraphNode(id, dataIndex) { + this.inEdges = []; + this.outEdges = []; + this.edges = []; + this.dataIndex = -1; + this.id = id == null ? '' : id; + this.dataIndex = dataIndex == null ? -1 : dataIndex; + } + /** + * @return {number} + */ + + + GraphNode.prototype.degree = function () { + return this.edges.length; + }; + /** + * @return {number} + */ + + + GraphNode.prototype.inDegree = function () { + return this.inEdges.length; + }; + /** + * @return {number} + */ + + + GraphNode.prototype.outDegree = function () { + return this.outEdges.length; + }; + + GraphNode.prototype.getModel = function (path) { + if (this.dataIndex < 0) { + return; + } + + var graph = this.hostGraph; + var itemModel = graph.data.getItemModel(this.dataIndex); + return itemModel.getModel(path); + }; + + GraphNode.prototype.getAdjacentDataIndices = function () { + var dataIndices = { + edge: [], + node: [] + }; + + for (var i = 0; i < this.edges.length; i++) { + var adjacentEdge = this.edges[i]; + + if (adjacentEdge.dataIndex < 0) { + continue; + } + + dataIndices.edge.push(adjacentEdge.dataIndex); + dataIndices.node.push(adjacentEdge.node1.dataIndex, adjacentEdge.node2.dataIndex); + } + + return dataIndices; + }; + + return GraphNode; + }(); + + var GraphEdge = + /** @class */ + function () { + function GraphEdge(n1, n2, dataIndex) { + this.dataIndex = -1; + this.node1 = n1; + this.node2 = n2; + this.dataIndex = dataIndex == null ? -1 : dataIndex; + } // eslint-disable-next-line @typescript-eslint/no-unused-vars + + + GraphEdge.prototype.getModel = function (path) { + if (this.dataIndex < 0) { + return; + } + + var graph = this.hostGraph; + var itemModel = graph.edgeData.getItemModel(this.dataIndex); + return itemModel.getModel(path); + }; + + GraphEdge.prototype.getAdjacentDataIndices = function () { + return { + edge: [this.dataIndex], + node: [this.node1.dataIndex, this.node2.dataIndex] + }; + }; + + return GraphEdge; + }(); + + function createGraphDataProxyMixin(hostName, dataName) { + return { + /** + * @param Default 'value'. can be 'a', 'b', 'c', 'd', 'e'. + */ + getValue: function (dimension) { + var data = this[hostName][dataName]; + return data.getStore().get(data.getDimensionIndex(dimension || 'value'), this.dataIndex); + }, + // TODO: TYPE stricter type. + setVisual: function (key, value) { + this.dataIndex >= 0 && this[hostName][dataName].setItemVisual(this.dataIndex, key, value); + }, + getVisual: function (key) { + return this[hostName][dataName].getItemVisual(this.dataIndex, key); + }, + setLayout: function (layout, merge) { + this.dataIndex >= 0 && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge); + }, + getLayout: function () { + return this[hostName][dataName].getItemLayout(this.dataIndex); + }, + getGraphicEl: function () { + return this[hostName][dataName].getItemGraphicEl(this.dataIndex); + }, + getRawIndex: function () { + return this[hostName][dataName].getRawIndex(this.dataIndex); + } + }; + } + mixin(GraphNode, createGraphDataProxyMixin('hostGraph', 'data')); + mixin(GraphEdge, createGraphDataProxyMixin('hostGraph', 'edgeData')); + + function createGraphFromNodeEdge(nodes, edges, seriesModel, directed, beforeLink) { + // ??? TODO + // support dataset? + var graph = new Graph(directed); + + for (var i = 0; i < nodes.length; i++) { + graph.addNode(retrieve( // Id, name, dataIndex + nodes[i].id, nodes[i].name, i), i); + } + + var linkNameList = []; + var validEdges = []; + var linkCount = 0; + + for (var i = 0; i < edges.length; i++) { + var link = edges[i]; + var source = link.source; + var target = link.target; // addEdge may fail when source or target not exists + + if (graph.addEdge(source, target, linkCount)) { + validEdges.push(link); + linkNameList.push(retrieve(convertOptionIdName(link.id, null), source + ' > ' + target)); + linkCount++; + } + } + + var coordSys = seriesModel.get('coordinateSystem'); + var nodeData; + + if (coordSys === 'cartesian2d' || coordSys === 'polar') { + nodeData = createSeriesData(nodes, seriesModel); + } else { + var coordSysCtor = CoordinateSystemManager.get(coordSys); + var coordDimensions = coordSysCtor ? coordSysCtor.dimensions || [] : []; // FIXME: Some geo do not need `value` dimenson, whereas `calendar` needs + // `value` dimension, but graph need `value` dimension. It's better to + // uniform this behavior. + + if (indexOf(coordDimensions, 'value') < 0) { + coordDimensions.concat(['value']); + } + + var dimensions = prepareSeriesDataSchema(nodes, { + coordDimensions: coordDimensions, + encodeDefine: seriesModel.getEncode() + }).dimensions; + nodeData = new SeriesData(dimensions, seriesModel); + nodeData.initData(nodes); + } + + var edgeData = new SeriesData(['value'], seriesModel); + edgeData.initData(validEdges, linkNameList); + beforeLink && beforeLink(nodeData, edgeData); + linkSeriesData({ + mainData: nodeData, + struct: graph, + structAttr: 'graph', + datas: { + node: nodeData, + edge: edgeData + }, + datasAttr: { + node: 'data', + edge: 'edgeData' + } + }); // Update dataIndex of nodes and edges because invalid edge may be removed + + graph.update(); + return graph; + } + + var GraphSeriesModel = + /** @class */ + function (_super) { + __extends(GraphSeriesModel, _super); + + function GraphSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = GraphSeriesModel.type; + _this.hasSymbolVisual = true; + return _this; + } + + GraphSeriesModel.prototype.init = function (option) { + _super.prototype.init.apply(this, arguments); + + var self = this; + + function getCategoriesData() { + return self._categoriesData; + } // Provide data for legend select + + + this.legendVisualProvider = new LegendVisualProvider(getCategoriesData, getCategoriesData); + this.fillDataTextStyle(option.edges || option.links); + + this._updateCategoriesData(); + }; + + GraphSeriesModel.prototype.mergeOption = function (option) { + _super.prototype.mergeOption.apply(this, arguments); + + this.fillDataTextStyle(option.edges || option.links); + + this._updateCategoriesData(); + }; + + GraphSeriesModel.prototype.mergeDefaultAndTheme = function (option) { + _super.prototype.mergeDefaultAndTheme.apply(this, arguments); + + defaultEmphasis(option, 'edgeLabel', ['show']); + }; + + GraphSeriesModel.prototype.getInitialData = function (option, ecModel) { + var edges = option.edges || option.links || []; + var nodes = option.data || option.nodes || []; + var self = this; + + if (nodes && edges) { + // auto curveness + initCurvenessList(this); + var graph = createGraphFromNodeEdge(nodes, edges, this, true, beforeLink); + each(graph.edges, function (edge) { + createEdgeMapForCurveness(edge.node1, edge.node2, this, edge.dataIndex); + }, this); + return graph.data; + } + + function beforeLink(nodeData, edgeData) { + // Overwrite nodeData.getItemModel to + nodeData.wrapMethod('getItemModel', function (model) { + var categoriesModels = self._categoriesModels; + var categoryIdx = model.getShallow('category'); + var categoryModel = categoriesModels[categoryIdx]; + + if (categoryModel) { + categoryModel.parentModel = model.parentModel; + model.parentModel = categoryModel; + } + + return model; + }); // TODO Inherit resolveParentPath by default in Model#getModel? + + var oldGetModel = Model.prototype.getModel; + + function newGetModel(path, parentModel) { + var model = oldGetModel.call(this, path, parentModel); + model.resolveParentPath = resolveParentPath; + return model; + } + + edgeData.wrapMethod('getItemModel', function (model) { + model.resolveParentPath = resolveParentPath; + model.getModel = newGetModel; + return model; + }); + + function resolveParentPath(pathArr) { + if (pathArr && (pathArr[0] === 'label' || pathArr[1] === 'label')) { + var newPathArr = pathArr.slice(); + + if (pathArr[0] === 'label') { + newPathArr[0] = 'edgeLabel'; + } else if (pathArr[1] === 'label') { + newPathArr[1] = 'edgeLabel'; + } + + return newPathArr; + } + + return pathArr; + } + } + }; + + GraphSeriesModel.prototype.getGraph = function () { + return this.getData().graph; + }; + + GraphSeriesModel.prototype.getEdgeData = function () { + return this.getGraph().edgeData; + }; + + GraphSeriesModel.prototype.getCategoriesData = function () { + return this._categoriesData; + }; + + GraphSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + if (dataType === 'edge') { + var nodeData = this.getData(); + var params = this.getDataParams(dataIndex, dataType); + var edge = nodeData.graph.getEdgeByIndex(dataIndex); + var sourceName = nodeData.getName(edge.node1.dataIndex); + var targetName = nodeData.getName(edge.node2.dataIndex); + var nameArr = []; + sourceName != null && nameArr.push(sourceName); + targetName != null && nameArr.push(targetName); + return createTooltipMarkup('nameValue', { + name: nameArr.join(' > '), + value: params.value, + noValue: params.value == null + }); + } // dataType === 'node' or empty + + + var nodeMarkup = defaultSeriesFormatTooltip({ + series: this, + dataIndex: dataIndex, + multipleSeries: multipleSeries + }); + return nodeMarkup; + }; + + GraphSeriesModel.prototype._updateCategoriesData = function () { + var categories = map(this.option.categories || [], function (category) { + // Data must has value + return category.value != null ? category : extend({ + value: 0 + }, category); + }); + var categoriesData = new SeriesData(['value'], this); + categoriesData.initData(categories); + this._categoriesData = categoriesData; + this._categoriesModels = categoriesData.mapArray(function (idx) { + return categoriesData.getItemModel(idx); + }); + }; + + GraphSeriesModel.prototype.setZoom = function (zoom) { + this.option.zoom = zoom; + }; + + GraphSeriesModel.prototype.setCenter = function (center) { + this.option.center = center; + }; + + GraphSeriesModel.prototype.isAnimationEnabled = function () { + return _super.prototype.isAnimationEnabled.call(this) // Not enable animation when do force layout + && !(this.get('layout') === 'force' && this.get(['force', 'layoutAnimation'])); + }; + + GraphSeriesModel.type = 'series.graph'; + GraphSeriesModel.dependencies = ['grid', 'polar', 'geo', 'singleAxis', 'calendar']; + GraphSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + coordinateSystem: 'view', + // Default option for all coordinate systems + // xAxisIndex: 0, + // yAxisIndex: 0, + // polarIndex: 0, + // geoIndex: 0, + legendHoverLink: true, + layout: null, + // Configuration of circular layout + circular: { + rotateLabel: false + }, + // Configuration of force directed layout + force: { + initLayout: null, + // Node repulsion. Can be an array to represent range. + repulsion: [0, 50], + gravity: 0.1, + // Initial friction + friction: 0.6, + // Edge length. Can be an array to represent range. + edgeLength: 30, + layoutAnimation: true + }, + left: 'center', + top: 'center', + // right: null, + // bottom: null, + // width: '80%', + // height: '80%', + symbol: 'circle', + symbolSize: 10, + edgeSymbol: ['none', 'none'], + edgeSymbolSize: 10, + edgeLabel: { + position: 'middle', + distance: 5 + }, + draggable: false, + roam: false, + // Default on center of graph + center: null, + zoom: 1, + // Symbol size scale ratio in roam + nodeScaleRatio: 0.6, + // cursor: null, + // categories: [], + // data: [] + // Or + // nodes: [] + // + // links: [] + // Or + // edges: [] + label: { + show: false, + formatter: '{b}' + }, + itemStyle: {}, + lineStyle: { + color: '#aaa', + width: 1, + opacity: 0.5 + }, + emphasis: { + scale: true, + label: { + show: true + } + }, + select: { + itemStyle: { + borderColor: '#212121' + } + } + }; + return GraphSeriesModel; + }(SeriesModel); + + var actionInfo = { + type: 'graphRoam', + event: 'graphRoam', + update: 'none' + }; + function install$d(registers) { + registers.registerChartView(GraphView); + registers.registerSeriesModel(GraphSeriesModel); + registers.registerProcessor(categoryFilter); + registers.registerVisual(categoryVisual); + registers.registerVisual(graphEdgeVisual); + registers.registerLayout(graphSimpleLayout); + registers.registerLayout(registers.PRIORITY.VISUAL.POST_CHART_LAYOUT, graphCircularLayout); + registers.registerLayout(graphForceLayout); + registers.registerCoordinateSystem('graphView', { + dimensions: View.dimensions, + create: createViewCoordSys + }); // Register legacy focus actions + + registers.registerAction({ + type: 'focusNodeAdjacency', + event: 'focusNodeAdjacency', + update: 'series:focusNodeAdjacency' + }, function () {}); + registers.registerAction({ + type: 'unfocusNodeAdjacency', + event: 'unfocusNodeAdjacency', + update: 'series:unfocusNodeAdjacency' + }, function () {}); // Register roam action. + + registers.registerAction(actionInfo, function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'series', + query: payload + }, function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var res = updateCenterAndZoom(coordSys, payload); + seriesModel.setCenter && seriesModel.setCenter(res.center); + seriesModel.setZoom && seriesModel.setZoom(res.zoom); + }); + }); + } + + var PointerShape = + /** @class */ + function () { + function PointerShape() { + this.angle = 0; + this.width = 10; + this.r = 10; + this.x = 0; + this.y = 0; + } + + return PointerShape; + }(); + + var PointerPath = + /** @class */ + function (_super) { + __extends(PointerPath, _super); + + function PointerPath(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'pointer'; + return _this; + } + + PointerPath.prototype.getDefaultShape = function () { + return new PointerShape(); + }; + + PointerPath.prototype.buildPath = function (ctx, shape) { + var mathCos = Math.cos; + var mathSin = Math.sin; + var r = shape.r; + var width = shape.width; + var angle = shape.angle; + var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2); + var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2); + angle = shape.angle - Math.PI / 2; + ctx.moveTo(x, y); + ctx.lineTo(shape.x + mathCos(angle) * width, shape.y + mathSin(angle) * width); + ctx.lineTo(shape.x + mathCos(shape.angle) * r, shape.y + mathSin(shape.angle) * r); + ctx.lineTo(shape.x - mathCos(angle) * width, shape.y - mathSin(angle) * width); + ctx.lineTo(x, y); + }; + + return PointerPath; + }(Path); + + function parsePosition(seriesModel, api) { + var center = seriesModel.get('center'); + var width = api.getWidth(); + var height = api.getHeight(); + var size = Math.min(width, height); + var cx = parsePercent$1(center[0], api.getWidth()); + var cy = parsePercent$1(center[1], api.getHeight()); + var r = parsePercent$1(seriesModel.get('radius'), size / 2); + return { + cx: cx, + cy: cy, + r: r + }; + } + + function formatLabel(value, labelFormatter) { + var label = value == null ? '' : value + ''; + + if (labelFormatter) { + if (typeof labelFormatter === 'string') { + label = labelFormatter.replace('{value}', label); + } else if (typeof labelFormatter === 'function') { + label = labelFormatter(value); + } + } + + return label; + } + + var PI2$9 = Math.PI * 2; + + var GaugeView = + /** @class */ + function (_super) { + __extends(GaugeView, _super); + + function GaugeView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = GaugeView.type; + return _this; + } + + GaugeView.prototype.render = function (seriesModel, ecModel, api) { + this.group.removeAll(); + var colorList = seriesModel.get(['axisLine', 'lineStyle', 'color']); + var posInfo = parsePosition(seriesModel, api); + + this._renderMain(seriesModel, ecModel, api, colorList, posInfo); + + this._data = seriesModel.getData(); + }; + + GaugeView.prototype.dispose = function () {}; + + GaugeView.prototype._renderMain = function (seriesModel, ecModel, api, colorList, posInfo) { + var group = this.group; + var clockwise = seriesModel.get('clockwise'); + var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI; + var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI; + var axisLineModel = seriesModel.getModel('axisLine'); + var roundCap = axisLineModel.get('roundCap'); + var MainPath = roundCap ? SausagePath : Sector; + var showAxis = axisLineModel.get('show'); + var lineStyleModel = axisLineModel.getModel('lineStyle'); + var axisLineWidth = lineStyleModel.get('width'); + var angleRangeSpan = !((endAngle - startAngle) % PI2$9) && endAngle !== startAngle ? PI2$9 : (endAngle - startAngle) % PI2$9; + var prevEndAngle = startAngle; + + for (var i = 0; showAxis && i < colorList.length; i++) { + // Clamp + var percent = Math.min(Math.max(colorList[i][0], 0), 1); + endAngle = startAngle + angleRangeSpan * percent; + var sector = new MainPath({ + shape: { + startAngle: prevEndAngle, + endAngle: endAngle, + cx: posInfo.cx, + cy: posInfo.cy, + clockwise: clockwise, + r0: posInfo.r - axisLineWidth, + r: posInfo.r + }, + silent: true + }); + sector.setStyle({ + fill: colorList[i][1] + }); + sector.setStyle(lineStyleModel.getLineStyle( // Because we use sector to simulate arc + // so the properties for stroking are useless + ['color', 'width'])); + group.add(sector); + prevEndAngle = endAngle; + } + + var getColor = function (percent) { + // Less than 0 + if (percent <= 0) { + return colorList[0][1]; + } + + var i; + + for (i = 0; i < colorList.length; i++) { + if (colorList[i][0] >= percent && (i === 0 ? 0 : colorList[i - 1][0]) < percent) { + return colorList[i][1]; + } + } // More than 1 + + + return colorList[i - 1][1]; + }; + + if (!clockwise) { + var tmp = startAngle; + startAngle = endAngle; + endAngle = tmp; + } + + this._renderTicks(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth); + + this._renderTitleAndDetail(seriesModel, ecModel, api, getColor, posInfo); + + this._renderAnchor(seriesModel, posInfo); + + this._renderPointer(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth); + }; + + GaugeView.prototype._renderTicks = function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) { + var group = this.group; + var cx = posInfo.cx; + var cy = posInfo.cy; + var r = posInfo.r; + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + var splitLineModel = seriesModel.getModel('splitLine'); + var tickModel = seriesModel.getModel('axisTick'); + var labelModel = seriesModel.getModel('axisLabel'); + var splitNumber = seriesModel.get('splitNumber'); + var subSplitNumber = tickModel.get('splitNumber'); + var splitLineLen = parsePercent$1(splitLineModel.get('length'), r); + var tickLen = parsePercent$1(tickModel.get('length'), r); + var angle = startAngle; + var step = (endAngle - startAngle) / splitNumber; + var subStep = step / subSplitNumber; + var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle(); + var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle(); + var splitLineDistance = splitLineModel.get('distance'); + var unitX; + var unitY; + + for (var i = 0; i <= splitNumber; i++) { + unitX = Math.cos(angle); + unitY = Math.sin(angle); // Split line + + if (splitLineModel.get('show')) { + var distance = splitLineDistance ? splitLineDistance + axisLineWidth : axisLineWidth; + var splitLine = new Line({ + shape: { + x1: unitX * (r - distance) + cx, + y1: unitY * (r - distance) + cy, + x2: unitX * (r - splitLineLen - distance) + cx, + y2: unitY * (r - splitLineLen - distance) + cy + }, + style: splitLineStyle, + silent: true + }); + + if (splitLineStyle.stroke === 'auto') { + splitLine.setStyle({ + stroke: getColor(i / splitNumber) + }); + } + + group.add(splitLine); + } // Label + + + if (labelModel.get('show')) { + var distance = labelModel.get('distance') + splitLineDistance; + var label = formatLabel(round(i / splitNumber * (maxVal - minVal) + minVal), labelModel.get('formatter')); + var autoColor = getColor(i / splitNumber); + group.add(new ZRText({ + style: createTextStyle(labelModel, { + text: label, + x: unitX * (r - splitLineLen - distance) + cx, + y: unitY * (r - splitLineLen - distance) + cy, + verticalAlign: unitY < -0.8 ? 'top' : unitY > 0.8 ? 'bottom' : 'middle', + align: unitX < -0.4 ? 'left' : unitX > 0.4 ? 'right' : 'center' + }, { + inheritColor: autoColor + }), + silent: true + })); + } // Axis tick + + + if (tickModel.get('show') && i !== splitNumber) { + var distance = tickModel.get('distance'); + distance = distance ? distance + axisLineWidth : axisLineWidth; + + for (var j = 0; j <= subSplitNumber; j++) { + unitX = Math.cos(angle); + unitY = Math.sin(angle); + var tickLine = new Line({ + shape: { + x1: unitX * (r - distance) + cx, + y1: unitY * (r - distance) + cy, + x2: unitX * (r - tickLen - distance) + cx, + y2: unitY * (r - tickLen - distance) + cy + }, + silent: true, + style: tickLineStyle + }); + + if (tickLineStyle.stroke === 'auto') { + tickLine.setStyle({ + stroke: getColor((i + j / subSplitNumber) / splitNumber) + }); + } + + group.add(tickLine); + angle += subStep; + } + + angle -= subStep; + } else { + angle += step; + } + } + }; + + GaugeView.prototype._renderPointer = function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) { + var group = this.group; + var oldData = this._data; + var oldProgressData = this._progressEls; + var progressList = []; + var showPointer = seriesModel.get(['pointer', 'show']); + var progressModel = seriesModel.getModel('progress'); + var showProgress = progressModel.get('show'); + var data = seriesModel.getData(); + var valueDim = data.mapDimension('value'); + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + var valueExtent = [minVal, maxVal]; + var angleExtent = [startAngle, endAngle]; + + function createPointer(idx, angle) { + var itemModel = data.getItemModel(idx); + var pointerModel = itemModel.getModel('pointer'); + var pointerWidth = parsePercent$1(pointerModel.get('width'), posInfo.r); + var pointerLength = parsePercent$1(pointerModel.get('length'), posInfo.r); + var pointerStr = seriesModel.get(['pointer', 'icon']); + var pointerOffset = pointerModel.get('offsetCenter'); + var pointerOffsetX = parsePercent$1(pointerOffset[0], posInfo.r); + var pointerOffsetY = parsePercent$1(pointerOffset[1], posInfo.r); + var pointerKeepAspect = pointerModel.get('keepAspect'); + var pointer; // not exist icon type will be set 'rect' + + if (pointerStr) { + pointer = createSymbol(pointerStr, pointerOffsetX - pointerWidth / 2, pointerOffsetY - pointerLength, pointerWidth, pointerLength, null, pointerKeepAspect); + } else { + pointer = new PointerPath({ + shape: { + angle: -Math.PI / 2, + width: pointerWidth, + r: pointerLength, + x: pointerOffsetX, + y: pointerOffsetY + } + }); + } + + pointer.rotation = -(angle + Math.PI / 2); + pointer.x = posInfo.cx; + pointer.y = posInfo.cy; + return pointer; + } + + function createProgress(idx, endAngle) { + var roundCap = progressModel.get('roundCap'); + var ProgressPath = roundCap ? SausagePath : Sector; + var isOverlap = progressModel.get('overlap'); + var progressWidth = isOverlap ? progressModel.get('width') : axisLineWidth / data.count(); + var r0 = isOverlap ? posInfo.r - progressWidth : posInfo.r - (idx + 1) * progressWidth; + var r = isOverlap ? posInfo.r : posInfo.r - idx * progressWidth; + var progress = new ProgressPath({ + shape: { + startAngle: startAngle, + endAngle: endAngle, + cx: posInfo.cx, + cy: posInfo.cy, + clockwise: clockwise, + r0: r0, + r: r + } + }); + isOverlap && (progress.z2 = maxVal - data.get(valueDim, idx) % maxVal); + return progress; + } + + if (showProgress || showPointer) { + data.diff(oldData).add(function (idx) { + if (showPointer) { + var pointer = createPointer(idx, startAngle); + initProps(pointer, { + rotation: -(linearMap(data.get(valueDim, idx), valueExtent, angleExtent, true) + Math.PI / 2) + }, seriesModel); + group.add(pointer); + data.setItemGraphicEl(idx, pointer); + } + + if (showProgress) { + var progress = createProgress(idx, startAngle); + var isClip = progressModel.get('clip'); + initProps(progress, { + shape: { + endAngle: linearMap(data.get(valueDim, idx), valueExtent, angleExtent, isClip) + } + }, seriesModel); + group.add(progress); // Add data index and series index for indexing the data by element + // Useful in tooltip + + setCommonECData(seriesModel.seriesIndex, data.dataType, idx, progress); + progressList[idx] = progress; + } + }).update(function (newIdx, oldIdx) { + if (showPointer) { + var previousPointer = oldData.getItemGraphicEl(oldIdx); + var previousRotate = previousPointer ? previousPointer.rotation : startAngle; + var pointer = createPointer(newIdx, previousRotate); + pointer.rotation = previousRotate; + updateProps(pointer, { + rotation: -(linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, true) + Math.PI / 2) + }, seriesModel); + group.add(pointer); + data.setItemGraphicEl(newIdx, pointer); + } + + if (showProgress) { + var previousProgress = oldProgressData[oldIdx]; + var previousEndAngle = previousProgress ? previousProgress.shape.endAngle : startAngle; + var progress = createProgress(newIdx, previousEndAngle); + var isClip = progressModel.get('clip'); + updateProps(progress, { + shape: { + endAngle: linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, isClip) + } + }, seriesModel); + group.add(progress); // Add data index and series index for indexing the data by element + // Useful in tooltip + + setCommonECData(seriesModel.seriesIndex, data.dataType, newIdx, progress); + progressList[newIdx] = progress; + } + }).execute(); + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var emphasisModel = itemModel.getModel('emphasis'); + + if (showPointer) { + var pointer = data.getItemGraphicEl(idx); + var symbolStyle = data.getItemVisual(idx, 'style'); + var visualColor = symbolStyle.fill; + + if (pointer instanceof ZRImage) { + var pathStyle = pointer.style; + pointer.useStyle(extend({ + image: pathStyle.image, + x: pathStyle.x, + y: pathStyle.y, + width: pathStyle.width, + height: pathStyle.height + }, symbolStyle)); + } else { + pointer.useStyle(symbolStyle); + pointer.type !== 'pointer' && pointer.setColor(visualColor); + } + + pointer.setStyle(itemModel.getModel(['pointer', 'itemStyle']).getItemStyle()); + + if (pointer.style.fill === 'auto') { + pointer.setStyle('fill', getColor(linearMap(data.get(valueDim, idx), valueExtent, [0, 1], true))); + } + + pointer.z2EmphasisLift = 0; + setStatesStylesFromModel(pointer, itemModel); + enableHoverEmphasis(pointer, emphasisModel.get('focus'), emphasisModel.get('blurScope')); + } + + if (showProgress) { + var progress = progressList[idx]; + progress.useStyle(data.getItemVisual(idx, 'style')); + progress.setStyle(itemModel.getModel(['progress', 'itemStyle']).getItemStyle()); + progress.z2EmphasisLift = 0; + setStatesStylesFromModel(progress, itemModel); + enableHoverEmphasis(progress, emphasisModel.get('focus'), emphasisModel.get('blurScope')); + } + }); + this._progressEls = progressList; + } + }; + + GaugeView.prototype._renderAnchor = function (seriesModel, posInfo) { + var anchorModel = seriesModel.getModel('anchor'); + var showAnchor = anchorModel.get('show'); + + if (showAnchor) { + var anchorSize = anchorModel.get('size'); + var anchorType = anchorModel.get('icon'); + var offsetCenter = anchorModel.get('offsetCenter'); + var anchorKeepAspect = anchorModel.get('keepAspect'); + var anchor = createSymbol(anchorType, posInfo.cx - anchorSize / 2 + parsePercent$1(offsetCenter[0], posInfo.r), posInfo.cy - anchorSize / 2 + parsePercent$1(offsetCenter[1], posInfo.r), anchorSize, anchorSize, null, anchorKeepAspect); + anchor.z2 = anchorModel.get('showAbove') ? 1 : 0; + anchor.setStyle(anchorModel.getModel('itemStyle').getItemStyle()); + this.group.add(anchor); + } + }; + + GaugeView.prototype._renderTitleAndDetail = function (seriesModel, ecModel, api, getColor, posInfo) { + var _this = this; + + var data = seriesModel.getData(); + var valueDim = data.mapDimension('value'); + var minVal = +seriesModel.get('min'); + var maxVal = +seriesModel.get('max'); + var contentGroup = new Group(); + var newTitleEls = []; + var newDetailEls = []; + var hasAnimation = seriesModel.isAnimationEnabled(); + var showPointerAbove = seriesModel.get(['pointer', 'showAbove']); + data.diff(this._data).add(function (idx) { + newTitleEls[idx] = new ZRText({ + silent: true + }); + newDetailEls[idx] = new ZRText({ + silent: true + }); + }).update(function (idx, oldIdx) { + newTitleEls[idx] = _this._titleEls[oldIdx]; + newDetailEls[idx] = _this._detailEls[oldIdx]; + }).execute(); + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var value = data.get(valueDim, idx); + var itemGroup = new Group(); + var autoColor = getColor(linearMap(value, [minVal, maxVal], [0, 1], true)); + var itemTitleModel = itemModel.getModel('title'); + + if (itemTitleModel.get('show')) { + var titleOffsetCenter = itemTitleModel.get('offsetCenter'); + var titleX = posInfo.cx + parsePercent$1(titleOffsetCenter[0], posInfo.r); + var titleY = posInfo.cy + parsePercent$1(titleOffsetCenter[1], posInfo.r); + var labelEl = newTitleEls[idx]; + labelEl.attr({ + z2: showPointerAbove ? 0 : 2, + style: createTextStyle(itemTitleModel, { + x: titleX, + y: titleY, + text: data.getName(idx), + align: 'center', + verticalAlign: 'middle' + }, { + inheritColor: autoColor + }) + }); + itemGroup.add(labelEl); + } + + var itemDetailModel = itemModel.getModel('detail'); + + if (itemDetailModel.get('show')) { + var detailOffsetCenter = itemDetailModel.get('offsetCenter'); + var detailX = posInfo.cx + parsePercent$1(detailOffsetCenter[0], posInfo.r); + var detailY = posInfo.cy + parsePercent$1(detailOffsetCenter[1], posInfo.r); + var width = parsePercent$1(itemDetailModel.get('width'), posInfo.r); + var height = parsePercent$1(itemDetailModel.get('height'), posInfo.r); + var detailColor = seriesModel.get(['progress', 'show']) ? data.getItemVisual(idx, 'style').fill : autoColor; + var labelEl = newDetailEls[idx]; + var formatter_1 = itemDetailModel.get('formatter'); + labelEl.attr({ + z2: showPointerAbove ? 0 : 2, + style: createTextStyle(itemDetailModel, { + x: detailX, + y: detailY, + text: formatLabel(value, formatter_1), + width: isNaN(width) ? null : width, + height: isNaN(height) ? null : height, + align: 'center', + verticalAlign: 'middle' + }, { + inheritColor: detailColor + }) + }); + setLabelValueAnimation(labelEl, { + normal: itemDetailModel + }, value, function (value) { + return formatLabel(value, formatter_1); + }); + hasAnimation && animateLabelValue(labelEl, idx, data, seriesModel, { + getFormattedLabel: function (labelDataIndex, status, dataType, labelDimIndex, fmt, extendParams) { + return formatLabel(extendParams ? extendParams.interpolatedValue : value, formatter_1); + } + }); + itemGroup.add(labelEl); + } + + contentGroup.add(itemGroup); + }); + this.group.add(contentGroup); + this._titleEls = newTitleEls; + this._detailEls = newDetailEls; + }; + + GaugeView.type = 'gauge'; + return GaugeView; + }(ChartView); + + var GaugeSeriesModel = + /** @class */ + function (_super) { + __extends(GaugeSeriesModel, _super); + + function GaugeSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = GaugeSeriesModel.type; + _this.visualStyleAccessPath = 'itemStyle'; + return _this; + } + + GaugeSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesDataSimply(this, ['value']); + }; + + GaugeSeriesModel.type = 'series.gauge'; + GaugeSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + colorBy: 'data', + // 默认全局居中 + center: ['50%', '50%'], + legendHoverLink: true, + radius: '75%', + startAngle: 225, + endAngle: -45, + clockwise: true, + // 最小值 + min: 0, + // 最大值 + max: 100, + // 分割段数,默认为10 + splitNumber: 10, + // 坐标轴线 + axisLine: { + // 默认显示,属性show控制显示与否 + show: true, + roundCap: false, + lineStyle: { + color: [[1, '#E6EBF8']], + width: 10 + } + }, + // 坐标轴线 + progress: { + // 默认显示,属性show控制显示与否 + show: false, + overlap: true, + width: 10, + roundCap: false, + clip: true + }, + // 分隔线 + splitLine: { + // 默认显示,属性show控制显示与否 + show: true, + // 属性length控制线长 + length: 10, + distance: 10, + // 属性lineStyle(详见lineStyle)控制线条样式 + lineStyle: { + color: '#63677A', + width: 3, + type: 'solid' + } + }, + // 坐标轴小标记 + axisTick: { + // 属性show控制显示与否,默认不显示 + show: true, + // 每份split细分多少段 + splitNumber: 5, + // 属性length控制线长 + length: 6, + distance: 10, + // 属性lineStyle控制线条样式 + lineStyle: { + color: '#63677A', + width: 1, + type: 'solid' + } + }, + axisLabel: { + show: true, + distance: 15, + // formatter: null, + color: '#464646', + fontSize: 12 + }, + pointer: { + icon: null, + offsetCenter: [0, 0], + show: true, + showAbove: true, + length: '60%', + width: 6, + keepAspect: false + }, + anchor: { + show: false, + showAbove: false, + size: 6, + icon: 'circle', + offsetCenter: [0, 0], + keepAspect: false, + itemStyle: { + color: '#fff', + borderWidth: 0, + borderColor: '#5470c6' + } + }, + title: { + show: true, + // x, y,单位px + offsetCenter: [0, '20%'], + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#464646', + fontSize: 16, + valueAnimation: false + }, + detail: { + show: true, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 0, + borderColor: '#ccc', + width: 100, + height: null, + padding: [5, 10], + // x, y,单位px + offsetCenter: [0, '40%'], + // formatter: null, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#464646', + fontSize: 30, + fontWeight: 'bold', + lineHeight: 30, + valueAnimation: false + } + }; + return GaugeSeriesModel; + }(SeriesModel); + + function install$e(registers) { + registers.registerChartView(GaugeView); + registers.registerSeriesModel(GaugeSeriesModel); + } + + var opacityAccessPath = ['itemStyle', 'opacity']; + /** + * Piece of pie including Sector, Label, LabelLine + */ + + var FunnelPiece = + /** @class */ + function (_super) { + __extends(FunnelPiece, _super); + + function FunnelPiece(data, idx) { + var _this = _super.call(this) || this; + + var polygon = _this; + var labelLine = new Polyline(); + var text = new ZRText(); + polygon.setTextContent(text); + + _this.setTextGuideLine(labelLine); + + _this.updateData(data, idx, true); + + return _this; + } + + FunnelPiece.prototype.updateData = function (data, idx, firstCreate) { + var polygon = this; + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var emphasisModel = itemModel.getModel('emphasis'); + var opacity = itemModel.get(opacityAccessPath); + opacity = opacity == null ? 1 : opacity; + + if (!firstCreate) { + saveOldStyle(polygon); + } // Update common style + + + polygon.useStyle(data.getItemVisual(idx, 'style')); + polygon.style.lineJoin = 'round'; + + if (firstCreate) { + polygon.setShape({ + points: layout.points + }); + polygon.style.opacity = 0; + initProps(polygon, { + style: { + opacity: opacity + } + }, seriesModel, idx); + } else { + updateProps(polygon, { + style: { + opacity: opacity + }, + shape: { + points: layout.points + } + }, seriesModel, idx); + } + + setStatesStylesFromModel(polygon, itemModel); + + this._updateLabel(data, idx); + + enableHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope')); + }; + + FunnelPiece.prototype._updateLabel = function (data, idx) { + var polygon = this; + var labelLine = this.getTextGuideLine(); + var labelText = polygon.getTextContent(); + var seriesModel = data.hostModel; + var itemModel = data.getItemModel(idx); + var layout = data.getItemLayout(idx); + var labelLayout = layout.label; + var style = data.getItemVisual(idx, 'style'); + var visualColor = style.fill; + setLabelStyle( // position will not be used in setLabelStyle + labelText, getLabelStatesModels(itemModel), { + labelFetcher: data.hostModel, + labelDataIndex: idx, + defaultOpacity: style.opacity, + defaultText: data.getName(idx) + }, { + normal: { + align: labelLayout.textAlign, + verticalAlign: labelLayout.verticalAlign + } + }); + polygon.setTextConfig({ + local: true, + inside: !!labelLayout.inside, + insideStroke: visualColor, + // insideFill: 'auto', + outsideFill: visualColor + }); + var linePoints = labelLayout.linePoints; + labelLine.setShape({ + points: linePoints + }); + polygon.textGuideLineConfig = { + anchor: linePoints ? new Point(linePoints[0][0], linePoints[0][1]) : null + }; // Make sure update style on labelText after setLabelStyle. + // Because setLabelStyle will replace a new style on it. + + updateProps(labelText, { + style: { + x: labelLayout.x, + y: labelLayout.y + } + }, seriesModel, idx); + labelText.attr({ + rotation: labelLayout.rotation, + originX: labelLayout.x, + originY: labelLayout.y, + z2: 10 + }); + setLabelLineStyle(polygon, getLabelLineStatesModels(itemModel), { + // Default use item visual color + stroke: visualColor + }); + }; + + return FunnelPiece; + }(Polygon); + + var FunnelView = + /** @class */ + function (_super) { + __extends(FunnelView, _super); + + function FunnelView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = FunnelView.type; + _this.ignoreLabelLineUpdate = true; + return _this; + } + + FunnelView.prototype.render = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var oldData = this._data; + var group = this.group; + data.diff(oldData).add(function (idx) { + var funnelPiece = new FunnelPiece(data, idx); + data.setItemGraphicEl(idx, funnelPiece); + group.add(funnelPiece); + }).update(function (newIdx, oldIdx) { + var piece = oldData.getItemGraphicEl(oldIdx); + piece.updateData(data, newIdx); + group.add(piece); + data.setItemGraphicEl(newIdx, piece); + }).remove(function (idx) { + var piece = oldData.getItemGraphicEl(idx); + removeElementWithFadeOut(piece, seriesModel, idx); + }).execute(); + this._data = data; + }; + + FunnelView.prototype.remove = function () { + this.group.removeAll(); + this._data = null; + }; + + FunnelView.prototype.dispose = function () {}; + + FunnelView.type = 'funnel'; + return FunnelView; + }(ChartView); + + var FunnelSeriesModel = + /** @class */ + function (_super) { + __extends(FunnelSeriesModel, _super); + + function FunnelSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = FunnelSeriesModel.type; + return _this; + } + + FunnelSeriesModel.prototype.init = function (option) { + _super.prototype.init.apply(this, arguments); // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + + + this.legendVisualProvider = new LegendVisualProvider(bind(this.getData, this), bind(this.getRawData, this)); // Extend labelLine emphasis + + this._defaultLabelLine(option); + }; + + FunnelSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesDataSimply(this, { + coordDimensions: ['value'], + encodeDefaulter: curry(makeSeriesEncodeForNameBased, this) + }); + }; + + FunnelSeriesModel.prototype._defaultLabelLine = function (option) { + // Extend labelLine emphasis + defaultEmphasis(option, 'labelLine', ['show']); + var labelLineNormalOpt = option.labelLine; + var labelLineEmphasisOpt = option.emphasis.labelLine; // Not show label line if `label.normal.show = false` + + labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show; + labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show; + }; // Overwrite + + + FunnelSeriesModel.prototype.getDataParams = function (dataIndex) { + var data = this.getData(); + + var params = _super.prototype.getDataParams.call(this, dataIndex); + + var valueDim = data.mapDimension('value'); + var sum = data.getSum(valueDim); // Percent is 0 if sum is 0 + + params.percent = !sum ? 0 : +(data.get(valueDim, dataIndex) / sum * 100).toFixed(2); + params.$vars.push('percent'); + return params; + }; + + FunnelSeriesModel.type = 'series.funnel'; + FunnelSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + legendHoverLink: true, + colorBy: 'data', + left: 80, + top: 60, + right: 80, + bottom: 60, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + // 默认取数据最小最大值 + // min: 0, + // max: 100, + minSize: '0%', + maxSize: '100%', + sort: 'descending', + orient: 'vertical', + gap: 0, + funnelAlign: 'center', + label: { + show: true, + position: 'outer' // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + + }, + labelLine: { + show: true, + length: 20, + lineStyle: { + // color: 各异, + width: 1 + } + }, + itemStyle: { + // color: 各异, + borderColor: '#fff', + borderWidth: 1 + }, + emphasis: { + label: { + show: true + } + }, + select: { + itemStyle: { + borderColor: '#212121' + } + } + }; + return FunnelSeriesModel; + }(SeriesModel); + + function getViewRect$3(seriesModel, api) { + return getLayoutRect(seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + } + + function getSortedIndices(data, sort) { + var valueDim = data.mapDimension('value'); + var valueArr = data.mapArray(valueDim, function (val) { + return val; + }); + var indices = []; + var isAscending = sort === 'ascending'; + + for (var i = 0, len = data.count(); i < len; i++) { + indices[i] = i; + } // Add custom sortable function & none sortable opetion by "options.sort" + + + if (typeof sort === 'function') { + indices.sort(sort); + } else if (sort !== 'none') { + indices.sort(function (a, b) { + return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a]; + }); + } + + return indices; + } + + function labelLayout(data) { + var seriesModel = data.hostModel; + var orient = seriesModel.get('orient'); + data.each(function (idx) { + var itemModel = data.getItemModel(idx); + var labelModel = itemModel.getModel('label'); + var labelPosition = labelModel.get('position'); + var labelLineModel = itemModel.getModel('labelLine'); + var layout = data.getItemLayout(idx); + var points = layout.points; + var isLabelInside = labelPosition === 'inner' || labelPosition === 'inside' || labelPosition === 'center' || labelPosition === 'insideLeft' || labelPosition === 'insideRight'; + var textAlign; + var textX; + var textY; + var linePoints; + + if (isLabelInside) { + if (labelPosition === 'insideLeft') { + textX = (points[0][0] + points[3][0]) / 2 + 5; + textY = (points[0][1] + points[3][1]) / 2; + textAlign = 'left'; + } else if (labelPosition === 'insideRight') { + textX = (points[1][0] + points[2][0]) / 2 - 5; + textY = (points[1][1] + points[2][1]) / 2; + textAlign = 'right'; + } else { + textX = (points[0][0] + points[1][0] + points[2][0] + points[3][0]) / 4; + textY = (points[0][1] + points[1][1] + points[2][1] + points[3][1]) / 4; + textAlign = 'center'; + } + + linePoints = [[textX, textY], [textX, textY]]; + } else { + var x1 = void 0; + var y1 = void 0; + var x2 = void 0; + var y2 = void 0; + var labelLineLen = labelLineModel.get('length'); + + if ("development" !== 'production') { + if (orient === 'vertical' && ['top', 'bottom'].indexOf(labelPosition) > -1) { + labelPosition = 'left'; + console.warn('Position error: Funnel chart on vertical orient dose not support top and bottom.'); + } + + if (orient === 'horizontal' && ['left', 'right'].indexOf(labelPosition) > -1) { + labelPosition = 'bottom'; + console.warn('Position error: Funnel chart on horizontal orient dose not support left and right.'); + } + } + + if (labelPosition === 'left') { + // Left side + x1 = (points[3][0] + points[0][0]) / 2; + y1 = (points[3][1] + points[0][1]) / 2; + x2 = x1 - labelLineLen; + textX = x2 - 5; + textAlign = 'right'; + } else if (labelPosition === 'right') { + // Right side + x1 = (points[1][0] + points[2][0]) / 2; + y1 = (points[1][1] + points[2][1]) / 2; + x2 = x1 + labelLineLen; + textX = x2 + 5; + textAlign = 'left'; + } else if (labelPosition === 'top') { + // Top side + x1 = (points[3][0] + points[0][0]) / 2; + y1 = (points[3][1] + points[0][1]) / 2; + y2 = y1 - labelLineLen; + textY = y2 - 5; + textAlign = 'center'; + } else if (labelPosition === 'bottom') { + // Bottom side + x1 = (points[1][0] + points[2][0]) / 2; + y1 = (points[1][1] + points[2][1]) / 2; + y2 = y1 + labelLineLen; + textY = y2 + 5; + textAlign = 'center'; + } else if (labelPosition === 'rightTop') { + // RightTop side + x1 = orient === 'horizontal' ? points[3][0] : points[1][0]; + y1 = orient === 'horizontal' ? points[3][1] : points[1][1]; + + if (orient === 'horizontal') { + y2 = y1 - labelLineLen; + textY = y2 - 5; + textAlign = 'center'; + } else { + x2 = x1 + labelLineLen; + textX = x2 + 5; + textAlign = 'top'; + } + } else if (labelPosition === 'rightBottom') { + // RightBottom side + x1 = points[2][0]; + y1 = points[2][1]; + + if (orient === 'horizontal') { + y2 = y1 + labelLineLen; + textY = y2 + 5; + textAlign = 'center'; + } else { + x2 = x1 + labelLineLen; + textX = x2 + 5; + textAlign = 'bottom'; + } + } else if (labelPosition === 'leftTop') { + // LeftTop side + x1 = points[0][0]; + y1 = orient === 'horizontal' ? points[0][1] : points[1][1]; + + if (orient === 'horizontal') { + y2 = y1 - labelLineLen; + textY = y2 - 5; + textAlign = 'center'; + } else { + x2 = x1 - labelLineLen; + textX = x2 - 5; + textAlign = 'right'; + } + } else if (labelPosition === 'leftBottom') { + // LeftBottom side + x1 = orient === 'horizontal' ? points[1][0] : points[3][0]; + y1 = orient === 'horizontal' ? points[1][1] : points[2][1]; + + if (orient === 'horizontal') { + y2 = y1 + labelLineLen; + textY = y2 + 5; + textAlign = 'center'; + } else { + x2 = x1 - labelLineLen; + textX = x2 - 5; + textAlign = 'right'; + } + } else { + // Right side or Bottom side + x1 = (points[1][0] + points[2][0]) / 2; + y1 = (points[1][1] + points[2][1]) / 2; + + if (orient === 'horizontal') { + y2 = y1 + labelLineLen; + textY = y2 + 5; + textAlign = 'center'; + } else { + x2 = x1 + labelLineLen; + textX = x2 + 5; + textAlign = 'left'; + } + } + + if (orient === 'horizontal') { + x2 = x1; + textX = x2; + } else { + y2 = y1; + textY = y2; + } + + linePoints = [[x1, y1], [x2, y2]]; + } + + layout.label = { + linePoints: linePoints, + x: textX, + y: textY, + verticalAlign: 'middle', + textAlign: textAlign, + inside: isLabelInside + }; + }); + } + + function funnelLayout(ecModel, api) { + ecModel.eachSeriesByType('funnel', function (seriesModel) { + var data = seriesModel.getData(); + var valueDim = data.mapDimension('value'); + var sort = seriesModel.get('sort'); + var viewRect = getViewRect$3(seriesModel, api); + var orient = seriesModel.get('orient'); + var viewWidth = viewRect.width; + var viewHeight = viewRect.height; + var indices = getSortedIndices(data, sort); + var x = viewRect.x; + var y = viewRect.y; + var sizeExtent = orient === 'horizontal' ? [parsePercent$1(seriesModel.get('minSize'), viewHeight), parsePercent$1(seriesModel.get('maxSize'), viewHeight)] : [parsePercent$1(seriesModel.get('minSize'), viewWidth), parsePercent$1(seriesModel.get('maxSize'), viewWidth)]; + var dataExtent = data.getDataExtent(valueDim); + var min = seriesModel.get('min'); + var max = seriesModel.get('max'); + + if (min == null) { + min = Math.min(dataExtent[0], 0); + } + + if (max == null) { + max = dataExtent[1]; + } + + var funnelAlign = seriesModel.get('funnelAlign'); + var gap = seriesModel.get('gap'); + var viewSize = orient === 'horizontal' ? viewWidth : viewHeight; + var itemSize = (viewSize - gap * (data.count() - 1)) / data.count(); + + var getLinePoints = function (idx, offset) { + // End point index is data.count() and we assign it 0 + if (orient === 'horizontal') { + var val_1 = data.get(valueDim, idx) || 0; + var itemHeight = linearMap(val_1, [min, max], sizeExtent, true); + var y0 = void 0; + + switch (funnelAlign) { + case 'top': + y0 = y; + break; + + case 'center': + y0 = y + (viewHeight - itemHeight) / 2; + break; + + case 'bottom': + y0 = y + (viewHeight - itemHeight); + break; + } + + return [[offset, y0], [offset, y0 + itemHeight]]; + } + + var val = data.get(valueDim, idx) || 0; + var itemWidth = linearMap(val, [min, max], sizeExtent, true); + var x0; + + switch (funnelAlign) { + case 'left': + x0 = x; + break; + + case 'center': + x0 = x + (viewWidth - itemWidth) / 2; + break; + + case 'right': + x0 = x + viewWidth - itemWidth; + break; + } + + return [[x0, offset], [x0 + itemWidth, offset]]; + }; + + if (sort === 'ascending') { + // From bottom to top + itemSize = -itemSize; + gap = -gap; + + if (orient === 'horizontal') { + x += viewWidth; + } else { + y += viewHeight; + } + + indices = indices.reverse(); + } + + for (var i = 0; i < indices.length; i++) { + var idx = indices[i]; + var nextIdx = indices[i + 1]; + var itemModel = data.getItemModel(idx); + + if (orient === 'horizontal') { + var width = itemModel.get(['itemStyle', 'width']); + + if (width == null) { + width = itemSize; + } else { + width = parsePercent$1(width, viewWidth); + + if (sort === 'ascending') { + width = -width; + } + } + + var start = getLinePoints(idx, x); + var end = getLinePoints(nextIdx, x + width); + x += width + gap; + data.setItemLayout(idx, { + points: start.concat(end.slice().reverse()) + }); + } else { + var height = itemModel.get(['itemStyle', 'height']); + + if (height == null) { + height = itemSize; + } else { + height = parsePercent$1(height, viewHeight); + + if (sort === 'ascending') { + height = -height; + } + } + + var start = getLinePoints(idx, y); + var end = getLinePoints(nextIdx, y + height); + y += height + gap; + data.setItemLayout(idx, { + points: start.concat(end.slice().reverse()) + }); + } + } + + labelLayout(data); + }); + } + + function install$f(registers) { + registers.registerChartView(FunnelView); + registers.registerSeriesModel(FunnelSeriesModel); + registers.registerLayout(funnelLayout); + registers.registerProcessor(dataFilter('funnel')); + } + + var DEFAULT_SMOOTH = 0.3; + + var ParallelView = + /** @class */ + function (_super) { + __extends(ParallelView, _super); + + function ParallelView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ParallelView.type; + _this._dataGroup = new Group(); + _this._initialized = false; + return _this; + } + + ParallelView.prototype.init = function () { + this.group.add(this._dataGroup); + }; + /** + * @override + */ + + + ParallelView.prototype.render = function (seriesModel, ecModel, api, payload) { + var dataGroup = this._dataGroup; + var data = seriesModel.getData(); + var oldData = this._data; + var coordSys = seriesModel.coordinateSystem; + var dimensions = coordSys.dimensions; + var seriesScope = makeSeriesScope$2(seriesModel); + data.diff(oldData).add(add).update(update).remove(remove).execute(); + + function add(newDataIndex) { + var line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys); + updateElCommon(line, data, newDataIndex, seriesScope); + } + + function update(newDataIndex, oldDataIndex) { + var line = oldData.getItemGraphicEl(oldDataIndex); + var points = createLinePoints(data, newDataIndex, dimensions, coordSys); + data.setItemGraphicEl(newDataIndex, line); + updateProps(line, { + shape: { + points: points + } + }, seriesModel, newDataIndex); + saveOldStyle(line); + updateElCommon(line, data, newDataIndex, seriesScope); + } + + function remove(oldDataIndex) { + var line = oldData.getItemGraphicEl(oldDataIndex); + dataGroup.remove(line); + } // First create + + + if (!this._initialized) { + this._initialized = true; + var clipPath = createGridClipShape(coordSys, seriesModel, function () { + // Callback will be invoked immediately if there is no animation + setTimeout(function () { + dataGroup.removeClipPath(); + }); + }); + dataGroup.setClipPath(clipPath); + } + + this._data = data; + }; + + ParallelView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) { + this._initialized = true; + this._data = null; + + this._dataGroup.removeAll(); + }; + + ParallelView.prototype.incrementalRender = function (taskParams, seriesModel, ecModel) { + var data = seriesModel.getData(); + var coordSys = seriesModel.coordinateSystem; + var dimensions = coordSys.dimensions; + var seriesScope = makeSeriesScope$2(seriesModel); + + for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) { + var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys); + line.incremental = true; + updateElCommon(line, data, dataIndex, seriesScope); + } + }; + + ParallelView.prototype.remove = function () { + this._dataGroup && this._dataGroup.removeAll(); + this._data = null; + }; + + ParallelView.type = 'parallel'; + return ParallelView; + }(ChartView); + + function createGridClipShape(coordSys, seriesModel, cb) { + var parallelModel = coordSys.model; + var rect = coordSys.getRect(); + var rectEl = new Rect({ + shape: { + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + } + }); + var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height'; + rectEl.setShape(dim, 0); + initProps(rectEl, { + shape: { + width: rect.width, + height: rect.height + } + }, seriesModel, cb); + return rectEl; + } + + function createLinePoints(data, dataIndex, dimensions, coordSys) { + var points = []; + + for (var i = 0; i < dimensions.length; i++) { + var dimName = dimensions[i]; + var value = data.get(data.mapDimension(dimName), dataIndex); + + if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) { + points.push(coordSys.dataToPoint(value, dimName)); + } + } + + return points; + } + + function addEl(data, dataGroup, dataIndex, dimensions, coordSys) { + var points = createLinePoints(data, dataIndex, dimensions, coordSys); + var line = new Polyline({ + shape: { + points: points + }, + // silent: true, + z2: 10 + }); + dataGroup.add(line); + data.setItemGraphicEl(dataIndex, line); + return line; + } + + function makeSeriesScope$2(seriesModel) { + var smooth = seriesModel.get('smooth', true); + smooth === true && (smooth = DEFAULT_SMOOTH); + smooth = numericToNumber(smooth); + eqNaN(smooth) && (smooth = 0); + return { + smooth: smooth + }; + } + + function updateElCommon(el, data, dataIndex, seriesScope) { + el.useStyle(data.getItemVisual(dataIndex, 'style')); + el.style.fill = null; + el.setShape('smooth', seriesScope.smooth); + var itemModel = data.getItemModel(dataIndex); + var emphasisModel = itemModel.getModel('emphasis'); + setStatesStylesFromModel(el, itemModel, 'lineStyle'); + enableHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope')); + } // function simpleDiff(oldData, newData, dimensions) { + // let oldLen; + // if (!oldData + // || !oldData.__plProgressive + // || (oldLen = oldData.count()) !== newData.count() + // ) { + // return true; + // } + // let dimLen = dimensions.length; + // for (let i = 0; i < oldLen; i++) { + // for (let j = 0; j < dimLen; j++) { + // if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) { + // return true; + // } + // } + // } + // return false; + // } + // FIXME put in common util? + + + function isEmptyValue(val, axisType) { + return axisType === 'category' ? val == null : val == null || isNaN(val); // axisType === 'value' + } + + var ParallelSeriesModel = + /** @class */ + function (_super) { + __extends(ParallelSeriesModel, _super); + + function ParallelSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ParallelSeriesModel.type; + _this.visualStyleAccessPath = 'lineStyle'; + _this.visualDrawType = 'stroke'; + return _this; + } + + ParallelSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesData(null, this, { + useEncodeDefaulter: bind(makeDefaultEncode, null, this) + }); + }; + /** + * User can get data raw indices on 'axisAreaSelected' event received. + * + * @return Raw indices + */ + + + ParallelSeriesModel.prototype.getRawIndicesByActiveState = function (activeState) { + var coordSys = this.coordinateSystem; + var data = this.getData(); + var indices = []; + coordSys.eachActiveState(data, function (theActiveState, dataIndex) { + if (activeState === theActiveState) { + indices.push(data.getRawIndex(dataIndex)); + } + }); + return indices; + }; + + ParallelSeriesModel.type = 'series.parallel'; + ParallelSeriesModel.dependencies = ['parallel']; + ParallelSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + coordinateSystem: 'parallel', + parallelIndex: 0, + label: { + show: false + }, + inactiveOpacity: 0.05, + activeOpacity: 1, + lineStyle: { + width: 1, + opacity: 0.45, + type: 'solid' + }, + emphasis: { + label: { + show: false + } + }, + progressive: 500, + smooth: false, + animationEasing: 'linear' + }; + return ParallelSeriesModel; + }(SeriesModel); + + function makeDefaultEncode(seriesModel) { + // The mapping of parallelAxis dimension to data dimension can + // be specified in parallelAxis.option.dim. For example, if + // parallelAxis.option.dim is 'dim3', it mapping to the third + // dimension of data. But `data.encode` has higher priority. + // Moreover, parallelModel.dimension should not be regarded as data + // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6']; + var parallelModel = seriesModel.ecModel.getComponent('parallel', seriesModel.get('parallelIndex')); + + if (!parallelModel) { + return; + } + + var encodeDefine = {}; + each(parallelModel.dimensions, function (axisDim) { + var dataDimIndex = convertDimNameToNumber(axisDim); + encodeDefine[axisDim] = dataDimIndex; + }); + return encodeDefine; + } + + function convertDimNameToNumber(dimName) { + return +dimName.replace('dim', ''); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var opacityAccessPath$1 = ['lineStyle', 'opacity']; + var parallelVisual = { + seriesType: 'parallel', + reset: function (seriesModel, ecModel) { + var coordSys = seriesModel.coordinateSystem; + var opacityMap = { + normal: seriesModel.get(['lineStyle', 'opacity']), + active: seriesModel.get('activeOpacity'), + inactive: seriesModel.get('inactiveOpacity') + }; + return { + progress: function (params, data) { + coordSys.eachActiveState(data, function (activeState, dataIndex) { + var opacity = opacityMap[activeState]; + + if (activeState === 'normal' && data.hasItemOption) { + var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath$1, true); + itemOpacity != null && (opacity = itemOpacity); + } + + var existsStyle = data.ensureUniqueItemVisual(dataIndex, 'style'); + existsStyle.opacity = opacity; + }, params.start, params.end); + } + }; + } + }; + + function parallelPreprocessor(option) { + createParallelIfNeeded(option); + mergeAxisOptionFromParallel(option); + } + /** + * Create a parallel coordinate if not exists. + * @inner + */ + + function createParallelIfNeeded(option) { + if (option.parallel) { + return; + } + + var hasParallelSeries = false; + each(option.series, function (seriesOpt) { + if (seriesOpt && seriesOpt.type === 'parallel') { + hasParallelSeries = true; + } + }); + + if (hasParallelSeries) { + option.parallel = [{}]; + } + } + /** + * Merge aixs definition from parallel option (if exists) to axis option. + * @inner + */ + + + function mergeAxisOptionFromParallel(option) { + var axes = normalizeToArray(option.parallelAxis); + each(axes, function (axisOption) { + if (!isObject(axisOption)) { + return; + } + + var parallelIndex = axisOption.parallelIndex || 0; + var parallelOption = normalizeToArray(option.parallel)[parallelIndex]; + + if (parallelOption && parallelOption.parallelAxisDefault) { + merge(axisOption, parallelOption.parallelAxisDefault, false); + } + }); + } + + var CLICK_THRESHOLD = 5; // > 4 + + var ParallelView$1 = + /** @class */ + function (_super) { + __extends(ParallelView, _super); + + function ParallelView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ParallelView.type; + return _this; + } + + ParallelView.prototype.render = function (parallelModel, ecModel, api) { + this._model = parallelModel; + this._api = api; + + if (!this._handlers) { + this._handlers = {}; + each(handlers, function (handler, eventName) { + api.getZr().on(eventName, this._handlers[eventName] = bind(handler, this)); + }, this); + } + + createOrUpdate(this, '_throttledDispatchExpand', parallelModel.get('axisExpandRate'), 'fixRate'); + }; + + ParallelView.prototype.dispose = function (ecModel, api) { + each(this._handlers, function (handler, eventName) { + api.getZr().off(eventName, handler); + }); + this._handlers = null; + }; + /** + * @internal + * @param {Object} [opt] If null, cancle the last action triggering for debounce. + */ + + + ParallelView.prototype._throttledDispatchExpand = function (opt) { + this._dispatchExpand(opt); + }; + /** + * @internal + */ + + + ParallelView.prototype._dispatchExpand = function (opt) { + opt && this._api.dispatchAction(extend({ + type: 'parallelAxisExpand' + }, opt)); + }; + + ParallelView.type = 'parallel'; + return ParallelView; + }(ComponentView); + + var handlers = { + mousedown: function (e) { + if (checkTrigger(this, 'click')) { + this._mouseDownPoint = [e.offsetX, e.offsetY]; + } + }, + mouseup: function (e) { + var mouseDownPoint = this._mouseDownPoint; + + if (checkTrigger(this, 'click') && mouseDownPoint) { + var point = [e.offsetX, e.offsetY]; + var dist = Math.pow(mouseDownPoint[0] - point[0], 2) + Math.pow(mouseDownPoint[1] - point[1], 2); + + if (dist > CLICK_THRESHOLD) { + return; + } + + var result = this._model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]); + + result.behavior !== 'none' && this._dispatchExpand({ + axisExpandWindow: result.axisExpandWindow + }); + } + + this._mouseDownPoint = null; + }, + mousemove: function (e) { + // Should do nothing when brushing. + if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) { + return; + } + + var model = this._model; + var result = model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]); + var behavior = result.behavior; + behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce')); + + this._throttledDispatchExpand(behavior === 'none' ? null // Cancle the last trigger, in case that mouse slide out of the area quickly. + : { + axisExpandWindow: result.axisExpandWindow, + // Jumping uses animation, and sliding suppresses animation. + animation: behavior === 'jump' ? null : { + duration: 0 // Disable animation. + + } + }); + } + }; + + function checkTrigger(view, triggerOn) { + var model = view._model; + return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn; + } + + var ParallelModel = + /** @class */ + function (_super) { + __extends(ParallelModel, _super); + + function ParallelModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ParallelModel.type; + return _this; + } + + ParallelModel.prototype.init = function () { + _super.prototype.init.apply(this, arguments); + + this.mergeOption({}); + }; + + ParallelModel.prototype.mergeOption = function (newOption) { + var thisOption = this.option; + newOption && merge(thisOption, newOption, true); + + this._initDimensions(); + }; + /** + * Whether series or axis is in this coordinate system. + */ + + + ParallelModel.prototype.contains = function (model, ecModel) { + var parallelIndex = model.get('parallelIndex'); + return parallelIndex != null && ecModel.getComponent('parallel', parallelIndex) === this; + }; + + ParallelModel.prototype.setAxisExpand = function (opt) { + each(['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'], function (name) { + if (opt.hasOwnProperty(name)) { + // @ts-ignore FIXME: why "never" inferred in this.option[name]? + this.option[name] = opt[name]; + } + }, this); + }; + + ParallelModel.prototype._initDimensions = function () { + var dimensions = this.dimensions = []; + var parallelAxisIndex = this.parallelAxisIndex = []; + var axisModels = filter(this.ecModel.queryComponents({ + mainType: 'parallelAxis' + }), function (axisModel) { + // Can not use this.contains here, because + // initialization has not been completed yet. + return (axisModel.get('parallelIndex') || 0) === this.componentIndex; + }, this); + each(axisModels, function (axisModel) { + dimensions.push('dim' + axisModel.get('dim')); + parallelAxisIndex.push(axisModel.componentIndex); + }); + }; + + ParallelModel.type = 'parallel'; + ParallelModel.dependencies = ['parallelAxis']; + ParallelModel.layoutMode = 'box'; + ParallelModel.defaultOption = { + zlevel: 0, + z: 0, + left: 80, + top: 60, + right: 80, + bottom: 60, + // width: {totalWidth} - left - right, + // height: {totalHeight} - top - bottom, + layout: 'horizontal', + // FIXME + // naming? + axisExpandable: false, + axisExpandCenter: null, + axisExpandCount: 0, + axisExpandWidth: 50, + axisExpandRate: 17, + axisExpandDebounce: 50, + // [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full. + // Do not doc to user until necessary. + axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4], + axisExpandTriggerOn: 'click', + parallelAxisDefault: null + }; + return ParallelModel; + }(ComponentModel); + + var ParallelAxis = + /** @class */ + function (_super) { + __extends(ParallelAxis, _super); + + function ParallelAxis(dim, scale, coordExtent, axisType, axisIndex) { + var _this = _super.call(this, dim, scale, coordExtent) || this; + + _this.type = axisType || 'value'; + _this.axisIndex = axisIndex; + return _this; + } + + ParallelAxis.prototype.isHorizontal = function () { + return this.coordinateSystem.getModel().get('layout') !== 'horizontal'; + }; + + return ParallelAxis; + }(Axis); + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + /** + * Calculate slider move result. + * Usage: + * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as + * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`. + * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`. + * + * @param delta Move length. + * @param handleEnds handleEnds[0] can be bigger then handleEnds[1]. + * handleEnds will be modified in this method. + * @param extent handleEnds is restricted by extent. + * extent[0] should less or equals than extent[1]. + * @param handleIndex Can be 'all', means that both move the two handleEnds. + * @param minSpan The range of dataZoom can not be smaller than that. + * If not set, handle0 and cross handle1. If set as a non-negative + * number (including `0`), handles will push each other when reaching + * the minSpan. + * @param maxSpan The range of dataZoom can not be larger than that. + * @return The input handleEnds. + */ + function sliderMove(delta, handleEnds, extent, handleIndex, minSpan, maxSpan) { + delta = delta || 0; + var extentSpan = extent[1] - extent[0]; // Notice maxSpan and minSpan can be null/undefined. + + if (minSpan != null) { + minSpan = restrict(minSpan, [0, extentSpan]); + } + + if (maxSpan != null) { + maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0); + } + + if (handleIndex === 'all') { + var handleSpan = Math.abs(handleEnds[1] - handleEnds[0]); + handleSpan = restrict(handleSpan, [0, extentSpan]); + minSpan = maxSpan = restrict(handleSpan, [minSpan, maxSpan]); + handleIndex = 0; + } + + handleEnds[0] = restrict(handleEnds[0], extent); + handleEnds[1] = restrict(handleEnds[1], extent); + var originalDistSign = getSpanSign(handleEnds, handleIndex); + handleEnds[handleIndex] += delta; // Restrict in extent. + + var extentMinSpan = minSpan || 0; + var realExtent = extent.slice(); + originalDistSign.sign < 0 ? realExtent[0] += extentMinSpan : realExtent[1] -= extentMinSpan; + handleEnds[handleIndex] = restrict(handleEnds[handleIndex], realExtent); // Expand span. + + var currDistSign; + currDistSign = getSpanSign(handleEnds, handleIndex); + + if (minSpan != null && (currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan)) { + // If minSpan exists, 'cross' is forbidden. + handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan; + } // Shrink span. + + + currDistSign = getSpanSign(handleEnds, handleIndex); + + if (maxSpan != null && currDistSign.span > maxSpan) { + handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan; + } + + return handleEnds; + } + + function getSpanSign(handleEnds, handleIndex) { + var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex]; // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0] + // is at left of handleEnds[1] for non-cross case. + + return { + span: Math.abs(dist), + sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1 + }; + } + + function restrict(value, extend) { + return Math.min(extend[1] != null ? extend[1] : Infinity, Math.max(extend[0] != null ? extend[0] : -Infinity, value)); + } + + var each$5 = each; + var mathMin$8 = Math.min; + var mathMax$8 = Math.max; + var mathFloor$1 = Math.floor; + var mathCeil$1 = Math.ceil; + var round$2 = round; + var PI$7 = Math.PI; + + var Parallel = + /** @class */ + function () { + function Parallel(parallelModel, ecModel, api) { + this.type = 'parallel'; + /** + * key: dimension + */ + + this._axesMap = createHashMap(); + /** + * key: dimension + * value: {position: [], rotation, } + */ + + this._axesLayout = {}; + this.dimensions = parallelModel.dimensions; + this._model = parallelModel; + + this._init(parallelModel, ecModel, api); + } + + Parallel.prototype._init = function (parallelModel, ecModel, api) { + var dimensions = parallelModel.dimensions; + var parallelAxisIndex = parallelModel.parallelAxisIndex; + each$5(dimensions, function (dim, idx) { + var axisIndex = parallelAxisIndex[idx]; + var axisModel = ecModel.getComponent('parallelAxis', axisIndex); + + var axis = this._axesMap.set(dim, new ParallelAxis(dim, createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisIndex)); + + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); // Injection + + axisModel.axis = axis; + axis.model = axisModel; + axis.coordinateSystem = axisModel.coordinateSystem = this; + }, this); + }; + /** + * Update axis scale after data processed + */ + + + Parallel.prototype.update = function (ecModel, api) { + this._updateAxesFromSeries(this._model, ecModel); + }; + + Parallel.prototype.containPoint = function (point) { + var layoutInfo = this._makeLayoutInfo(); + + var axisBase = layoutInfo.axisBase; + var layoutBase = layoutInfo.layoutBase; + var pixelDimIndex = layoutInfo.pixelDimIndex; + var pAxis = point[1 - pixelDimIndex]; + var pLayout = point[pixelDimIndex]; + return pAxis >= axisBase && pAxis <= axisBase + layoutInfo.axisLength && pLayout >= layoutBase && pLayout <= layoutBase + layoutInfo.layoutLength; + }; + + Parallel.prototype.getModel = function () { + return this._model; + }; + /** + * Update properties from series + */ + + + Parallel.prototype._updateAxesFromSeries = function (parallelModel, ecModel) { + ecModel.eachSeries(function (seriesModel) { + if (!parallelModel.contains(seriesModel, ecModel)) { + return; + } + + var data = seriesModel.getData(); + each$5(this.dimensions, function (dim) { + var axis = this._axesMap.get(dim); + + axis.scale.unionExtentFromData(data, data.mapDimension(dim)); + niceScaleExtent(axis.scale, axis.model); + }, this); + }, this); + }; + /** + * Resize the parallel coordinate system. + */ + + + Parallel.prototype.resize = function (parallelModel, api) { + this._rect = getLayoutRect(parallelModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + + this._layoutAxes(); + }; + + Parallel.prototype.getRect = function () { + return this._rect; + }; + + Parallel.prototype._makeLayoutInfo = function () { + var parallelModel = this._model; + var rect = this._rect; + var xy = ['x', 'y']; + var wh = ['width', 'height']; + var layout = parallelModel.get('layout'); + var pixelDimIndex = layout === 'horizontal' ? 0 : 1; + var layoutLength = rect[wh[pixelDimIndex]]; + var layoutExtent = [0, layoutLength]; + var axisCount = this.dimensions.length; + var axisExpandWidth = restrict$1(parallelModel.get('axisExpandWidth'), layoutExtent); + var axisExpandCount = restrict$1(parallelModel.get('axisExpandCount') || 0, [0, axisCount]); + var axisExpandable = parallelModel.get('axisExpandable') && axisCount > 3 && axisCount > axisExpandCount && axisExpandCount > 1 && axisExpandWidth > 0 && layoutLength > 0; // `axisExpandWindow` is According to the coordinates of [0, axisExpandLength], + // for sake of consider the case that axisCollapseWidth is 0 (when screen is narrow), + // where collapsed axes should be overlapped. + + var axisExpandWindow = parallelModel.get('axisExpandWindow'); + var winSize; + + if (!axisExpandWindow) { + winSize = restrict$1(axisExpandWidth * (axisExpandCount - 1), layoutExtent); + var axisExpandCenter = parallelModel.get('axisExpandCenter') || mathFloor$1(axisCount / 2); + axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2]; + axisExpandWindow[1] = axisExpandWindow[0] + winSize; + } else { + winSize = restrict$1(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent); + axisExpandWindow[1] = axisExpandWindow[0] + winSize; + } + + var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount); // Avoid axisCollapseWidth is too small. + + axisCollapseWidth < 3 && (axisCollapseWidth = 0); // Find the first and last indices > ewin[0] and < ewin[1]. + + var winInnerIndices = [mathFloor$1(round$2(axisExpandWindow[0] / axisExpandWidth, 1)) + 1, mathCeil$1(round$2(axisExpandWindow[1] / axisExpandWidth, 1)) - 1]; // Pos in ec coordinates. + + var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0]; + return { + layout: layout, + pixelDimIndex: pixelDimIndex, + layoutBase: rect[xy[pixelDimIndex]], + layoutLength: layoutLength, + axisBase: rect[xy[1 - pixelDimIndex]], + axisLength: rect[wh[1 - pixelDimIndex]], + axisExpandable: axisExpandable, + axisExpandWidth: axisExpandWidth, + axisCollapseWidth: axisCollapseWidth, + axisExpandWindow: axisExpandWindow, + axisCount: axisCount, + winInnerIndices: winInnerIndices, + axisExpandWindow0Pos: axisExpandWindow0Pos + }; + }; + + Parallel.prototype._layoutAxes = function () { + var rect = this._rect; + var axes = this._axesMap; + var dimensions = this.dimensions; + + var layoutInfo = this._makeLayoutInfo(); + + var layout = layoutInfo.layout; + axes.each(function (axis) { + var axisExtent = [0, layoutInfo.axisLength]; + var idx = axis.inverse ? 1 : 0; + axis.setExtent(axisExtent[idx], axisExtent[1 - idx]); + }); + each$5(dimensions, function (dim, idx) { + var posInfo = (layoutInfo.axisExpandable ? layoutAxisWithExpand : layoutAxisWithoutExpand)(idx, layoutInfo); + var positionTable = { + horizontal: { + x: posInfo.position, + y: layoutInfo.axisLength + }, + vertical: { + x: 0, + y: posInfo.position + } + }; + var rotationTable = { + horizontal: PI$7 / 2, + vertical: 0 + }; + var position = [positionTable[layout].x + rect.x, positionTable[layout].y + rect.y]; + var rotation = rotationTable[layout]; + var transform = create$1(); + rotate(transform, transform, rotation); + translate(transform, transform, position); // TODO + // tick layout info + // TODO + // update dimensions info based on axis order. + + this._axesLayout[dim] = { + position: position, + rotation: rotation, + transform: transform, + axisNameAvailableWidth: posInfo.axisNameAvailableWidth, + axisLabelShow: posInfo.axisLabelShow, + nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth, + tickDirection: 1, + labelDirection: 1 + }; + }, this); + }; + /** + * Get axis by dim. + */ + + + Parallel.prototype.getAxis = function (dim) { + return this._axesMap.get(dim); + }; + /** + * Convert a dim value of a single item of series data to Point. + */ + + + Parallel.prototype.dataToPoint = function (value, dim) { + return this.axisCoordToPoint(this._axesMap.get(dim).dataToCoord(value), dim); + }; + /** + * Travel data for one time, get activeState of each data item. + * @param start the start dataIndex that travel from. + * @param end the next dataIndex of the last dataIndex will be travel. + */ + + + Parallel.prototype.eachActiveState = function (data, callback, start, end) { + start == null && (start = 0); + end == null && (end = data.count()); + var axesMap = this._axesMap; + var dimensions = this.dimensions; + var dataDimensions = []; + var axisModels = []; + each(dimensions, function (axisDim) { + dataDimensions.push(data.mapDimension(axisDim)); + axisModels.push(axesMap.get(axisDim).model); + }); + var hasActiveSet = this.hasAxisBrushed(); + + for (var dataIndex = start; dataIndex < end; dataIndex++) { + var activeState = void 0; + + if (!hasActiveSet) { + activeState = 'normal'; + } else { + activeState = 'active'; + var values = data.getValues(dataDimensions, dataIndex); + + for (var j = 0, lenj = dimensions.length; j < lenj; j++) { + var state = axisModels[j].getActiveState(values[j]); + + if (state === 'inactive') { + activeState = 'inactive'; + break; + } + } + } + + callback(activeState, dataIndex); + } + }; + /** + * Whether has any activeSet. + */ + + + Parallel.prototype.hasAxisBrushed = function () { + var dimensions = this.dimensions; + var axesMap = this._axesMap; + var hasActiveSet = false; + + for (var j = 0, lenj = dimensions.length; j < lenj; j++) { + if (axesMap.get(dimensions[j]).model.getActiveState() !== 'normal') { + hasActiveSet = true; + } + } + + return hasActiveSet; + }; + /** + * Convert coords of each axis to Point. + * Return point. For example: [10, 20] + */ + + + Parallel.prototype.axisCoordToPoint = function (coord, dim) { + var axisLayout = this._axesLayout[dim]; + return applyTransform$1([coord, 0], axisLayout.transform); + }; + /** + * Get axis layout. + */ + + + Parallel.prototype.getAxisLayout = function (dim) { + return clone(this._axesLayout[dim]); + }; + /** + * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}. + */ + + + Parallel.prototype.getSlidedAxisExpandWindow = function (point) { + var layoutInfo = this._makeLayoutInfo(); + + var pixelDimIndex = layoutInfo.pixelDimIndex; + var axisExpandWindow = layoutInfo.axisExpandWindow.slice(); + var winSize = axisExpandWindow[1] - axisExpandWindow[0]; + var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)]; // Out of the area of coordinate system. + + if (!this.containPoint(point)) { + return { + behavior: 'none', + axisExpandWindow: axisExpandWindow + }; + } // Conver the point from global to expand coordinates. + + + var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos; // For dragging operation convenience, the window should not be + // slided when mouse is the center area of the window. + + var delta; + var behavior = 'slide'; + var axisCollapseWidth = layoutInfo.axisCollapseWidth; + + var triggerArea = this._model.get('axisExpandSlideTriggerArea'); // But consider touch device, jump is necessary. + + + var useJump = triggerArea[0] != null; + + if (axisCollapseWidth) { + if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) { + behavior = 'jump'; + delta = pointCoord - winSize * triggerArea[2]; + } else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) { + behavior = 'jump'; + delta = pointCoord - winSize * (1 - triggerArea[2]); + } else { + (delta = pointCoord - winSize * triggerArea[1]) >= 0 && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0 && (delta = 0); + } + + delta *= layoutInfo.axisExpandWidth / axisCollapseWidth; + delta ? sliderMove(delta, axisExpandWindow, extent, 'all') // Avoid nonsense triger on mousemove. + : behavior = 'none'; + } // When screen is too narrow, make it visible and slidable, although it is hard to interact. + else { + var winSize2 = axisExpandWindow[1] - axisExpandWindow[0]; + var pos = extent[1] * pointCoord / winSize2; + axisExpandWindow = [mathMax$8(0, pos - winSize2 / 2)]; + axisExpandWindow[1] = mathMin$8(extent[1], axisExpandWindow[0] + winSize2); + axisExpandWindow[0] = axisExpandWindow[1] - winSize2; + } + + return { + axisExpandWindow: axisExpandWindow, + behavior: behavior + }; + }; + + return Parallel; + }(); + + function restrict$1(len, extent) { + return mathMin$8(mathMax$8(len, extent[0]), extent[1]); + } + + function layoutAxisWithoutExpand(axisIndex, layoutInfo) { + var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1); + return { + position: step * axisIndex, + axisNameAvailableWidth: step, + axisLabelShow: true + }; + } + + function layoutAxisWithExpand(axisIndex, layoutInfo) { + var layoutLength = layoutInfo.layoutLength; + var axisExpandWidth = layoutInfo.axisExpandWidth; + var axisCount = layoutInfo.axisCount; + var axisCollapseWidth = layoutInfo.axisCollapseWidth; + var winInnerIndices = layoutInfo.winInnerIndices; + var position; + var axisNameAvailableWidth = axisCollapseWidth; + var axisLabelShow = false; + var nameTruncateMaxWidth; + + if (axisIndex < winInnerIndices[0]) { + position = axisIndex * axisCollapseWidth; + nameTruncateMaxWidth = axisCollapseWidth; + } else if (axisIndex <= winInnerIndices[1]) { + position = layoutInfo.axisExpandWindow0Pos + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0]; + axisNameAvailableWidth = axisExpandWidth; + axisLabelShow = true; + } else { + position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth; + nameTruncateMaxWidth = axisCollapseWidth; + } + + return { + position: position, + axisNameAvailableWidth: axisNameAvailableWidth, + axisLabelShow: axisLabelShow, + nameTruncateMaxWidth: nameTruncateMaxWidth + }; + } + + function createParallelCoordSys(ecModel, api) { + var coordSysList = []; + ecModel.eachComponent('parallel', function (parallelModel, idx) { + var coordSys = new Parallel(parallelModel, ecModel, api); + coordSys.name = 'parallel_' + idx; + coordSys.resize(parallelModel, api); + parallelModel.coordinateSystem = coordSys; + coordSys.model = parallelModel; + coordSysList.push(coordSys); + }); // Inject the coordinateSystems into seriesModel + + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'parallel') { + var parallelModel = seriesModel.getReferringComponents('parallel', SINGLE_REFERRING).models[0]; + seriesModel.coordinateSystem = parallelModel.coordinateSystem; + } + }); + return coordSysList; + } + + var parallelCoordSysCreator = { + create: createParallelCoordSys + }; + + var ParallelAxisModel = + /** @class */ + function (_super) { + __extends(ParallelAxisModel, _super); + + function ParallelAxisModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ParallelAxisModel.type; + /** + * @readOnly + */ + + _this.activeIntervals = []; + return _this; + } + + ParallelAxisModel.prototype.getAreaSelectStyle = function () { + return makeStyleMapper([['fill', 'color'], ['lineWidth', 'borderWidth'], ['stroke', 'borderColor'], ['width', 'width'], ['opacity', 'opacity'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`. + // So do not transfer decal directly. + ])(this.getModel('areaSelectStyle')); + }; + /** + * The code of this feature is put on AxisModel but not ParallelAxis, + * because axisModel can be alive after echarts updating but instance of + * ParallelAxis having been disposed. this._activeInterval should be kept + * when action dispatched (i.e. legend click). + * + * @param intervals `interval.length === 0` means set all active. + */ + + + ParallelAxisModel.prototype.setActiveIntervals = function (intervals) { + var activeIntervals = this.activeIntervals = clone(intervals); // Normalize + + if (activeIntervals) { + for (var i = activeIntervals.length - 1; i >= 0; i--) { + asc(activeIntervals[i]); + } + } + }; + /** + * @param value When only attempting detect whether 'no activeIntervals set', + * `value` is not needed to be input. + */ + + + ParallelAxisModel.prototype.getActiveState = function (value) { + var activeIntervals = this.activeIntervals; + + if (!activeIntervals.length) { + return 'normal'; + } + + if (value == null || isNaN(+value)) { + return 'inactive'; + } // Simple optimization + + + if (activeIntervals.length === 1) { + var interval = activeIntervals[0]; + + if (interval[0] <= value && value <= interval[1]) { + return 'active'; + } + } else { + for (var i = 0, len = activeIntervals.length; i < len; i++) { + if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) { + return 'active'; + } + } + } + + return 'inactive'; + }; + + return ParallelAxisModel; + }(ComponentModel); + + mixin(ParallelAxisModel, AxisModelCommonMixin); + + var BRUSH_PANEL_GLOBAL = true; + var mathMin$9 = Math.min; + var mathMax$9 = Math.max; + var mathPow$2 = Math.pow; + var COVER_Z = 10000; + var UNSELECT_THRESHOLD = 6; + var MIN_RESIZE_LINE_WIDTH = 6; + var MUTEX_RESOURCE_KEY = 'globalPan'; + var DIRECTION_MAP = { + w: [0, 0], + e: [0, 1], + n: [1, 0], + s: [1, 1] + }; + var CURSOR_MAP = { + w: 'ew', + e: 'ew', + n: 'ns', + s: 'ns', + ne: 'nesw', + sw: 'nesw', + nw: 'nwse', + se: 'nwse' + }; + var DEFAULT_BRUSH_OPT = { + brushStyle: { + lineWidth: 2, + stroke: 'rgba(210,219,238,0.3)', + fill: '#D2DBEE' + }, + transformable: true, + brushMode: 'single', + removeOnClick: false + }; + var baseUID = 0; + /** + * params: + * areas: Array., coord relates to container group, + * If no container specified, to global. + * opt { + * isEnd: boolean, + * removeOnClick: boolean + * } + */ + + var BrushController = + /** @class */ + function (_super) { + __extends(BrushController, _super); + + function BrushController(zr) { + var _this = _super.call(this) || this; + /** + * @internal + */ + + + _this._track = []; + /** + * @internal + */ + + _this._covers = []; + _this._handlers = {}; + + if ("development" !== 'production') { + assert(zr); + } + + _this._zr = zr; + _this.group = new Group(); + _this._uid = 'brushController_' + baseUID++; + each(pointerHandlers, function (handler, eventName) { + this._handlers[eventName] = bind(handler, this); + }, _this); + return _this; + } + /** + * If set to `false`, select disabled. + */ + + + BrushController.prototype.enableBrush = function (brushOption) { + if ("development" !== 'production') { + assert(this._mounted); + } + + this._brushType && this._doDisableBrush(); + brushOption.brushType && this._doEnableBrush(brushOption); + return this; + }; + + BrushController.prototype._doEnableBrush = function (brushOption) { + var zr = this._zr; // Consider roam, which takes globalPan too. + + if (!this._enableGlobalPan) { + take(zr, MUTEX_RESOURCE_KEY, this._uid); + } + + each(this._handlers, function (handler, eventName) { + zr.on(eventName, handler); + }); + this._brushType = brushOption.brushType; + this._brushOption = merge(clone(DEFAULT_BRUSH_OPT), brushOption, true); + }; + + BrushController.prototype._doDisableBrush = function () { + var zr = this._zr; + release(zr, MUTEX_RESOURCE_KEY, this._uid); + each(this._handlers, function (handler, eventName) { + zr.off(eventName, handler); + }); + this._brushType = this._brushOption = null; + }; + /** + * @param panelOpts If not pass, it is global brush. + */ + + + BrushController.prototype.setPanels = function (panelOpts) { + if (panelOpts && panelOpts.length) { + var panels_1 = this._panels = {}; + each(panelOpts, function (panelOpts) { + panels_1[panelOpts.panelId] = clone(panelOpts); + }); + } else { + this._panels = null; + } + + return this; + }; + + BrushController.prototype.mount = function (opt) { + opt = opt || {}; + + if ("development" !== 'production') { + this._mounted = true; // should be at first. + } + + this._enableGlobalPan = opt.enableGlobalPan; + var thisGroup = this.group; + + this._zr.add(thisGroup); + + thisGroup.attr({ + x: opt.x || 0, + y: opt.y || 0, + rotation: opt.rotation || 0, + scaleX: opt.scaleX || 1, + scaleY: opt.scaleY || 1 + }); + this._transform = thisGroup.getLocalTransform(); + return this; + }; // eachCover(cb, context): void { + // each(this._covers, cb, context); + // } + + /** + * Update covers. + * @param coverConfigList + * If coverConfigList is null/undefined, all covers removed. + */ + + + BrushController.prototype.updateCovers = function (coverConfigList) { + if ("development" !== 'production') { + assert(this._mounted); + } + + coverConfigList = map(coverConfigList, function (coverConfig) { + return merge(clone(DEFAULT_BRUSH_OPT), coverConfig, true); + }); + var tmpIdPrefix = '\0-brush-index-'; + var oldCovers = this._covers; + var newCovers = this._covers = []; + var controller = this; + var creatingCover = this._creatingCover; + new DataDiffer(oldCovers, coverConfigList, oldGetKey, getKey).add(addOrUpdate).update(addOrUpdate).remove(remove).execute(); + return this; + + function getKey(brushOption, index) { + return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + '-' + brushOption.brushType; + } + + function oldGetKey(cover, index) { + return getKey(cover.__brushOption, index); + } + + function addOrUpdate(newIndex, oldIndex) { + var newBrushInternal = coverConfigList[newIndex]; // Consider setOption in event listener of brushSelect, + // where updating cover when creating should be forbiden. + + if (oldIndex != null && oldCovers[oldIndex] === creatingCover) { + newCovers[newIndex] = oldCovers[oldIndex]; + } else { + var cover = newCovers[newIndex] = oldIndex != null ? (oldCovers[oldIndex].__brushOption = newBrushInternal, oldCovers[oldIndex]) : endCreating(controller, createCover(controller, newBrushInternal)); + updateCoverAfterCreation(controller, cover); + } + } + + function remove(oldIndex) { + if (oldCovers[oldIndex] !== creatingCover) { + controller.group.remove(oldCovers[oldIndex]); + } + } + }; + + BrushController.prototype.unmount = function () { + if ("development" !== 'production') { + if (!this._mounted) { + return; + } + } + + this.enableBrush(false); // container may 'removeAll' outside. + + clearCovers(this); + + this._zr.remove(this.group); + + if ("development" !== 'production') { + this._mounted = false; // should be at last. + } + + return this; + }; + + BrushController.prototype.dispose = function () { + this.unmount(); + this.off(); + }; + + return BrushController; + }(Eventful); + + function createCover(controller, brushOption) { + var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption); + cover.__brushOption = brushOption; + updateZ(cover, brushOption); + controller.group.add(cover); + return cover; + } + + function endCreating(controller, creatingCover) { + var coverRenderer = getCoverRenderer(creatingCover); + + if (coverRenderer.endCreating) { + coverRenderer.endCreating(controller, creatingCover); + updateZ(creatingCover, creatingCover.__brushOption); + } + + return creatingCover; + } + + function updateCoverShape(controller, cover) { + var brushOption = cover.__brushOption; + getCoverRenderer(cover).updateCoverShape(controller, cover, brushOption.range, brushOption); + } + + function updateZ(cover, brushOption) { + var z = brushOption.z; + z == null && (z = COVER_Z); + cover.traverse(function (el) { + el.z = z; + el.z2 = z; // Consider in given container. + }); + } + + function updateCoverAfterCreation(controller, cover) { + getCoverRenderer(cover).updateCommon(controller, cover); + updateCoverShape(controller, cover); + } + + function getCoverRenderer(cover) { + return coverRenderers[cover.__brushOption.brushType]; + } // return target panel or `true` (means global panel) + + + function getPanelByPoint(controller, e, localCursorPoint) { + var panels = controller._panels; + + if (!panels) { + return BRUSH_PANEL_GLOBAL; // Global panel + } + + var panel; + var transform = controller._transform; + each(panels, function (pn) { + pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn); + }); + return panel; + } // Return a panel or true + + + function getPanelByCover(controller, cover) { + var panels = controller._panels; + + if (!panels) { + return BRUSH_PANEL_GLOBAL; // Global panel + } + + var panelId = cover.__brushOption.panelId; // User may give cover without coord sys info, + // which is then treated as global panel. + + return panelId != null ? panels[panelId] : BRUSH_PANEL_GLOBAL; + } + + function clearCovers(controller) { + var covers = controller._covers; + var originalLength = covers.length; + each(covers, function (cover) { + controller.group.remove(cover); + }, controller); + covers.length = 0; + return !!originalLength; + } + + function trigger$1(controller, opt) { + var areas = map(controller._covers, function (cover) { + var brushOption = cover.__brushOption; + var range = clone(brushOption.range); + return { + brushType: brushOption.brushType, + panelId: brushOption.panelId, + range: range + }; + }); + controller.trigger('brush', { + areas: areas, + isEnd: !!opt.isEnd, + removeOnClick: !!opt.removeOnClick + }); + } + + function shouldShowCover(controller) { + var track = controller._track; + + if (!track.length) { + return false; + } + + var p2 = track[track.length - 1]; + var p1 = track[0]; + var dx = p2[0] - p1[0]; + var dy = p2[1] - p1[1]; + var dist = mathPow$2(dx * dx + dy * dy, 0.5); + return dist > UNSELECT_THRESHOLD; + } + + function getTrackEnds(track) { + var tail = track.length - 1; + tail < 0 && (tail = 0); + return [track[0], track[tail]]; + } + + function createBaseRectCover(rectRangeConverter, controller, brushOption, edgeNameSequences) { + var cover = new Group(); + cover.add(new Rect({ + name: 'main', + style: makeStyle(brushOption), + silent: true, + draggable: true, + cursor: 'move', + drift: curry(driftRect, rectRangeConverter, controller, cover, ['n', 's', 'w', 'e']), + ondragend: curry(trigger$1, controller, { + isEnd: true + }) + })); + each(edgeNameSequences, function (nameSequence) { + cover.add(new Rect({ + name: nameSequence.join(''), + style: { + opacity: 0 + }, + draggable: true, + silent: true, + invisible: true, + drift: curry(driftRect, rectRangeConverter, controller, cover, nameSequence), + ondragend: curry(trigger$1, controller, { + isEnd: true + }) + })); + }); + return cover; + } + + function updateBaseRect(controller, cover, localRange, brushOption) { + var lineWidth = brushOption.brushStyle.lineWidth || 0; + var handleSize = mathMax$9(lineWidth, MIN_RESIZE_LINE_WIDTH); + var x = localRange[0][0]; + var y = localRange[1][0]; + var xa = x - lineWidth / 2; + var ya = y - lineWidth / 2; + var x2 = localRange[0][1]; + var y2 = localRange[1][1]; + var x2a = x2 - handleSize + lineWidth / 2; + var y2a = y2 - handleSize + lineWidth / 2; + var width = x2 - x; + var height = y2 - y; + var widtha = width + lineWidth; + var heighta = height + lineWidth; + updateRectShape(controller, cover, 'main', x, y, width, height); + + if (brushOption.transformable) { + updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta); + updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta); + updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize); + updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize); + updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize); + updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize); + updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize); + updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize); + } + } + + function updateCommon(controller, cover) { + var brushOption = cover.__brushOption; + var transformable = brushOption.transformable; + var mainEl = cover.childAt(0); + mainEl.useStyle(makeStyle(brushOption)); + mainEl.attr({ + silent: !transformable, + cursor: transformable ? 'move' : 'default' + }); + each([['w'], ['e'], ['n'], ['s'], ['s', 'e'], ['s', 'w'], ['n', 'e'], ['n', 'w']], function (nameSequence) { + var el = cover.childOfName(nameSequence.join('')); + var globalDir = nameSequence.length === 1 ? getGlobalDirection1(controller, nameSequence[0]) : getGlobalDirection2(controller, nameSequence); + el && el.attr({ + silent: !transformable, + invisible: !transformable, + cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null + }); + }); + } + + function updateRectShape(controller, cover, name, x, y, w, h) { + var el = cover.childOfName(name); + el && el.setShape(pointsToRect(clipByPanel(controller, cover, [[x, y], [x + w, y + h]]))); + } + + function makeStyle(brushOption) { + return defaults({ + strokeNoScale: true + }, brushOption.brushStyle); + } + + function formatRectRange(x, y, x2, y2) { + var min = [mathMin$9(x, x2), mathMin$9(y, y2)]; + var max = [mathMax$9(x, x2), mathMax$9(y, y2)]; + return [[min[0], max[0]], [min[1], max[1]] // y range + ]; + } + + function getTransform$1(controller) { + return getTransform(controller.group); + } + + function getGlobalDirection1(controller, localDirName) { + var map = { + w: 'left', + e: 'right', + n: 'top', + s: 'bottom' + }; + var inverseMap = { + left: 'w', + right: 'e', + top: 'n', + bottom: 's' + }; + var dir = transformDirection(map[localDirName], getTransform$1(controller)); + return inverseMap[dir]; + } + + function getGlobalDirection2(controller, localDirNameSeq) { + var globalDir = [getGlobalDirection1(controller, localDirNameSeq[0]), getGlobalDirection1(controller, localDirNameSeq[1])]; + (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse(); + return globalDir.join(''); + } + + function driftRect(rectRangeConverter, controller, cover, dirNameSequence, dx, dy) { + var brushOption = cover.__brushOption; + var rectRange = rectRangeConverter.toRectRange(brushOption.range); + var localDelta = toLocalDelta(controller, dx, dy); + each(dirNameSequence, function (dirName) { + var ind = DIRECTION_MAP[dirName]; + rectRange[ind[0]][ind[1]] += localDelta[ind[0]]; + }); + brushOption.range = rectRangeConverter.fromRectRange(formatRectRange(rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1])); + updateCoverAfterCreation(controller, cover); + trigger$1(controller, { + isEnd: false + }); + } + + function driftPolygon(controller, cover, dx, dy) { + var range = cover.__brushOption.range; + var localDelta = toLocalDelta(controller, dx, dy); + each(range, function (point) { + point[0] += localDelta[0]; + point[1] += localDelta[1]; + }); + updateCoverAfterCreation(controller, cover); + trigger$1(controller, { + isEnd: false + }); + } + + function toLocalDelta(controller, dx, dy) { + var thisGroup = controller.group; + var localD = thisGroup.transformCoordToLocal(dx, dy); + var localZero = thisGroup.transformCoordToLocal(0, 0); + return [localD[0] - localZero[0], localD[1] - localZero[1]]; + } + + function clipByPanel(controller, cover, data) { + var panel = getPanelByCover(controller, cover); + return panel && panel !== BRUSH_PANEL_GLOBAL ? panel.clipPath(data, controller._transform) : clone(data); + } + + function pointsToRect(points) { + var xmin = mathMin$9(points[0][0], points[1][0]); + var ymin = mathMin$9(points[0][1], points[1][1]); + var xmax = mathMax$9(points[0][0], points[1][0]); + var ymax = mathMax$9(points[0][1], points[1][1]); + return { + x: xmin, + y: ymin, + width: xmax - xmin, + height: ymax - ymin + }; + } + + function resetCursor(controller, e, localCursorPoint) { + if ( // Check active + !controller._brushType // resetCursor should be always called when mouse is in zr area, + // but not called when mouse is out of zr area to avoid bad influence + // if `mousemove`, `mouseup` are triggered from `document` event. + || isOutsideZrArea(controller, e.offsetX, e.offsetY)) { + return; + } + + var zr = controller._zr; + var covers = controller._covers; + var currPanel = getPanelByPoint(controller, e, localCursorPoint); // Check whether in covers. + + if (!controller._dragging) { + for (var i = 0; i < covers.length; i++) { + var brushOption = covers[i].__brushOption; + + if (currPanel && (currPanel === BRUSH_PANEL_GLOBAL || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) { + // Use cursor style set on cover. + return; + } + } + } + + currPanel && zr.setCursorStyle('crosshair'); + } + + function preventDefault(e) { + var rawE = e.event; + rawE.preventDefault && rawE.preventDefault(); + } + + function mainShapeContain(cover, x, y) { + return cover.childOfName('main').contain(x, y); + } + + function updateCoverByMouse(controller, e, localCursorPoint, isEnd) { + var creatingCover = controller._creatingCover; + var panel = controller._creatingPanel; + var thisBrushOption = controller._brushOption; + var eventParams; + + controller._track.push(localCursorPoint.slice()); + + if (shouldShowCover(controller) || creatingCover) { + if (panel && !creatingCover) { + thisBrushOption.brushMode === 'single' && clearCovers(controller); + var brushOption = clone(thisBrushOption); + brushOption.brushType = determineBrushType(brushOption.brushType, panel); + brushOption.panelId = panel === BRUSH_PANEL_GLOBAL ? null : panel.panelId; + creatingCover = controller._creatingCover = createCover(controller, brushOption); + + controller._covers.push(creatingCover); + } + + if (creatingCover) { + var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)]; + var coverBrushOption = creatingCover.__brushOption; + coverBrushOption.range = coverRenderer.getCreatingRange(clipByPanel(controller, creatingCover, controller._track)); + + if (isEnd) { + endCreating(controller, creatingCover); + coverRenderer.updateCommon(controller, creatingCover); + } + + updateCoverShape(controller, creatingCover); + eventParams = { + isEnd: isEnd + }; + } + } else if (isEnd && thisBrushOption.brushMode === 'single' && thisBrushOption.removeOnClick) { + // Help user to remove covers easily, only by a tiny drag, in 'single' mode. + // But a single click do not clear covers, because user may have casual + // clicks (for example, click on other component and do not expect covers + // disappear). + // Only some cover removed, trigger action, but not every click trigger action. + if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) { + eventParams = { + isEnd: isEnd, + removeOnClick: true + }; + } + } + + return eventParams; + } + + function determineBrushType(brushType, panel) { + if (brushType === 'auto') { + if ("development" !== 'production') { + assert(panel && panel.defaultBrushType, 'MUST have defaultBrushType when brushType is "atuo"'); + } + + return panel.defaultBrushType; + } + + return brushType; + } + + var pointerHandlers = { + mousedown: function (e) { + if (this._dragging) { + // In case some browser do not support globalOut, + // and release mouse out side the browser. + handleDragEnd(this, e); + } else if (!e.target || !e.target.draggable) { + preventDefault(e); + var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY); + this._creatingCover = null; + var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint); + + if (panel) { + this._dragging = true; + this._track = [localCursorPoint.slice()]; + } + } + }, + mousemove: function (e) { + var x = e.offsetX; + var y = e.offsetY; + var localCursorPoint = this.group.transformCoordToLocal(x, y); + resetCursor(this, e, localCursorPoint); + + if (this._dragging) { + preventDefault(e); + var eventParams = updateCoverByMouse(this, e, localCursorPoint, false); + eventParams && trigger$1(this, eventParams); + } + }, + mouseup: function (e) { + handleDragEnd(this, e); + } + }; + + function handleDragEnd(controller, e) { + if (controller._dragging) { + preventDefault(e); + var x = e.offsetX; + var y = e.offsetY; + var localCursorPoint = controller.group.transformCoordToLocal(x, y); + var eventParams = updateCoverByMouse(controller, e, localCursorPoint, true); + controller._dragging = false; + controller._track = []; + controller._creatingCover = null; // trigger event shoule be at final, after procedure will be nested. + + eventParams && trigger$1(controller, eventParams); + } + } + + function isOutsideZrArea(controller, x, y) { + var zr = controller._zr; + return x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight(); + } + /** + * key: brushType + */ + + + var coverRenderers = { + lineX: getLineRenderer(0), + lineY: getLineRenderer(1), + rect: { + createCover: function (controller, brushOption) { + function returnInput(range) { + return range; + } + + return createBaseRectCover({ + toRectRange: returnInput, + fromRectRange: returnInput + }, controller, brushOption, [['w'], ['e'], ['n'], ['s'], ['s', 'e'], ['s', 'w'], ['n', 'e'], ['n', 'w']]); + }, + getCreatingRange: function (localTrack) { + var ends = getTrackEnds(localTrack); + return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]); + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + updateBaseRect(controller, cover, localRange, brushOption); + }, + updateCommon: updateCommon, + contain: mainShapeContain + }, + polygon: { + createCover: function (controller, brushOption) { + var cover = new Group(); // Do not use graphic.Polygon because graphic.Polyline do not close the + // border of the shape when drawing, which is a better experience for user. + + cover.add(new Polyline({ + name: 'main', + style: makeStyle(brushOption), + silent: true + })); + return cover; + }, + getCreatingRange: function (localTrack) { + return localTrack; + }, + endCreating: function (controller, cover) { + cover.remove(cover.childAt(0)); // Use graphic.Polygon close the shape. + + cover.add(new Polygon({ + name: 'main', + draggable: true, + drift: curry(driftPolygon, controller, cover), + ondragend: curry(trigger$1, controller, { + isEnd: true + }) + })); + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + cover.childAt(0).setShape({ + points: clipByPanel(controller, cover, localRange) + }); + }, + updateCommon: updateCommon, + contain: mainShapeContain + } + }; + + function getLineRenderer(xyIndex) { + return { + createCover: function (controller, brushOption) { + return createBaseRectCover({ + toRectRange: function (range) { + var rectRange = [range, [0, 100]]; + xyIndex && rectRange.reverse(); + return rectRange; + }, + fromRectRange: function (rectRange) { + return rectRange[xyIndex]; + } + }, controller, brushOption, [[['w'], ['e']], [['n'], ['s']]][xyIndex]); + }, + getCreatingRange: function (localTrack) { + var ends = getTrackEnds(localTrack); + var min = mathMin$9(ends[0][xyIndex], ends[1][xyIndex]); + var max = mathMax$9(ends[0][xyIndex], ends[1][xyIndex]); + return [min, max]; + }, + updateCoverShape: function (controller, cover, localRange, brushOption) { + var otherExtent; // If brushWidth not specified, fit the panel. + + var panel = getPanelByCover(controller, cover); + + if (panel !== BRUSH_PANEL_GLOBAL && panel.getLinearBrushOtherExtent) { + otherExtent = panel.getLinearBrushOtherExtent(xyIndex); + } else { + var zr = controller._zr; + otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]]; + } + + var rectRange = [localRange, otherExtent]; + xyIndex && rectRange.reverse(); + updateBaseRect(controller, cover, rectRange, brushOption); + }, + updateCommon: updateCommon, + contain: mainShapeContain + }; + } + + function makeRectPanelClipPath(rect) { + rect = normalizeRect(rect); + return function (localPoints) { + return clipPointsByRect(localPoints, rect); + }; + } + function makeLinearBrushOtherExtent(rect, specifiedXYIndex) { + rect = normalizeRect(rect); + return function (xyIndex) { + var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex; + var brushWidth = idx ? rect.width : rect.height; + var base = idx ? rect.x : rect.y; + return [base, base + (brushWidth || 0)]; + }; + } + function makeRectIsTargetByCursor(rect, api, targetModel) { + var boundingRect = normalizeRect(rect); + return function (e, localCursorPoint) { + return boundingRect.contain(localCursorPoint[0], localCursorPoint[1]) && !onIrrelevantElement(e, api, targetModel); + }; + } // Consider width/height is negative. + + function normalizeRect(rect) { + return BoundingRect.create(rect); + } + + var elementList = ['axisLine', 'axisTickLabel', 'axisName']; + + var ParallelAxisView = + /** @class */ + function (_super) { + __extends(ParallelAxisView, _super); + + function ParallelAxisView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ParallelAxisView.type; + return _this; + } + + ParallelAxisView.prototype.init = function (ecModel, api) { + _super.prototype.init.apply(this, arguments); + + (this._brushController = new BrushController(api.getZr())).on('brush', bind(this._onBrush, this)); + }; + + ParallelAxisView.prototype.render = function (axisModel, ecModel, api, payload) { + if (fromAxisAreaSelect(axisModel, ecModel, payload)) { + return; + } + + this.axisModel = axisModel; + this.api = api; + this.group.removeAll(); + var oldAxisGroup = this._axisGroup; + this._axisGroup = new Group(); + this.group.add(this._axisGroup); + + if (!axisModel.get('show')) { + return; + } + + var coordSysModel = getCoordSysModel(axisModel, ecModel); + var coordSys = coordSysModel.coordinateSystem; + var areaSelectStyle = axisModel.getAreaSelectStyle(); + var areaWidth = areaSelectStyle.width; + var dim = axisModel.axis.dim; + var axisLayout = coordSys.getAxisLayout(dim); + var builderOpt = extend({ + strokeContainThreshold: areaWidth + }, axisLayout); + var axisBuilder = new AxisBuilder(axisModel, builderOpt); + each(elementList, axisBuilder.add, axisBuilder); + + this._axisGroup.add(axisBuilder.getGroup()); + + this._refreshBrushController(builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api); + + groupTransition(oldAxisGroup, this._axisGroup, axisModel); + }; // /** + // * @override + // */ + // updateVisual(axisModel, ecModel, api, payload) { + // this._brushController && this._brushController + // .updateCovers(getCoverInfoList(axisModel)); + // } + + + ParallelAxisView.prototype._refreshBrushController = function (builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api) { + // After filtering, axis may change, select area needs to be update. + var extent = axisModel.axis.getExtent(); + var extentLen = extent[1] - extent[0]; + var extra = Math.min(30, Math.abs(extentLen) * 0.1); // Arbitrary value. + // width/height might be negative, which will be + // normalized in BoundingRect. + + var rect = BoundingRect.create({ + x: extent[0], + y: -areaWidth / 2, + width: extentLen, + height: areaWidth + }); + rect.x -= extra; + rect.width += 2 * extra; + + this._brushController.mount({ + enableGlobalPan: true, + rotation: builderOpt.rotation, + x: builderOpt.position[0], + y: builderOpt.position[1] + }).setPanels([{ + panelId: 'pl', + clipPath: makeRectPanelClipPath(rect), + isTargetByCursor: makeRectIsTargetByCursor(rect, api, coordSysModel), + getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect, 0) + }]).enableBrush({ + brushType: 'lineX', + brushStyle: areaSelectStyle, + removeOnClick: true + }).updateCovers(getCoverInfoList(axisModel)); + }; + + ParallelAxisView.prototype._onBrush = function (eventParam) { + var coverInfoList = eventParam.areas; // Do not cache these object, because the mey be changed. + + var axisModel = this.axisModel; + var axis = axisModel.axis; + var intervals = map(coverInfoList, function (coverInfo) { + return [axis.coordToData(coverInfo.range[0], true), axis.coordToData(coverInfo.range[1], true)]; + }); // If realtime is true, action is not dispatched on drag end, because + // the drag end emits the same params with the last drag move event, + // and may have some delay when using touch pad. + + if (!axisModel.option.realtime === eventParam.isEnd || eventParam.removeOnClick) { + // jshint ignore:line + this.api.dispatchAction({ + type: 'axisAreaSelect', + parallelAxisId: axisModel.id, + intervals: intervals + }); + } + }; + + ParallelAxisView.prototype.dispose = function () { + this._brushController.dispose(); + }; + + ParallelAxisView.type = 'parallelAxis'; + return ParallelAxisView; + }(ComponentView); + + function fromAxisAreaSelect(axisModel, ecModel, payload) { + return payload && payload.type === 'axisAreaSelect' && ecModel.findComponents({ + mainType: 'parallelAxis', + query: payload + })[0] === axisModel; + } + + function getCoverInfoList(axisModel) { + var axis = axisModel.axis; + return map(axisModel.activeIntervals, function (interval) { + return { + brushType: 'lineX', + panelId: 'pl', + range: [axis.dataToCoord(interval[0], true), axis.dataToCoord(interval[1], true)] + }; + }); + } + + function getCoordSysModel(axisModel, ecModel) { + return ecModel.getComponent('parallel', axisModel.get('parallelIndex')); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var actionInfo$1 = { + type: 'axisAreaSelect', + event: 'axisAreaSelected' // update: 'updateVisual' + + }; + function installParallelActions(registers) { + registers.registerAction(actionInfo$1, function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'parallelAxis', + query: payload + }, function (parallelAxisModel) { + parallelAxisModel.axis.model.setActiveIntervals(payload.intervals); + }); + }); + /** + * @payload + */ + + registers.registerAction('parallelAxisExpand', function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'parallel', + query: payload + }, function (parallelModel) { + parallelModel.setAxisExpand(payload); + }); + }); + } + + var defaultAxisOption = { + type: 'value', + areaSelectStyle: { + width: 20, + borderWidth: 1, + borderColor: 'rgba(160,197,232)', + color: 'rgba(160,197,232)', + opacity: 0.3 + }, + realtime: true, + z: 10 + }; + function install$g(registers) { + registers.registerComponentView(ParallelView$1); + registers.registerComponentModel(ParallelModel); + registers.registerCoordinateSystem('parallel', parallelCoordSysCreator); + registers.registerPreprocessor(parallelPreprocessor); + registers.registerComponentModel(ParallelAxisModel); + registers.registerComponentView(ParallelAxisView); + axisModelCreator(registers, 'parallel', ParallelAxisModel, defaultAxisOption); + installParallelActions(registers); + } + + function install$h(registers) { + use(install$g); + registers.registerChartView(ParallelView); + registers.registerSeriesModel(ParallelSeriesModel); + registers.registerVisual(registers.PRIORITY.VISUAL.BRUSH, parallelVisual); + } + + var SankeyPathShape = + /** @class */ + function () { + function SankeyPathShape() { + this.x1 = 0; + this.y1 = 0; + this.x2 = 0; + this.y2 = 0; + this.cpx1 = 0; + this.cpy1 = 0; + this.cpx2 = 0; + this.cpy2 = 0; + this.extent = 0; + } + + return SankeyPathShape; + }(); + + var SankeyPath = + /** @class */ + function (_super) { + __extends(SankeyPath, _super); + + function SankeyPath(opts) { + return _super.call(this, opts) || this; + } + + SankeyPath.prototype.getDefaultShape = function () { + return new SankeyPathShape(); + }; + + SankeyPath.prototype.buildPath = function (ctx, shape) { + var extent = shape.extent; + ctx.moveTo(shape.x1, shape.y1); + ctx.bezierCurveTo(shape.cpx1, shape.cpy1, shape.cpx2, shape.cpy2, shape.x2, shape.y2); + + if (shape.orient === 'vertical') { + ctx.lineTo(shape.x2 + extent, shape.y2); + ctx.bezierCurveTo(shape.cpx2 + extent, shape.cpy2, shape.cpx1 + extent, shape.cpy1, shape.x1 + extent, shape.y1); + } else { + ctx.lineTo(shape.x2, shape.y2 + extent); + ctx.bezierCurveTo(shape.cpx2, shape.cpy2 + extent, shape.cpx1, shape.cpy1 + extent, shape.x1, shape.y1 + extent); + } + + ctx.closePath(); + }; + + SankeyPath.prototype.highlight = function () { + enterEmphasis(this); + }; + + SankeyPath.prototype.downplay = function () { + leaveEmphasis(this); + }; + + return SankeyPath; + }(Path); + + var SankeyView = + /** @class */ + function (_super) { + __extends(SankeyView, _super); + + function SankeyView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SankeyView.type; + _this._focusAdjacencyDisabled = false; + return _this; + } + + SankeyView.prototype.render = function (seriesModel, ecModel, api) { + var sankeyView = this; + var graph = seriesModel.getGraph(); + var group = this.group; + var layoutInfo = seriesModel.layoutInfo; // view width + + var width = layoutInfo.width; // view height + + var height = layoutInfo.height; + var nodeData = seriesModel.getData(); + var edgeData = seriesModel.getData('edge'); + var orient = seriesModel.get('orient'); + this._model = seriesModel; + group.removeAll(); + group.x = layoutInfo.x; + group.y = layoutInfo.y; // generate a bezire Curve for each edge + + graph.eachEdge(function (edge) { + var curve = new SankeyPath(); + var ecData = getECData(curve); + ecData.dataIndex = edge.dataIndex; + ecData.seriesIndex = seriesModel.seriesIndex; + ecData.dataType = 'edge'; + var edgeModel = edge.getModel(); + var lineStyleModel = edgeModel.getModel('lineStyle'); + var curvature = lineStyleModel.get('curveness'); + var n1Layout = edge.node1.getLayout(); + var node1Model = edge.node1.getModel(); + var dragX1 = node1Model.get('localX'); + var dragY1 = node1Model.get('localY'); + var n2Layout = edge.node2.getLayout(); + var node2Model = edge.node2.getModel(); + var dragX2 = node2Model.get('localX'); + var dragY2 = node2Model.get('localY'); + var edgeLayout = edge.getLayout(); + var x1; + var y1; + var x2; + var y2; + var cpx1; + var cpy1; + var cpx2; + var cpy2; + curve.shape.extent = Math.max(1, edgeLayout.dy); + curve.shape.orient = orient; + + if (orient === 'vertical') { + x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + edgeLayout.sy; + y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + n1Layout.dy; + x2 = (dragX2 != null ? dragX2 * width : n2Layout.x) + edgeLayout.ty; + y2 = dragY2 != null ? dragY2 * height : n2Layout.y; + cpx1 = x1; + cpy1 = y1 * (1 - curvature) + y2 * curvature; + cpx2 = x2; + cpy2 = y1 * curvature + y2 * (1 - curvature); + } else { + x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + n1Layout.dx; + y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + edgeLayout.sy; + x2 = dragX2 != null ? dragX2 * width : n2Layout.x; + y2 = (dragY2 != null ? dragY2 * height : n2Layout.y) + edgeLayout.ty; + cpx1 = x1 * (1 - curvature) + x2 * curvature; + cpy1 = y1; + cpx2 = x1 * curvature + x2 * (1 - curvature); + cpy2 = y2; + } + + curve.setShape({ + x1: x1, + y1: y1, + x2: x2, + y2: y2, + cpx1: cpx1, + cpy1: cpy1, + cpx2: cpx2, + cpy2: cpy2 + }); + curve.useStyle(lineStyleModel.getItemStyle()); // Special color, use source node color or target node color + + switch (curve.style.fill) { + case 'source': + curve.style.fill = edge.node1.getVisual('color'); + curve.style.decal = edge.node1.getVisual('style').decal; + break; + + case 'target': + curve.style.fill = edge.node2.getVisual('color'); + curve.style.decal = edge.node2.getVisual('style').decal; + break; + + case 'gradient': + var sourceColor = edge.node1.getVisual('color'); + var targetColor = edge.node2.getVisual('color'); + + if (typeof sourceColor === 'string' && typeof targetColor === 'string') { + curve.style.fill = new LinearGradient(0, 0, +(orient === 'horizontal'), +(orient === 'vertical'), [{ + color: sourceColor, + offset: 0 + }, { + color: targetColor, + offset: 1 + }]); + } + + } + + var emphasisModel = edgeModel.getModel('emphasis'); + setStatesStylesFromModel(curve, edgeModel, 'lineStyle', function (model) { + return model.getItemStyle(); + }); + group.add(curve); + edgeData.setItemGraphicEl(edge.dataIndex, curve); + var focus = emphasisModel.get('focus'); + enableHoverEmphasis(curve, focus === 'adjacency' ? edge.getAdjacentDataIndices() : focus, emphasisModel.get('blurScope')); + getECData(curve).dataType = 'edge'; + }); // Generate a rect for each node + + graph.eachNode(function (node) { + var layout = node.getLayout(); + var itemModel = node.getModel(); + var dragX = itemModel.get('localX'); + var dragY = itemModel.get('localY'); + var emphasisModel = itemModel.getModel('emphasis'); + var rect = new Rect({ + shape: { + x: dragX != null ? dragX * width : layout.x, + y: dragY != null ? dragY * height : layout.y, + width: layout.dx, + height: layout.dy + }, + style: itemModel.getModel('itemStyle').getItemStyle(), + z2: 10 + }); + setLabelStyle(rect, getLabelStatesModels(itemModel), { + labelFetcher: seriesModel, + labelDataIndex: node.dataIndex, + defaultText: node.id + }); + rect.disableLabelAnimation = true; + rect.setStyle('fill', node.getVisual('color')); + rect.setStyle('decal', node.getVisual('style').decal); + setStatesStylesFromModel(rect, itemModel); + group.add(rect); + nodeData.setItemGraphicEl(node.dataIndex, rect); + getECData(rect).dataType = 'node'; + var focus = emphasisModel.get('focus'); + enableHoverEmphasis(rect, focus === 'adjacency' ? node.getAdjacentDataIndices() : focus, emphasisModel.get('blurScope')); + }); + nodeData.eachItemGraphicEl(function (el, dataIndex) { + var itemModel = nodeData.getItemModel(dataIndex); + + if (itemModel.get('draggable')) { + el.drift = function (dx, dy) { + sankeyView._focusAdjacencyDisabled = true; + this.shape.x += dx; + this.shape.y += dy; + this.dirty(); + api.dispatchAction({ + type: 'dragNode', + seriesId: seriesModel.id, + dataIndex: nodeData.getRawIndex(dataIndex), + localX: this.shape.x / width, + localY: this.shape.y / height + }); + }; + + el.ondragend = function () { + sankeyView._focusAdjacencyDisabled = false; + }; + + el.draggable = true; + el.cursor = 'move'; + } + }); + + if (!this._data && seriesModel.isAnimationEnabled()) { + group.setClipPath(createGridClipShape$1(group.getBoundingRect(), seriesModel, function () { + group.removeClipPath(); + })); + } + + this._data = seriesModel.getData(); + }; + + SankeyView.prototype.dispose = function () {}; + + SankeyView.type = 'sankey'; + return SankeyView; + }(ChartView); // Add animation to the view + + + function createGridClipShape$1(rect, seriesModel, cb) { + var rectEl = new Rect({ + shape: { + x: rect.x - 10, + y: rect.y - 10, + width: 0, + height: rect.height + 20 + } + }); + initProps(rectEl, { + shape: { + width: rect.width + 20 + } + }, seriesModel, cb); + return rectEl; + } + + var SankeySeriesModel = + /** @class */ + function (_super) { + __extends(SankeySeriesModel, _super); + + function SankeySeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SankeySeriesModel.type; + return _this; + } + /** + * Init a graph data structure from data in option series + */ + + + SankeySeriesModel.prototype.getInitialData = function (option, ecModel) { + var links = option.edges || option.links; + var nodes = option.data || option.nodes; + var levels = option.levels; + this.levelModels = []; + var levelModels = this.levelModels; + + for (var i = 0; i < levels.length; i++) { + if (levels[i].depth != null && levels[i].depth >= 0) { + levelModels[levels[i].depth] = new Model(levels[i], this, ecModel); + } else { + if ("development" !== 'production') { + throw new Error('levels[i].depth is mandatory and should be natural number'); + } + } + } + + if (nodes && links) { + var graph = createGraphFromNodeEdge(nodes, links, this, true, beforeLink); + return graph.data; + } + + function beforeLink(nodeData, edgeData) { + nodeData.wrapMethod('getItemModel', function (model, idx) { + var seriesModel = model.parentModel; + var layout = seriesModel.getData().getItemLayout(idx); + + if (layout) { + var nodeDepth = layout.depth; + var levelModel = seriesModel.levelModels[nodeDepth]; + + if (levelModel) { + model.parentModel = levelModel; + } + } + + return model; + }); + edgeData.wrapMethod('getItemModel', function (model, idx) { + var seriesModel = model.parentModel; + var edge = seriesModel.getGraph().getEdgeByIndex(idx); + var layout = edge.node1.getLayout(); + + if (layout) { + var depth = layout.depth; + var levelModel = seriesModel.levelModels[depth]; + + if (levelModel) { + model.parentModel = levelModel; + } + } + + return model; + }); + } + }; + + SankeySeriesModel.prototype.setNodePosition = function (dataIndex, localPosition) { + var nodes = this.option.data || this.option.nodes; + var dataItem = nodes[dataIndex]; + dataItem.localX = localPosition[0]; + dataItem.localY = localPosition[1]; + }; + /** + * Return the graphic data structure + * + * @return graphic data structure + */ + + + SankeySeriesModel.prototype.getGraph = function () { + return this.getData().graph; + }; + /** + * Get edge data of graphic data structure + * + * @return data structure of list + */ + + + SankeySeriesModel.prototype.getEdgeData = function () { + return this.getGraph().edgeData; + }; + + SankeySeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + function noValue(val) { + return isNaN(val) || val == null; + } // dataType === 'node' or empty do not show tooltip by default + + + if (dataType === 'edge') { + var params = this.getDataParams(dataIndex, dataType); + var rawDataOpt = params.data; + var edgeValue = params.value; + var edgeName = rawDataOpt.source + ' -- ' + rawDataOpt.target; + return createTooltipMarkup('nameValue', { + name: edgeName, + value: edgeValue, + noValue: noValue(edgeValue) + }); + } // dataType === 'node' + else { + var node = this.getGraph().getNodeByIndex(dataIndex); + var value = node.getLayout().value; + var name_1 = this.getDataParams(dataIndex, dataType).data.name; + return createTooltipMarkup('nameValue', { + name: name_1 != null ? name_1 + '' : null, + value: value, + noValue: noValue(value) + }); + } + }; + + SankeySeriesModel.prototype.optionUpdated = function () {}; // Override Series.getDataParams() + + + SankeySeriesModel.prototype.getDataParams = function (dataIndex, dataType) { + var params = _super.prototype.getDataParams.call(this, dataIndex, dataType); + + if (params.value == null && dataType === 'node') { + var node = this.getGraph().getNodeByIndex(dataIndex); + var nodeValue = node.getLayout().value; + params.value = nodeValue; + } + + return params; + }; + + SankeySeriesModel.type = 'series.sankey'; + SankeySeriesModel.defaultOption = { + zlevel: 0, + z: 2, + coordinateSystem: 'view', + left: '5%', + top: '5%', + right: '20%', + bottom: '5%', + orient: 'horizontal', + nodeWidth: 20, + nodeGap: 8, + draggable: true, + layoutIterations: 32, + label: { + show: true, + position: 'right', + fontSize: 12 + }, + levels: [], + nodeAlign: 'justify', + lineStyle: { + color: '#314656', + opacity: 0.2, + curveness: 0.5 + }, + emphasis: { + label: { + show: true + }, + lineStyle: { + opacity: 0.5 + } + }, + select: { + itemStyle: { + borderColor: '#212121' + } + }, + animationEasing: 'linear', + animationDuration: 1000 + }; + return SankeySeriesModel; + }(SeriesModel); + + function sankeyLayout(ecModel, api) { + ecModel.eachSeriesByType('sankey', function (seriesModel) { + var nodeWidth = seriesModel.get('nodeWidth'); + var nodeGap = seriesModel.get('nodeGap'); + var layoutInfo = getViewRect$4(seriesModel, api); + seriesModel.layoutInfo = layoutInfo; + var width = layoutInfo.width; + var height = layoutInfo.height; + var graph = seriesModel.getGraph(); + var nodes = graph.nodes; + var edges = graph.edges; + computeNodeValues(nodes); + var filteredNodes = filter(nodes, function (node) { + return node.getLayout().value === 0; + }); + var iterations = filteredNodes.length !== 0 ? 0 : seriesModel.get('layoutIterations'); + var orient = seriesModel.get('orient'); + var nodeAlign = seriesModel.get('nodeAlign'); + layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign); + }); + } + /** + * Get the layout position of the whole view + */ + + function getViewRect$4(seriesModel, api) { + return getLayoutRect(seriesModel.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + } + + function layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign) { + computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign); + computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient); + computeEdgeDepths(nodes, orient); + } + /** + * Compute the value of each node by summing the associated edge's value + */ + + + function computeNodeValues(nodes) { + each(nodes, function (node) { + var value1 = sum(node.outEdges, getEdgeValue); + var value2 = sum(node.inEdges, getEdgeValue); + var nodeRawValue = node.getValue() || 0; + var value = Math.max(value1, value2, nodeRawValue); + node.setLayout({ + value: value + }, true); + }); + } + /** + * Compute the x-position for each node. + * + * Here we use Kahn algorithm to detect cycle when we traverse + * the node to computer the initial x position. + */ + + + function computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign) { + // Used to mark whether the edge is deleted. if it is deleted, + // the value is 0, otherwise it is 1. + var remainEdges = []; // Storage each node's indegree. + + var indegreeArr = []; //Used to storage the node with indegree is equal to 0. + + var zeroIndegrees = []; + var nextTargetNode = []; + var x = 0; // let kx = 0; + + for (var i = 0; i < edges.length; i++) { + remainEdges[i] = 1; + } + + for (var i = 0; i < nodes.length; i++) { + indegreeArr[i] = nodes[i].inEdges.length; + + if (indegreeArr[i] === 0) { + zeroIndegrees.push(nodes[i]); + } + } + + var maxNodeDepth = -1; // Traversing nodes using topological sorting to calculate the + // horizontal(if orient === 'horizontal') or vertical(if orient === 'vertical') + // position of the nodes. + + while (zeroIndegrees.length) { + for (var idx = 0; idx < zeroIndegrees.length; idx++) { + var node = zeroIndegrees[idx]; + var item = node.hostGraph.data.getRawDataItem(node.dataIndex); + var isItemDepth = item.depth != null && item.depth >= 0; + + if (isItemDepth && item.depth > maxNodeDepth) { + maxNodeDepth = item.depth; + } + + node.setLayout({ + depth: isItemDepth ? item.depth : x + }, true); + orient === 'vertical' ? node.setLayout({ + dy: nodeWidth + }, true) : node.setLayout({ + dx: nodeWidth + }, true); + + for (var edgeIdx = 0; edgeIdx < node.outEdges.length; edgeIdx++) { + var edge = node.outEdges[edgeIdx]; + var indexEdge = edges.indexOf(edge); + remainEdges[indexEdge] = 0; + var targetNode = edge.node2; + var nodeIndex = nodes.indexOf(targetNode); + + if (--indegreeArr[nodeIndex] === 0 && nextTargetNode.indexOf(targetNode) < 0) { + nextTargetNode.push(targetNode); + } + } + } + + ++x; + zeroIndegrees = nextTargetNode; + nextTargetNode = []; + } + + for (var i = 0; i < remainEdges.length; i++) { + if (remainEdges[i] === 1) { + throw new Error('Sankey is a DAG, the original data has cycle!'); + } + } + + var maxDepth = maxNodeDepth > x - 1 ? maxNodeDepth : x - 1; + + if (nodeAlign && nodeAlign !== 'left') { + adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth); + } + + var kx = orient === 'vertical' ? (height - nodeWidth) / maxDepth : (width - nodeWidth) / maxDepth; + scaleNodeBreadths(nodes, kx, orient); + } + + function isNodeDepth(node) { + var item = node.hostGraph.data.getRawDataItem(node.dataIndex); + return item.depth != null && item.depth >= 0; + } + + function adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth) { + if (nodeAlign === 'right') { + var nextSourceNode = []; + var remainNodes = nodes; + var nodeHeight = 0; + + while (remainNodes.length) { + for (var i = 0; i < remainNodes.length; i++) { + var node = remainNodes[i]; + node.setLayout({ + skNodeHeight: nodeHeight + }, true); + + for (var j = 0; j < node.inEdges.length; j++) { + var edge = node.inEdges[j]; + + if (nextSourceNode.indexOf(edge.node1) < 0) { + nextSourceNode.push(edge.node1); + } + } + } + + remainNodes = nextSourceNode; + nextSourceNode = []; + ++nodeHeight; + } + + each(nodes, function (node) { + if (!isNodeDepth(node)) { + node.setLayout({ + depth: Math.max(0, maxDepth - node.getLayout().skNodeHeight) + }, true); + } + }); + } else if (nodeAlign === 'justify') { + moveSinksRight(nodes, maxDepth); + } + } + /** + * All the node without outEgdes are assigned maximum x-position and + * be aligned in the last column. + * + * @param nodes. node of sankey view. + * @param maxDepth. use to assign to node without outEdges as x-position. + */ + + + function moveSinksRight(nodes, maxDepth) { + each(nodes, function (node) { + if (!isNodeDepth(node) && !node.outEdges.length) { + node.setLayout({ + depth: maxDepth + }, true); + } + }); + } + /** + * Scale node x-position to the width + * + * @param nodes node of sankey view + * @param kx multiple used to scale nodes + */ + + + function scaleNodeBreadths(nodes, kx, orient) { + each(nodes, function (node) { + var nodeDepth = node.getLayout().depth * kx; + orient === 'vertical' ? node.setLayout({ + y: nodeDepth + }, true) : node.setLayout({ + x: nodeDepth + }, true); + }); + } + /** + * Using Gauss-Seidel iterations method to compute the node depth(y-position) + * + * @param nodes node of sankey view + * @param edges edge of sankey view + * @param height the whole height of the area to draw the view + * @param nodeGap the vertical distance between two nodes + * in the same column. + * @param iterations the number of iterations for the algorithm + */ + + + function computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient) { + var nodesByBreadth = prepareNodesByBreadth(nodes, orient); + initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient); + resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); + + for (var alpha = 1; iterations > 0; iterations--) { + // 0.99 is a experience parameter, ensure that each iterations of + // changes as small as possible. + alpha *= 0.99; + relaxRightToLeft(nodesByBreadth, alpha, orient); + resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); + relaxLeftToRight(nodesByBreadth, alpha, orient); + resolveCollisions(nodesByBreadth, nodeGap, height, width, orient); + } + } + + function prepareNodesByBreadth(nodes, orient) { + var nodesByBreadth = []; + var keyAttr = orient === 'vertical' ? 'y' : 'x'; + var groupResult = groupData(nodes, function (node) { + return node.getLayout()[keyAttr]; + }); + groupResult.keys.sort(function (a, b) { + return a - b; + }); + each(groupResult.keys, function (key) { + nodesByBreadth.push(groupResult.buckets.get(key)); + }); + return nodesByBreadth; + } + /** + * Compute the original y-position for each node + */ + + + function initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient) { + var minKy = Infinity; + each(nodesByBreadth, function (nodes) { + var n = nodes.length; + var sum = 0; + each(nodes, function (node) { + sum += node.getLayout().value; + }); + var ky = orient === 'vertical' ? (width - (n - 1) * nodeGap) / sum : (height - (n - 1) * nodeGap) / sum; + + if (ky < minKy) { + minKy = ky; + } + }); + each(nodesByBreadth, function (nodes) { + each(nodes, function (node, i) { + var nodeDy = node.getLayout().value * minKy; + + if (orient === 'vertical') { + node.setLayout({ + x: i + }, true); + node.setLayout({ + dx: nodeDy + }, true); + } else { + node.setLayout({ + y: i + }, true); + node.setLayout({ + dy: nodeDy + }, true); + } + }); + }); + each(edges, function (edge) { + var edgeDy = +edge.getValue() * minKy; + edge.setLayout({ + dy: edgeDy + }, true); + }); + } + /** + * Resolve the collision of initialized depth (y-position) + */ + + + function resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) { + var keyAttr = orient === 'vertical' ? 'x' : 'y'; + each(nodesByBreadth, function (nodes) { + nodes.sort(function (a, b) { + return a.getLayout()[keyAttr] - b.getLayout()[keyAttr]; + }); + var nodeX; + var node; + var dy; + var y0 = 0; + var n = nodes.length; + var nodeDyAttr = orient === 'vertical' ? 'dx' : 'dy'; + + for (var i = 0; i < n; i++) { + node = nodes[i]; + dy = y0 - node.getLayout()[keyAttr]; + + if (dy > 0) { + nodeX = node.getLayout()[keyAttr] + dy; + orient === 'vertical' ? node.setLayout({ + x: nodeX + }, true) : node.setLayout({ + y: nodeX + }, true); + } + + y0 = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap; + } + + var viewWidth = orient === 'vertical' ? width : height; // If the bottommost node goes outside the bounds, push it back up + + dy = y0 - nodeGap - viewWidth; + + if (dy > 0) { + nodeX = node.getLayout()[keyAttr] - dy; + orient === 'vertical' ? node.setLayout({ + x: nodeX + }, true) : node.setLayout({ + y: nodeX + }, true); + y0 = nodeX; + + for (var i = n - 2; i >= 0; --i) { + node = nodes[i]; + dy = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap - y0; + + if (dy > 0) { + nodeX = node.getLayout()[keyAttr] - dy; + orient === 'vertical' ? node.setLayout({ + x: nodeX + }, true) : node.setLayout({ + y: nodeX + }, true); + } + + y0 = node.getLayout()[keyAttr]; + } + } + }); + } + /** + * Change the y-position of the nodes, except most the right side nodes + * @param nodesByBreadth + * @param alpha parameter used to adjust the nodes y-position + */ + + + function relaxRightToLeft(nodesByBreadth, alpha, orient) { + each(nodesByBreadth.slice().reverse(), function (nodes) { + each(nodes, function (node) { + if (node.outEdges.length) { + var y = sum(node.outEdges, weightedTarget, orient) / sum(node.outEdges, getEdgeValue); + + if (isNaN(y)) { + var len = node.outEdges.length; + y = len ? sum(node.outEdges, centerTarget, orient) / len : 0; + } + + if (orient === 'vertical') { + var nodeX = node.getLayout().x + (y - center$1(node, orient)) * alpha; + node.setLayout({ + x: nodeX + }, true); + } else { + var nodeY = node.getLayout().y + (y - center$1(node, orient)) * alpha; + node.setLayout({ + y: nodeY + }, true); + } + } + }); + }); + } + + function weightedTarget(edge, orient) { + return center$1(edge.node2, orient) * edge.getValue(); + } + + function centerTarget(edge, orient) { + return center$1(edge.node2, orient); + } + + function weightedSource(edge, orient) { + return center$1(edge.node1, orient) * edge.getValue(); + } + + function centerSource(edge, orient) { + return center$1(edge.node1, orient); + } + + function center$1(node, orient) { + return orient === 'vertical' ? node.getLayout().x + node.getLayout().dx / 2 : node.getLayout().y + node.getLayout().dy / 2; + } + + function getEdgeValue(edge) { + return edge.getValue(); + } + + function sum(array, cb, orient) { + var sum = 0; + var len = array.length; + var i = -1; + + while (++i < len) { + var value = +cb(array[i], orient); + + if (!isNaN(value)) { + sum += value; + } + } + + return sum; + } + /** + * Change the y-position of the nodes, except most the left side nodes + */ + + + function relaxLeftToRight(nodesByBreadth, alpha, orient) { + each(nodesByBreadth, function (nodes) { + each(nodes, function (node) { + if (node.inEdges.length) { + var y = sum(node.inEdges, weightedSource, orient) / sum(node.inEdges, getEdgeValue); + + if (isNaN(y)) { + var len = node.inEdges.length; + y = len ? sum(node.inEdges, centerSource, orient) / len : 0; + } + + if (orient === 'vertical') { + var nodeX = node.getLayout().x + (y - center$1(node, orient)) * alpha; + node.setLayout({ + x: nodeX + }, true); + } else { + var nodeY = node.getLayout().y + (y - center$1(node, orient)) * alpha; + node.setLayout({ + y: nodeY + }, true); + } + } + }); + }); + } + /** + * Compute the depth(y-position) of each edge + */ + + + function computeEdgeDepths(nodes, orient) { + var keyAttr = orient === 'vertical' ? 'x' : 'y'; + each(nodes, function (node) { + node.outEdges.sort(function (a, b) { + return a.node2.getLayout()[keyAttr] - b.node2.getLayout()[keyAttr]; + }); + node.inEdges.sort(function (a, b) { + return a.node1.getLayout()[keyAttr] - b.node1.getLayout()[keyAttr]; + }); + }); + each(nodes, function (node) { + var sy = 0; + var ty = 0; + each(node.outEdges, function (edge) { + edge.setLayout({ + sy: sy + }, true); + sy += edge.getLayout().dy; + }); + each(node.inEdges, function (edge) { + edge.setLayout({ + ty: ty + }, true); + ty += edge.getLayout().dy; + }); + }); + } + + function sankeyVisual(ecModel) { + ecModel.eachSeriesByType('sankey', function (seriesModel) { + var graph = seriesModel.getGraph(); + var nodes = graph.nodes; + + if (nodes.length) { + var minValue_1 = Infinity; + var maxValue_1 = -Infinity; + each(nodes, function (node) { + var nodeValue = node.getLayout().value; + + if (nodeValue < minValue_1) { + minValue_1 = nodeValue; + } + + if (nodeValue > maxValue_1) { + maxValue_1 = nodeValue; + } + }); + each(nodes, function (node) { + var mapping = new VisualMapping({ + type: 'color', + mappingMethod: 'linear', + dataExtent: [minValue_1, maxValue_1], + visual: seriesModel.get('color') + }); + var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value); + var customColor = node.getModel().get(['itemStyle', 'color']); + + if (customColor != null) { + node.setVisual('color', customColor); + node.setVisual('style', { + fill: customColor + }); + } else { + node.setVisual('color', mapValueToColor); + node.setVisual('style', { + fill: mapValueToColor + }); + } + }); + } + }); + } + + function install$i(registers) { + registers.registerChartView(SankeyView); + registers.registerSeriesModel(SankeySeriesModel); + registers.registerLayout(sankeyLayout); + registers.registerVisual(sankeyVisual); + registers.registerAction({ + type: 'dragNode', + event: 'dragnode', + // here can only use 'update' now, other value is not support in echarts. + update: 'update' + }, function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'series', + subType: 'sankey', + query: payload + }, function (seriesModel) { + seriesModel.setNodePosition(payload.dataIndex, [payload.localX, payload.localY]); + }); + }); + } + + var WhiskerBoxCommonMixin = + /** @class */ + function () { + function WhiskerBoxCommonMixin() {} + /** + * @override + */ + + + WhiskerBoxCommonMixin.prototype.getInitialData = function (option, ecModel) { + // When both types of xAxis and yAxis are 'value', layout is + // needed to be specified by user. Otherwise, layout can be + // judged by which axis is category. + var ordinalMeta; + var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex')); + var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex')); + var xAxisType = xAxisModel.get('type'); + var yAxisType = yAxisModel.get('type'); + var addOrdinal; // FIXME + // Consider time axis. + + if (xAxisType === 'category') { + option.layout = 'horizontal'; + ordinalMeta = xAxisModel.getOrdinalMeta(); + addOrdinal = true; + } else if (yAxisType === 'category') { + option.layout = 'vertical'; + ordinalMeta = yAxisModel.getOrdinalMeta(); + addOrdinal = true; + } else { + option.layout = option.layout || 'horizontal'; + } + + var coordDims = ['x', 'y']; + var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1; + var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex]; + var otherAxisDim = coordDims[1 - baseAxisDimIndex]; + var axisModels = [xAxisModel, yAxisModel]; + var baseAxisType = axisModels[baseAxisDimIndex].get('type'); + var otherAxisType = axisModels[1 - baseAxisDimIndex].get('type'); + var data = option.data; // Clone a new data for next setOption({}) usage. + // Avoid modifying current data will affect further update. + + if (data && addOrdinal) { + var newOptionData_1 = []; + each(data, function (item, index) { + var newItem; + + if (isArray(item)) { + newItem = item.slice(); // Modify current using data. + + item.unshift(index); + } else if (isArray(item.value)) { + newItem = extend({}, item); + newItem.value = newItem.value.slice(); // Modify current using data. + + item.value.unshift(index); + } else { + newItem = item; + } + + newOptionData_1.push(newItem); + }); + option.data = newOptionData_1; + } + + var defaultValueDimensions = this.defaultValueDimensions; + var coordDimensions = [{ + name: baseAxisDim, + type: getDimensionTypeByAxis(baseAxisType), + ordinalMeta: ordinalMeta, + otherDims: { + tooltip: false, + itemName: 0 + }, + dimsDef: ['base'] + }, { + name: otherAxisDim, + type: getDimensionTypeByAxis(otherAxisType), + dimsDef: defaultValueDimensions.slice() + }]; + return createSeriesDataSimply(this, { + coordDimensions: coordDimensions, + dimensionsCount: defaultValueDimensions.length + 1, + encodeDefaulter: curry(makeSeriesEncodeForAxisCoordSys, coordDimensions, this) + }); + }; + /** + * If horizontal, base axis is x, otherwise y. + * @override + */ + + + WhiskerBoxCommonMixin.prototype.getBaseAxis = function () { + var dim = this._baseAxisDim; + return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis; + }; + + return WhiskerBoxCommonMixin; + }(); + + var BoxplotSeriesModel = + /** @class */ + function (_super) { + __extends(BoxplotSeriesModel, _super); + + function BoxplotSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = BoxplotSeriesModel.type; // TODO + // box width represents group size, so dimension should have 'size'. + + /** + * @see + * The meanings of 'min' and 'max' depend on user, + * and echarts do not need to know it. + * @readOnly + */ + + _this.defaultValueDimensions = [{ + name: 'min', + defaultTooltip: true + }, { + name: 'Q1', + defaultTooltip: true + }, { + name: 'median', + defaultTooltip: true + }, { + name: 'Q3', + defaultTooltip: true + }, { + name: 'max', + defaultTooltip: true + }]; + _this.visualDrawType = 'stroke'; + return _this; + } + + BoxplotSeriesModel.type = 'series.boxplot'; + BoxplotSeriesModel.dependencies = ['xAxis', 'yAxis', 'grid']; + BoxplotSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + layout: null, + boxWidth: [7, 50], + itemStyle: { + color: '#fff', + borderWidth: 1 + }, + emphasis: { + scale: true, + itemStyle: { + borderWidth: 2, + shadowBlur: 5, + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowColor: 'rgba(0,0,0,0.2)' + } + }, + animationDuration: 800 + }; + return BoxplotSeriesModel; + }(SeriesModel); + + mixin(BoxplotSeriesModel, WhiskerBoxCommonMixin, true); + + var BoxplotView = + /** @class */ + function (_super) { + __extends(BoxplotView, _super); + + function BoxplotView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = BoxplotView.type; + return _this; + } + + BoxplotView.prototype.render = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var group = this.group; + var oldData = this._data; // There is no old data only when first rendering or switching from + // stream mode to normal mode, where previous elements should be removed. + + if (!this._data) { + group.removeAll(); + } + + var constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0; + data.diff(oldData).add(function (newIdx) { + if (data.hasValue(newIdx)) { + var itemLayout = data.getItemLayout(newIdx); + var symbolEl = createNormalBox(itemLayout, data, newIdx, constDim, true); + data.setItemGraphicEl(newIdx, symbolEl); + group.add(symbolEl); + } + }).update(function (newIdx, oldIdx) { + var symbolEl = oldData.getItemGraphicEl(oldIdx); // Empty data + + if (!data.hasValue(newIdx)) { + group.remove(symbolEl); + return; + } + + var itemLayout = data.getItemLayout(newIdx); + + if (!symbolEl) { + symbolEl = createNormalBox(itemLayout, data, newIdx, constDim); + } else { + saveOldStyle(symbolEl); + updateNormalBoxData(itemLayout, symbolEl, data, newIdx); + } + + group.add(symbolEl); + data.setItemGraphicEl(newIdx, symbolEl); + }).remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && group.remove(el); + }).execute(); + this._data = data; + }; + + BoxplotView.prototype.remove = function (ecModel) { + var group = this.group; + var data = this._data; + this._data = null; + data && data.eachItemGraphicEl(function (el) { + el && group.remove(el); + }); + }; + + BoxplotView.type = 'boxplot'; + return BoxplotView; + }(ChartView); + + var BoxPathShape = + /** @class */ + function () { + function BoxPathShape() {} + + return BoxPathShape; + }(); + + var BoxPath = + /** @class */ + function (_super) { + __extends(BoxPath, _super); + + function BoxPath(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'boxplotBoxPath'; + return _this; + } + + BoxPath.prototype.getDefaultShape = function () { + return new BoxPathShape(); + }; + + BoxPath.prototype.buildPath = function (ctx, shape) { + var ends = shape.points; + var i = 0; + ctx.moveTo(ends[i][0], ends[i][1]); + i++; + + for (; i < 4; i++) { + ctx.lineTo(ends[i][0], ends[i][1]); + } + + ctx.closePath(); + + for (; i < ends.length; i++) { + ctx.moveTo(ends[i][0], ends[i][1]); + i++; + ctx.lineTo(ends[i][0], ends[i][1]); + } + }; + + return BoxPath; + }(Path); + + function createNormalBox(itemLayout, data, dataIndex, constDim, isInit) { + var ends = itemLayout.ends; + var el = new BoxPath({ + shape: { + points: isInit ? transInit(ends, constDim, itemLayout) : ends + } + }); + updateNormalBoxData(itemLayout, el, data, dataIndex, isInit); + return el; + } + + function updateNormalBoxData(itemLayout, el, data, dataIndex, isInit) { + var seriesModel = data.hostModel; + var updateMethod = graphic[isInit ? 'initProps' : 'updateProps']; + updateMethod(el, { + shape: { + points: itemLayout.ends + } + }, seriesModel, dataIndex); + el.useStyle(data.getItemVisual(dataIndex, 'style')); + el.style.strokeNoScale = true; + el.z2 = 100; + var itemModel = data.getItemModel(dataIndex); + setStatesStylesFromModel(el, itemModel); + enableHoverEmphasis(el, itemModel.get(['emphasis', 'focus']), itemModel.get(['emphasis', 'blurScope'])); + } + + function transInit(points, dim, itemLayout) { + return map(points, function (point) { + point = point.slice(); + point[dim] = itemLayout.initBaseline; + return point; + }); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function boxplotVisual(ecModel, api) {} + + var each$6 = each; + function boxplotLayout(ecModel) { + var groupResult = groupSeriesByAxis(ecModel); + each$6(groupResult, function (groupItem) { + var seriesModels = groupItem.seriesModels; + + if (!seriesModels.length) { + return; + } + + calculateBase(groupItem); + each$6(seriesModels, function (seriesModel, idx) { + layoutSingleSeries(seriesModel, groupItem.boxOffsetList[idx], groupItem.boxWidthList[idx]); + }); + }); + } + /** + * Group series by axis. + */ + + function groupSeriesByAxis(ecModel) { + var result = []; + var axisList = []; + ecModel.eachSeriesByType('boxplot', function (seriesModel) { + var baseAxis = seriesModel.getBaseAxis(); + var idx = indexOf(axisList, baseAxis); + + if (idx < 0) { + idx = axisList.length; + axisList[idx] = baseAxis; + result[idx] = { + axis: baseAxis, + seriesModels: [] + }; + } + + result[idx].seriesModels.push(seriesModel); + }); + return result; + } + /** + * Calculate offset and box width for each series. + */ + + + function calculateBase(groupItem) { + var extent; + var baseAxis = groupItem.axis; + var seriesModels = groupItem.seriesModels; + var seriesCount = seriesModels.length; + var boxWidthList = groupItem.boxWidthList = []; + var boxOffsetList = groupItem.boxOffsetList = []; + var boundList = []; + var bandWidth; + + if (baseAxis.type === 'category') { + bandWidth = baseAxis.getBandWidth(); + } else { + var maxDataCount_1 = 0; + each$6(seriesModels, function (seriesModel) { + maxDataCount_1 = Math.max(maxDataCount_1, seriesModel.getData().count()); + }); + extent = baseAxis.getExtent(), Math.abs(extent[1] - extent[0]) / maxDataCount_1; + } + + each$6(seriesModels, function (seriesModel) { + var boxWidthBound = seriesModel.get('boxWidth'); + + if (!isArray(boxWidthBound)) { + boxWidthBound = [boxWidthBound, boxWidthBound]; + } + + boundList.push([parsePercent$1(boxWidthBound[0], bandWidth) || 0, parsePercent$1(boxWidthBound[1], bandWidth) || 0]); + }); + var availableWidth = bandWidth * 0.8 - 2; + var boxGap = availableWidth / seriesCount * 0.3; + var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount; + var base = boxWidth / 2 - availableWidth / 2; + each$6(seriesModels, function (seriesModel, idx) { + boxOffsetList.push(base); + base += boxGap + boxWidth; + boxWidthList.push(Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1])); + }); + } + /** + * Calculate points location for each series. + */ + + + function layoutSingleSeries(seriesModel, offset, boxWidth) { + var coordSys = seriesModel.coordinateSystem; + var data = seriesModel.getData(); + var halfWidth = boxWidth / 2; + var cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1; + var vDimIdx = 1 - cDimIdx; + var coordDims = ['x', 'y']; + var cDim = data.mapDimension(coordDims[cDimIdx]); + var vDims = data.mapDimensionsAll(coordDims[vDimIdx]); + + if (cDim == null || vDims.length < 5) { + return; + } + + for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) { + var axisDimVal = data.get(cDim, dataIndex); + var median = getPoint(axisDimVal, vDims[2], dataIndex); + var end1 = getPoint(axisDimVal, vDims[0], dataIndex); + var end2 = getPoint(axisDimVal, vDims[1], dataIndex); + var end4 = getPoint(axisDimVal, vDims[3], dataIndex); + var end5 = getPoint(axisDimVal, vDims[4], dataIndex); + var ends = []; + addBodyEnd(ends, end2, false); + addBodyEnd(ends, end4, true); + ends.push(end1, end2, end5, end4); + layEndLine(ends, end1); + layEndLine(ends, end5); + layEndLine(ends, median); + data.setItemLayout(dataIndex, { + initBaseline: median[vDimIdx], + ends: ends + }); + } + + function getPoint(axisDimVal, dim, dataIndex) { + var val = data.get(dim, dataIndex); + var p = []; + p[cDimIdx] = axisDimVal; + p[vDimIdx] = val; + var point; + + if (isNaN(axisDimVal) || isNaN(val)) { + point = [NaN, NaN]; + } else { + point = coordSys.dataToPoint(p); + point[cDimIdx] += offset; + } + + return point; + } + + function addBodyEnd(ends, point, start) { + var point1 = point.slice(); + var point2 = point.slice(); + point1[cDimIdx] += halfWidth; + point2[cDimIdx] -= halfWidth; + start ? ends.push(point1, point2) : ends.push(point2, point1); + } + + function layEndLine(ends, endCenter) { + var from = endCenter.slice(); + var to = endCenter.slice(); + from[cDimIdx] -= halfWidth; + to[cDimIdx] += halfWidth; + ends.push(from, to); + } + } + + /** + * See: + * + * + * + * Helper method for preparing data. + * + * @param rawData like + * [ + * [12,232,443], (raw data set for the first box) + * [3843,5545,1232], (raw data set for the second box) + * ... + * ] + * @param opt.boundIQR=1.5 Data less than min bound is outlier. + * default 1.5, means Q1 - 1.5 * (Q3 - Q1). + * If 'none'/0 passed, min bound will not be used. + */ + + function prepareBoxplotData(rawData, opt) { + opt = opt || {}; + var boxData = []; + var outliers = []; + var boundIQR = opt.boundIQR; + var useExtreme = boundIQR === 'none' || boundIQR === 0; + + for (var i = 0; i < rawData.length; i++) { + var ascList = asc(rawData[i].slice()); + var Q1 = quantile(ascList, 0.25); + var Q2 = quantile(ascList, 0.5); + var Q3 = quantile(ascList, 0.75); + var min = ascList[0]; + var max = ascList[ascList.length - 1]; + var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1); + var low = useExtreme ? min : Math.max(min, Q1 - bound); + var high = useExtreme ? max : Math.min(max, Q3 + bound); + var itemNameFormatter = opt.itemNameFormatter; + var itemName = isFunction(itemNameFormatter) ? itemNameFormatter({ + value: i + }) : isString(itemNameFormatter) ? itemNameFormatter.replace('{value}', i + '') : i + ''; + boxData.push([itemName, low, Q1, Q2, Q3, high]); + + for (var j = 0; j < ascList.length; j++) { + var dataItem = ascList[j]; + + if (dataItem < low || dataItem > high) { + var outlier = [itemName, dataItem]; + outliers.push(outlier); + } + } + } + + return { + boxData: boxData, + outliers: outliers + }; + } + + var boxplotTransform = { + type: 'echarts:boxplot', + transform: function transform(params) { + var upstream = params.upstream; + + if (upstream.sourceFormat !== SOURCE_FORMAT_ARRAY_ROWS) { + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = makePrintable('source data is not applicable for this boxplot transform. Expect number[][].'); + } + + throwError(errMsg); + } + + var result = prepareBoxplotData(upstream.getRawData(), params.config); + return [{ + dimensions: ['ItemName', 'Low', 'Q1', 'Q2', 'Q3', 'High'], + data: result.boxData + }, { + data: result.outliers + }]; + } + }; + + function install$j(registers) { + registers.registerSeriesModel(BoxplotSeriesModel); + registers.registerChartView(BoxplotView); + registers.registerVisual(boxplotVisual); + registers.registerLayout(boxplotLayout); + registers.registerTransform(boxplotTransform); + } + + var SKIP_PROPS = ['color', 'borderColor']; + + var CandlestickView = + /** @class */ + function (_super) { + __extends(CandlestickView, _super); + + function CandlestickView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CandlestickView.type; + return _this; + } + + CandlestickView.prototype.render = function (seriesModel, ecModel, api) { + // If there is clipPath created in large mode. Remove it. + this.group.removeClipPath(); + + this._updateDrawMode(seriesModel); + + this._isLargeDraw ? this._renderLarge(seriesModel) : this._renderNormal(seriesModel); + }; + + CandlestickView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) { + this._clear(); + + this._updateDrawMode(seriesModel); + }; + + CandlestickView.prototype.incrementalRender = function (params, seriesModel, ecModel, api) { + this._isLargeDraw ? this._incrementalRenderLarge(params, seriesModel) : this._incrementalRenderNormal(params, seriesModel); + }; + + CandlestickView.prototype._updateDrawMode = function (seriesModel) { + var isLargeDraw = seriesModel.pipelineContext.large; + + if (this._isLargeDraw == null || isLargeDraw !== this._isLargeDraw) { + this._isLargeDraw = isLargeDraw; + + this._clear(); + } + }; + + CandlestickView.prototype._renderNormal = function (seriesModel) { + var data = seriesModel.getData(); + var oldData = this._data; + var group = this.group; + var isSimpleBox = data.getLayout('isSimpleBox'); + var needsClip = seriesModel.get('clip', true); + var coord = seriesModel.coordinateSystem; + var clipArea = coord.getArea && coord.getArea(); // There is no old data only when first rendering or switching from + // stream mode to normal mode, where previous elements should be removed. + + if (!this._data) { + group.removeAll(); + } + + data.diff(oldData).add(function (newIdx) { + if (data.hasValue(newIdx)) { + var itemLayout = data.getItemLayout(newIdx); + + if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) { + return; + } + + var el = createNormalBox$1(itemLayout, newIdx, true); + initProps(el, { + shape: { + points: itemLayout.ends + } + }, seriesModel, newIdx); + setBoxCommon(el, data, newIdx, isSimpleBox); + group.add(el); + data.setItemGraphicEl(newIdx, el); + } + }).update(function (newIdx, oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); // Empty data + + if (!data.hasValue(newIdx)) { + group.remove(el); + return; + } + + var itemLayout = data.getItemLayout(newIdx); + + if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) { + group.remove(el); + return; + } + + if (!el) { + el = createNormalBox$1(itemLayout); + } else { + updateProps(el, { + shape: { + points: itemLayout.ends + } + }, seriesModel, newIdx); + saveOldStyle(el); + } + + setBoxCommon(el, data, newIdx, isSimpleBox); + group.add(el); + data.setItemGraphicEl(newIdx, el); + }).remove(function (oldIdx) { + var el = oldData.getItemGraphicEl(oldIdx); + el && group.remove(el); + }).execute(); + this._data = data; + }; + + CandlestickView.prototype._renderLarge = function (seriesModel) { + this._clear(); + + createLarge$1(seriesModel, this.group); + var clipPath = seriesModel.get('clip', true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null; + + if (clipPath) { + this.group.setClipPath(clipPath); + } else { + this.group.removeClipPath(); + } + }; + + CandlestickView.prototype._incrementalRenderNormal = function (params, seriesModel) { + var data = seriesModel.getData(); + var isSimpleBox = data.getLayout('isSimpleBox'); + var dataIndex; + + while ((dataIndex = params.next()) != null) { + var itemLayout = data.getItemLayout(dataIndex); + var el = createNormalBox$1(itemLayout); + setBoxCommon(el, data, dataIndex, isSimpleBox); + el.incremental = true; + this.group.add(el); + } + }; + + CandlestickView.prototype._incrementalRenderLarge = function (params, seriesModel) { + createLarge$1(seriesModel, this.group, true); + }; + + CandlestickView.prototype.remove = function (ecModel) { + this._clear(); + }; + + CandlestickView.prototype._clear = function () { + this.group.removeAll(); + this._data = null; + }; + + CandlestickView.type = 'candlestick'; + return CandlestickView; + }(ChartView); + + var NormalBoxPathShape = + /** @class */ + function () { + function NormalBoxPathShape() {} + + return NormalBoxPathShape; + }(); + + var NormalBoxPath = + /** @class */ + function (_super) { + __extends(NormalBoxPath, _super); + + function NormalBoxPath(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'normalCandlestickBox'; + return _this; + } + + NormalBoxPath.prototype.getDefaultShape = function () { + return new NormalBoxPathShape(); + }; + + NormalBoxPath.prototype.buildPath = function (ctx, shape) { + var ends = shape.points; + + if (this.__simpleBox) { + ctx.moveTo(ends[4][0], ends[4][1]); + ctx.lineTo(ends[6][0], ends[6][1]); + } else { + ctx.moveTo(ends[0][0], ends[0][1]); + ctx.lineTo(ends[1][0], ends[1][1]); + ctx.lineTo(ends[2][0], ends[2][1]); + ctx.lineTo(ends[3][0], ends[3][1]); + ctx.closePath(); + ctx.moveTo(ends[4][0], ends[4][1]); + ctx.lineTo(ends[5][0], ends[5][1]); + ctx.moveTo(ends[6][0], ends[6][1]); + ctx.lineTo(ends[7][0], ends[7][1]); + } + }; + + return NormalBoxPath; + }(Path); + + function createNormalBox$1(itemLayout, dataIndex, isInit) { + var ends = itemLayout.ends; + return new NormalBoxPath({ + shape: { + points: isInit ? transInit$1(ends, itemLayout) : ends + }, + z2: 100 + }); + } + + function isNormalBoxClipped(clipArea, itemLayout) { + var clipped = true; + + for (var i = 0; i < itemLayout.ends.length; i++) { + // If any point are in the region. + if (clipArea.contain(itemLayout.ends[i][0], itemLayout.ends[i][1])) { + clipped = false; + break; + } + } + + return clipped; + } + + function setBoxCommon(el, data, dataIndex, isSimpleBox) { + var itemModel = data.getItemModel(dataIndex); + el.useStyle(data.getItemVisual(dataIndex, 'style')); + el.style.strokeNoScale = true; + el.__simpleBox = isSimpleBox; + setStatesStylesFromModel(el, itemModel); + } + + function transInit$1(points, itemLayout) { + return map(points, function (point) { + point = point.slice(); + point[1] = itemLayout.initBaseline; + return point; + }); + } + + var LargeBoxPathShape = + /** @class */ + function () { + function LargeBoxPathShape() {} + + return LargeBoxPathShape; + }(); + + var LargeBoxPath = + /** @class */ + function (_super) { + __extends(LargeBoxPath, _super); + + function LargeBoxPath(opts) { + var _this = _super.call(this, opts) || this; + + _this.type = 'largeCandlestickBox'; + return _this; + } + + LargeBoxPath.prototype.getDefaultShape = function () { + return new LargeBoxPathShape(); + }; + + LargeBoxPath.prototype.buildPath = function (ctx, shape) { + // Drawing lines is more efficient than drawing + // a whole line or drawing rects. + var points = shape.points; + + for (var i = 0; i < points.length;) { + if (this.__sign === points[i++]) { + var x = points[i++]; + ctx.moveTo(x, points[i++]); + ctx.lineTo(x, points[i++]); + } else { + i += 3; + } + } + }; + + return LargeBoxPath; + }(Path); + + function createLarge$1(seriesModel, group, incremental) { + var data = seriesModel.getData(); + var largePoints = data.getLayout('largePoints'); + var elP = new LargeBoxPath({ + shape: { + points: largePoints + }, + __sign: 1 + }); + group.add(elP); + var elN = new LargeBoxPath({ + shape: { + points: largePoints + }, + __sign: -1 + }); + group.add(elN); + setLargeStyle$1(1, elP, seriesModel); + setLargeStyle$1(-1, elN, seriesModel); + + if (incremental) { + elP.incremental = true; + elN.incremental = true; + } + } + + function setLargeStyle$1(sign, el, seriesModel, data) { + // TODO put in visual? + var borderColor = seriesModel.get(['itemStyle', sign > 0 ? 'borderColor' : 'borderColor0']) || seriesModel.get(['itemStyle', sign > 0 ? 'color' : 'color0']); // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + + var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(SKIP_PROPS); + el.useStyle(itemStyle); + el.style.fill = null; + el.style.stroke = borderColor; + } + + var CandlestickSeriesModel = + /** @class */ + function (_super) { + __extends(CandlestickSeriesModel, _super); + + function CandlestickSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CandlestickSeriesModel.type; + _this.defaultValueDimensions = [{ + name: 'open', + defaultTooltip: true + }, { + name: 'close', + defaultTooltip: true + }, { + name: 'lowest', + defaultTooltip: true + }, { + name: 'highest', + defaultTooltip: true + }]; + return _this; + } + /** + * Get dimension for shadow in dataZoom + * @return dimension name + */ + + + CandlestickSeriesModel.prototype.getShadowDim = function () { + return 'open'; + }; + + CandlestickSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) { + var itemLayout = data.getItemLayout(dataIndex); + return itemLayout && selectors.rect(itemLayout.brushRect); + }; + + CandlestickSeriesModel.type = 'series.candlestick'; + CandlestickSeriesModel.dependencies = ['xAxis', 'yAxis', 'grid']; + CandlestickSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + coordinateSystem: 'cartesian2d', + legendHoverLink: true, + // xAxisIndex: 0, + // yAxisIndex: 0, + layout: null, + clip: true, + itemStyle: { + color: '#eb5454', + color0: '#47b262', + borderColor: '#eb5454', + borderColor0: '#47b262', + // borderColor: '#d24040', + // borderColor0: '#398f4f', + borderWidth: 1 + }, + emphasis: { + scale: true, + itemStyle: { + borderWidth: 2 + } + }, + barMaxWidth: null, + barMinWidth: null, + barWidth: null, + large: true, + largeThreshold: 600, + progressive: 3e3, + progressiveThreshold: 1e4, + progressiveChunkMode: 'mod', + animationEasing: 'linear', + animationDuration: 300 + }; + return CandlestickSeriesModel; + }(SeriesModel); + + mixin(CandlestickSeriesModel, WhiskerBoxCommonMixin, true); + + function candlestickPreprocessor(option) { + if (!option || !isArray(option.series)) { + return; + } // Translate 'k' to 'candlestick'. + + + each(option.series, function (seriesItem) { + if (isObject(seriesItem) && seriesItem.type === 'k') { + seriesItem.type = 'candlestick'; + } + }); + } + + var positiveBorderColorQuery = ['itemStyle', 'borderColor']; + var negativeBorderColorQuery = ['itemStyle', 'borderColor0']; + var positiveColorQuery = ['itemStyle', 'color']; + var negativeColorQuery = ['itemStyle', 'color0']; + var candlestickVisual = { + seriesType: 'candlestick', + plan: createRenderPlanner(), + // For legend. + performRawSeries: true, + reset: function (seriesModel, ecModel) { + function getColor(sign, model) { + return model.get(sign > 0 ? positiveColorQuery : negativeColorQuery); + } + + function getBorderColor(sign, model) { + return model.get(sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery); + } // Only visible series has each data be visual encoded + + + if (ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + var isLargeRender = seriesModel.pipelineContext.large; + return !isLargeRender && { + progress: function (params, data) { + var dataIndex; + + while ((dataIndex = params.next()) != null) { + var itemModel = data.getItemModel(dataIndex); + var sign = data.getItemLayout(dataIndex).sign; + var style = itemModel.getItemStyle(); + style.fill = getColor(sign, itemModel); + style.stroke = getBorderColor(sign, itemModel) || style.fill; + var existsStyle = data.ensureUniqueItemVisual(dataIndex, 'style'); + extend(existsStyle, style); + } + } + }; + } + }; + + var LargeArr$1 = typeof Float32Array !== 'undefined' ? Float32Array : Array; + var candlestickLayout = { + seriesType: 'candlestick', + plan: createRenderPlanner(), + reset: function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var data = seriesModel.getData(); + var candleWidth = calculateCandleWidth(seriesModel, data); + var cDimIdx = 0; + var vDimIdx = 1; + var coordDims = ['x', 'y']; + var cDimI = data.getDimensionIndex(data.mapDimension(coordDims[cDimIdx])); + var vDimsI = map(data.mapDimensionsAll(coordDims[vDimIdx]), data.getDimensionIndex, data); + var openDimI = vDimsI[0]; + var closeDimI = vDimsI[1]; + var lowestDimI = vDimsI[2]; + var highestDimI = vDimsI[3]; + data.setLayout({ + candleWidth: candleWidth, + // The value is experimented visually. + isSimpleBox: candleWidth <= 1.3 + }); + + if (cDimI < 0 || vDimsI.length < 4) { + return; + } + + return { + progress: seriesModel.pipelineContext.large ? largeProgress : normalProgress + }; + + function normalProgress(params, data) { + var dataIndex; + var store = data.getStore(); + + while ((dataIndex = params.next()) != null) { + var axisDimVal = store.get(cDimI, dataIndex); + var openVal = store.get(openDimI, dataIndex); + var closeVal = store.get(closeDimI, dataIndex); + var lowestVal = store.get(lowestDimI, dataIndex); + var highestVal = store.get(highestDimI, dataIndex); + var ocLow = Math.min(openVal, closeVal); + var ocHigh = Math.max(openVal, closeVal); + var ocLowPoint = getPoint(ocLow, axisDimVal); + var ocHighPoint = getPoint(ocHigh, axisDimVal); + var lowestPoint = getPoint(lowestVal, axisDimVal); + var highestPoint = getPoint(highestVal, axisDimVal); + var ends = []; + addBodyEnd(ends, ocHighPoint, 0); + addBodyEnd(ends, ocLowPoint, 1); + ends.push(subPixelOptimizePoint(highestPoint), subPixelOptimizePoint(ocHighPoint), subPixelOptimizePoint(lowestPoint), subPixelOptimizePoint(ocLowPoint)); + data.setItemLayout(dataIndex, { + sign: getSign(store, dataIndex, openVal, closeVal, closeDimI), + initBaseline: openVal > closeVal ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx], + ends: ends, + brushRect: makeBrushRect(lowestVal, highestVal, axisDimVal) + }); + } + + function getPoint(val, axisDimVal) { + var p = []; + p[cDimIdx] = axisDimVal; + p[vDimIdx] = val; + return isNaN(axisDimVal) || isNaN(val) ? [NaN, NaN] : coordSys.dataToPoint(p); + } + + function addBodyEnd(ends, point, start) { + var point1 = point.slice(); + var point2 = point.slice(); + point1[cDimIdx] = subPixelOptimize$1(point1[cDimIdx] + candleWidth / 2, 1, false); + point2[cDimIdx] = subPixelOptimize$1(point2[cDimIdx] - candleWidth / 2, 1, true); + start ? ends.push(point1, point2) : ends.push(point2, point1); + } + + function makeBrushRect(lowestVal, highestVal, axisDimVal) { + var pmin = getPoint(lowestVal, axisDimVal); + var pmax = getPoint(highestVal, axisDimVal); + pmin[cDimIdx] -= candleWidth / 2; + pmax[cDimIdx] -= candleWidth / 2; + return { + x: pmin[0], + y: pmin[1], + width: candleWidth , + height: pmax[1] - pmin[1] + }; + } + + function subPixelOptimizePoint(point) { + point[cDimIdx] = subPixelOptimize$1(point[cDimIdx], 1); + return point; + } + } + + function largeProgress(params, data) { + // Structure: [sign, x, yhigh, ylow, sign, x, yhigh, ylow, ...] + var points = new LargeArr$1(params.count * 4); + var offset = 0; + var point; + var tmpIn = []; + var tmpOut = []; + var dataIndex; + var store = data.getStore(); + + while ((dataIndex = params.next()) != null) { + var axisDimVal = store.get(cDimI, dataIndex); + var openVal = store.get(openDimI, dataIndex); + var closeVal = store.get(closeDimI, dataIndex); + var lowestVal = store.get(lowestDimI, dataIndex); + var highestVal = store.get(highestDimI, dataIndex); + + if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) { + points[offset++] = NaN; + offset += 3; + continue; + } + + points[offset++] = getSign(store, dataIndex, openVal, closeVal, closeDimI); + tmpIn[cDimIdx] = axisDimVal; + tmpIn[vDimIdx] = lowestVal; + point = coordSys.dataToPoint(tmpIn, null, tmpOut); + points[offset++] = point ? point[0] : NaN; + points[offset++] = point ? point[1] : NaN; + tmpIn[vDimIdx] = highestVal; + point = coordSys.dataToPoint(tmpIn, null, tmpOut); + points[offset++] = point ? point[1] : NaN; + } + + data.setLayout('largePoints', points); + } + } + }; + + function getSign(store, dataIndex, openVal, closeVal, closeDimI) { + var sign; + + if (openVal > closeVal) { + sign = -1; + } else if (openVal < closeVal) { + sign = 1; + } else { + sign = dataIndex > 0 // If close === open, compare with close of last record + ? store.get(closeDimI, dataIndex - 1) <= closeVal ? 1 : -1 : // No record of previous, set to be positive + 1; + } + + return sign; + } + + function calculateCandleWidth(seriesModel, data) { + var baseAxis = seriesModel.getBaseAxis(); + var extent; + var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : (extent = baseAxis.getExtent(), Math.abs(extent[1] - extent[0]) / data.count()); + var barMaxWidth = parsePercent$1(retrieve2(seriesModel.get('barMaxWidth'), bandWidth), bandWidth); + var barMinWidth = parsePercent$1(retrieve2(seriesModel.get('barMinWidth'), 1), bandWidth); + var barWidth = seriesModel.get('barWidth'); + return barWidth != null ? parsePercent$1(barWidth, bandWidth) // Put max outer to ensure bar visible in spite of overlap. + : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth); + } + + function install$k(registers) { + registers.registerChartView(CandlestickView); + registers.registerSeriesModel(CandlestickSeriesModel); + registers.registerPreprocessor(candlestickPreprocessor); + registers.registerVisual(candlestickVisual); + registers.registerLayout(candlestickLayout); + } + + function updateRipplePath(rippleGroup, effectCfg) { + var color = effectCfg.rippleEffectColor || effectCfg.color; + rippleGroup.eachChild(function (ripplePath) { + ripplePath.attr({ + z: effectCfg.z, + zlevel: effectCfg.zlevel, + style: { + stroke: effectCfg.brushType === 'stroke' ? color : null, + fill: effectCfg.brushType === 'fill' ? color : null + } + }); + }); + } + + var EffectSymbol = + /** @class */ + function (_super) { + __extends(EffectSymbol, _super); + + function EffectSymbol(data, idx) { + var _this = _super.call(this) || this; + + var symbol = new Symbol(data, idx); + var rippleGroup = new Group(); + + _this.add(symbol); + + _this.add(rippleGroup); + + _this.updateData(data, idx); + + return _this; + } + + EffectSymbol.prototype.stopEffectAnimation = function () { + this.childAt(1).removeAll(); + }; + + EffectSymbol.prototype.startEffectAnimation = function (effectCfg) { + var symbolType = effectCfg.symbolType; + var color = effectCfg.color; + var rippleNumber = effectCfg.rippleNumber; + var rippleGroup = this.childAt(1); + + for (var i = 0; i < rippleNumber; i++) { + // If width/height are set too small (e.g., set to 1) on ios10 + // and macOS Sierra, a circle stroke become a rect, no matter what + // the scale is set. So we set width/height as 2. See #4136. + var ripplePath = createSymbol(symbolType, -1, -1, 2, 2, color); + ripplePath.attr({ + style: { + strokeNoScale: true + }, + z2: 99, + silent: true, + scaleX: 0.5, + scaleY: 0.5 + }); + var delay = -i / rippleNumber * effectCfg.period + effectCfg.effectOffset; + ripplePath.animate('', true).when(effectCfg.period, { + scaleX: effectCfg.rippleScale / 2, + scaleY: effectCfg.rippleScale / 2 + }).delay(delay).start(); + ripplePath.animateStyle(true).when(effectCfg.period, { + opacity: 0 + }).delay(delay).start(); + rippleGroup.add(ripplePath); + } + + updateRipplePath(rippleGroup, effectCfg); + }; + /** + * Update effect symbol + */ + + + EffectSymbol.prototype.updateEffectAnimation = function (effectCfg) { + var oldEffectCfg = this._effectCfg; + var rippleGroup = this.childAt(1); // Must reinitialize effect if following configuration changed + + var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale', 'rippleNumber']; + + for (var i = 0; i < DIFFICULT_PROPS.length; i++) { + var propName = DIFFICULT_PROPS[i]; + + if (oldEffectCfg[propName] !== effectCfg[propName]) { + this.stopEffectAnimation(); + this.startEffectAnimation(effectCfg); + return; + } + } + + updateRipplePath(rippleGroup, effectCfg); + }; + /** + * Highlight symbol + */ + + + EffectSymbol.prototype.highlight = function () { + enterEmphasis(this); + }; + /** + * Downplay symbol + */ + + + EffectSymbol.prototype.downplay = function () { + leaveEmphasis(this); + }; + + EffectSymbol.prototype.getSymbolType = function () { + var symbol = this.childAt(0); + return symbol && symbol.getSymbolType(); + }; + /** + * Update symbol properties + */ + + + EffectSymbol.prototype.updateData = function (data, idx) { + var _this = this; + + var seriesModel = data.hostModel; + this.childAt(0).updateData(data, idx); + var rippleGroup = this.childAt(1); + var itemModel = data.getItemModel(idx); + var symbolType = data.getItemVisual(idx, 'symbol'); + var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize')); + var symbolStyle = data.getItemVisual(idx, 'style'); + var color = symbolStyle && symbolStyle.fill; + rippleGroup.setScale(symbolSize); + rippleGroup.traverse(function (ripplePath) { + ripplePath.setStyle('fill', color); + }); + var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, 'symbolOffset'), symbolSize); + + if (symbolOffset) { + rippleGroup.x = symbolOffset[0]; + rippleGroup.y = symbolOffset[1]; + } + + var symbolRotate = data.getItemVisual(idx, 'symbolRotate'); + rippleGroup.rotation = (symbolRotate || 0) * Math.PI / 180 || 0; + var effectCfg = {}; + effectCfg.showEffectOn = seriesModel.get('showEffectOn'); + effectCfg.rippleScale = itemModel.get(['rippleEffect', 'scale']); + effectCfg.brushType = itemModel.get(['rippleEffect', 'brushType']); + effectCfg.period = itemModel.get(['rippleEffect', 'period']) * 1000; + effectCfg.effectOffset = idx / data.count(); + effectCfg.z = seriesModel.getShallow('z') || 0; + effectCfg.zlevel = seriesModel.getShallow('zlevel') || 0; + effectCfg.symbolType = symbolType; + effectCfg.color = color; + effectCfg.rippleEffectColor = itemModel.get(['rippleEffect', 'color']); + effectCfg.rippleNumber = itemModel.get(['rippleEffect', 'number']); + this.off('mouseover').off('mouseout').off('emphasis').off('normal'); + + if (effectCfg.showEffectOn === 'render') { + this._effectCfg ? this.updateEffectAnimation(effectCfg) : this.startEffectAnimation(effectCfg); + this._effectCfg = effectCfg; + } else { + // Not keep old effect config + this._effectCfg = null; + this.stopEffectAnimation(); + + this.onHoverStateChange = function (toState) { + if (toState === 'emphasis') { + if (effectCfg.showEffectOn !== 'render') { + _this.startEffectAnimation(effectCfg); + } + } else if (toState === 'normal') { + if (effectCfg.showEffectOn !== 'render') { + _this.stopEffectAnimation(); + } + } + }; + } + + this._effectCfg = effectCfg; + enableHoverEmphasis(this); + }; + + EffectSymbol.prototype.fadeOut = function (cb) { + this.off('mouseover').off('mouseout'); + cb && cb(); + }; + return EffectSymbol; + }(Group); + + var EffectScatterView = + /** @class */ + function (_super) { + __extends(EffectScatterView, _super); + + function EffectScatterView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = EffectScatterView.type; + return _this; + } + + EffectScatterView.prototype.init = function () { + this._symbolDraw = new SymbolDraw(EffectSymbol); + }; + + EffectScatterView.prototype.render = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var effectSymbolDraw = this._symbolDraw; + effectSymbolDraw.updateData(data, { + clipShape: this._getClipShape(seriesModel) + }); + this.group.add(effectSymbolDraw.group); + }; + + EffectScatterView.prototype._getClipShape = function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var clipArea = coordSys && coordSys.getArea && coordSys.getArea(); + return seriesModel.get('clip', true) ? clipArea : null; + }; + + EffectScatterView.prototype.updateTransform = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + this.group.dirty(); + var res = pointsLayout('').reset(seriesModel, ecModel, api); + + if (res.progress) { + res.progress({ + start: 0, + end: data.count(), + count: data.count() + }, data); + } + + this._symbolDraw.updateLayout(); + }; + + EffectScatterView.prototype._updateGroupTransform = function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && coordSys.getRoamTransform) { + this.group.transform = clone$2(coordSys.getRoamTransform()); + this.group.decomposeTransform(); + } + }; + + EffectScatterView.prototype.remove = function (ecModel, api) { + this._symbolDraw && this._symbolDraw.remove(true); + }; + + EffectScatterView.type = 'effectScatter'; + return EffectScatterView; + }(ChartView); + + var EffectScatterSeriesModel = + /** @class */ + function (_super) { + __extends(EffectScatterSeriesModel, _super); + + function EffectScatterSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = EffectScatterSeriesModel.type; + _this.hasSymbolVisual = true; + return _this; + } + + EffectScatterSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesData(null, this, { + useEncodeDefaulter: true + }); + }; + + EffectScatterSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) { + return selectors.point(data.getItemLayout(dataIndex)); + }; + + EffectScatterSeriesModel.type = 'series.effectScatter'; + EffectScatterSeriesModel.dependencies = ['grid', 'polar']; + EffectScatterSeriesModel.defaultOption = { + coordinateSystem: 'cartesian2d', + zlevel: 0, + z: 2, + legendHoverLink: true, + effectType: 'ripple', + progressive: 0, + // When to show the effect, option: 'render'|'emphasis' + showEffectOn: 'render', + clip: true, + // Ripple effect config + rippleEffect: { + period: 4, + // Scale of ripple + scale: 2.5, + // Brush type can be fill or stroke + brushType: 'fill', + // Ripple number + number: 3 + }, + universalTransition: { + divideShape: 'clone' + }, + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + // Polar coordinate system + // polarIndex: 0, + // Geo coordinate system + // geoIndex: 0, + // symbol: null, // 图形类型 + symbolSize: 10 // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2 + // symbolRotate: null, // 图形旋转控制 + // itemStyle: { + // opacity: 1 + // } + + }; + return EffectScatterSeriesModel; + }(SeriesModel); + + function install$l(registers) { + registers.registerChartView(EffectScatterView); + registers.registerSeriesModel(EffectScatterSeriesModel); + registers.registerLayout(pointsLayout('effectScatter')); + } + + var EffectLine = + /** @class */ + function (_super) { + __extends(EffectLine, _super); + + function EffectLine(lineData, idx, seriesScope) { + var _this = _super.call(this) || this; + + _this.add(_this.createLine(lineData, idx, seriesScope)); + + _this._updateEffectSymbol(lineData, idx); + + return _this; + } + + EffectLine.prototype.createLine = function (lineData, idx, seriesScope) { + return new Line$1(lineData, idx, seriesScope); + }; + + EffectLine.prototype._updateEffectSymbol = function (lineData, idx) { + var itemModel = lineData.getItemModel(idx); + var effectModel = itemModel.getModel('effect'); + var size = effectModel.get('symbolSize'); + var symbolType = effectModel.get('symbol'); + + if (!isArray(size)) { + size = [size, size]; + } + + var lineStyle = lineData.getItemVisual(idx, 'style'); + var color = effectModel.get('color') || lineStyle && lineStyle.stroke; + var symbol = this.childAt(1); + + if (this._symbolType !== symbolType) { + // Remove previous + this.remove(symbol); + symbol = createSymbol(symbolType, -0.5, -0.5, 1, 1, color); + symbol.z2 = 100; + symbol.culling = true; + this.add(symbol); + } // Symbol may be removed if loop is false + + + if (!symbol) { + return; + } // Shadow color is same with color in default + + + symbol.setStyle('shadowColor', color); + symbol.setStyle(effectModel.getItemStyle(['color'])); + symbol.scaleX = size[0]; + symbol.scaleY = size[1]; + symbol.setColor(color); + this._symbolType = symbolType; + this._symbolScale = size; + + this._updateEffectAnimation(lineData, effectModel, idx); + }; + + EffectLine.prototype._updateEffectAnimation = function (lineData, effectModel, idx) { + var symbol = this.childAt(1); + + if (!symbol) { + return; + } + + var self = this; + var points = lineData.getItemLayout(idx); + var period = effectModel.get('period') * 1000; + var loop = effectModel.get('loop'); + var constantSpeed = effectModel.get('constantSpeed'); + var delayExpr = retrieve(effectModel.get('delay'), function (idx) { + return idx / lineData.count() * period / 3; + }); // Ignore when updating + + symbol.ignore = true; + + this._updateAnimationPoints(symbol, points); + + if (constantSpeed > 0) { + period = this._getLineLength(symbol) / constantSpeed * 1000; + } + + if (period !== this._period || loop !== this._loop) { + symbol.stopAnimation(); + + if (period > 0) { + var delayNum = void 0; + + if (typeof delayExpr === 'function') { + delayNum = delayExpr(idx); + } else { + delayNum = delayExpr; + } + + if (symbol.__t > 0) { + delayNum = -period * symbol.__t; + } + + symbol.__t = 0; + var animator = symbol.animate('', loop).when(period, { + __t: 1 + }).delay(delayNum).during(function () { + self._updateSymbolPosition(symbol); + }); + + if (!loop) { + animator.done(function () { + self.remove(symbol); + }); + } + + animator.start(); + } + } + + this._period = period; + this._loop = loop; + }; + + EffectLine.prototype._getLineLength = function (symbol) { + // Not so accurate + return dist(symbol.__p1, symbol.__cp1) + dist(symbol.__cp1, symbol.__p2); + }; + + EffectLine.prototype._updateAnimationPoints = function (symbol, points) { + symbol.__p1 = points[0]; + symbol.__p2 = points[1]; + symbol.__cp1 = points[2] || [(points[0][0] + points[1][0]) / 2, (points[0][1] + points[1][1]) / 2]; + }; + + EffectLine.prototype.updateData = function (lineData, idx, seriesScope) { + this.childAt(0).updateData(lineData, idx, seriesScope); + + this._updateEffectSymbol(lineData, idx); + }; + + EffectLine.prototype._updateSymbolPosition = function (symbol) { + var p1 = symbol.__p1; + var p2 = symbol.__p2; + var cp1 = symbol.__cp1; + var t = symbol.__t; + var pos = [symbol.x, symbol.y]; + var lastPos = pos.slice(); + var quadraticAt$1 = quadraticAt; + var quadraticDerivativeAt$1 = quadraticDerivativeAt; + pos[0] = quadraticAt$1(p1[0], cp1[0], p2[0], t); + pos[1] = quadraticAt$1(p1[1], cp1[1], p2[1], t); // Tangent + + var tx = quadraticDerivativeAt$1(p1[0], cp1[0], p2[0], t); + var ty = quadraticDerivativeAt$1(p1[1], cp1[1], p2[1], t); + symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; // enable continuity trail for 'line', 'rect', 'roundRect' symbolType + + if (this._symbolType === 'line' || this._symbolType === 'rect' || this._symbolType === 'roundRect') { + if (symbol.__lastT !== undefined && symbol.__lastT < symbol.__t) { + symbol.scaleY = dist(lastPos, pos) * 1.05; // make sure the last segment render within endPoint + + if (t === 1) { + pos[0] = lastPos[0] + (pos[0] - lastPos[0]) / 2; + pos[1] = lastPos[1] + (pos[1] - lastPos[1]) / 2; + } + } else if (symbol.__lastT === 1) { + // After first loop, symbol.__t does NOT start with 0, so connect p1 to pos directly. + symbol.scaleY = 2 * dist(p1, pos); + } else { + symbol.scaleY = this._symbolScale[1]; + } + } + + symbol.__lastT = symbol.__t; + symbol.ignore = false; + symbol.x = pos[0]; + symbol.y = pos[1]; + }; + + EffectLine.prototype.updateLayout = function (lineData, idx) { + this.childAt(0).updateLayout(lineData, idx); + var effectModel = lineData.getItemModel(idx).getModel('effect'); + + this._updateEffectAnimation(lineData, effectModel, idx); + }; + + return EffectLine; + }(Group); + + var Polyline$1 = + /** @class */ + function (_super) { + __extends(Polyline$1, _super); + + function Polyline$1(lineData, idx, seriesScope) { + var _this = _super.call(this) || this; + + _this._createPolyline(lineData, idx, seriesScope); + + return _this; + } + + Polyline$1.prototype._createPolyline = function (lineData, idx, seriesScope) { + // let seriesModel = lineData.hostModel; + var points = lineData.getItemLayout(idx); + var line = new Polyline({ + shape: { + points: points + } + }); + this.add(line); + + this._updateCommonStl(lineData, idx, seriesScope); + }; + + Polyline$1.prototype.updateData = function (lineData, idx, seriesScope) { + var seriesModel = lineData.hostModel; + var line = this.childAt(0); + var target = { + shape: { + points: lineData.getItemLayout(idx) + } + }; + updateProps(line, target, seriesModel, idx); + + this._updateCommonStl(lineData, idx, seriesScope); + }; + + Polyline$1.prototype._updateCommonStl = function (lineData, idx, seriesScope) { + var line = this.childAt(0); + var itemModel = lineData.getItemModel(idx); + var hoverLineStyle = seriesScope && seriesScope.emphasisLineStyle; + + if (!seriesScope || lineData.hasItemOption) { + hoverLineStyle = itemModel.getModel(['emphasis', 'lineStyle']).getLineStyle(); + } + + line.useStyle(lineData.getItemVisual(idx, 'style')); + line.style.fill = null; + line.style.strokeNoScale = true; + var lineEmphasisState = line.ensureState('emphasis'); + lineEmphasisState.style = hoverLineStyle; + enableHoverEmphasis(this); + }; + + Polyline$1.prototype.updateLayout = function (lineData, idx) { + var polyline = this.childAt(0); + polyline.setShape('points', lineData.getItemLayout(idx)); + }; + return Polyline$1; + }(Group); + + var EffectPolyline = + /** @class */ + function (_super) { + __extends(EffectPolyline, _super); + + function EffectPolyline() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this._lastFrame = 0; + _this._lastFramePercent = 0; + return _this; + } // Override + + + EffectPolyline.prototype.createLine = function (lineData, idx, seriesScope) { + return new Polyline$1(lineData, idx, seriesScope); + }; + + EffectPolyline.prototype._updateAnimationPoints = function (symbol, points) { + this._points = points; + var accLenArr = [0]; + var len = 0; + + for (var i = 1; i < points.length; i++) { + var p1 = points[i - 1]; + var p2 = points[i]; + len += dist(p1, p2); + accLenArr.push(len); + } + + if (len === 0) { + this._length = 0; + return; + } + + for (var i = 0; i < accLenArr.length; i++) { + accLenArr[i] /= len; + } + + this._offsets = accLenArr; + this._length = len; + }; + + EffectPolyline.prototype._getLineLength = function () { + return this._length; + }; + + EffectPolyline.prototype._updateSymbolPosition = function (symbol) { + var t = symbol.__t; + var points = this._points; + var offsets = this._offsets; + var len = points.length; + + if (!offsets) { + // Has length 0 + return; + } + + var lastFrame = this._lastFrame; + var frame; + + if (t < this._lastFramePercent) { + // Start from the next frame + // PENDING start from lastFrame ? + var start = Math.min(lastFrame + 1, len - 1); + + for (frame = start; frame >= 0; frame--) { + if (offsets[frame] <= t) { + break; + } + } // PENDING really need to do this ? + + + frame = Math.min(frame, len - 2); + } else { + for (frame = lastFrame; frame < len; frame++) { + if (offsets[frame] > t) { + break; + } + } + + frame = Math.min(frame - 1, len - 2); + } + + var p = (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame]); + var p0 = points[frame]; + var p1 = points[frame + 1]; + symbol.x = p0[0] * (1 - p) + p * p1[0]; + symbol.y = p0[1] * (1 - p) + p * p1[1]; + var tx = p1[0] - p0[0]; + var ty = p1[1] - p0[1]; + symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; + this._lastFrame = frame; + this._lastFramePercent = t; + symbol.ignore = false; + }; + return EffectPolyline; + }(EffectLine); + + var LargeLinesPathShape = + /** @class */ + function () { + function LargeLinesPathShape() { + this.polyline = false; + this.curveness = 0; + this.segs = []; + } + + return LargeLinesPathShape; + }(); + + var LargeLinesPath = + /** @class */ + function (_super) { + __extends(LargeLinesPath, _super); + + function LargeLinesPath(opts) { + return _super.call(this, opts) || this; + } + + LargeLinesPath.prototype.getDefaultStyle = function () { + return { + stroke: '#000', + fill: null + }; + }; + + LargeLinesPath.prototype.getDefaultShape = function () { + return new LargeLinesPathShape(); + }; + + LargeLinesPath.prototype.buildPath = function (ctx, shape) { + var segs = shape.segs; + var curveness = shape.curveness; + + if (shape.polyline) { + for (var i = 0; i < segs.length;) { + var count = segs[i++]; + + if (count > 0) { + ctx.moveTo(segs[i++], segs[i++]); + + for (var k = 1; k < count; k++) { + ctx.lineTo(segs[i++], segs[i++]); + } + } + } + } else { + for (var i = 0; i < segs.length;) { + var x0 = segs[i++]; + var y0 = segs[i++]; + var x1 = segs[i++]; + var y1 = segs[i++]; + ctx.moveTo(x0, y0); + + if (curveness > 0) { + var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness; + var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness; + ctx.quadraticCurveTo(x2, y2, x1, y1); + } else { + ctx.lineTo(x1, y1); + } + } + } + }; + + LargeLinesPath.prototype.findDataIndex = function (x, y) { + var shape = this.shape; + var segs = shape.segs; + var curveness = shape.curveness; + var lineWidth = this.style.lineWidth; + + if (shape.polyline) { + var dataIndex = 0; + + for (var i = 0; i < segs.length;) { + var count = segs[i++]; + + if (count > 0) { + var x0 = segs[i++]; + var y0 = segs[i++]; + + for (var k = 1; k < count; k++) { + var x1 = segs[i++]; + var y1 = segs[i++]; + + if (containStroke(x0, y0, x1, y1, lineWidth, x, y)) { + return dataIndex; + } + } + } + + dataIndex++; + } + } else { + var dataIndex = 0; + + for (var i = 0; i < segs.length;) { + var x0 = segs[i++]; + var y0 = segs[i++]; + var x1 = segs[i++]; + var y1 = segs[i++]; + + if (curveness > 0) { + var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness; + var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness; + + if (containStroke$2(x0, y0, x2, y2, x1, y1, lineWidth, x, y)) { + return dataIndex; + } + } else { + if (containStroke(x0, y0, x1, y1, lineWidth, x, y)) { + return dataIndex; + } + } + + dataIndex++; + } + } + + return -1; + }; + + return LargeLinesPath; + }(Path); + + var LargeLineDraw = + /** @class */ + function () { + function LargeLineDraw() { + this.group = new Group(); + } + + LargeLineDraw.prototype.isPersistent = function () { + return !this._incremental; + }; + /** + * Update symbols draw by new data + */ + + LargeLineDraw.prototype.updateData = function (data) { + this.group.removeAll(); + var lineEl = new LargeLinesPath({ + rectHover: true, + cursor: 'default' + }); + lineEl.setShape({ + segs: data.getLayout('linesPoints') + }); + + this._setCommon(lineEl, data); // Add back + + + this.group.add(lineEl); + this._incremental = null; + }; + /** + * @override + */ + + LargeLineDraw.prototype.incrementalPrepareUpdate = function (data) { + this.group.removeAll(); + + this._clearIncremental(); + + if (data.count() > 5e5) { + if (!this._incremental) { + this._incremental = new IncrementalDisplayable({ + silent: true + }); + } + + this.group.add(this._incremental); + } else { + this._incremental = null; + } + }; + /** + * @override + */ + + LargeLineDraw.prototype.incrementalUpdate = function (taskParams, data) { + var lineEl = new LargeLinesPath(); + lineEl.setShape({ + segs: data.getLayout('linesPoints') + }); + + this._setCommon(lineEl, data, !!this._incremental); + + if (!this._incremental) { + lineEl.rectHover = true; + lineEl.cursor = 'default'; + lineEl.__startIndex = taskParams.start; + this.group.add(lineEl); + } else { + this._incremental.addDisplayable(lineEl, true); + } + }; + /** + * @override + */ + + LargeLineDraw.prototype.remove = function () { + this._clearIncremental(); + + this._incremental = null; + this.group.removeAll(); + }; + + LargeLineDraw.prototype._setCommon = function (lineEl, data, isIncremental) { + var hostModel = data.hostModel; + lineEl.setShape({ + polyline: hostModel.get('polyline'), + curveness: hostModel.get(['lineStyle', 'curveness']) + }); + lineEl.useStyle(hostModel.getModel('lineStyle').getLineStyle()); + lineEl.style.strokeNoScale = true; + var style = data.getVisual('style'); + + if (style && style.stroke) { + lineEl.setStyle('stroke', style.stroke); + } + + lineEl.setStyle('fill', null); + + if (!isIncremental) { + var ecData_1 = getECData(lineEl); // Enable tooltip + // PENDING May have performance issue when path is extremely large + + ecData_1.seriesIndex = hostModel.seriesIndex; + lineEl.on('mousemove', function (e) { + ecData_1.dataIndex = null; + var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY); + + if (dataIndex > 0) { + // Provide dataIndex for tooltip + ecData_1.dataIndex = dataIndex + lineEl.__startIndex; + } + }); + } + }; + + LargeLineDraw.prototype._clearIncremental = function () { + var incremental = this._incremental; + + if (incremental) { + incremental.clearDisplaybles(); + } + }; + return LargeLineDraw; + }(); + + var linesLayout = { + seriesType: 'lines', + plan: createRenderPlanner(), + reset: function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + var isPolyline = seriesModel.get('polyline'); + var isLarge = seriesModel.pipelineContext.large; + return { + progress: function (params, lineData) { + var lineCoords = []; + + if (isLarge) { + var points = void 0; + var segCount = params.end - params.start; + + if (isPolyline) { + var totalCoordsCount = 0; + + for (var i = params.start; i < params.end; i++) { + totalCoordsCount += seriesModel.getLineCoordsCount(i); + } + + points = new Float32Array(segCount + totalCoordsCount * 2); + } else { + points = new Float32Array(segCount * 4); + } + + var offset = 0; + var pt = []; + + for (var i = params.start; i < params.end; i++) { + var len = seriesModel.getLineCoords(i, lineCoords); + + if (isPolyline) { + points[offset++] = len; + } + + for (var k = 0; k < len; k++) { + pt = coordSys.dataToPoint(lineCoords[k], false, pt); + points[offset++] = pt[0]; + points[offset++] = pt[1]; + } + } + + lineData.setLayout('linesPoints', points); + } else { + for (var i = params.start; i < params.end; i++) { + var itemModel = lineData.getItemModel(i); + var len = seriesModel.getLineCoords(i, lineCoords); + var pts = []; + + if (isPolyline) { + for (var j = 0; j < len; j++) { + pts.push(coordSys.dataToPoint(lineCoords[j])); + } + } else { + pts[0] = coordSys.dataToPoint(lineCoords[0]); + pts[1] = coordSys.dataToPoint(lineCoords[1]); + var curveness = itemModel.get(['lineStyle', 'curveness']); + + if (+curveness) { + pts[2] = [(pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness, (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness]; + } + } + + lineData.setItemLayout(i, pts); + } + } + } + }; + } + }; + + var LinesView = + /** @class */ + function (_super) { + __extends(LinesView, _super); + + function LinesView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = LinesView.type; + return _this; + } + + LinesView.prototype.render = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var lineDraw = this._updateLineDraw(data, seriesModel); + + var zlevel = seriesModel.get('zlevel'); + var trailLength = seriesModel.get(['effect', 'trailLength']); + var zr = api.getZr(); // Avoid the drag cause ghost shadow + // FIXME Better way ? + // SVG doesn't support + + var isSvg = zr.painter.getType() === 'svg'; + + if (!isSvg) { + zr.painter.getLayer(zlevel).clear(true); + } // Config layer with motion blur + + + if (this._lastZlevel != null && !isSvg) { + zr.configLayer(this._lastZlevel, { + motionBlur: false + }); + } + + if (this._showEffect(seriesModel) && trailLength) { + if ("development" !== 'production') { + var notInIndividual_1 = false; + ecModel.eachSeries(function (otherSeriesModel) { + if (otherSeriesModel !== seriesModel && otherSeriesModel.get('zlevel') === zlevel) { + notInIndividual_1 = true; + } + }); + notInIndividual_1 && console.warn('Lines with trail effect should have an individual zlevel'); + } + + if (!isSvg) { + zr.configLayer(zlevel, { + motionBlur: true, + lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0) + }); + } + } + + lineDraw.updateData(data); + var clipPath = seriesModel.get('clip', true) && createClipPath(seriesModel.coordinateSystem, false, seriesModel); + + if (clipPath) { + this.group.setClipPath(clipPath); + } else { + this.group.removeClipPath(); + } + + this._lastZlevel = zlevel; + this._finished = true; + }; + + LinesView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + + var lineDraw = this._updateLineDraw(data, seriesModel); + + lineDraw.incrementalPrepareUpdate(data); + + this._clearLayer(api); + + this._finished = false; + }; + + LinesView.prototype.incrementalRender = function (taskParams, seriesModel, ecModel) { + this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData()); + + this._finished = taskParams.end === seriesModel.getData().count(); + }; + + LinesView.prototype.updateTransform = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var pipelineContext = seriesModel.pipelineContext; + + if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) { + // TODO Don't have to do update in large mode. Only do it when there are millions of data. + return { + update: true + }; + } else { + // TODO Use same logic with ScatterView. + // Manually update layout + var res = linesLayout.reset(seriesModel, ecModel, api); + + if (res.progress) { + res.progress({ + start: 0, + end: data.count(), + count: data.count() + }, data); + } // Not in large mode + + + this._lineDraw.updateLayout(); + + this._clearLayer(api); + } + }; + + LinesView.prototype._updateLineDraw = function (data, seriesModel) { + var lineDraw = this._lineDraw; + + var hasEffect = this._showEffect(seriesModel); + + var isPolyline = !!seriesModel.get('polyline'); + var pipelineContext = seriesModel.pipelineContext; + var isLargeDraw = pipelineContext.large; + + if ("development" !== 'production') { + if (hasEffect && isLargeDraw) { + console.warn('Large lines not support effect'); + } + } + + if (!lineDraw || hasEffect !== this._hasEffet || isPolyline !== this._isPolyline || isLargeDraw !== this._isLargeDraw) { + if (lineDraw) { + lineDraw.remove(); + } + + lineDraw = this._lineDraw = isLargeDraw ? new LargeLineDraw() : new LineDraw(isPolyline ? hasEffect ? EffectPolyline : Polyline$1 : hasEffect ? EffectLine : Line$1); + this._hasEffet = hasEffect; + this._isPolyline = isPolyline; + this._isLargeDraw = isLargeDraw; + } + + this.group.add(lineDraw.group); + return lineDraw; + }; + + LinesView.prototype._showEffect = function (seriesModel) { + return !!seriesModel.get(['effect', 'show']); + }; + + LinesView.prototype._clearLayer = function (api) { + // Not use motion when dragging or zooming + var zr = api.getZr(); + var isSvg = zr.painter.getType() === 'svg'; + + if (!isSvg && this._lastZlevel != null) { + zr.painter.getLayer(this._lastZlevel).clear(true); + } + }; + + LinesView.prototype.remove = function (ecModel, api) { + this._lineDraw && this._lineDraw.remove(); + this._lineDraw = null; // Clear motion when lineDraw is removed + + this._clearLayer(api); + }; + + LinesView.prototype.dispose = function (ecModel, api) { + this.remove(ecModel, api); + }; + + LinesView.type = 'lines'; + return LinesView; + }(ChartView); + + var Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array; + var Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array; + + function compatEc2(seriesOpt) { + var data = seriesOpt.data; + + if (data && data[0] && data[0][0] && data[0][0].coord) { + if ("development" !== 'production') { + console.warn('Lines data configuration has been changed to' + ' { coords:[[1,2],[2,3]] }'); + } + + seriesOpt.data = map(data, function (itemOpt) { + var coords = [itemOpt[0].coord, itemOpt[1].coord]; + var target = { + coords: coords + }; + + if (itemOpt[0].name) { + target.fromName = itemOpt[0].name; + } + + if (itemOpt[1].name) { + target.toName = itemOpt[1].name; + } + + return mergeAll([target, itemOpt[0], itemOpt[1]]); + }); + } + } + + var LinesSeriesModel = + /** @class */ + function (_super) { + __extends(LinesSeriesModel, _super); + + function LinesSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = LinesSeriesModel.type; + _this.visualStyleAccessPath = 'lineStyle'; + _this.visualDrawType = 'stroke'; + return _this; + } + + LinesSeriesModel.prototype.init = function (option) { + // The input data may be null/undefined. + option.data = option.data || []; // Not using preprocessor because mergeOption may not have series.type + + compatEc2(option); + + var result = this._processFlatCoordsArray(option.data); + + this._flatCoords = result.flatCoords; + this._flatCoordsOffset = result.flatCoordsOffset; + + if (result.flatCoords) { + option.data = new Float32Array(result.count); + } + + _super.prototype.init.apply(this, arguments); + }; + + LinesSeriesModel.prototype.mergeOption = function (option) { + compatEc2(option); + + if (option.data) { + // Only update when have option data to merge. + var result = this._processFlatCoordsArray(option.data); + + this._flatCoords = result.flatCoords; + this._flatCoordsOffset = result.flatCoordsOffset; + + if (result.flatCoords) { + option.data = new Float32Array(result.count); + } + } + + _super.prototype.mergeOption.apply(this, arguments); + }; + + LinesSeriesModel.prototype.appendData = function (params) { + var result = this._processFlatCoordsArray(params.data); + + if (result.flatCoords) { + if (!this._flatCoords) { + this._flatCoords = result.flatCoords; + this._flatCoordsOffset = result.flatCoordsOffset; + } else { + this._flatCoords = concatArray(this._flatCoords, result.flatCoords); + this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset); + } + + params.data = new Float32Array(result.count); + } + + this.getRawData().appendData(params.data); + }; + + LinesSeriesModel.prototype._getCoordsFromItemModel = function (idx) { + var itemModel = this.getData().getItemModel(idx); + var coords = itemModel.option instanceof Array ? itemModel.option : itemModel.getShallow('coords'); + + if ("development" !== 'production') { + if (!(coords instanceof Array && coords.length > 0 && coords[0] instanceof Array)) { + throw new Error('Invalid coords ' + JSON.stringify(coords) + '. Lines must have 2d coords array in data item.'); + } + } + + return coords; + }; + + LinesSeriesModel.prototype.getLineCoordsCount = function (idx) { + if (this._flatCoordsOffset) { + return this._flatCoordsOffset[idx * 2 + 1]; + } else { + return this._getCoordsFromItemModel(idx).length; + } + }; + + LinesSeriesModel.prototype.getLineCoords = function (idx, out) { + if (this._flatCoordsOffset) { + var offset = this._flatCoordsOffset[idx * 2]; + var len = this._flatCoordsOffset[idx * 2 + 1]; + + for (var i = 0; i < len; i++) { + out[i] = out[i] || []; + out[i][0] = this._flatCoords[offset + i * 2]; + out[i][1] = this._flatCoords[offset + i * 2 + 1]; + } + + return len; + } else { + var coords = this._getCoordsFromItemModel(idx); + + for (var i = 0; i < coords.length; i++) { + out[i] = out[i] || []; + out[i][0] = coords[i][0]; + out[i][1] = coords[i][1]; + } + + return coords.length; + } + }; + + LinesSeriesModel.prototype._processFlatCoordsArray = function (data) { + var startOffset = 0; + + if (this._flatCoords) { + startOffset = this._flatCoords.length; + } // Stored as a typed array. In format + // Points Count(2) | x | y | x | y | Points Count(3) | x | y | x | y | x | y | + + + if (typeof data[0] === 'number') { + var len = data.length; // Store offset and len of each segment + + var coordsOffsetAndLenStorage = new Uint32Arr(len); + var coordsStorage = new Float64Arr(len); + var coordsCursor = 0; + var offsetCursor = 0; + var dataCount = 0; + + for (var i = 0; i < len;) { + dataCount++; + var count = data[i++]; // Offset + + coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset; // Len + + coordsOffsetAndLenStorage[offsetCursor++] = count; + + for (var k = 0; k < count; k++) { + var x = data[i++]; + var y = data[i++]; + coordsStorage[coordsCursor++] = x; + coordsStorage[coordsCursor++] = y; + + if (i > len) { + if ("development" !== 'production') { + throw new Error('Invalid data format.'); + } + } + } + } + + return { + flatCoordsOffset: new Uint32Array(coordsOffsetAndLenStorage.buffer, 0, offsetCursor), + flatCoords: coordsStorage, + count: dataCount + }; + } + + return { + flatCoordsOffset: null, + flatCoords: null, + count: data.length + }; + }; + + LinesSeriesModel.prototype.getInitialData = function (option, ecModel) { + if ("development" !== 'production') { + var CoordSys = CoordinateSystemManager.get(option.coordinateSystem); + + if (!CoordSys) { + throw new Error('Unkown coordinate system ' + option.coordinateSystem); + } + } + + var lineData = new SeriesData(['value'], this); + lineData.hasItemOption = false; + lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) { + // dataItem is simply coords + if (dataItem instanceof Array) { + return NaN; + } else { + lineData.hasItemOption = true; + var value = dataItem.value; + + if (value != null) { + return value instanceof Array ? value[dimIndex] : value; + } + } + }); + return lineData; + }; + + LinesSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + var data = this.getData(); + var itemModel = data.getItemModel(dataIndex); + var name = itemModel.get('name'); + + if (name) { + return name; + } + + var fromName = itemModel.get('fromName'); + var toName = itemModel.get('toName'); + var nameArr = []; + fromName != null && nameArr.push(fromName); + toName != null && nameArr.push(toName); + return createTooltipMarkup('nameValue', { + name: nameArr.join(' > ') + }); + }; + + LinesSeriesModel.prototype.preventIncremental = function () { + return !!this.get(['effect', 'show']); + }; + + LinesSeriesModel.prototype.getProgressive = function () { + var progressive = this.option.progressive; + + if (progressive == null) { + return this.option.large ? 1e4 : this.get('progressive'); + } + + return progressive; + }; + + LinesSeriesModel.prototype.getProgressiveThreshold = function () { + var progressiveThreshold = this.option.progressiveThreshold; + + if (progressiveThreshold == null) { + return this.option.large ? 2e4 : this.get('progressiveThreshold'); + } + + return progressiveThreshold; + }; + + LinesSeriesModel.type = 'series.lines'; + LinesSeriesModel.dependencies = ['grid', 'polar', 'geo', 'calendar']; + LinesSeriesModel.defaultOption = { + coordinateSystem: 'geo', + zlevel: 0, + z: 2, + legendHoverLink: true, + // Cartesian coordinate system + xAxisIndex: 0, + yAxisIndex: 0, + symbol: ['none', 'none'], + symbolSize: [10, 10], + // Geo coordinate system + geoIndex: 0, + effect: { + show: false, + period: 4, + constantSpeed: 0, + symbol: 'circle', + symbolSize: 3, + loop: true, + trailLength: 0.2 + }, + large: false, + // Available when large is true + largeThreshold: 2000, + polyline: false, + clip: true, + label: { + show: false, + position: 'end' // distance: 5, + // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调 + + }, + lineStyle: { + opacity: 0.5 + } + }; + return LinesSeriesModel; + }(SeriesModel); + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function normalize$3(a) { + if (!(a instanceof Array)) { + a = [a, a]; + } + + return a; + } + + var linesVisual = { + seriesType: 'lines', + reset: function (seriesModel) { + var symbolType = normalize$3(seriesModel.get('symbol')); + var symbolSize = normalize$3(seriesModel.get('symbolSize')); + var data = seriesModel.getData(); + data.setVisual('fromSymbol', symbolType && symbolType[0]); + data.setVisual('toSymbol', symbolType && symbolType[1]); + data.setVisual('fromSymbolSize', symbolSize && symbolSize[0]); + data.setVisual('toSymbolSize', symbolSize && symbolSize[1]); + + function dataEach(data, idx) { + var itemModel = data.getItemModel(idx); + var symbolType = normalize$3(itemModel.getShallow('symbol', true)); + var symbolSize = normalize$3(itemModel.getShallow('symbolSize', true)); + symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]); + symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]); + symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]); + symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]); + } + + return { + dataEach: data.hasItemOption ? dataEach : null + }; + } + }; + + function install$m(registers) { + registers.registerChartView(LinesView); + registers.registerSeriesModel(LinesSeriesModel); + registers.registerLayout(linesLayout); + registers.registerVisual(linesVisual); + } + + var GRADIENT_LEVELS = 256; + + var HeatmapLayer = + /** @class */ + function () { + function HeatmapLayer() { + this.blurSize = 30; + this.pointSize = 20; + this.maxOpacity = 1; + this.minOpacity = 0; + this._gradientPixels = { + inRange: null, + outOfRange: null + }; + var canvas = createCanvas(); + this.canvas = canvas; + } + /** + * Renders Heatmap and returns the rendered canvas + * @param data array of data, each has x, y, value + * @param width canvas width + * @param height canvas height + */ + + + HeatmapLayer.prototype.update = function (data, width, height, normalize, colorFunc, isInRange) { + var brush = this._getBrush(); + + var gradientInRange = this._getGradient(colorFunc, 'inRange'); + + var gradientOutOfRange = this._getGradient(colorFunc, 'outOfRange'); + + var r = this.pointSize + this.blurSize; + var canvas = this.canvas; + var ctx = canvas.getContext('2d'); + var len = data.length; + canvas.width = width; + canvas.height = height; + + for (var i = 0; i < len; ++i) { + var p = data[i]; + var x = p[0]; + var y = p[1]; + var value = p[2]; // calculate alpha using value + + var alpha = normalize(value); // draw with the circle brush with alpha + + ctx.globalAlpha = alpha; + ctx.drawImage(brush, x - r, y - r); + } + + if (!canvas.width || !canvas.height) { + // Avoid "Uncaught DOMException: Failed to execute 'getImageData' on + // 'CanvasRenderingContext2D': The source height is 0." + return canvas; + } // colorize the canvas using alpha value and set with gradient + + + var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); + var pixels = imageData.data; + var offset = 0; + var pixelLen = pixels.length; + var minOpacity = this.minOpacity; + var maxOpacity = this.maxOpacity; + var diffOpacity = maxOpacity - minOpacity; + + while (offset < pixelLen) { + var alpha = pixels[offset + 3] / 256; + var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4; // Simple optimize to ignore the empty data + + if (alpha > 0) { + var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange; // Any alpha > 0 will be mapped to [minOpacity, maxOpacity] + + alpha > 0 && (alpha = alpha * diffOpacity + minOpacity); + pixels[offset++] = gradient[gradientOffset]; + pixels[offset++] = gradient[gradientOffset + 1]; + pixels[offset++] = gradient[gradientOffset + 2]; + pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256; + } else { + offset += 4; + } + } + + ctx.putImageData(imageData, 0, 0); + return canvas; + }; + /** + * get canvas of a black circle brush used for canvas to draw later + */ + + + HeatmapLayer.prototype._getBrush = function () { + var brushCanvas = this._brushCanvas || (this._brushCanvas = createCanvas()); // set brush size + + var r = this.pointSize + this.blurSize; + var d = r * 2; + brushCanvas.width = d; + brushCanvas.height = d; + var ctx = brushCanvas.getContext('2d'); + ctx.clearRect(0, 0, d, d); // in order to render shadow without the distinct circle, + // draw the distinct circle in an invisible place, + // and use shadowOffset to draw shadow in the center of the canvas + + ctx.shadowOffsetX = d; + ctx.shadowBlur = this.blurSize; // draw the shadow in black, and use alpha and shadow blur to generate + // color in color map + + ctx.shadowColor = '#000'; // draw circle in the left to the canvas + + ctx.beginPath(); + ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true); + ctx.closePath(); + ctx.fill(); + return brushCanvas; + }; + /** + * get gradient color map + * @private + */ + + + HeatmapLayer.prototype._getGradient = function (colorFunc, state) { + var gradientPixels = this._gradientPixels; + var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4)); + var color = [0, 0, 0, 0]; + var off = 0; + + for (var i = 0; i < 256; i++) { + colorFunc[state](i / 255, true, color); + pixelsSingleState[off++] = color[0]; + pixelsSingleState[off++] = color[1]; + pixelsSingleState[off++] = color[2]; + pixelsSingleState[off++] = color[3]; + } + + return pixelsSingleState; + }; + + return HeatmapLayer; + }(); + + function getIsInPiecewiseRange(dataExtent, pieceList, selected) { + var dataSpan = dataExtent[1] - dataExtent[0]; + pieceList = map(pieceList, function (piece) { + return { + interval: [(piece.interval[0] - dataExtent[0]) / dataSpan, (piece.interval[1] - dataExtent[0]) / dataSpan] + }; + }); + var len = pieceList.length; + var lastIndex = 0; + return function (val) { + var i; // Try to find in the location of the last found + + for (i = lastIndex; i < len; i++) { + var interval = pieceList[i].interval; + + if (interval[0] <= val && val <= interval[1]) { + lastIndex = i; + break; + } + } + + if (i === len) { + // Not found, back interation + for (i = lastIndex - 1; i >= 0; i--) { + var interval = pieceList[i].interval; + + if (interval[0] <= val && val <= interval[1]) { + lastIndex = i; + break; + } + } + } + + return i >= 0 && i < len && selected[i]; + }; + } + + function getIsInContinuousRange(dataExtent, range) { + var dataSpan = dataExtent[1] - dataExtent[0]; + range = [(range[0] - dataExtent[0]) / dataSpan, (range[1] - dataExtent[0]) / dataSpan]; + return function (val) { + return val >= range[0] && val <= range[1]; + }; + } + + function isGeoCoordSys(coordSys) { + var dimensions = coordSys.dimensions; // Not use coorSys.type === 'geo' because coordSys maybe extended + + return dimensions[0] === 'lng' && dimensions[1] === 'lat'; + } + + var HeatmapView = + /** @class */ + function (_super) { + __extends(HeatmapView, _super); + + function HeatmapView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = HeatmapView.type; + return _this; + } + + HeatmapView.prototype.render = function (seriesModel, ecModel, api) { + var visualMapOfThisSeries; + ecModel.eachComponent('visualMap', function (visualMap) { + visualMap.eachTargetSeries(function (targetSeries) { + if (targetSeries === seriesModel) { + visualMapOfThisSeries = visualMap; + } + }); + }); + + if ("development" !== 'production') { + if (!visualMapOfThisSeries) { + throw new Error('Heatmap must use with visualMap'); + } + } + + this.group.removeAll(); + this._incrementalDisplayable = null; + var coordSys = seriesModel.coordinateSystem; + + if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') { + this._renderOnCartesianAndCalendar(seriesModel, api, 0, seriesModel.getData().count()); + } else if (isGeoCoordSys(coordSys)) { + this._renderOnGeo(coordSys, seriesModel, visualMapOfThisSeries, api); + } + }; + + HeatmapView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) { + this.group.removeAll(); + }; + + HeatmapView.prototype.incrementalRender = function (params, seriesModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys) { + // geo does not support incremental rendering? + if (isGeoCoordSys(coordSys)) { + this.render(seriesModel, ecModel, api); + } else { + this._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true); + } + } + }; + + HeatmapView.prototype._renderOnCartesianAndCalendar = function (seriesModel, api, start, end, incremental) { + var coordSys = seriesModel.coordinateSystem; + var width; + var height; + var xAxisExtent; + var yAxisExtent; + + if (isCoordinateSystemType(coordSys, 'cartesian2d')) { + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + + if ("development" !== 'production') { + if (!(xAxis.type === 'category' && yAxis.type === 'category')) { + throw new Error('Heatmap on cartesian must have two category axes'); + } + + if (!(xAxis.onBand && yAxis.onBand)) { + throw new Error('Heatmap on cartesian must have two axes with boundaryGap true'); + } + } + + width = xAxis.getBandWidth(); + height = yAxis.getBandWidth(); + xAxisExtent = xAxis.scale.getExtent(); + yAxisExtent = yAxis.scale.getExtent(); + } + + var group = this.group; + var data = seriesModel.getData(); + var emphasisStyle = seriesModel.getModel(['emphasis', 'itemStyle']).getItemStyle(); + var blurStyle = seriesModel.getModel(['blur', 'itemStyle']).getItemStyle(); + var selectStyle = seriesModel.getModel(['select', 'itemStyle']).getItemStyle(); + var labelStatesModels = getLabelStatesModels(seriesModel); + var focus = seriesModel.get(['emphasis', 'focus']); + var blurScope = seriesModel.get(['emphasis', 'blurScope']); + var dataDims = isCoordinateSystemType(coordSys, 'cartesian2d') ? [data.mapDimension('x'), data.mapDimension('y'), data.mapDimension('value')] : [data.mapDimension('time'), data.mapDimension('value')]; + + for (var idx = start; idx < end; idx++) { + var rect = void 0; + var style = data.getItemVisual(idx, 'style'); + + if (isCoordinateSystemType(coordSys, 'cartesian2d')) { + var dataDimX = data.get(dataDims[0], idx); + var dataDimY = data.get(dataDims[1], idx); // Ignore empty data and out of extent data + + if (isNaN(data.get(dataDims[2], idx)) || dataDimX < xAxisExtent[0] || dataDimX > xAxisExtent[1] || dataDimY < yAxisExtent[0] || dataDimY > yAxisExtent[1]) { + continue; + } + + var point = coordSys.dataToPoint([dataDimX, dataDimY]); + rect = new Rect({ + shape: { + x: Math.floor(Math.round(point[0]) - width / 2), + y: Math.floor(Math.round(point[1]) - height / 2), + width: Math.ceil(width), + height: Math.ceil(height) + }, + style: style + }); + } else { + // Ignore empty data + if (isNaN(data.get(dataDims[1], idx))) { + continue; + } + + rect = new Rect({ + z2: 1, + shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape, + style: style + }); + } + + var itemModel = data.getItemModel(idx); // Optimization for large datset + + if (data.hasItemOption) { + var emphasisModel = itemModel.getModel('emphasis'); + emphasisStyle = emphasisModel.getModel('itemStyle').getItemStyle(); + blurStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle(); + selectStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle(); + focus = emphasisModel.get('focus'); + blurScope = emphasisModel.get('blurScope'); + labelStatesModels = getLabelStatesModels(itemModel); + } + + var rawValue = seriesModel.getRawValue(idx); + var defaultText = '-'; + + if (rawValue && rawValue[2] != null) { + defaultText = rawValue[2] + ''; + } + + setLabelStyle(rect, labelStatesModels, { + labelFetcher: seriesModel, + labelDataIndex: idx, + defaultOpacity: style.opacity, + defaultText: defaultText + }); + rect.ensureState('emphasis').style = emphasisStyle; + rect.ensureState('blur').style = blurStyle; + rect.ensureState('select').style = selectStyle; + enableHoverEmphasis(rect, focus, blurScope); + rect.incremental = incremental; // PENDING + + if (incremental) { + // Rect must use hover layer if it's incremental. + rect.states.emphasis.hoverLayer = true; + } + + group.add(rect); + data.setItemGraphicEl(idx, rect); + } + }; + + HeatmapView.prototype._renderOnGeo = function (geo, seriesModel, visualMapModel, api) { + var inRangeVisuals = visualMapModel.targetVisuals.inRange; + var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange; // if (!visualMapping) { + // throw new Error('Data range must have color visuals'); + // } + + var data = seriesModel.getData(); + var hmLayer = this._hmLayer || this._hmLayer || new HeatmapLayer(); + hmLayer.blurSize = seriesModel.get('blurSize'); + hmLayer.pointSize = seriesModel.get('pointSize'); + hmLayer.minOpacity = seriesModel.get('minOpacity'); + hmLayer.maxOpacity = seriesModel.get('maxOpacity'); + var rect = geo.getViewRect().clone(); + var roamTransform = geo.getRoamTransform(); + rect.applyTransform(roamTransform); // Clamp on viewport + + var x = Math.max(rect.x, 0); + var y = Math.max(rect.y, 0); + var x2 = Math.min(rect.width + rect.x, api.getWidth()); + var y2 = Math.min(rect.height + rect.y, api.getHeight()); + var width = x2 - x; + var height = y2 - y; + var dims = [data.mapDimension('lng'), data.mapDimension('lat'), data.mapDimension('value')]; + var points = data.mapArray(dims, function (lng, lat, value) { + var pt = geo.dataToPoint([lng, lat]); + pt[0] -= x; + pt[1] -= y; + pt.push(value); + return pt; + }); + var dataExtent = visualMapModel.getExtent(); + var isInRange = visualMapModel.type === 'visualMap.continuous' ? getIsInContinuousRange(dataExtent, visualMapModel.option.range) : getIsInPiecewiseRange(dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected); + hmLayer.update(points, width, height, inRangeVisuals.color.getNormalizer(), { + inRange: inRangeVisuals.color.getColorMapper(), + outOfRange: outOfRangeVisuals.color.getColorMapper() + }, isInRange); + var img = new ZRImage({ + style: { + width: width, + height: height, + x: x, + y: y, + image: hmLayer.canvas + }, + silent: true + }); + this.group.add(img); + }; + + HeatmapView.type = 'heatmap'; + return HeatmapView; + }(ChartView); + + var HeatmapSeriesModel = + /** @class */ + function (_super) { + __extends(HeatmapSeriesModel, _super); + + function HeatmapSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = HeatmapSeriesModel.type; + return _this; + } + + HeatmapSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesData(null, this, { + generateCoord: 'value' + }); + }; + + HeatmapSeriesModel.prototype.preventIncremental = function () { + var coordSysCreator = CoordinateSystemManager.get(this.get('coordinateSystem')); + + if (coordSysCreator && coordSysCreator.dimensions) { + return coordSysCreator.dimensions[0] === 'lng' && coordSysCreator.dimensions[1] === 'lat'; + } + }; + + HeatmapSeriesModel.type = 'series.heatmap'; + HeatmapSeriesModel.dependencies = ['grid', 'geo', 'calendar']; + HeatmapSeriesModel.defaultOption = { + coordinateSystem: 'cartesian2d', + zlevel: 0, + z: 2, + // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + // Geo coordinate system + geoIndex: 0, + blurSize: 30, + pointSize: 20, + maxOpacity: 1, + minOpacity: 0, + select: { + itemStyle: { + borderColor: '#212121' + } + } + }; + return HeatmapSeriesModel; + }(SeriesModel); + + function install$n(registers) { + registers.registerChartView(HeatmapView); + registers.registerSeriesModel(HeatmapSeriesModel); + } + + var BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'borderWidth']; // index: +isHorizontal + + var LAYOUT_ATTRS = [{ + xy: 'x', + wh: 'width', + index: 0, + posDesc: ['left', 'right'] + }, { + xy: 'y', + wh: 'height', + index: 1, + posDesc: ['top', 'bottom'] + }]; + var pathForLineWidth = new Circle(); + + var PictorialBarView = + /** @class */ + function (_super) { + __extends(PictorialBarView, _super); + + function PictorialBarView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = PictorialBarView.type; + return _this; + } + + PictorialBarView.prototype.render = function (seriesModel, ecModel, api) { + var group = this.group; + var data = seriesModel.getData(); + var oldData = this._data; + var cartesian = seriesModel.coordinateSystem; + var baseAxis = cartesian.getBaseAxis(); + var isHorizontal = baseAxis.isHorizontal(); + var coordSysRect = cartesian.master.getRect(); + var opt = { + ecSize: { + width: api.getWidth(), + height: api.getHeight() + }, + seriesModel: seriesModel, + coordSys: cartesian, + coordSysExtent: [[coordSysRect.x, coordSysRect.x + coordSysRect.width], [coordSysRect.y, coordSysRect.y + coordSysRect.height]], + isHorizontal: isHorizontal, + valueDim: LAYOUT_ATTRS[+isHorizontal], + categoryDim: LAYOUT_ATTRS[1 - +isHorizontal] + }; + data.diff(oldData).add(function (dataIndex) { + if (!data.hasValue(dataIndex)) { + return; + } + + var itemModel = getItemModel(data, dataIndex); + var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt); + var bar = createBar(data, opt, symbolMeta); + data.setItemGraphicEl(dataIndex, bar); + group.add(bar); + updateCommon$1(bar, opt, symbolMeta); + }).update(function (newIndex, oldIndex) { + var bar = oldData.getItemGraphicEl(oldIndex); + + if (!data.hasValue(newIndex)) { + group.remove(bar); + return; + } + + var itemModel = getItemModel(data, newIndex); + var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt); + var pictorialShapeStr = getShapeStr(data, symbolMeta); + + if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) { + group.remove(bar); + data.setItemGraphicEl(newIndex, null); + bar = null; + } + + if (bar) { + updateBar(bar, opt, symbolMeta); + } else { + bar = createBar(data, opt, symbolMeta, true); + } + + data.setItemGraphicEl(newIndex, bar); + bar.__pictorialSymbolMeta = symbolMeta; // Add back + + group.add(bar); + updateCommon$1(bar, opt, symbolMeta); + }).remove(function (dataIndex) { + var bar = oldData.getItemGraphicEl(dataIndex); + bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar); + }).execute(); + this._data = data; + return this.group; + }; + + PictorialBarView.prototype.remove = function (ecModel, api) { + var group = this.group; + var data = this._data; + + if (ecModel.get('animation')) { + if (data) { + data.eachItemGraphicEl(function (bar) { + removeBar(data, getECData(bar).dataIndex, ecModel, bar); + }); + } + } else { + group.removeAll(); + } + }; + + PictorialBarView.type = 'pictorialBar'; + return PictorialBarView; + }(ChartView); // Set or calculate default value about symbol, and calculate layout info. + + + function getSymbolMeta(data, dataIndex, itemModel, opt) { + var layout = data.getItemLayout(dataIndex); + var symbolRepeat = itemModel.get('symbolRepeat'); + var symbolClip = itemModel.get('symbolClip'); + var symbolPosition = itemModel.get('symbolPosition') || 'start'; + var symbolRotate = itemModel.get('symbolRotate'); + var rotation = (symbolRotate || 0) * Math.PI / 180 || 0; + var symbolPatternSize = itemModel.get('symbolPatternSize') || 2; + var isAnimationEnabled = itemModel.isAnimationEnabled(); + var symbolMeta = { + dataIndex: dataIndex, + layout: layout, + itemModel: itemModel, + symbolType: data.getItemVisual(dataIndex, 'symbol') || 'circle', + style: data.getItemVisual(dataIndex, 'style'), + symbolClip: symbolClip, + symbolRepeat: symbolRepeat, + symbolRepeatDirection: itemModel.get('symbolRepeatDirection'), + symbolPatternSize: symbolPatternSize, + rotation: rotation, + animationModel: isAnimationEnabled ? itemModel : null, + hoverScale: isAnimationEnabled && itemModel.get(['emphasis', 'scale']), + z2: itemModel.getShallow('z', true) || 0 + }; + prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta); + prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength, symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta); + prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta); + var symbolSize = symbolMeta.symbolSize; + var symbolOffset = normalizeSymbolOffset(itemModel.get('symbolOffset'), symbolSize); + prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength, opt, symbolMeta); + return symbolMeta; + } // bar length can be negative. + + + function prepareBarLength(itemModel, symbolRepeat, layout, opt, outputSymbolMeta) { + var valueDim = opt.valueDim; + var symbolBoundingData = itemModel.get('symbolBoundingData'); + var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis()); + var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0)); + var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0); + var boundingLength; + + if (isArray(symbolBoundingData)) { + var symbolBoundingExtent = [convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx, convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx]; + symbolBoundingExtent[1] < symbolBoundingExtent[0] && symbolBoundingExtent.reverse(); + boundingLength = symbolBoundingExtent[pxSignIdx]; + } else if (symbolBoundingData != null) { + boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx; + } else if (symbolRepeat) { + boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx; + } else { + boundingLength = layout[valueDim.wh]; + } + + outputSymbolMeta.boundingLength = boundingLength; + + if (symbolRepeat) { + outputSymbolMeta.repeatCutLength = layout[valueDim.wh]; + } + + outputSymbolMeta.pxSign = boundingLength > 0 ? 1 : boundingLength < 0 ? -1 : 0; + } + + function convertToCoordOnAxis(axis, value) { + return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value))); + } // Support ['100%', '100%'] + + + function prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength, pxSign, symbolPatternSize, opt, outputSymbolMeta) { + var valueDim = opt.valueDim; + var categoryDim = opt.categoryDim; + var categorySize = Math.abs(layout[categoryDim.wh]); + var symbolSize = data.getItemVisual(dataIndex, 'symbolSize'); + var parsedSymbolSize; + + if (isArray(symbolSize)) { + parsedSymbolSize = symbolSize.slice(); + } else { + if (symbolSize == null) { + // will parse to number below + parsedSymbolSize = ['100%', '100%']; + } else { + parsedSymbolSize = [symbolSize, symbolSize]; + } + } // Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is + // to complicated to calculate real percent value if considering scaled lineWidth. + // So the actual size will bigger than layout size if lineWidth is bigger than zero, + // which can be tolerated in pictorial chart. + + + parsedSymbolSize[categoryDim.index] = parsePercent$1(parsedSymbolSize[categoryDim.index], categorySize); + parsedSymbolSize[valueDim.index] = parsePercent$1(parsedSymbolSize[valueDim.index], symbolRepeat ? categorySize : Math.abs(boundingLength)); + outputSymbolMeta.symbolSize = parsedSymbolSize; // If x or y is less than zero, show reversed shape. + + var symbolScale = outputSymbolMeta.symbolScale = [parsedSymbolSize[0] / symbolPatternSize, parsedSymbolSize[1] / symbolPatternSize]; // Follow convention, 'right' and 'top' is the normal scale. + + symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign; + } + + function prepareLineWidth(itemModel, symbolScale, rotation, opt, outputSymbolMeta) { + // In symbols are drawn with scale, so do not need to care about the case that width + // or height are too small. But symbol use strokeNoScale, where acture lineWidth should + // be calculated. + var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0; + + if (valueLineWidth) { + pathForLineWidth.attr({ + scaleX: symbolScale[0], + scaleY: symbolScale[1], + rotation: rotation + }); + pathForLineWidth.updateTransform(); + valueLineWidth /= pathForLineWidth.getLineScale(); + valueLineWidth *= symbolScale[opt.valueDim.index]; + } + + outputSymbolMeta.valueLineWidth = valueLineWidth; + } + + function prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, outputSymbolMeta) { + var categoryDim = opt.categoryDim; + var valueDim = opt.valueDim; + var pxSign = outputSymbolMeta.pxSign; + var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0); + var pathLen = unitLength; // Note: rotation will not effect the layout of symbols, because user may + // want symbols to rotate on its center, which should not be translated + // when rotating. + + if (symbolRepeat) { + var absBoundingLength = Math.abs(boundingLength); + var symbolMargin = retrieve(itemModel.get('symbolMargin'), '15%') + ''; + var hasEndGap = false; + + if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) { + hasEndGap = true; + symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1); + } + + var symbolMarginNumeric = parsePercent$1(symbolMargin, symbolSize[valueDim.index]); + var uLenWithMargin = Math.max(unitLength + symbolMarginNumeric * 2, 0); // When symbol margin is less than 0, margin at both ends will be subtracted + // to ensure that all of the symbols will not be overflow the given area. + + var endFix = hasEndGap ? 0 : symbolMarginNumeric * 2; // Both final repeatTimes and final symbolMarginNumeric area calculated based on + // boundingLength. + + var repeatSpecified = isNumeric(symbolRepeat); + var repeatTimes = repeatSpecified ? symbolRepeat : toIntTimes((absBoundingLength + endFix) / uLenWithMargin); // Adjust calculate margin, to ensure each symbol is displayed + // entirely in the given layout area. + + var mDiff = absBoundingLength - repeatTimes * unitLength; + symbolMarginNumeric = mDiff / 2 / (hasEndGap ? repeatTimes : Math.max(repeatTimes - 1, 1)); + uLenWithMargin = unitLength + symbolMarginNumeric * 2; + endFix = hasEndGap ? 0 : symbolMarginNumeric * 2; // Update repeatTimes when not all symbol will be shown. + + if (!repeatSpecified && symbolRepeat !== 'fixed') { + repeatTimes = repeatCutLength ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin) : 0; + } + + pathLen = repeatTimes * uLenWithMargin - endFix; + outputSymbolMeta.repeatTimes = repeatTimes; + outputSymbolMeta.symbolMargin = symbolMarginNumeric; + } + + var sizeFix = pxSign * (pathLen / 2); + var pathPosition = outputSymbolMeta.pathPosition = []; + pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2; + pathPosition[valueDim.index] = symbolPosition === 'start' ? sizeFix : symbolPosition === 'end' ? boundingLength - sizeFix : boundingLength / 2; // 'center' + + if (symbolOffset) { + pathPosition[0] += symbolOffset[0]; + pathPosition[1] += symbolOffset[1]; + } + + var bundlePosition = outputSymbolMeta.bundlePosition = []; + bundlePosition[categoryDim.index] = layout[categoryDim.xy]; + bundlePosition[valueDim.index] = layout[valueDim.xy]; + var barRectShape = outputSymbolMeta.barRectShape = extend({}, layout); + barRectShape[valueDim.wh] = pxSign * Math.max(Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix)); + barRectShape[categoryDim.wh] = layout[categoryDim.wh]; + var clipShape = outputSymbolMeta.clipShape = {}; // Consider that symbol may be overflow layout rect. + + clipShape[categoryDim.xy] = -layout[categoryDim.xy]; + clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh]; + clipShape[valueDim.xy] = 0; + clipShape[valueDim.wh] = layout[valueDim.wh]; + } + + function createPath(symbolMeta) { + var symbolPatternSize = symbolMeta.symbolPatternSize; + var path = createSymbol( // Consider texture img, make a big size. + symbolMeta.symbolType, -symbolPatternSize / 2, -symbolPatternSize / 2, symbolPatternSize, symbolPatternSize); + path.attr({ + culling: true + }); + path.type !== 'image' && path.setStyle({ + strokeNoScale: true + }); + return path; + } + + function createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) { + var bundle = bar.__pictorialBundle; + var symbolSize = symbolMeta.symbolSize; + var valueLineWidth = symbolMeta.valueLineWidth; + var pathPosition = symbolMeta.pathPosition; + var valueDim = opt.valueDim; + var repeatTimes = symbolMeta.repeatTimes || 0; + var index = 0; + var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2; + eachPath(bar, function (path) { + path.__pictorialAnimationIndex = index; + path.__pictorialRepeatTimes = repeatTimes; + + if (index < repeatTimes) { + updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate); + } else { + updateAttr(path, null, { + scaleX: 0, + scaleY: 0 + }, symbolMeta, isUpdate, function () { + bundle.remove(path); + }); + } // updateHoverAnimation(path, symbolMeta); + + + index++; + }); + + for (; index < repeatTimes; index++) { + var path = createPath(symbolMeta); + path.__pictorialAnimationIndex = index; + path.__pictorialRepeatTimes = repeatTimes; + bundle.add(path); + var target = makeTarget(index); + updateAttr(path, { + x: target.x, + y: target.y, + scaleX: 0, + scaleY: 0 + }, { + scaleX: target.scaleX, + scaleY: target.scaleY, + rotation: target.rotation + }, symbolMeta, isUpdate); + } + + function makeTarget(index) { + var position = pathPosition.slice(); // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index + // Otherwise: i = index; + + var pxSign = symbolMeta.pxSign; + var i = index; + + if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) { + i = repeatTimes - 1 - index; + } + + position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index]; + return { + x: position[0], + y: position[1], + scaleX: symbolMeta.symbolScale[0], + scaleY: symbolMeta.symbolScale[1], + rotation: symbolMeta.rotation + }; + } + } + + function createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) { + var bundle = bar.__pictorialBundle; + var mainPath = bar.__pictorialMainPath; + + if (!mainPath) { + mainPath = bar.__pictorialMainPath = createPath(symbolMeta); + bundle.add(mainPath); + updateAttr(mainPath, { + x: symbolMeta.pathPosition[0], + y: symbolMeta.pathPosition[1], + scaleX: 0, + scaleY: 0, + rotation: symbolMeta.rotation + }, { + scaleX: symbolMeta.symbolScale[0], + scaleY: symbolMeta.symbolScale[1] + }, symbolMeta, isUpdate); + } else { + updateAttr(mainPath, null, { + x: symbolMeta.pathPosition[0], + y: symbolMeta.pathPosition[1], + scaleX: symbolMeta.symbolScale[0], + scaleY: symbolMeta.symbolScale[1], + rotation: symbolMeta.rotation + }, symbolMeta, isUpdate); + } + } // bar rect is used for label. + + + function createOrUpdateBarRect(bar, symbolMeta, isUpdate) { + var rectShape = extend({}, symbolMeta.barRectShape); + var barRect = bar.__pictorialBarRect; + + if (!barRect) { + barRect = bar.__pictorialBarRect = new Rect({ + z2: 2, + shape: rectShape, + silent: true, + style: { + stroke: 'transparent', + fill: 'transparent', + lineWidth: 0 + } + }); + barRect.disableMorphing = true; + bar.add(barRect); + } else { + updateAttr(barRect, null, { + shape: rectShape + }, symbolMeta, isUpdate); + } + } + + function createOrUpdateClip(bar, opt, symbolMeta, isUpdate) { + // If not clip, symbol will be remove and rebuilt. + if (symbolMeta.symbolClip) { + var clipPath = bar.__pictorialClipPath; + var clipShape = extend({}, symbolMeta.clipShape); + var valueDim = opt.valueDim; + var animationModel = symbolMeta.animationModel; + var dataIndex = symbolMeta.dataIndex; + + if (clipPath) { + updateProps(clipPath, { + shape: clipShape + }, animationModel, dataIndex); + } else { + clipShape[valueDim.wh] = 0; + clipPath = new Rect({ + shape: clipShape + }); + + bar.__pictorialBundle.setClipPath(clipPath); + + bar.__pictorialClipPath = clipPath; + var target = {}; + target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh]; + graphic[isUpdate ? 'updateProps' : 'initProps'](clipPath, { + shape: target + }, animationModel, dataIndex); + } + } + } + + function getItemModel(data, dataIndex) { + var itemModel = data.getItemModel(dataIndex); + itemModel.getAnimationDelayParams = getAnimationDelayParams; + itemModel.isAnimationEnabled = isAnimationEnabled; + return itemModel; + } + + function getAnimationDelayParams(path) { + // The order is the same as the z-order, see `symbolRepeatDiretion`. + return { + index: path.__pictorialAnimationIndex, + count: path.__pictorialRepeatTimes + }; + } + + function isAnimationEnabled() { + // `animation` prop can be set on itemModel in pictorial bar chart. + return this.parentModel.isAnimationEnabled() && !!this.getShallow('animation'); + } + + function createBar(data, opt, symbolMeta, isUpdate) { + // bar is the main element for each data. + var bar = new Group(); // bundle is used for location and clip. + + var bundle = new Group(); + bar.add(bundle); + bar.__pictorialBundle = bundle; + bundle.x = symbolMeta.bundlePosition[0]; + bundle.y = symbolMeta.bundlePosition[1]; + + if (symbolMeta.symbolRepeat) { + createOrUpdateRepeatSymbols(bar, opt, symbolMeta); + } else { + createOrUpdateSingleSymbol(bar, opt, symbolMeta); + } + + createOrUpdateBarRect(bar, symbolMeta, isUpdate); + createOrUpdateClip(bar, opt, symbolMeta, isUpdate); + bar.__pictorialShapeStr = getShapeStr(data, symbolMeta); + bar.__pictorialSymbolMeta = symbolMeta; + return bar; + } + + function updateBar(bar, opt, symbolMeta) { + var animationModel = symbolMeta.animationModel; + var dataIndex = symbolMeta.dataIndex; + var bundle = bar.__pictorialBundle; + updateProps(bundle, { + x: symbolMeta.bundlePosition[0], + y: symbolMeta.bundlePosition[1] + }, animationModel, dataIndex); + + if (symbolMeta.symbolRepeat) { + createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true); + } else { + createOrUpdateSingleSymbol(bar, opt, symbolMeta, true); + } + + createOrUpdateBarRect(bar, symbolMeta, true); + createOrUpdateClip(bar, opt, symbolMeta, true); + } + + function removeBar(data, dataIndex, animationModel, bar) { + // Not show text when animating + var labelRect = bar.__pictorialBarRect; + labelRect && labelRect.removeTextContent(); + var pathes = []; + eachPath(bar, function (path) { + pathes.push(path); + }); + bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath); // I do not find proper remove animation for clip yet. + + bar.__pictorialClipPath && (animationModel = null); + each(pathes, function (path) { + removeElement(path, { + scaleX: 0, + scaleY: 0 + }, animationModel, dataIndex, function () { + bar.parent && bar.parent.remove(bar); + }); + }); + data.setItemGraphicEl(dataIndex, null); + } + + function getShapeStr(data, symbolMeta) { + return [data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none', !!symbolMeta.symbolRepeat, !!symbolMeta.symbolClip].join(':'); + } + + function eachPath(bar, cb, context) { + // Do not use Group#eachChild, because it do not support remove. + each(bar.__pictorialBundle.children(), function (el) { + el !== bar.__pictorialBarRect && cb.call(context, el); + }); + } + + function updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) { + immediateAttrs && el.attr(immediateAttrs); // when symbolCip used, only clip path has init animation, otherwise it would be weird effect. + + if (symbolMeta.symbolClip && !isUpdate) { + animationAttrs && el.attr(animationAttrs); + } else { + animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps'](el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb); + } + } + + function updateCommon$1(bar, opt, symbolMeta) { + var dataIndex = symbolMeta.dataIndex; + var itemModel = symbolMeta.itemModel; // Color must be excluded. + // Because symbol provide setColor individually to set fill and stroke + + var emphasisModel = itemModel.getModel('emphasis'); + var emphasisStyle = emphasisModel.getModel('itemStyle').getItemStyle(); + var blurStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle(); + var selectStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle(); + var cursorStyle = itemModel.getShallow('cursor'); + var focus = emphasisModel.get('focus'); + var blurScope = emphasisModel.get('blurScope'); + var hoverScale = emphasisModel.get('scale'); + eachPath(bar, function (path) { + if (path instanceof ZRImage) { + var pathStyle = path.style; + path.useStyle(extend({ + // TODO other properties like dx, dy ? + image: pathStyle.image, + x: pathStyle.x, + y: pathStyle.y, + width: pathStyle.width, + height: pathStyle.height + }, symbolMeta.style)); + } else { + path.useStyle(symbolMeta.style); + } + + var emphasisState = path.ensureState('emphasis'); + emphasisState.style = emphasisStyle; + + if (hoverScale) { + // NOTE: Must after scale is set after updateAttr + emphasisState.scaleX = path.scaleX * 1.1; + emphasisState.scaleY = path.scaleY * 1.1; + } + + path.ensureState('blur').style = blurStyle; + path.ensureState('select').style = selectStyle; + cursorStyle && (path.cursor = cursorStyle); + path.z2 = symbolMeta.z2; + }); + var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)]; + var barRect = bar.__pictorialBarRect; + setLabelStyle(barRect, getLabelStatesModels(itemModel), { + labelFetcher: opt.seriesModel, + labelDataIndex: dataIndex, + defaultText: getDefaultLabel(opt.seriesModel.getData(), dataIndex), + inheritColor: symbolMeta.style.fill, + defaultOpacity: symbolMeta.style.opacity, + defaultOutsidePosition: barPositionOutside + }); + enableHoverEmphasis(bar, focus, blurScope); + } + + function toIntTimes(times) { + var roundedTimes = Math.round(times); // Escapse accurate error + + return Math.abs(times - roundedTimes) < 1e-4 ? roundedTimes : Math.ceil(times); + } + + var PictorialBarSeriesModel = + /** @class */ + function (_super) { + __extends(PictorialBarSeriesModel, _super); + + function PictorialBarSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = PictorialBarSeriesModel.type; + _this.hasSymbolVisual = true; + _this.defaultSymbol = 'roundRect'; + return _this; + } + + PictorialBarSeriesModel.prototype.getInitialData = function (option) { + // Disable stack. + option.stack = null; + return _super.prototype.getInitialData.apply(this, arguments); + }; + + PictorialBarSeriesModel.type = 'series.pictorialBar'; + PictorialBarSeriesModel.dependencies = ['grid']; + PictorialBarSeriesModel.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, { + symbol: 'circle', + symbolSize: null, + symbolRotate: null, + symbolPosition: null, + symbolOffset: null, + symbolMargin: null, + symbolRepeat: false, + symbolRepeatDirection: 'end', + symbolClip: false, + symbolBoundingData: null, + symbolPatternSize: 400, + barGap: '-100%', + // z can be set in data item, which is z2 actually. + // Disable progressive + progressive: 0, + emphasis: { + // By default pictorialBar do not hover scale. Hover scale is not suitable + // for the case that both has foreground and background. + scale: false + }, + select: { + itemStyle: { + borderColor: '#212121' + } + } + }); + return PictorialBarSeriesModel; + }(BaseBarSeriesModel); + + function install$o(registers) { + registers.registerChartView(PictorialBarView); + registers.registerSeriesModel(PictorialBarSeriesModel); + registers.registerLayout(curry(layout, 'pictorialBar')); + } + + var ThemeRiverView = + /** @class */ + function (_super) { + __extends(ThemeRiverView, _super); + + function ThemeRiverView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ThemeRiverView.type; + _this._layers = []; + return _this; + } + + ThemeRiverView.prototype.render = function (seriesModel, ecModel, api) { + var data = seriesModel.getData(); + var self = this; + var group = this.group; + var layersSeries = seriesModel.getLayerSeries(); + var layoutInfo = data.getLayout('layoutInfo'); + var rect = layoutInfo.rect; + var boundaryGap = layoutInfo.boundaryGap; + group.x = 0; + group.y = rect.y + boundaryGap[0]; + + function keyGetter(item) { + return item.name; + } + + var dataDiffer = new DataDiffer(this._layersSeries || [], layersSeries, keyGetter, keyGetter); + var newLayersGroups = []; + dataDiffer.add(bind(process, this, 'add')).update(bind(process, this, 'update')).remove(bind(process, this, 'remove')).execute(); + + function process(status, idx, oldIdx) { + var oldLayersGroups = self._layers; + + if (status === 'remove') { + group.remove(oldLayersGroups[idx]); + return; + } + + var points0 = []; + var points1 = []; + var style; + var indices = layersSeries[idx].indices; + var j = 0; + + for (; j < indices.length; j++) { + var layout = data.getItemLayout(indices[j]); + var x = layout.x; + var y0 = layout.y0; + var y = layout.y; + points0.push(x, y0); + points1.push(x, y0 + y); + style = data.getItemVisual(indices[j], 'style'); + } + + var polygon; + var textLayout = data.getItemLayout(indices[0]); + var labelModel = seriesModel.getModel('label'); + var margin = labelModel.get('margin'); + var emphasisModel = seriesModel.getModel('emphasis'); + + if (status === 'add') { + var layerGroup = newLayersGroups[idx] = new Group(); + polygon = new ECPolygon({ + shape: { + points: points0, + stackedOnPoints: points1, + smooth: 0.4, + stackedOnSmooth: 0.4, + smoothConstraint: false + }, + z2: 0 + }); + layerGroup.add(polygon); + group.add(layerGroup); + + if (seriesModel.isAnimationEnabled()) { + polygon.setClipPath(createGridClipShape$2(polygon.getBoundingRect(), seriesModel, function () { + polygon.removeClipPath(); + })); + } + } else { + var layerGroup = oldLayersGroups[oldIdx]; + polygon = layerGroup.childAt(0); + group.add(layerGroup); + newLayersGroups[idx] = layerGroup; + updateProps(polygon, { + shape: { + points: points0, + stackedOnPoints: points1 + } + }, seriesModel); + saveOldStyle(polygon); + } + + setLabelStyle(polygon, getLabelStatesModels(seriesModel), { + labelDataIndex: indices[j - 1], + defaultText: data.getName(indices[j - 1]), + inheritColor: style.fill + }, { + normal: { + verticalAlign: 'middle' // align: 'right' + + } + }); + polygon.setTextConfig({ + position: null, + local: true + }); + var labelEl = polygon.getTextContent(); // TODO More label position options. + + if (labelEl) { + labelEl.x = textLayout.x - margin; + labelEl.y = textLayout.y0 + textLayout.y / 2; + } + + polygon.useStyle(style); + data.setItemGraphicEl(idx, polygon); + setStatesStylesFromModel(polygon, seriesModel); + enableHoverEmphasis(polygon, emphasisModel.get('focus'), emphasisModel.get('blurScope')); + } + + this._layersSeries = layersSeries; + this._layers = newLayersGroups; + }; + + ThemeRiverView.type = 'themeRiver'; + return ThemeRiverView; + }(ChartView); + + function createGridClipShape$2(rect, seriesModel, cb) { + var rectEl = new Rect({ + shape: { + x: rect.x - 10, + y: rect.y - 10, + width: 0, + height: rect.height + 20 + } + }); + initProps(rectEl, { + shape: { + x: rect.x - 50, + width: rect.width + 100, + height: rect.height + 20 + } + }, seriesModel, cb); + return rectEl; + } + + var DATA_NAME_INDEX = 2; + + var ThemeRiverSeriesModel = + /** @class */ + function (_super) { + __extends(ThemeRiverSeriesModel, _super); + + function ThemeRiverSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ThemeRiverSeriesModel.type; + return _this; + } + /** + * @override + */ + + + ThemeRiverSeriesModel.prototype.init = function (option) { + // eslint-disable-next-line + _super.prototype.init.apply(this, arguments); // Put this function here is for the sake of consistency of code style. + // Enable legend selection for each data item + // Use a function instead of direct access because data reference may changed + + + this.legendVisualProvider = new LegendVisualProvider(bind(this.getData, this), bind(this.getRawData, this)); + }; + /** + * If there is no value of a certain point in the time for some event,set it value to 0. + * + * @param {Array} data initial data in the option + * @return {Array} + */ + + + ThemeRiverSeriesModel.prototype.fixData = function (data) { + var rawDataLength = data.length; + /** + * Make sure every layer data get the same keys. + * The value index tells which layer has visited. + * { + * 2014/01/01: -1 + * } + */ + + var timeValueKeys = {}; // grouped data by name + + var groupResult = groupData(data, function (item) { + if (!timeValueKeys.hasOwnProperty(item[0] + '')) { + timeValueKeys[item[0] + ''] = -1; + } + + return item[2]; + }); + var layerData = []; + groupResult.buckets.each(function (items, key) { + layerData.push({ + name: key, + dataList: items + }); + }); + var layerNum = layerData.length; + + for (var k = 0; k < layerNum; ++k) { + var name_1 = layerData[k].name; + + for (var j = 0; j < layerData[k].dataList.length; ++j) { + var timeValue = layerData[k].dataList[j][0] + ''; + timeValueKeys[timeValue] = k; + } + + for (var timeValue in timeValueKeys) { + if (timeValueKeys.hasOwnProperty(timeValue) && timeValueKeys[timeValue] !== k) { + timeValueKeys[timeValue] = k; + data[rawDataLength] = [timeValue, 0, name_1]; + rawDataLength++; + } + } + } + + return data; + }; + /** + * @override + * @param option the initial option that user gived + * @param ecModel the model object for themeRiver option + */ + + + ThemeRiverSeriesModel.prototype.getInitialData = function (option, ecModel) { + var singleAxisModel = this.getReferringComponents('singleAxis', SINGLE_REFERRING).models[0]; + var axisType = singleAxisModel.get('type'); // filter the data item with the value of label is undefined + + var filterData = filter(option.data, function (dataItem) { + return dataItem[2] !== undefined; + }); // ??? TODO design a stage to transfer data for themeRiver and lines? + + var data = this.fixData(filterData || []); + var nameList = []; + var nameMap = this.nameMap = createHashMap(); + var count = 0; + + for (var i = 0; i < data.length; ++i) { + nameList.push(data[i][DATA_NAME_INDEX]); + + if (!nameMap.get(data[i][DATA_NAME_INDEX])) { + nameMap.set(data[i][DATA_NAME_INDEX], count); + count++; + } + } + + var dimensions = prepareSeriesDataSchema(data, { + coordDimensions: ['single'], + dimensionsDefine: [{ + name: 'time', + type: getDimensionTypeByAxis(axisType) + }, { + name: 'value', + type: 'float' + }, { + name: 'name', + type: 'ordinal' + }], + encodeDefine: { + single: 0, + value: 1, + itemName: 2 + } + }).dimensions; + var list = new SeriesData(dimensions, this); + list.initData(data); + return list; + }; + /** + * The raw data is divided into multiple layers and each layer + * has same name. + */ + + + ThemeRiverSeriesModel.prototype.getLayerSeries = function () { + var data = this.getData(); + var lenCount = data.count(); + var indexArr = []; + + for (var i = 0; i < lenCount; ++i) { + indexArr[i] = i; + } + + var timeDim = data.mapDimension('single'); // data group by name + + var groupResult = groupData(indexArr, function (index) { + return data.get('name', index); + }); + var layerSeries = []; + groupResult.buckets.each(function (items, key) { + items.sort(function (index1, index2) { + return data.get(timeDim, index1) - data.get(timeDim, index2); + }); + layerSeries.push({ + name: key, + indices: items + }); + }); + return layerSeries; + }; + /** + * Get data indices for show tooltip content + */ + + + ThemeRiverSeriesModel.prototype.getAxisTooltipData = function (dim, value, baseAxis) { + if (!isArray(dim)) { + dim = dim ? [dim] : []; + } + + var data = this.getData(); + var layerSeries = this.getLayerSeries(); + var indices = []; + var layerNum = layerSeries.length; + var nestestValue; + + for (var i = 0; i < layerNum; ++i) { + var minDist = Number.MAX_VALUE; + var nearestIdx = -1; + var pointNum = layerSeries[i].indices.length; + + for (var j = 0; j < pointNum; ++j) { + var theValue = data.get(dim[0], layerSeries[i].indices[j]); + var dist = Math.abs(theValue - value); + + if (dist <= minDist) { + nestestValue = theValue; + minDist = dist; + nearestIdx = layerSeries[i].indices[j]; + } + } + + indices.push(nearestIdx); + } + + return { + dataIndices: indices, + nestestValue: nestestValue + }; + }; + + ThemeRiverSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + var data = this.getData(); + var name = data.getName(dataIndex); + var value = data.get(data.mapDimension('value'), dataIndex); + return createTooltipMarkup('nameValue', { + name: name, + value: value + }); + }; + + ThemeRiverSeriesModel.type = 'series.themeRiver'; + ThemeRiverSeriesModel.dependencies = ['singleAxis']; + ThemeRiverSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + colorBy: 'data', + coordinateSystem: 'singleAxis', + // gap in axis's orthogonal orientation + boundaryGap: ['10%', '10%'], + // legendHoverLink: true, + singleAxisIndex: 0, + animationEasing: 'linear', + label: { + margin: 4, + show: true, + position: 'left', + fontSize: 11 + }, + emphasis: { + label: { + show: true + } + } + }; + return ThemeRiverSeriesModel; + }(SeriesModel); + + function themeRiverLayout(ecModel, api) { + ecModel.eachSeriesByType('themeRiver', function (seriesModel) { + var data = seriesModel.getData(); + var single = seriesModel.coordinateSystem; + var layoutInfo = {}; // use the axis boundingRect for view + + var rect = single.getRect(); + layoutInfo.rect = rect; + var boundaryGap = seriesModel.get('boundaryGap'); + var axis = single.getAxis(); + layoutInfo.boundaryGap = boundaryGap; + + if (axis.orient === 'horizontal') { + boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.height); + boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.height); + var height = rect.height - boundaryGap[0] - boundaryGap[1]; + doThemeRiverLayout(data, seriesModel, height); + } else { + boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.width); + boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.width); + var width = rect.width - boundaryGap[0] - boundaryGap[1]; + doThemeRiverLayout(data, seriesModel, width); + } + + data.setLayout('layoutInfo', layoutInfo); + }); + } + /** + * The layout information about themeriver + * + * @param data data in the series + * @param seriesModel the model object of themeRiver series + * @param height value used to compute every series height + */ + + function doThemeRiverLayout(data, seriesModel, height) { + if (!data.count()) { + return; + } + + var coordSys = seriesModel.coordinateSystem; // the data in each layer are organized into a series. + + var layerSeries = seriesModel.getLayerSeries(); // the points in each layer. + + var timeDim = data.mapDimension('single'); + var valueDim = data.mapDimension('value'); + var layerPoints = map(layerSeries, function (singleLayer) { + return map(singleLayer.indices, function (idx) { + var pt = coordSys.dataToPoint(data.get(timeDim, idx)); + pt[1] = data.get(valueDim, idx); + return pt; + }); + }); + var base = computeBaseline(layerPoints); + var baseLine = base.y0; + var ky = height / base.max; // set layout information for each item. + + var n = layerSeries.length; + var m = layerSeries[0].indices.length; + var baseY0; + + for (var j = 0; j < m; ++j) { + baseY0 = baseLine[j] * ky; + data.setItemLayout(layerSeries[0].indices[j], { + layerIndex: 0, + x: layerPoints[0][j][0], + y0: baseY0, + y: layerPoints[0][j][1] * ky + }); + + for (var i = 1; i < n; ++i) { + baseY0 += layerPoints[i - 1][j][1] * ky; + data.setItemLayout(layerSeries[i].indices[j], { + layerIndex: i, + x: layerPoints[i][j][0], + y0: baseY0, + y: layerPoints[i][j][1] * ky + }); + } + } + } + /** + * Compute the baseLine of the rawdata + * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics + * + * @param data the points in each layer + */ + + + function computeBaseline(data) { + var layerNum = data.length; + var pointNum = data[0].length; + var sums = []; + var y0 = []; + var max = 0; + + for (var i = 0; i < pointNum; ++i) { + var temp = 0; + + for (var j = 0; j < layerNum; ++j) { + temp += data[j][i][1]; + } + + if (temp > max) { + max = temp; + } + + sums.push(temp); + } + + for (var k = 0; k < pointNum; ++k) { + y0[k] = (max - sums[k]) / 2; + } + + max = 0; + + for (var l = 0; l < pointNum; ++l) { + var sum = sums[l] + y0[l]; + + if (sum > max) { + max = sum; + } + } + + return { + y0: y0, + max: max + }; + } + + function install$p(registers) { + registers.registerChartView(ThemeRiverView); + registers.registerSeriesModel(ThemeRiverSeriesModel); + registers.registerLayout(themeRiverLayout); + registers.registerProcessor(dataFilter('themeRiver')); + } + + var DEFAULT_SECTOR_Z = 2; + var DEFAULT_TEXT_Z = 4; + /** + * Sunburstce of Sunburst including Sector, Label, LabelLine + */ + + var SunburstPiece = + /** @class */ + function (_super) { + __extends(SunburstPiece, _super); + + function SunburstPiece(node, seriesModel, ecModel, api) { + var _this = _super.call(this) || this; + + _this.z2 = DEFAULT_SECTOR_Z; + _this.textConfig = { + inside: true + }; + getECData(_this).seriesIndex = seriesModel.seriesIndex; + var text = new ZRText({ + z2: DEFAULT_TEXT_Z, + silent: node.getModel().get(['label', 'silent']) + }); + + _this.setTextContent(text); + + _this.updateData(true, node, seriesModel, ecModel, api); + + return _this; + } + + SunburstPiece.prototype.updateData = function (firstCreate, node, // state: 'emphasis' | 'normal' | 'highlight' | 'downplay', + seriesModel, ecModel, api) { + this.node = node; + node.piece = this; + seriesModel = seriesModel || this._seriesModel; + ecModel = ecModel || this._ecModel; + var sector = this; + getECData(sector).dataIndex = node.dataIndex; + var itemModel = node.getModel(); + var emphasisModel = itemModel.getModel('emphasis'); + var layout = node.getLayout(); + var sectorShape = extend({}, layout); + sectorShape.label = null; + var normalStyle = node.getVisual('style'); + normalStyle.lineJoin = 'bevel'; + var decal = node.getVisual('decal'); + + if (decal) { + normalStyle.decal = createOrUpdatePatternFromDecal(decal, api); + } + + var cornerRadius = getSectorCornerRadius(itemModel.getModel('itemStyle'), sectorShape, true); + extend(sectorShape, cornerRadius); + each(SPECIAL_STATES, function (stateName) { + var state = sector.ensureState(stateName); + var itemStyleModel = itemModel.getModel([stateName, 'itemStyle']); + state.style = itemStyleModel.getItemStyle(); // border radius + + var cornerRadius = getSectorCornerRadius(itemStyleModel, sectorShape); + + if (cornerRadius) { + state.shape = cornerRadius; + } + }); + + if (firstCreate) { + sector.setShape(sectorShape); + sector.shape.r = layout.r0; + updateProps(sector, { + shape: { + r: layout.r + } + }, seriesModel, node.dataIndex); + } else { + // Disable animation for gradient since no interpolation method + // is supported for gradient + updateProps(sector, { + shape: sectorShape + }, seriesModel); + saveOldStyle(sector); + } + + sector.useStyle(normalStyle); + + this._updateLabel(seriesModel); + + var cursorStyle = itemModel.getShallow('cursor'); + cursorStyle && sector.attr('cursor', cursorStyle); + this._seriesModel = seriesModel || this._seriesModel; + this._ecModel = ecModel || this._ecModel; + var focus = emphasisModel.get('focus'); + var focusOrIndices = focus === 'ancestor' ? node.getAncestorsIndices() : focus === 'descendant' ? node.getDescendantIndices() : focus; + enableHoverEmphasis(this, focusOrIndices, emphasisModel.get('blurScope')); + }; + + SunburstPiece.prototype._updateLabel = function (seriesModel) { + var _this = this; + + var itemModel = this.node.getModel(); + var normalLabelModel = itemModel.getModel('label'); + var layout = this.node.getLayout(); + var angle = layout.endAngle - layout.startAngle; + var midAngle = (layout.startAngle + layout.endAngle) / 2; + var dx = Math.cos(midAngle); + var dy = Math.sin(midAngle); + var sector = this; + var label = sector.getTextContent(); + var dataIndex = this.node.dataIndex; + var labelMinAngle = normalLabelModel.get('minAngle') / 180 * Math.PI; + var isNormalShown = normalLabelModel.get('show') && !(labelMinAngle != null && Math.abs(angle) < labelMinAngle); + label.ignore = !isNormalShown; // TODO use setLabelStyle + + each(DISPLAY_STATES, function (stateName) { + var labelStateModel = stateName === 'normal' ? itemModel.getModel('label') : itemModel.getModel([stateName, 'label']); + var isNormal = stateName === 'normal'; + var state = isNormal ? label : label.ensureState(stateName); + var text = seriesModel.getFormattedLabel(dataIndex, stateName); + + if (isNormal) { + text = text || _this.node.name; + } + + state.style = createTextStyle(labelStateModel, {}, null, stateName !== 'normal', true); + + if (text) { + state.style.text = text; + } // Not displaying text when angle is too small + + + var isShown = labelStateModel.get('show'); + + if (isShown != null && !isNormal) { + state.ignore = !isShown; + } + + var labelPosition = getLabelAttr(labelStateModel, 'position'); + var sectorState = isNormal ? sector : sector.states[stateName]; + var labelColor = sectorState.style.fill; + sectorState.textConfig = { + outsideFill: labelStateModel.get('color') === 'inherit' ? labelColor : null, + inside: labelPosition !== 'outside' + }; + var r; + var labelPadding = getLabelAttr(labelStateModel, 'distance') || 0; + var textAlign = getLabelAttr(labelStateModel, 'align'); + + if (labelPosition === 'outside') { + r = layout.r + labelPadding; + textAlign = midAngle > Math.PI / 2 ? 'right' : 'left'; + } else { + if (!textAlign || textAlign === 'center') { + r = (layout.r + layout.r0) / 2; + textAlign = 'center'; + } else if (textAlign === 'left') { + r = layout.r0 + labelPadding; + + if (midAngle > Math.PI / 2) { + textAlign = 'right'; + } + } else if (textAlign === 'right') { + r = layout.r - labelPadding; + + if (midAngle > Math.PI / 2) { + textAlign = 'left'; + } + } + } + + state.style.align = textAlign; + state.style.verticalAlign = getLabelAttr(labelStateModel, 'verticalAlign') || 'middle'; + state.x = r * dx + layout.cx; + state.y = r * dy + layout.cy; + var rotateType = getLabelAttr(labelStateModel, 'rotate'); + var rotate = 0; + + if (rotateType === 'radial') { + rotate = -midAngle; + + if (rotate < -Math.PI / 2) { + rotate += Math.PI; + } + } else if (rotateType === 'tangential') { + rotate = Math.PI / 2 - midAngle; + + if (rotate > Math.PI / 2) { + rotate -= Math.PI; + } else if (rotate < -Math.PI / 2) { + rotate += Math.PI; + } + } else if (typeof rotateType === 'number') { + rotate = rotateType * Math.PI / 180; + } + + state.rotation = rotate; + }); + + function getLabelAttr(model, name) { + var stateAttr = model.get(name); + + if (stateAttr == null) { + return normalLabelModel.get(name); + } + + return stateAttr; + } + + label.dirtyStyle(); + }; + + return SunburstPiece; + }(Sector); + + var ROOT_TO_NODE_ACTION = 'sunburstRootToNode'; + var HIGHLIGHT_ACTION = 'sunburstHighlight'; + var UNHIGHLIGHT_ACTION = 'sunburstUnhighlight'; + function installSunburstAction(registers) { + registers.registerAction({ + type: ROOT_TO_NODE_ACTION, + update: 'updateView' + }, function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'series', + subType: 'sunburst', + query: payload + }, handleRootToNode); + + function handleRootToNode(model, index) { + var targetInfo = retrieveTargetInfo(payload, [ROOT_TO_NODE_ACTION], model); + + if (targetInfo) { + var originViewRoot = model.getViewRoot(); + + if (originViewRoot) { + payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) ? 'rollUp' : 'drillDown'; + } + + model.resetViewRoot(targetInfo.node); + } + } + }); + registers.registerAction({ + type: HIGHLIGHT_ACTION, + update: 'none' + }, function (payload, ecModel, api) { + // Clone + payload = extend({}, payload); + ecModel.eachComponent({ + mainType: 'series', + subType: 'sunburst', + query: payload + }, handleHighlight); + + function handleHighlight(model) { + var targetInfo = retrieveTargetInfo(payload, [HIGHLIGHT_ACTION], model); + + if (targetInfo) { + payload.dataIndex = targetInfo.node.dataIndex; + } + } + + if ("development" !== 'production') { + deprecateReplaceLog('highlight', 'sunburstHighlight'); + } // Fast forward action + + + api.dispatchAction(extend(payload, { + type: 'highlight' + })); + }); + registers.registerAction({ + type: UNHIGHLIGHT_ACTION, + update: 'updateView' + }, function (payload, ecModel, api) { + payload = extend({}, payload); + + if ("development" !== 'production') { + deprecateReplaceLog('downplay', 'sunburstUnhighlight'); + } + + api.dispatchAction(extend(payload, { + type: 'downplay' + })); + }); + } + + var SunburstView = + /** @class */ + function (_super) { + __extends(SunburstView, _super); + + function SunburstView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SunburstView.type; + return _this; + } + + SunburstView.prototype.render = function (seriesModel, ecModel, api, // @ts-ignore + payload) { + var self = this; + this.seriesModel = seriesModel; + this.api = api; + this.ecModel = ecModel; + var data = seriesModel.getData(); + var virtualRoot = data.tree.root; + var newRoot = seriesModel.getViewRoot(); + var group = this.group; + var renderLabelForZeroData = seriesModel.get('renderLabelForZeroData'); + var newChildren = []; + newRoot.eachNode(function (node) { + newChildren.push(node); + }); + var oldChildren = this._oldChildren || []; + dualTravel(newChildren, oldChildren); + renderRollUp(virtualRoot, newRoot); + + this._initEvents(); + + this._oldChildren = newChildren; + + function dualTravel(newChildren, oldChildren) { + if (newChildren.length === 0 && oldChildren.length === 0) { + return; + } + + new DataDiffer(oldChildren, newChildren, getKey, getKey).add(processNode).update(processNode).remove(curry(processNode, null)).execute(); + + function getKey(node) { + return node.getId(); + } + + function processNode(newIdx, oldIdx) { + var newNode = newIdx == null ? null : newChildren[newIdx]; + var oldNode = oldIdx == null ? null : oldChildren[oldIdx]; + doRenderNode(newNode, oldNode); + } + } + + function doRenderNode(newNode, oldNode) { + if (!renderLabelForZeroData && newNode && !newNode.getValue()) { + // Not render data with value 0 + newNode = null; + } + + if (newNode !== virtualRoot && oldNode !== virtualRoot) { + if (oldNode && oldNode.piece) { + if (newNode) { + // Update + oldNode.piece.updateData(false, newNode, seriesModel, ecModel, api); // For tooltip + + data.setItemGraphicEl(newNode.dataIndex, oldNode.piece); + } else { + // Remove + removeNode(oldNode); + } + } else if (newNode) { + // Add + var piece = new SunburstPiece(newNode, seriesModel, ecModel, api); + group.add(piece); // For tooltip + + data.setItemGraphicEl(newNode.dataIndex, piece); + } + } + } + + function removeNode(node) { + if (!node) { + return; + } + + if (node.piece) { + group.remove(node.piece); + node.piece = null; + } + } + + function renderRollUp(virtualRoot, viewRoot) { + if (viewRoot.depth > 0) { + // Render + if (self.virtualPiece) { + // Update + self.virtualPiece.updateData(false, virtualRoot, seriesModel, ecModel, api); + } else { + // Add + self.virtualPiece = new SunburstPiece(virtualRoot, seriesModel, ecModel, api); + group.add(self.virtualPiece); + } // TODO event scope + + + viewRoot.piece.off('click'); + self.virtualPiece.on('click', function (e) { + self._rootToNode(viewRoot.parentNode); + }); + } else if (self.virtualPiece) { + // Remove + group.remove(self.virtualPiece); + self.virtualPiece = null; + } + } + }; + /** + * @private + */ + + + SunburstView.prototype._initEvents = function () { + var _this = this; + + this.group.off('click'); + this.group.on('click', function (e) { + var targetFound = false; + + var viewRoot = _this.seriesModel.getViewRoot(); + + viewRoot.eachNode(function (node) { + if (!targetFound && node.piece && node.piece === e.target) { + var nodeClick = node.getModel().get('nodeClick'); + + if (nodeClick === 'rootToNode') { + _this._rootToNode(node); + } else if (nodeClick === 'link') { + var itemModel = node.getModel(); + var link = itemModel.get('link'); + + if (link) { + var linkTarget = itemModel.get('target', true) || '_blank'; + windowOpen(link, linkTarget); + } + } + + targetFound = true; + } + }); + }); + }; + /** + * @private + */ + + + SunburstView.prototype._rootToNode = function (node) { + if (node !== this.seriesModel.getViewRoot()) { + this.api.dispatchAction({ + type: ROOT_TO_NODE_ACTION, + from: this.uid, + seriesId: this.seriesModel.id, + targetNode: node + }); + } + }; + /** + * @implement + */ + + + SunburstView.prototype.containPoint = function (point, seriesModel) { + var treeRoot = seriesModel.getData(); + var itemLayout = treeRoot.getItemLayout(0); + + if (itemLayout) { + var dx = point[0] - itemLayout.cx; + var dy = point[1] - itemLayout.cy; + var radius = Math.sqrt(dx * dx + dy * dy); + return radius <= itemLayout.r && radius >= itemLayout.r0; + } + }; + + SunburstView.type = 'sunburst'; + return SunburstView; + }(ChartView); + + var SunburstSeriesModel = + /** @class */ + function (_super) { + __extends(SunburstSeriesModel, _super); + + function SunburstSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SunburstSeriesModel.type; + _this.ignoreStyleOnData = true; + return _this; + } + + SunburstSeriesModel.prototype.getInitialData = function (option, ecModel) { + // Create a virtual root. + var root = { + name: option.name, + children: option.data + }; + completeTreeValue$1(root); + var levelModels = this._levelModels = map(option.levels || [], function (levelDefine) { + return new Model(levelDefine, this, ecModel); + }, this); // Make sure always a new tree is created when setOption, + // in TreemapView, we check whether oldTree === newTree + // to choose mappings approach among old shapes and new shapes. + + var tree = Tree.createTree(root, this, beforeLink); + + function beforeLink(nodeData) { + nodeData.wrapMethod('getItemModel', function (model, idx) { + var node = tree.getNodeByDataIndex(idx); + var levelModel = levelModels[node.depth]; + levelModel && (model.parentModel = levelModel); + return model; + }); + } + + return tree.data; + }; + + SunburstSeriesModel.prototype.optionUpdated = function () { + this.resetViewRoot(); + }; + /* + * @override + */ + + + SunburstSeriesModel.prototype.getDataParams = function (dataIndex) { + var params = _super.prototype.getDataParams.apply(this, arguments); + + var node = this.getData().tree.getNodeByDataIndex(dataIndex); + params.treePathInfo = wrapTreePathInfo(node, this); + return params; + }; + + SunburstSeriesModel.prototype.getLevelModel = function (node) { + return this._levelModels && this._levelModels[node.depth]; + }; + + SunburstSeriesModel.prototype.getViewRoot = function () { + return this._viewRoot; + }; + + SunburstSeriesModel.prototype.resetViewRoot = function (viewRoot) { + viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot; + var root = this.getRawData().tree.root; + + if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) { + this._viewRoot = root; + } + }; + + SunburstSeriesModel.prototype.enableAriaDecal = function () { + enableAriaDecalForTree(this); + }; + + SunburstSeriesModel.type = 'series.sunburst'; + SunburstSeriesModel.defaultOption = { + zlevel: 0, + z: 2, + // 默认全局居中 + center: ['50%', '50%'], + radius: [0, '75%'], + // 默认顺时针 + clockwise: true, + startAngle: 90, + // 最小角度改为0 + minAngle: 0, + // If still show when all data zero. + stillShowZeroSum: true, + // 'rootToNode', 'link', or false + nodeClick: 'rootToNode', + renderLabelForZeroData: false, + label: { + // could be: 'radial', 'tangential', or 'none' + rotate: 'radial', + show: true, + opacity: 1, + // 'left' is for inner side of inside, and 'right' is for outter + // side for inside + align: 'center', + position: 'inside', + distance: 5, + silent: true + }, + itemStyle: { + borderWidth: 1, + borderColor: 'white', + borderType: 'solid', + shadowBlur: 0, + shadowColor: 'rgba(0, 0, 0, 0.2)', + shadowOffsetX: 0, + shadowOffsetY: 0, + opacity: 1 + }, + emphasis: { + focus: 'descendant' + }, + blur: { + itemStyle: { + opacity: 0.2 + }, + label: { + opacity: 0.1 + } + }, + // Animation type canbe expansion, scale + animationType: 'expansion', + animationDuration: 1000, + animationDurationUpdate: 500, + data: [], + + /** + * Sort order. + * + * Valid values: 'desc', 'asc', null, or callback function. + * 'desc' and 'asc' for descend and ascendant order; + * null for not sorting; + * example of callback function: + * function(nodeA, nodeB) { + * return nodeA.getValue() - nodeB.getValue(); + * } + */ + sort: 'desc' + }; + return SunburstSeriesModel; + }(SeriesModel); + + function completeTreeValue$1(dataNode) { + // Postorder travel tree. + // If value of none-leaf node is not set, + // calculate it by suming up the value of all children. + var sum = 0; + each(dataNode.children, function (child) { + completeTreeValue$1(child); + var childValue = child.value; // TODO First value of array must be a number + + isArray(childValue) && (childValue = childValue[0]); + sum += childValue; + }); + var thisValue = dataNode.value; + + if (isArray(thisValue)) { + thisValue = thisValue[0]; + } + + if (thisValue == null || isNaN(thisValue)) { + thisValue = sum; + } // Value should not less than 0. + + + if (thisValue < 0) { + thisValue = 0; + } + + isArray(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue; + } + + var RADIAN$2 = Math.PI / 180; + function sunburstLayout(seriesType, ecModel, api) { + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + var center = seriesModel.get('center'); + var radius = seriesModel.get('radius'); + + if (!isArray(radius)) { + radius = [0, radius]; + } + + if (!isArray(center)) { + center = [center, center]; + } + + var width = api.getWidth(); + var height = api.getHeight(); + var size = Math.min(width, height); + var cx = parsePercent$1(center[0], width); + var cy = parsePercent$1(center[1], height); + var r0 = parsePercent$1(radius[0], size / 2); + var r = parsePercent$1(radius[1], size / 2); + var startAngle = -seriesModel.get('startAngle') * RADIAN$2; + var minAngle = seriesModel.get('minAngle') * RADIAN$2; + var virtualRoot = seriesModel.getData().tree.root; + var treeRoot = seriesModel.getViewRoot(); + var rootDepth = treeRoot.depth; + var sort = seriesModel.get('sort'); + + if (sort != null) { + initChildren$1(treeRoot, sort); + } + + var validDataCount = 0; + each(treeRoot.children, function (child) { + !isNaN(child.getValue()) && validDataCount++; + }); + var sum = treeRoot.getValue(); // Sum may be 0 + + var unitRadian = Math.PI / (sum || validDataCount) * 2; + var renderRollupNode = treeRoot.depth > 0; + var levels = treeRoot.height - (renderRollupNode ? -1 : 1); + var rPerLevel = (r - r0) / (levels || 1); + var clockwise = seriesModel.get('clockwise'); + var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); // In the case some sector angle is smaller than minAngle + // let restAngle = PI2; + // let valueSumLargerThanMinAngle = 0; + + var dir = clockwise ? 1 : -1; + /** + * Render a tree + * @return increased angle + */ + + var renderNode = function (node, startAngle) { + if (!node) { + return; + } + + var endAngle = startAngle; // Render self + + if (node !== virtualRoot) { + // Tree node is virtual, so it doesn't need to be drawn + var value = node.getValue(); + var angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian; + + if (angle < minAngle) { + angle = minAngle; // restAngle -= minAngle; + } // else { + // valueSumLargerThanMinAngle += value; + // } + + + endAngle = startAngle + dir * angle; + var depth = node.depth - rootDepth - (renderRollupNode ? -1 : 1); + var rStart = r0 + rPerLevel * depth; + var rEnd = r0 + rPerLevel * (depth + 1); + var levelModel = seriesModel.getLevelModel(node); + + if (levelModel) { + var r0_1 = levelModel.get('r0', true); + var r_1 = levelModel.get('r', true); + var radius_1 = levelModel.get('radius', true); + + if (radius_1 != null) { + r0_1 = radius_1[0]; + r_1 = radius_1[1]; + } + + r0_1 != null && (rStart = parsePercent$1(r0_1, size / 2)); + r_1 != null && (rEnd = parsePercent$1(r_1, size / 2)); + } + + node.setLayout({ + angle: angle, + startAngle: startAngle, + endAngle: endAngle, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: rStart, + r: rEnd + }); + } // Render children + + + if (node.children && node.children.length) { + // currentAngle = startAngle; + var siblingAngle_1 = 0; + each(node.children, function (node) { + siblingAngle_1 += renderNode(node, startAngle + siblingAngle_1); + }); + } + + return endAngle - startAngle; + }; // Virtual root node for roll up + + + if (renderRollupNode) { + var rStart = r0; + var rEnd = r0 + rPerLevel; + var angle = Math.PI * 2; + virtualRoot.setLayout({ + angle: angle, + startAngle: startAngle, + endAngle: startAngle + angle, + clockwise: clockwise, + cx: cx, + cy: cy, + r0: rStart, + r: rEnd + }); + } + + renderNode(treeRoot, startAngle); + }); + } + /** + * Init node children by order and update visual + */ + + function initChildren$1(node, sortOrder) { + var children = node.children || []; + node.children = sort$2(children, sortOrder); // Init children recursively + + if (children.length) { + each(node.children, function (child) { + initChildren$1(child, sortOrder); + }); + } + } + /** + * Sort children nodes + * + * @param {TreeNode[]} children children of node to be sorted + * @param {string | function | null} sort sort method + * See SunburstSeries.js for details. + */ + + + function sort$2(children, sortOrder) { + if (typeof sortOrder === 'function') { + var sortTargets = map(children, function (child, idx) { + var value = child.getValue(); + return { + params: { + depth: child.depth, + height: child.height, + dataIndex: child.dataIndex, + getValue: function () { + return value; + } + }, + index: idx + }; + }); + sortTargets.sort(function (a, b) { + return sortOrder(a.params, b.params); + }); + return map(sortTargets, function (target) { + return children[target.index]; + }); + } else { + var isAsc_1 = sortOrder === 'asc'; + return children.sort(function (a, b) { + var diff = (a.getValue() - b.getValue()) * (isAsc_1 ? 1 : -1); + return diff === 0 ? (a.dataIndex - b.dataIndex) * (isAsc_1 ? -1 : 1) : diff; + }); + } + } + + function sunburstVisual(ecModel) { + var paletteScope = {}; // Default color strategy + + function pickColor(node, seriesModel, treeHeight) { + // Choose color from palette based on the first level. + var current = node; + + while (current && current.depth > 1) { + current = current.parentNode; + } + + var color = seriesModel.getColorFromPalette(current.name || current.dataIndex + '', paletteScope); + + if (node.depth > 1 && typeof color === 'string') { + // Lighter on the deeper level. + color = lift(color, (node.depth - 1) / (treeHeight - 1) * 0.5); + } + + return color; + } + + ecModel.eachSeriesByType('sunburst', function (seriesModel) { + var data = seriesModel.getData(); + var tree = data.tree; + tree.eachNode(function (node) { + var model = node.getModel(); + var style = model.getModel('itemStyle').getItemStyle(); + + if (!style.fill) { + style.fill = pickColor(node, seriesModel, tree.root.height); + } + + var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, 'style'); + extend(existsStyle, style); + }); + }); + } + + function install$q(registers) { + registers.registerChartView(SunburstView); + registers.registerSeriesModel(SunburstSeriesModel); + registers.registerLayout(curry(sunburstLayout, 'sunburst')); + registers.registerProcessor(curry(dataFilter, 'sunburst')); + registers.registerVisual(sunburstVisual); + installSunburstAction(registers); + } + + var TRANSFORM_PROPS = { + x: 1, + y: 1, + scaleX: 1, + scaleY: 1, + originX: 1, + originY: 1, + rotation: 1 + }; // Also compat with ec4, where + // `visual('color') visual('borderColor')` is supported. + + var STYLE_VISUAL_TYPE = { + color: 'fill', + borderColor: 'stroke' + }; + var NON_STYLE_VISUAL_PROPS = { + symbol: 1, + symbolSize: 1, + symbolKeepAspect: 1, + legendIcon: 1, + visualMeta: 1, + liftZ: 1, + decal: 1 + }; + var customInnerStore = makeInner(); + + var CustomSeriesModel = + /** @class */ + function (_super) { + __extends(CustomSeriesModel, _super); + + function CustomSeriesModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CustomSeriesModel.type; + return _this; + } + + CustomSeriesModel.prototype.optionUpdated = function () { + this.currentZLevel = this.get('zlevel', true); + this.currentZ = this.get('z', true); + }; + + CustomSeriesModel.prototype.getInitialData = function (option, ecModel) { + return createSeriesData(null, this); + }; + + CustomSeriesModel.prototype.getDataParams = function (dataIndex, dataType, el) { + var params = _super.prototype.getDataParams.call(this, dataIndex, dataType); + + el && (params.info = customInnerStore(el).info); + return params; + }; + + CustomSeriesModel.type = 'series.custom'; + CustomSeriesModel.dependencies = ['grid', 'polar', 'geo', 'singleAxis', 'calendar']; + CustomSeriesModel.defaultOption = { + coordinateSystem: 'cartesian2d', + zlevel: 0, + z: 2, + legendHoverLink: true, + // Custom series will not clip by default. + // Some case will use custom series to draw label + // For example https://echarts.apache.org/examples/en/editor.html?c=custom-gantt-flight + clip: false // Cartesian coordinate system + // xAxisIndex: 0, + // yAxisIndex: 0, + // Polar coordinate system + // polarIndex: 0, + // Geo coordinate system + // geoIndex: 0, + + }; + return CustomSeriesModel; + }(SeriesModel); + + function dataToCoordSize(dataSize, dataItem) { + // dataItem is necessary in log axis. + dataItem = dataItem || [0, 0]; + return map(['x', 'y'], function (dim, dimIdx) { + var axis = this.getAxis(dim); + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + return axis.type === 'category' ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); + }, this); + } + + function cartesianPrepareCustom(coordSys) { + var rect = coordSys.master.getRect(); + return { + coordSys: { + // The name exposed to user is always 'cartesian2d' but not 'grid'. + type: 'cartesian2d', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + api: { + coord: function (data) { + // do not provide "out" param + return coordSys.dataToPoint(data); + }, + size: bind(dataToCoordSize, coordSys) + } + }; + } + + function dataToCoordSize$1(dataSize, dataItem) { + dataItem = dataItem || [0, 0]; + return map([0, 1], function (dimIdx) { + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + var p1 = []; + var p2 = []; + p1[dimIdx] = val - halfSize; + p2[dimIdx] = val + halfSize; + p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx]; + return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]); + }, this); + } + + function geoPrepareCustom(coordSys) { + var rect = coordSys.getBoundingRect(); + return { + coordSys: { + type: 'geo', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height, + zoom: coordSys.getZoom() + }, + api: { + coord: function (data) { + // do not provide "out" and noRoam param, + // Compatible with this usage: + // echarts.util.map(item.points, api.coord) + return coordSys.dataToPoint(data); + }, + size: bind(dataToCoordSize$1, coordSys) + } + }; + } + + function dataToCoordSize$2(dataSize, dataItem) { + // dataItem is necessary in log axis. + var axis = this.getAxis(); + var val = dataItem instanceof Array ? dataItem[0] : dataItem; + var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2; + return axis.type === 'category' ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); + } + + function singlePrepareCustom(coordSys) { + var rect = coordSys.getRect(); + return { + coordSys: { + type: 'singleAxis', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height + }, + api: { + coord: function (val) { + // do not provide "out" param + return coordSys.dataToPoint(val); + }, + size: bind(dataToCoordSize$2, coordSys) + } + }; + } + + function dataToCoordSize$3(dataSize, dataItem) { + // dataItem is necessary in log axis. + dataItem = dataItem || [0, 0]; + return map(['Radius', 'Angle'], function (dim, dimIdx) { + var getterName = 'get' + dim + 'Axis'; // TODO: TYPE Check Angle Axis + + var axis = this[getterName](); + var val = dataItem[dimIdx]; + var halfSize = dataSize[dimIdx] / 2; + var result = axis.type === 'category' ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize)); + + if (dim === 'Angle') { + result = result * Math.PI / 180; + } + + return result; + }, this); + } + + function polarPrepareCustom(coordSys) { + var radiusAxis = coordSys.getRadiusAxis(); + var angleAxis = coordSys.getAngleAxis(); + var radius = radiusAxis.getExtent(); + radius[0] > radius[1] && radius.reverse(); + return { + coordSys: { + type: 'polar', + cx: coordSys.cx, + cy: coordSys.cy, + r: radius[1], + r0: radius[0] + }, + api: { + coord: function (data) { + var radius = radiusAxis.dataToRadius(data[0]); + var angle = angleAxis.dataToAngle(data[1]); + var coord = coordSys.coordToPoint([radius, angle]); + coord.push(radius, angle * Math.PI / 180); + return coord; + }, + size: bind(dataToCoordSize$3, coordSys) + } + }; + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function calendarPrepareCustom(coordSys) { + var rect = coordSys.getRect(); + var rangeInfo = coordSys.getRangeInfo(); + return { + coordSys: { + type: 'calendar', + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height, + cellWidth: coordSys.getCellWidth(), + cellHeight: coordSys.getCellHeight(), + rangeInfo: { + start: rangeInfo.start, + end: rangeInfo.end, + weeks: rangeInfo.weeks, + dayCount: rangeInfo.allDay + } + }, + api: { + coord: function (data, clamp) { + return coordSys.dataToPoint(data, clamp); + } + } + }; + } + + var deprecatedLogs = {}; + /** + * Whether need to call `convertEC4CompatibleStyle`. + */ + + function isEC4CompatibleStyle(style, elType, hasOwnTextContentOption, hasOwnTextConfig) { + // Since echarts5, `RectText` is separated from its host element and style.text + // does not exist any more. The compat work brings some extra burden on performance. + // So we provide: + // `legacy: true` force make compat. + // `legacy: false`, force do not compat. + // `legacy` not set: auto detect wheter legacy. + // But in this case we do not compat (difficult to detect and rare case): + // Becuse custom series and graphic component support "merge", users may firstly + // only set `textStrokeWidth` style or secondly only set `text`. + return style && (style.legacy || style.legacy !== false && !hasOwnTextContentOption && !hasOwnTextConfig && elType !== 'tspan' // Difficult to detect whether legacy for a "text" el. + && (elType === 'text' || hasOwn(style, 'text'))); + } + /** + * `EC4CompatibleStyle` is style that might be in echarts4 format or echarts5 format. + * @param hostStyle The properties might be modified. + * @return If be text el, `textContentStyle` and `textConfig` will not be retured. + * Otherwise a `textContentStyle` and `textConfig` will be created, whose props area + * retried from the `hostStyle`. + */ + + function convertFromEC4CompatibleStyle(hostStyle, elType, isNormal) { + var srcStyle = hostStyle; + var textConfig; + var textContent; + var textContentStyle; + + if (elType === 'text') { + textContentStyle = srcStyle; + } else { + textContentStyle = {}; + hasOwn(srcStyle, 'text') && (textContentStyle.text = srcStyle.text); + hasOwn(srcStyle, 'rich') && (textContentStyle.rich = srcStyle.rich); + hasOwn(srcStyle, 'textFill') && (textContentStyle.fill = srcStyle.textFill); + hasOwn(srcStyle, 'textStroke') && (textContentStyle.stroke = srcStyle.textStroke); + hasOwn(srcStyle, 'fontFamily') && (textContentStyle.fontFamily = srcStyle.fontFamily); + hasOwn(srcStyle, 'fontSize') && (textContentStyle.fontSize = srcStyle.fontSize); + hasOwn(srcStyle, 'fontStyle') && (textContentStyle.fontStyle = srcStyle.fontStyle); + hasOwn(srcStyle, 'fontWeight') && (textContentStyle.fontWeight = srcStyle.fontWeight); + textContent = { + type: 'text', + style: textContentStyle, + // ec4 do not support rectText trigger. + // And when text postion is different in normal and emphasis + // => hover text trigger emphasis; + // => text position changed, leave mouse pointer immediately; + // That might cause state incorrect. + silent: true + }; + textConfig = {}; + var hasOwnPos = hasOwn(srcStyle, 'textPosition'); + + if (isNormal) { + textConfig.position = hasOwnPos ? srcStyle.textPosition : 'inside'; + } else { + hasOwnPos && (textConfig.position = srcStyle.textPosition); + } + + hasOwn(srcStyle, 'textPosition') && (textConfig.position = srcStyle.textPosition); + hasOwn(srcStyle, 'textOffset') && (textConfig.offset = srcStyle.textOffset); + hasOwn(srcStyle, 'textRotation') && (textConfig.rotation = srcStyle.textRotation); + hasOwn(srcStyle, 'textDistance') && (textConfig.distance = srcStyle.textDistance); + } + + convertEC4CompatibleRichItem(textContentStyle, hostStyle); + each(textContentStyle.rich, function (richItem) { + convertEC4CompatibleRichItem(richItem, richItem); + }); + return { + textConfig: textConfig, + textContent: textContent + }; + } + /** + * The result will be set to `out`. + */ + + function convertEC4CompatibleRichItem(out, richItem) { + if (!richItem) { + return; + } // (1) For simplicity, make textXXX properties (deprecated since ec5) has + // higher priority. For example, consider in ec4 `borderColor: 5, textBorderColor: 10` + // on a rect means `borderColor: 4` on the rect and `borderColor: 10` on an attached + // richText in ec5. + // (2) `out === richItem` if and only if `out` is text el or rich item. + // So we can overwite existing props in `out` since textXXX has higher priority. + + + richItem.font = richItem.textFont || richItem.font; + hasOwn(richItem, 'textStrokeWidth') && (out.lineWidth = richItem.textStrokeWidth); + hasOwn(richItem, 'textAlign') && (out.align = richItem.textAlign); + hasOwn(richItem, 'textVerticalAlign') && (out.verticalAlign = richItem.textVerticalAlign); + hasOwn(richItem, 'textLineHeight') && (out.lineHeight = richItem.textLineHeight); + hasOwn(richItem, 'textWidth') && (out.width = richItem.textWidth); + hasOwn(richItem, 'textHeight') && (out.height = richItem.textHeight); + hasOwn(richItem, 'textBackgroundColor') && (out.backgroundColor = richItem.textBackgroundColor); + hasOwn(richItem, 'textPadding') && (out.padding = richItem.textPadding); + hasOwn(richItem, 'textBorderColor') && (out.borderColor = richItem.textBorderColor); + hasOwn(richItem, 'textBorderWidth') && (out.borderWidth = richItem.textBorderWidth); + hasOwn(richItem, 'textBorderRadius') && (out.borderRadius = richItem.textBorderRadius); + hasOwn(richItem, 'textBoxShadowColor') && (out.shadowColor = richItem.textBoxShadowColor); + hasOwn(richItem, 'textBoxShadowBlur') && (out.shadowBlur = richItem.textBoxShadowBlur); + hasOwn(richItem, 'textBoxShadowOffsetX') && (out.shadowOffsetX = richItem.textBoxShadowOffsetX); + hasOwn(richItem, 'textBoxShadowOffsetY') && (out.shadowOffsetY = richItem.textBoxShadowOffsetY); + } + /** + * Convert to pure echarts4 format style. + * `itemStyle` will be modified, added with ec4 style properties from + * `textStyle` and `textConfig`. + * + * [Caveat]: For simplicity, `insideRollback` in ec4 does not compat, where + * `styleEmphasis: {textFill: 'red'}` will remove the normal auto added stroke. + */ + + + function convertToEC4StyleForCustomSerise(itemStl, txStl, txCfg) { + var out = itemStl; // See `custom.ts`, a trick to set extra `textPosition` firstly. + + out.textPosition = out.textPosition || txCfg.position || 'inside'; + txCfg.offset != null && (out.textOffset = txCfg.offset); + txCfg.rotation != null && (out.textRotation = txCfg.rotation); + txCfg.distance != null && (out.textDistance = txCfg.distance); + var isInside = out.textPosition.indexOf('inside') >= 0; + var hostFill = itemStl.fill || '#000'; + convertToEC4RichItem(out, txStl); + var textFillNotSet = out.textFill == null; + + if (isInside) { + if (textFillNotSet) { + out.textFill = txCfg.insideFill || '#fff'; + !out.textStroke && txCfg.insideStroke && (out.textStroke = txCfg.insideStroke); + !out.textStroke && (out.textStroke = hostFill); + out.textStrokeWidth == null && (out.textStrokeWidth = 2); + } + } else { + if (textFillNotSet) { + out.textFill = itemStl.fill || txCfg.outsideFill || '#000'; + } + + !out.textStroke && txCfg.outsideStroke && (out.textStroke = txCfg.outsideStroke); + } + + out.text = txStl.text; + out.rich = txStl.rich; + each(txStl.rich, function (richItem) { + convertToEC4RichItem(richItem, richItem); + }); + return out; + } + + function convertToEC4RichItem(out, richItem) { + if (!richItem) { + return; + } + + hasOwn(richItem, 'fill') && (out.textFill = richItem.fill); + hasOwn(richItem, 'stroke') && (out.textStroke = richItem.fill); + hasOwn(richItem, 'lineWidth') && (out.textStrokeWidth = richItem.lineWidth); + hasOwn(richItem, 'font') && (out.font = richItem.font); + hasOwn(richItem, 'fontStyle') && (out.fontStyle = richItem.fontStyle); + hasOwn(richItem, 'fontWeight') && (out.fontWeight = richItem.fontWeight); + hasOwn(richItem, 'fontSize') && (out.fontSize = richItem.fontSize); + hasOwn(richItem, 'fontFamily') && (out.fontFamily = richItem.fontFamily); + hasOwn(richItem, 'align') && (out.textAlign = richItem.align); + hasOwn(richItem, 'verticalAlign') && (out.textVerticalAlign = richItem.verticalAlign); + hasOwn(richItem, 'lineHeight') && (out.textLineHeight = richItem.lineHeight); + hasOwn(richItem, 'width') && (out.textWidth = richItem.width); + hasOwn(richItem, 'height') && (out.textHeight = richItem.height); + hasOwn(richItem, 'backgroundColor') && (out.textBackgroundColor = richItem.backgroundColor); + hasOwn(richItem, 'padding') && (out.textPadding = richItem.padding); + hasOwn(richItem, 'borderColor') && (out.textBorderColor = richItem.borderColor); + hasOwn(richItem, 'borderWidth') && (out.textBorderWidth = richItem.borderWidth); + hasOwn(richItem, 'borderRadius') && (out.textBorderRadius = richItem.borderRadius); + hasOwn(richItem, 'shadowColor') && (out.textBoxShadowColor = richItem.shadowColor); + hasOwn(richItem, 'shadowBlur') && (out.textBoxShadowBlur = richItem.shadowBlur); + hasOwn(richItem, 'shadowOffsetX') && (out.textBoxShadowOffsetX = richItem.shadowOffsetX); + hasOwn(richItem, 'shadowOffsetY') && (out.textBoxShadowOffsetY = richItem.shadowOffsetY); + hasOwn(richItem, 'textShadowColor') && (out.textShadowColor = richItem.textShadowColor); + hasOwn(richItem, 'textShadowBlur') && (out.textShadowBlur = richItem.textShadowBlur); + hasOwn(richItem, 'textShadowOffsetX') && (out.textShadowOffsetX = richItem.textShadowOffsetX); + hasOwn(richItem, 'textShadowOffsetY') && (out.textShadowOffsetY = richItem.textShadowOffsetY); + } + + function warnDeprecated(deprecated, insteadApproach) { + if ("development" !== 'production') { + var key = deprecated + '^_^' + insteadApproach; + + if (!deprecatedLogs[key]) { + console.warn("[ECharts] DEPRECATED: \"" + deprecated + "\" has been deprecated. " + insteadApproach); + deprecatedLogs[key] = true; + } + } + } + + var LEGACY_TRANSFORM_PROPS = { + position: ['x', 'y'], + scale: ['scaleX', 'scaleY'], + origin: ['originX', 'originY'] + }; + + function setLegacyTransformProp(elOption, targetProps, legacyName) { + var legacyArr = elOption[legacyName]; + var xyName = LEGACY_TRANSFORM_PROPS[legacyName]; + + if (legacyArr) { + targetProps[xyName[0]] = legacyArr[0]; + targetProps[xyName[1]] = legacyArr[1]; + } + } + + function setTransformProp(elOption, allProps, name) { + if (elOption[name] != null) { + allProps[name] = elOption[name]; + } + } + + function setTransformPropToTransitionFrom(transitionFrom, name, fromTransformable // If provided, retrieve from the element. + ) { + if (fromTransformable) { + transitionFrom[name] = fromTransformable[name]; + } + } // See [STRATEGY_TRANSITION] + + + function prepareShapeOrExtraTransitionFrom(mainAttr, fromEl, elOption, transFromProps, isInit) { + var attrOpt = elOption[mainAttr]; + + if (!attrOpt) { + return; + } + + var elPropsInAttr = fromEl[mainAttr]; + var transFromPropsInAttr; + var enterFrom = attrOpt.enterFrom; + + if (isInit && enterFrom) { + !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {}); + var enterFromKeys = keys(enterFrom); + + for (var i = 0; i < enterFromKeys.length; i++) { + // `enterFrom` props are not necessarily also declared in `shape`/`style`/..., + // for example, `opacity` can only declared in `enterFrom` but not in `style`. + var key = enterFromKeys[i]; // Do not clone, animator will perform that clone. + + transFromPropsInAttr[key] = enterFrom[key]; + } + } + + if (!isInit && elPropsInAttr) { + if (attrOpt.transition) { + !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {}); + var transitionKeys = normalizeToArray(attrOpt.transition); + + for (var i = 0; i < transitionKeys.length; i++) { + var key = transitionKeys[i]; + var elVal = elPropsInAttr[key]; + + if ("development" !== 'production') { + checkNonStyleTansitionRefer(key, attrOpt[key], elVal); + } // Do not clone, see `checkNonStyleTansitionRefer`. + + + transFromPropsInAttr[key] = elVal; + } + } else if (indexOf(elOption.transition, mainAttr) >= 0) { + !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {}); + var elPropsInAttrKeys = keys(elPropsInAttr); + + for (var i = 0; i < elPropsInAttrKeys.length; i++) { + var key = elPropsInAttrKeys[i]; + var elVal = elPropsInAttr[key]; + + if (isNonStyleTransitionEnabled(attrOpt[key], elVal)) { + transFromPropsInAttr[key] = elVal; + } + } + } + } + + var leaveTo = attrOpt.leaveTo; + + if (leaveTo) { + var leaveToProps = getOrCreateLeaveToPropsFromEl(fromEl); + var leaveToPropsInAttr = leaveToProps[mainAttr] || (leaveToProps[mainAttr] = {}); + var leaveToKeys = keys(leaveTo); + + for (var i = 0; i < leaveToKeys.length; i++) { + var key = leaveToKeys[i]; + leaveToPropsInAttr[key] = leaveTo[key]; + } + } + } + function prepareShapeOrExtraAllPropsFinal(mainAttr, elOption, allProps) { + var attrOpt = elOption[mainAttr]; + + if (!attrOpt) { + return; + } + + var allPropsInAttr = allProps[mainAttr] = {}; + var keysInAttr = keys(attrOpt); + + for (var i = 0; i < keysInAttr.length; i++) { + var key = keysInAttr[i]; // To avoid share one object with different element, and + // to avoid user modify the object inexpectedly, have to clone. + + allPropsInAttr[key] = cloneValue(attrOpt[key]); + } + } // See [STRATEGY_TRANSITION]. + + function prepareTransformTransitionFrom(el, elOption, transFromProps, isInit) { + var enterFrom = elOption.enterFrom; + + if (isInit && enterFrom) { + var enterFromKeys = keys(enterFrom); + + for (var i = 0; i < enterFromKeys.length; i++) { + var key = enterFromKeys[i]; + + if ("development" !== 'production') { + checkTransformPropRefer(key, 'el.enterFrom'); + } // Do not clone, animator will perform that clone. + + + transFromProps[key] = enterFrom[key]; + } + } + + if (!isInit) { + if (elOption.transition) { + var transitionKeys = normalizeToArray(elOption.transition); + + for (var i = 0; i < transitionKeys.length; i++) { + var key = transitionKeys[i]; + + if (key === 'style' || key === 'shape' || key === 'extra') { + continue; + } + + var elVal = el[key]; + + if ("development" !== 'production') { + checkTransformPropRefer(key, 'el.transition'); + checkNonStyleTansitionRefer(key, elOption[key], elVal); + } // Do not clone, see `checkNonStyleTansitionRefer`. + + + transFromProps[key] = elVal; + } + } // This default transition see [STRATEGY_TRANSITION] + else { + setTransformPropToTransitionFrom(transFromProps, 'x', el); + setTransformPropToTransitionFrom(transFromProps, 'y', el); + } + } + + var leaveTo = elOption.leaveTo; + + if (leaveTo) { + var leaveToProps = getOrCreateLeaveToPropsFromEl(el); + var leaveToKeys = keys(leaveTo); + + for (var i = 0; i < leaveToKeys.length; i++) { + var key = leaveToKeys[i]; + + if ("development" !== 'production') { + checkTransformPropRefer(key, 'el.leaveTo'); + } + + leaveToProps[key] = leaveTo[key]; + } + } + } + function prepareTransformAllPropsFinal(el, elOption, allProps) { + setLegacyTransformProp(elOption, allProps, 'position'); + setLegacyTransformProp(elOption, allProps, 'scale'); + setLegacyTransformProp(elOption, allProps, 'origin'); + setTransformProp(elOption, allProps, 'x'); + setTransformProp(elOption, allProps, 'y'); + setTransformProp(elOption, allProps, 'scaleX'); + setTransformProp(elOption, allProps, 'scaleY'); + setTransformProp(elOption, allProps, 'originX'); + setTransformProp(elOption, allProps, 'originY'); + setTransformProp(elOption, allProps, 'rotation'); + } // See [STRATEGY_TRANSITION]. + + function prepareStyleTransitionFrom(fromEl, elOption, styleOpt, transFromProps, isInit) { + if (!styleOpt) { + return; + } + + var fromElStyle = fromEl.style; + var transFromStyleProps; + var enterFrom = styleOpt.enterFrom; + + if (isInit && enterFrom) { + var enterFromKeys = keys(enterFrom); + !transFromStyleProps && (transFromStyleProps = transFromProps.style = {}); + + for (var i = 0; i < enterFromKeys.length; i++) { + var key = enterFromKeys[i]; // Do not clone, animator will perform that clone. + + transFromStyleProps[key] = enterFrom[key]; + } + } + + if (!isInit && fromElStyle) { + if (styleOpt.transition) { + var transitionKeys = normalizeToArray(styleOpt.transition); + !transFromStyleProps && (transFromStyleProps = transFromProps.style = {}); + + for (var i = 0; i < transitionKeys.length; i++) { + var key = transitionKeys[i]; + var elVal = fromElStyle[key]; // Do not clone, see `checkNonStyleTansitionRefer`. + + transFromStyleProps[key] = elVal; + } + } else if (fromEl.getAnimationStyleProps && indexOf(elOption.transition, 'style') >= 0) { + var animationProps = fromEl.getAnimationStyleProps(); + var animationStyleProps = animationProps ? animationProps.style : null; + + if (animationStyleProps) { + !transFromStyleProps && (transFromStyleProps = transFromProps.style = {}); + var styleKeys = keys(styleOpt); + + for (var i = 0; i < styleKeys.length; i++) { + var key = styleKeys[i]; + + if (animationStyleProps[key]) { + var elVal = fromElStyle[key]; + transFromStyleProps[key] = elVal; + } + } + } + } + } + + var leaveTo = styleOpt.leaveTo; + + if (leaveTo) { + var leaveToKeys = keys(leaveTo); + var leaveToProps = getOrCreateLeaveToPropsFromEl(fromEl); + var leaveToStyleProps = leaveToProps.style || (leaveToProps.style = {}); + + for (var i = 0; i < leaveToKeys.length; i++) { + var key = leaveToKeys[i]; + leaveToStyleProps[key] = leaveTo[key]; + } + } + } + var checkNonStyleTansitionRefer; + + if ("development" !== 'production') { + checkNonStyleTansitionRefer = function (propName, optVal, elVal) { + if (!isArrayLike(optVal)) { + assert(optVal != null && isFinite(optVal), 'Prop `' + propName + '` must refer to a finite number or ArrayLike for transition.'); + } else { + // Try not to copy array for performance, but if user use the same object in different + // call of `renderItem`, it will casue animation transition fail. + assert(optVal !== elVal, 'Prop `' + propName + '` must use different Array object each time for transition.'); + } + }; + } + + function isNonStyleTransitionEnabled(optVal, elVal) { + // The same as `checkNonStyleTansitionRefer`. + return !isArrayLike(optVal) ? optVal != null && isFinite(optVal) : optVal !== elVal; + } + + var checkTransformPropRefer; + + if ("development" !== 'production') { + checkTransformPropRefer = function (key, usedIn) { + assert(hasOwn(TRANSFORM_PROPS, key), 'Prop `' + key + '` is not a permitted in `' + usedIn + '`. ' + 'Only `' + keys(TRANSFORM_PROPS).join('`, `') + '` are permitted.'); + }; + } + + function getOrCreateLeaveToPropsFromEl(el) { + var innerEl = customInnerStore(el); + return innerEl.leaveToProps || (innerEl.leaveToProps = {}); + } + + var transformPropNamesStr = keys(TRANSFORM_PROPS).join(', '); + var EMPHASIS = 'emphasis'; + var NORMAL = 'normal'; + var BLUR = 'blur'; + var SELECT = 'select'; + var STATES = [NORMAL, EMPHASIS, BLUR, SELECT]; + var PATH_ITEM_STYLE = { + normal: ['itemStyle'], + emphasis: [EMPHASIS, 'itemStyle'], + blur: [BLUR, 'itemStyle'], + select: [SELECT, 'itemStyle'] + }; + var PATH_LABEL = { + normal: ['label'], + emphasis: [EMPHASIS, 'label'], + blur: [BLUR, 'label'], + select: [SELECT, 'label'] + }; // Use prefix to avoid index to be the same as el.name, + // which will cause weird update animation. + + var GROUP_DIFF_PREFIX = 'e\0\0'; + var attachedTxInfoTmp = { + normal: {}, + emphasis: {}, + blur: {}, + select: {} + }; + /** + * To reduce total package size of each coordinate systems, the modules `prepareCustom` + * of each coordinate systems are not required by each coordinate systems directly, but + * required by the module `custom`. + * + * prepareInfoForCustomSeries {Function}: optional + * @return {Object} {coordSys: {...}, api: { + * coord: function (data, clamp) {}, // return point in global. + * size: function (dataSize, dataItem) {} // return size of each axis in coordSys. + * }} + */ + + var prepareCustoms = { + cartesian2d: cartesianPrepareCustom, + geo: geoPrepareCustom, + singleAxis: singlePrepareCustom, + polar: polarPrepareCustom, + calendar: calendarPrepareCustom + }; + + function isPath$1(el) { + return el instanceof Path; + } + + function isDisplayable(el) { + return el instanceof Displayable; + } + + function copyElement(sourceEl, targetEl) { + targetEl.copyTransform(sourceEl); + + if (isDisplayable(targetEl) && isDisplayable(sourceEl)) { + targetEl.setStyle(sourceEl.style); + targetEl.z = sourceEl.z; + targetEl.z2 = sourceEl.z2; + targetEl.zlevel = sourceEl.zlevel; + targetEl.invisible = sourceEl.invisible; + targetEl.ignore = sourceEl.ignore; + + if (isPath$1(targetEl) && isPath$1(sourceEl)) { + targetEl.setShape(sourceEl.shape); + } + } + } + + var CustomChartView = + /** @class */ + function (_super) { + __extends(CustomChartView, _super); + + function CustomChartView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CustomChartView.type; + return _this; + } + + CustomChartView.prototype.render = function (customSeries, ecModel, api, payload) { + var oldData = this._data; + var data = customSeries.getData(); + var group = this.group; + var renderItem = makeRenderItem(customSeries, data, ecModel, api); + + if (!oldData) { + // Previous render is incremental render or first render. + // Needs remove the incremental rendered elements. + group.removeAll(); + } + + data.diff(oldData).add(function (newIdx) { + createOrUpdateItem(api, null, newIdx, renderItem(newIdx, payload), customSeries, group, data); + }).remove(function (oldIdx) { + doRemoveEl(oldData.getItemGraphicEl(oldIdx), customSeries, group); + }).update(function (newIdx, oldIdx) { + var oldEl = oldData.getItemGraphicEl(oldIdx); + createOrUpdateItem(api, oldEl, newIdx, renderItem(newIdx, payload), customSeries, group, data); + }).execute(); // Do clipping + + var clipPath = customSeries.get('clip', true) ? createClipPath(customSeries.coordinateSystem, false, customSeries) : null; + + if (clipPath) { + group.setClipPath(clipPath); + } else { + group.removeClipPath(); + } + + this._data = data; + }; + + CustomChartView.prototype.incrementalPrepareRender = function (customSeries, ecModel, api) { + this.group.removeAll(); + this._data = null; + }; + + CustomChartView.prototype.incrementalRender = function (params, customSeries, ecModel, api, payload) { + var data = customSeries.getData(); + var renderItem = makeRenderItem(customSeries, data, ecModel, api); + + function setIncrementalAndHoverLayer(el) { + if (!el.isGroup) { + el.incremental = true; + el.ensureState('emphasis').hoverLayer = true; + } + } + + for (var idx = params.start; idx < params.end; idx++) { + var el = createOrUpdateItem(null, null, idx, renderItem(idx, payload), customSeries, this.group, data); + el && el.traverse(setIncrementalAndHoverLayer); + } + }; + + CustomChartView.prototype.filterForExposedEvent = function (eventType, query, targetEl, packedEvent) { + var elementName = query.element; + + if (elementName == null || targetEl.name === elementName) { + return true; + } // Enable to give a name on a group made by `renderItem`, and listen + // events that triggerd by its descendents. + + + while ((targetEl = targetEl.__hostTarget || targetEl.parent) && targetEl !== this.group) { + if (targetEl.name === elementName) { + return true; + } + } + + return false; + }; + + CustomChartView.type = 'custom'; + return CustomChartView; + }(ChartView); + + function createEl(elOption) { + var graphicType = elOption.type; + var el; // Those graphic elements are not shapes. They should not be + // overwritten by users, so do them first. + + if (graphicType === 'path') { + var shape = elOption.shape; // Using pathRect brings convenience to users sacle svg path. + + var pathRect = shape.width != null && shape.height != null ? { + x: shape.x || 0, + y: shape.y || 0, + width: shape.width, + height: shape.height + } : null; + var pathData = getPathData(shape); // Path is also used for icon, so layout 'center' by default. + + el = makePath(pathData, null, pathRect, shape.layout || 'center'); + customInnerStore(el).customPathData = pathData; + } else if (graphicType === 'image') { + el = new ZRImage({}); + customInnerStore(el).customImagePath = elOption.style.image; + } else if (graphicType === 'text') { + el = new ZRText({}); // customInnerStore(el).customText = (elOption.style as TextStyleProps).text; + } else if (graphicType === 'group') { + el = new Group(); + } else if (graphicType === 'compoundPath') { + throw new Error('"compoundPath" is not supported yet.'); + } else { + var Clz = getShapeClass(graphicType); + + if (!Clz) { + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = 'graphic type "' + graphicType + '" can not be found.'; + } + + throwError(errMsg); + } + + el = new Clz(); + } + + customInnerStore(el).customGraphicType = graphicType; + el.name = elOption.name; // Compat ec4: the default z2 lift is 1. If changing the number, + // some cases probably be broken: hierarchy layout along z, like circle packing, + // where emphasis only intending to modify color/border rather than lift z2. + + el.z2EmphasisLift = 1; + el.z2SelectLift = 1; + return el; + } + + function updateElNormal( // Can be null/undefined + api, el, dataIndex, elOption, attachedTxInfo, seriesModel, isInit, isTextContent) { + var txCfgOpt = attachedTxInfo && attachedTxInfo.normal.cfg; + + if (txCfgOpt) { + // PENDING: whether use user object directly rather than clone? + // TODO:5.0 textConfig transition animation? + el.setTextConfig(txCfgOpt); + } // Do some normalization on style. + + + var styleOpt = elOption && elOption.style; + + if (styleOpt) { + if (el.type === 'text') { + var textOptionStyle = styleOpt; // Compatible with ec4: if `textFill` or `textStroke` exists use them. + + hasOwn(textOptionStyle, 'textFill') && (textOptionStyle.fill = textOptionStyle.textFill); + hasOwn(textOptionStyle, 'textStroke') && (textOptionStyle.stroke = textOptionStyle.textStroke); + } + + var decalPattern = void 0; + var decalObj = isPath$1(el) ? styleOpt.decal : null; + + if (api && decalObj) { + decalObj.dirty = true; + decalPattern = createOrUpdatePatternFromDecal(decalObj, api); + } // Always overwrite in case user specify this prop. + + + styleOpt.__decalPattern = decalPattern; + } // Save the meta info for further morphing. Like apply on the sub morphing elements. + + + var store = customInnerStore(el); + store.userDuring = elOption.during; + var transFromProps = {}; + var propsToSet = {}; + prepareShapeOrExtraTransitionFrom('shape', el, elOption, transFromProps, isInit); + prepareShapeOrExtraAllPropsFinal('shape', elOption, propsToSet); + prepareTransformTransitionFrom(el, elOption, transFromProps, isInit); + prepareTransformAllPropsFinal(el, elOption, propsToSet); + prepareShapeOrExtraTransitionFrom('extra', el, elOption, transFromProps, isInit); + prepareShapeOrExtraAllPropsFinal('extra', elOption, propsToSet); + prepareStyleTransitionFrom(el, elOption, styleOpt, transFromProps, isInit); + propsToSet.style = styleOpt; + applyPropsDirectly(el, propsToSet); + applyPropsTransition(el, dataIndex, seriesModel, transFromProps, isInit); + applyMiscProps(el, elOption, isTextContent); + styleOpt ? el.dirty() : el.markRedraw(); + } + + function applyMiscProps(el, elOption, isTextContent) { + // Merge by default. + hasOwn(elOption, 'silent') && (el.silent = elOption.silent); + hasOwn(elOption, 'ignore') && (el.ignore = elOption.ignore); + + if (isDisplayable(el)) { + hasOwn(elOption, 'invisible') && (el.invisible = elOption.invisible); + } + + if (isPath$1(el)) { + hasOwn(elOption, 'autoBatch') && (el.autoBatch = elOption.autoBatch); + } + + if (!isTextContent) { + // `elOption.info` enables user to mount some info on + // elements and use them in event handlers. + // Update them only when user specified, otherwise, remain. + hasOwn(elOption, 'info') && (customInnerStore(el).info = elOption.info); + } + } + + function applyPropsDirectly(el, // Can be null/undefined + allPropsFinal) { + var elDisplayable = el.isGroup ? null : el; + var styleOpt = allPropsFinal.style; + + if (elDisplayable && styleOpt) { + // PENDING: here the input style object is used directly. + // Good for performance but bad for compatibility control. + elDisplayable.useStyle(styleOpt); + var decalPattern = styleOpt.__decalPattern; + + if (decalPattern) { + elDisplayable.style.decal = decalPattern; + } // When style object changed, how to trade the existing animation? + // It is probably complicated and not needed to cover all the cases. + // But still need consider the case: + // (1) When using init animation on `style.opacity`, and before the animation + // ended users triggers an update by mousewhel. At that time the init + // animation should better be continued rather than terminated. + // So after `useStyle` called, we should change the animation target manually + // to continue the effect of the init animation. + // (2) PENDING: If the previous animation targeted at a `val1`, and currently we need + // to update the value to `val2` and no animation declared, should be terminate + // the previous animation or just modify the target of the animation? + // Therotically That will happen not only on `style` but also on `shape` and + // `transfrom` props. But we haven't handle this case at present yet. + // (3) PENDING: Is it proper to visit `animators` and `targetName`? + + + var animators = elDisplayable.animators; + + for (var i = 0; i < animators.length; i++) { + var animator = animators[i]; // targetName is the "topKey". + + if (animator.targetName === 'style') { + animator.changeTarget(elDisplayable.style); + } + } + } + + if (allPropsFinal) { + // Not set style here. + allPropsFinal.style = null; // Set el to the final state firstly. + + allPropsFinal && el.attr(allPropsFinal); + allPropsFinal.style = styleOpt; + } + } + + function applyPropsTransition(el, dataIndex, seriesModel, // Can be null/undefined + transFromProps, isInit) { + if (transFromProps) { + // NOTE: Do not use `el.updateDuringAnimation` here becuase `el.updateDuringAnimation` will + // be called mutiple time in each animation frame. For example, if both "transform" props + // and shape props and style props changed, it will generate three animator and called + // one-by-one in each animation frame. + // We use the during in `animateTo/From` params. + var userDuring = customInnerStore(el).userDuring; // For simplicity, if during not specified, the previous during will not work any more. + + var cfgDuringCall = userDuring ? bind(duringCall, { + el: el, + userDuring: userDuring + }) : null; + var cfg = { + dataIndex: dataIndex, + isFrom: true, + during: cfgDuringCall + }; + isInit ? initProps(el, transFromProps, seriesModel, cfg) : updateProps(el, transFromProps, seriesModel, cfg); + } + } // Use it to avoid it be exposed to user. + + + var tmpDuringScope = {}; + var customDuringAPI = { + // Usually other props do not need to be changed in animation during. + setTransform: function (key, val) { + if ("development" !== 'production') { + assert(hasOwn(TRANSFORM_PROPS, key), 'Only ' + transformPropNamesStr + ' available in `setTransform`.'); + } + + tmpDuringScope.el[key] = val; + return this; + }, + getTransform: function (key) { + if ("development" !== 'production') { + assert(hasOwn(TRANSFORM_PROPS, key), 'Only ' + transformPropNamesStr + ' available in `getTransform`.'); + } + + return tmpDuringScope.el[key]; + }, + setShape: function (key, val) { + if ("development" !== 'production') { + assertNotReserved(key); + } + + var shape = tmpDuringScope.el.shape || (tmpDuringScope.el.shape = {}); + shape[key] = val; + tmpDuringScope.isShapeDirty = true; + return this; + }, + getShape: function (key) { + if ("development" !== 'production') { + assertNotReserved(key); + } + + var shape = tmpDuringScope.el.shape; + + if (shape) { + return shape[key]; + } + }, + setStyle: function (key, val) { + if ("development" !== 'production') { + assertNotReserved(key); + } + + var style = tmpDuringScope.el.style; + + if (style) { + if ("development" !== 'production') { + if (eqNaN(val)) { + warn('style.' + key + ' must not be assigned with NaN.'); + } + } + + style[key] = val; + tmpDuringScope.isStyleDirty = true; + } + + return this; + }, + getStyle: function (key) { + if ("development" !== 'production') { + assertNotReserved(key); + } + + var style = tmpDuringScope.el.style; + + if (style) { + return style[key]; + } + }, + setExtra: function (key, val) { + if ("development" !== 'production') { + assertNotReserved(key); + } + + var extra = tmpDuringScope.el.extra || (tmpDuringScope.el.extra = {}); + extra[key] = val; + return this; + }, + getExtra: function (key) { + if ("development" !== 'production') { + assertNotReserved(key); + } + + var extra = tmpDuringScope.el.extra; + + if (extra) { + return extra[key]; + } + } + }; + + function assertNotReserved(key) { + if ("development" !== 'production') { + if (key === 'transition' || key === 'enterFrom' || key === 'leaveTo') { + throw new Error('key must not be "' + key + '"'); + } + } + } + + function duringCall() { + // Do not provide "percent" until some requirements come. + // Because consider thies case: + // enterFrom: {x: 100, y: 30}, transition: 'x'. + // And enter duration is different from update duration. + // Thus it might be confused about the meaning of "percent" in during callback. + var scope = this; + var el = scope.el; + + if (!el) { + return; + } // If el is remove from zr by reason like legend, during still need to called, + // becuase el will be added back to zr and the prop value should not be incorrect. + + + var latestUserDuring = customInnerStore(el).userDuring; + var scopeUserDuring = scope.userDuring; // Ensured a during is only called once in each animation frame. + // If a during is called multiple times in one frame, maybe some users' calulation logic + // might be wrong (not sure whether this usage exists). + // The case of a during might be called twice can be: by default there is a animator for + // 'x', 'y' when init. Before the init animation finished, call `setOption` to start + // another animators for 'style'/'shape'/'extra'. + + if (latestUserDuring !== scopeUserDuring) { + // release + scope.el = scope.userDuring = null; + return; + } + + tmpDuringScope.el = el; + tmpDuringScope.isShapeDirty = false; + tmpDuringScope.isStyleDirty = false; // Give no `this` to user in "during" calling. + + scopeUserDuring(customDuringAPI); + + if (tmpDuringScope.isShapeDirty && el.dirtyShape) { + el.dirtyShape(); + } + + if (tmpDuringScope.isStyleDirty && el.dirtyStyle) { + el.dirtyStyle(); + } // markRedraw() will be called by default in during. + // FIXME `this.markRedraw();` directly ? + // FIXME: if in future meet the case that some prop will be both modified in `during` and `state`, + // consider the issue that the prop might be incorrect when return to "normal" state. + + } + + function updateElOnState(state, el, elStateOpt, styleOpt, attachedTxInfo, isRoot, isTextContent) { + var elDisplayable = el.isGroup ? null : el; + var txCfgOpt = attachedTxInfo && attachedTxInfo[state].cfg; // PENDING:5.0 support customize scale change and transition animation? + + if (elDisplayable) { + // By default support auto lift color when hover whether `emphasis` specified. + var stateObj = elDisplayable.ensureState(state); + + if (styleOpt === false) { + var existingEmphasisState = elDisplayable.getState(state); + + if (existingEmphasisState) { + existingEmphasisState.style = null; + } + } else { + // style is needed to enable defaut emphasis. + stateObj.style = styleOpt || null; + } // If `elOption.styleEmphasis` or `elOption.emphasis.style` is `false`, + // remove hover style. + // If `elOption.textConfig` or `elOption.emphasis.textConfig` is null/undefined, it does not + // make sense. So for simplicity, we do not ditinguish `hasOwnProperty` and null/undefined. + + + if (txCfgOpt) { + stateObj.textConfig = txCfgOpt; + } + + setDefaultStateProxy(elDisplayable); + } + } + + function updateZ$1(el, elOption, seriesModel) { + // Group not support textContent and not support z yet. + if (el.isGroup) { + return; + } + + var elDisplayable = el; + var currentZ = seriesModel.currentZ; + var currentZLevel = seriesModel.currentZLevel; // Always erase. + + elDisplayable.z = currentZ; + elDisplayable.zlevel = currentZLevel; // z2 must not be null/undefined, otherwise sort error may occur. + + var optZ2 = elOption.z2; + optZ2 != null && (elDisplayable.z2 = optZ2 || 0); + + for (var i = 0; i < STATES.length; i++) { + updateZForEachState(elDisplayable, elOption, STATES[i]); + } + } + + function updateZForEachState(elDisplayable, elOption, state) { + var isNormal = state === NORMAL; + var elStateOpt = isNormal ? elOption : retrieveStateOption(elOption, state); + var optZ2 = elStateOpt ? elStateOpt.z2 : null; + var stateObj; + + if (optZ2 != null) { + // Do not `ensureState` until required. + stateObj = isNormal ? elDisplayable : elDisplayable.ensureState(state); + stateObj.z2 = optZ2 || 0; + } + } + + function makeRenderItem(customSeries, data, ecModel, api) { + var renderItem = customSeries.get('renderItem'); + var coordSys = customSeries.coordinateSystem; + var prepareResult = {}; + + if (coordSys) { + if ("development" !== 'production') { + assert(renderItem, 'series.render is required.'); + assert(coordSys.prepareCustoms || prepareCustoms[coordSys.type], 'This coordSys does not support custom series.'); + } // `coordSys.prepareCustoms` is used for external coord sys like bmap. + + + prepareResult = coordSys.prepareCustoms ? coordSys.prepareCustoms(coordSys) : prepareCustoms[coordSys.type](coordSys); + } + + var userAPI = defaults({ + getWidth: api.getWidth, + getHeight: api.getHeight, + getZr: api.getZr, + getDevicePixelRatio: api.getDevicePixelRatio, + value: value, + style: style, + ordinalRawValue: ordinalRawValue, + styleEmphasis: styleEmphasis, + visual: visual, + barLayout: barLayout, + currentSeriesIndices: currentSeriesIndices, + font: font + }, prepareResult.api || {}); + var userParams = { + // The life cycle of context: current round of rendering. + // The global life cycle is probably not necessary, because + // user can store global status by themselves. + context: {}, + seriesId: customSeries.id, + seriesName: customSeries.name, + seriesIndex: customSeries.seriesIndex, + coordSys: prepareResult.coordSys, + dataInsideLength: data.count(), + encode: wrapEncodeDef(customSeries.getData()) + }; // If someday intending to refactor them to a class, should consider do not + // break change: currently these attribute member are encapsulated in a closure + // so that do not need to force user to call these method with a scope. + // Do not support call `api` asynchronously without dataIndexInside input. + + var currDataIndexInside; + var currItemModel; + var currItemStyleModels = {}; + var currLabelModels = {}; + var seriesItemStyleModels = {}; + var seriesLabelModels = {}; + + for (var i = 0; i < STATES.length; i++) { + var stateName = STATES[i]; + seriesItemStyleModels[stateName] = customSeries.getModel(PATH_ITEM_STYLE[stateName]); + seriesLabelModels[stateName] = customSeries.getModel(PATH_LABEL[stateName]); + } + + function getItemModel(dataIndexInside) { + return dataIndexInside === currDataIndexInside ? currItemModel || (currItemModel = data.getItemModel(dataIndexInside)) : data.getItemModel(dataIndexInside); + } + + function getItemStyleModel(dataIndexInside, state) { + return !data.hasItemOption ? seriesItemStyleModels[state] : dataIndexInside === currDataIndexInside ? currItemStyleModels[state] || (currItemStyleModels[state] = getItemModel(dataIndexInside).getModel(PATH_ITEM_STYLE[state])) : getItemModel(dataIndexInside).getModel(PATH_ITEM_STYLE[state]); + } + + function getLabelModel(dataIndexInside, state) { + return !data.hasItemOption ? seriesLabelModels[state] : dataIndexInside === currDataIndexInside ? currLabelModels[state] || (currLabelModels[state] = getItemModel(dataIndexInside).getModel(PATH_LABEL[state])) : getItemModel(dataIndexInside).getModel(PATH_LABEL[state]); + } + + return function (dataIndexInside, payload) { + currDataIndexInside = dataIndexInside; + currItemModel = null; + currItemStyleModels = {}; + currLabelModels = {}; + return renderItem && renderItem(defaults({ + dataIndexInside: dataIndexInside, + dataIndex: data.getRawIndex(dataIndexInside), + // Can be used for optimization when zoom or roam. + actionType: payload ? payload.type : null + }, userParams), userAPI); + }; + /** + * @public + * @param dim by default 0. + * @param dataIndexInside by default `currDataIndexInside`. + */ + + function value(dim, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + return data.getStore().get(data.getDimensionIndex(dim || 0), dataIndexInside); + } + /** + * @public + * @param dim by default 0. + * @param dataIndexInside by default `currDataIndexInside`. + */ + + + function ordinalRawValue(dim, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + dim = dim || 0; + var dimInfo = data.getDimensionInfo(dim); + + if (!dimInfo) { + var dimIndex = data.getDimensionIndex(dim); + return dimIndex >= 0 ? data.getStore().get(dimIndex, dataIndexInside) : undefined; + } + + var val = data.get(dimInfo.name, dataIndexInside); + var ordinalMeta = dimInfo && dimInfo.ordinalMeta; + return ordinalMeta ? ordinalMeta.categories[val] : val; + } + /** + * @deprecated The orgininal intention of `api.style` is enable to set itemStyle + * like other series. But it not necessary and not easy to give a strict definition + * of what it return. And since echarts5 it needs to be make compat work. So + * deprecates it since echarts5. + * + * By default, `visual` is applied to style (to support visualMap). + * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`, + * it can be implemented as: + * `api.style({stroke: api.visual('color'), fill: null})`; + * + * [Compat]: since ec5, RectText has been separated from its hosts el. + * so `api.style()` will only return the style from `itemStyle` but not handle `label` + * any more. But `series.label` config is never published in doc. + * We still compat it in `api.style()`. But not encourage to use it and will still not + * to pulish it to doc. + * @public + * @param dataIndexInside by default `currDataIndexInside`. + */ + + + function style(userProps, dataIndexInside) { + if ("development" !== 'production') { + warnDeprecated('api.style', 'Please write literal style directly instead.'); + } + + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + var style = data.getItemVisual(dataIndexInside, 'style'); + var visualColor = style && style.fill; + var opacity = style && style.opacity; + var itemStyle = getItemStyleModel(dataIndexInside, NORMAL).getItemStyle(); + visualColor != null && (itemStyle.fill = visualColor); + opacity != null && (itemStyle.opacity = opacity); + var opt = { + inheritColor: isString(visualColor) ? visualColor : '#000' + }; + var labelModel = getLabelModel(dataIndexInside, NORMAL); // Now that the feture of "auto adjust text fill/stroke" has been migrated to zrender + // since ec5, we should set `isAttached` as `false` here and make compat in + // `convertToEC4StyleForCustomSerise`. + + var textStyle = createTextStyle(labelModel, null, opt, false, true); + textStyle.text = labelModel.getShallow('show') ? retrieve2(customSeries.getFormattedLabel(dataIndexInside, NORMAL), getDefaultLabel(data, dataIndexInside)) : null; + var textConfig = createTextConfig(labelModel, opt, false); + preFetchFromExtra(userProps, itemStyle); + itemStyle = convertToEC4StyleForCustomSerise(itemStyle, textStyle, textConfig); + userProps && applyUserPropsAfter(itemStyle, userProps); + itemStyle.legacy = true; + return itemStyle; + } + /** + * @deprecated The reason see `api.style()` + * @public + * @param dataIndexInside by default `currDataIndexInside`. + */ + + + function styleEmphasis(userProps, dataIndexInside) { + if ("development" !== 'production') { + warnDeprecated('api.styleEmphasis', 'Please write literal style directly instead.'); + } + + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + var itemStyle = getItemStyleModel(dataIndexInside, EMPHASIS).getItemStyle(); + var labelModel = getLabelModel(dataIndexInside, EMPHASIS); + var textStyle = createTextStyle(labelModel, null, null, true, true); + textStyle.text = labelModel.getShallow('show') ? retrieve3(customSeries.getFormattedLabel(dataIndexInside, EMPHASIS), customSeries.getFormattedLabel(dataIndexInside, NORMAL), getDefaultLabel(data, dataIndexInside)) : null; + var textConfig = createTextConfig(labelModel, null, true); + preFetchFromExtra(userProps, itemStyle); + itemStyle = convertToEC4StyleForCustomSerise(itemStyle, textStyle, textConfig); + userProps && applyUserPropsAfter(itemStyle, userProps); + itemStyle.legacy = true; + return itemStyle; + } + + function applyUserPropsAfter(itemStyle, extra) { + for (var key in extra) { + if (hasOwn(extra, key)) { + itemStyle[key] = extra[key]; + } + } + } + + function preFetchFromExtra(extra, itemStyle) { + // A trick to retrieve those props firstly, which are used to + // apply auto inside fill/stroke in `convertToEC4StyleForCustomSerise`. + // (It's not reasonable but only for a degree of compat) + if (extra) { + extra.textFill && (itemStyle.textFill = extra.textFill); + extra.textPosition && (itemStyle.textPosition = extra.textPosition); + } + } + /** + * @public + * @param dataIndexInside by default `currDataIndexInside`. + */ + + + function visual(visualType, dataIndexInside) { + dataIndexInside == null && (dataIndexInside = currDataIndexInside); + + if (hasOwn(STYLE_VISUAL_TYPE, visualType)) { + var style_1 = data.getItemVisual(dataIndexInside, 'style'); + return style_1 ? style_1[STYLE_VISUAL_TYPE[visualType]] : null; + } // Only support these visuals. Other visual might be inner tricky + // for performance (like `style`), do not expose to users. + + + if (hasOwn(NON_STYLE_VISUAL_PROPS, visualType)) { + return data.getItemVisual(dataIndexInside, visualType); + } + } + /** + * @public + * @return If not support, return undefined. + */ + + + function barLayout(opt) { + if (coordSys.type === 'cartesian2d') { + var baseAxis = coordSys.getBaseAxis(); + return getLayoutOnAxis(defaults({ + axis: baseAxis + }, opt)); + } + } + /** + * @public + */ + + + function currentSeriesIndices() { + return ecModel.getCurrentSeriesIndices(); + } + /** + * @public + * @return font string + */ + + + function font(opt) { + return getFont(opt, ecModel); + } + } + + function wrapEncodeDef(data) { + var encodeDef = {}; + each(data.dimensions, function (dimName) { + var dimInfo = data.getDimensionInfo(dimName); + + if (!dimInfo.isExtraCoord) { + var coordDim = dimInfo.coordDim; + var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || []; + dataDims[dimInfo.coordDimIndex] = data.getDimensionIndex(dimName); + } + }); + return encodeDef; + } + + function createOrUpdateItem(api, existsEl, dataIndex, elOption, seriesModel, group, data) { + // [Rule] + // If `renderItem` returns `null`/`undefined`/`false`, remove the previous el if existing. + // (It seems that violate the "merge" principle, but most of users probably intuitively + // regard "return;" as "show nothing element whatever", so make a exception to meet the + // most cases.) + // The rule or "merge" see [STRATEGY_MERGE]. + // If `elOption` is `null`/`undefined`/`false` (when `renderItem` returns nothing). + if (!elOption) { + group.remove(existsEl); + return; + } + + var el = doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group); + el && data.setItemGraphicEl(dataIndex, el); + el && enableHoverEmphasis(el, elOption.focus, elOption.blurScope); + return el; + } + + function doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group, isRoot) { + if ("development" !== 'production') { + assert(elOption, 'should not have an null/undefined element setting'); + } + + var toBeReplacedIdx = -1; + var oldEl = existsEl; + + if (existsEl && doesElNeedRecreate(existsEl, elOption, seriesModel) // || ( + // // PENDING: even in one-to-one mapping case, if el is marked as morph, + // // do not sure whether the el will be mapped to another el with different + // // hierarchy in Group tree. So always recreate el rather than reuse the el. + // morphHelper && morphHelper.isOneToOneFrom(el) + // ) + ) { + // Should keep at the original index, otherwise "merge by index" will be incorrect. + toBeReplacedIdx = indexOf(group.childrenRef(), existsEl); + existsEl = null; + } + + var isInit = !existsEl; + var el = existsEl; + + if (!el) { + el = createEl(elOption); + + if (oldEl) { + copyElement(oldEl, el); + } + } else { + // FIMXE:NEXT unified clearState? + // If in some case the performance issue arised, consider + // do not clearState but update cached normal state directly. + el.clearStates(); + } // Need to set morph: false explictly to disable automatically morphing. + + + if (elOption.morph === false) { + el.disableMorphing = true; + } else if (el.disableMorphing) { + el.disableMorphing = false; + } + + attachedTxInfoTmp.normal.cfg = attachedTxInfoTmp.normal.conOpt = attachedTxInfoTmp.emphasis.cfg = attachedTxInfoTmp.emphasis.conOpt = attachedTxInfoTmp.blur.cfg = attachedTxInfoTmp.blur.conOpt = attachedTxInfoTmp.select.cfg = attachedTxInfoTmp.select.conOpt = null; + attachedTxInfoTmp.isLegacy = false; + doCreateOrUpdateAttachedTx(el, dataIndex, elOption, seriesModel, isInit, attachedTxInfoTmp); + doCreateOrUpdateClipPath(el, dataIndex, elOption, seriesModel, isInit); + updateElNormal(api, el, dataIndex, elOption, attachedTxInfoTmp, seriesModel, isInit, false); + + for (var i = 0; i < STATES.length; i++) { + var stateName = STATES[i]; + + if (stateName !== NORMAL) { + var otherStateOpt = retrieveStateOption(elOption, stateName); + var otherStyleOpt = retrieveStyleOptionOnState(elOption, otherStateOpt, stateName); + updateElOnState(stateName, el, otherStateOpt, otherStyleOpt, attachedTxInfoTmp); + } + } + + updateZ$1(el, elOption, seriesModel); + + if (elOption.type === 'group') { + mergeChildren(api, el, dataIndex, elOption, seriesModel); + } + + if (toBeReplacedIdx >= 0) { + group.replaceAt(el, toBeReplacedIdx); + } else { + group.add(el); + } + + return el; + } // `el` must not be null/undefined. + + + function doesElNeedRecreate(el, elOption, seriesModel) { + var elInner = customInnerStore(el); + var elOptionType = elOption.type; + var elOptionShape = elOption.shape; + var elOptionStyle = elOption.style; + return (// Always create new if universal transition is enabled. + // Because we do transition after render. It needs to know what old element is. Replacement will loose it. + seriesModel.isUniversalTransitionEnabled() // If `elOptionType` is `null`, follow the merge principle. + || elOptionType != null && elOptionType !== elInner.customGraphicType || elOptionType === 'path' && hasOwnPathData(elOptionShape) && getPathData(elOptionShape) !== elInner.customPathData || elOptionType === 'image' && hasOwn(elOptionStyle, 'image') && elOptionStyle.image !== elInner.customImagePath // // FIXME test and remove this restriction? + // || (elOptionType === 'text' + // && hasOwn(elOptionStyle, 'text') + // && (elOptionStyle as TextStyleProps).text !== elInner.customText + // ) + + ); + } + + function doCreateOrUpdateClipPath(el, dataIndex, elOption, seriesModel, isInit) { + // Based on the "merge" principle, if no clipPath provided, + // do nothing. The exists clip will be totally removed only if + // `el.clipPath` is `false`. Otherwise it will be merged/replaced. + var clipPathOpt = elOption.clipPath; + + if (clipPathOpt === false) { + if (el && el.getClipPath()) { + el.removeClipPath(); + } + } else if (clipPathOpt) { + var clipPath = el.getClipPath(); + + if (clipPath && doesElNeedRecreate(clipPath, clipPathOpt, seriesModel)) { + clipPath = null; + } + + if (!clipPath) { + clipPath = createEl(clipPathOpt); + + if ("development" !== 'production') { + assert(isPath$1(clipPath), 'Only any type of `path` can be used in `clipPath`, rather than ' + clipPath.type + '.'); + } + + el.setClipPath(clipPath); + } + + updateElNormal(null, clipPath, dataIndex, clipPathOpt, null, seriesModel, isInit, false); + } // If not define `clipPath` in option, do nothing unnecessary. + + } + + function doCreateOrUpdateAttachedTx(el, dataIndex, elOption, seriesModel, isInit, attachedTxInfo) { + // group do not support textContent temporarily untill necessary. + if (el.isGroup) { + return; + } // Normal must be called before emphasis, for `isLegacy` detection. + + + processTxInfo(elOption, null, attachedTxInfo); + processTxInfo(elOption, EMPHASIS, attachedTxInfo); // If `elOption.textConfig` or `elOption.textContent` is null/undefined, it does not make sence. + // So for simplicity, if "elOption hasOwnProperty of them but be null/undefined", we do not + // trade them as set to null to el. + // Especially: + // `elOption.textContent: false` means remove textContent. + // `elOption.textContent.emphasis.style: false` means remove the style from emphasis state. + + var txConOptNormal = attachedTxInfo.normal.conOpt; + var txConOptEmphasis = attachedTxInfo.emphasis.conOpt; + var txConOptBlur = attachedTxInfo.blur.conOpt; + var txConOptSelect = attachedTxInfo.select.conOpt; + + if (txConOptNormal != null || txConOptEmphasis != null || txConOptSelect != null || txConOptBlur != null) { + var textContent = el.getTextContent(); + + if (txConOptNormal === false) { + textContent && el.removeTextContent(); + } else { + txConOptNormal = attachedTxInfo.normal.conOpt = txConOptNormal || { + type: 'text' + }; + + if (!textContent) { + textContent = createEl(txConOptNormal); + el.setTextContent(textContent); + } else { + // If in some case the performance issue arised, consider + // do not clearState but update cached normal state directly. + textContent.clearStates(); + } + + updateElNormal(null, textContent, dataIndex, txConOptNormal, null, seriesModel, isInit, true); + var txConStlOptNormal = txConOptNormal && txConOptNormal.style; + + for (var i = 0; i < STATES.length; i++) { + var stateName = STATES[i]; + + if (stateName !== NORMAL) { + var txConOptOtherState = attachedTxInfo[stateName].conOpt; + updateElOnState(stateName, textContent, txConOptOtherState, retrieveStyleOptionOnState(txConOptNormal, txConOptOtherState, stateName), null); + } + } + + txConStlOptNormal ? textContent.dirty() : textContent.markRedraw(); + } + } + } + + function processTxInfo(elOption, state, attachedTxInfo) { + var stateOpt = !state ? elOption : retrieveStateOption(elOption, state); + var styleOpt = !state ? elOption.style : retrieveStyleOptionOnState(elOption, stateOpt, EMPHASIS); + var elType = elOption.type; + var txCfg = stateOpt ? stateOpt.textConfig : null; + var txConOptNormal = elOption.textContent; + var txConOpt = !txConOptNormal ? null : !state ? txConOptNormal : retrieveStateOption(txConOptNormal, state); + + if (styleOpt && ( // Because emphasis style has little info to detect legacy, + // if normal is legacy, emphasis is trade as legacy. + attachedTxInfo.isLegacy || isEC4CompatibleStyle(styleOpt, elType, !!txCfg, !!txConOpt))) { + attachedTxInfo.isLegacy = true; + var convertResult = convertFromEC4CompatibleStyle(styleOpt, elType, !state); // Explicitly specified `textConfig` and `textContent` has higher priority than + // the ones generated by legacy style. Otherwise if users use them and `api.style` + // at the same time, they not both work and hardly to known why. + + if (!txCfg && convertResult.textConfig) { + txCfg = convertResult.textConfig; + } + + if (!txConOpt && convertResult.textContent) { + txConOpt = convertResult.textContent; + } + } + + if (!state && txConOpt) { + var txConOptNormal_1 = txConOpt; // `textContent: {type: 'text'}`, the "type" is easy to be missing. So we tolerate it. + + !txConOptNormal_1.type && (txConOptNormal_1.type = 'text'); + + if ("development" !== 'production') { + // Do not tolerate incorret type for forward compat. + assert(txConOptNormal_1.type === 'text', 'textContent.type must be "text"'); + } + } + + var info = !state ? attachedTxInfo.normal : attachedTxInfo[state]; + info.cfg = txCfg; + info.conOpt = txConOpt; + } + + function retrieveStateOption(elOption, state) { + return !state ? elOption : elOption ? elOption[state] : null; + } + + function retrieveStyleOptionOnState(stateOptionNormal, stateOption, state) { + var style = stateOption && stateOption.style; + + if (style == null && state === EMPHASIS && stateOptionNormal) { + style = stateOptionNormal.styleEmphasis; + } + + return style; + } // Usage: + // (1) By default, `elOption.$mergeChildren` is `'byIndex'`, which indicates that + // the existing children will not be removed, and enables the feature that + // update some of the props of some of the children simply by construct + // the returned children of `renderItem` like: + // `var children = group.children = []; children[3] = {opacity: 0.5};` + // (2) If `elOption.$mergeChildren` is `'byName'`, add/update/remove children + // by child.name. But that might be lower performance. + // (3) If `elOption.$mergeChildren` is `false`, the existing children will be + // replaced totally. + // (4) If `!elOption.children`, following the "merge" principle, nothing will happen. + // + // For implementation simpleness, do not provide a direct way to remove sinlge + // child (otherwise the total indicies of the children array have to be modified). + // User can remove a single child by set its `ignore` as `true`. + + + function mergeChildren(api, el, dataIndex, elOption, seriesModel) { + var newChildren = elOption.children; + var newLen = newChildren ? newChildren.length : 0; + var mergeChildren = elOption.$mergeChildren; // `diffChildrenByName` has been deprecated. + + var byName = mergeChildren === 'byName' || elOption.diffChildrenByName; + var notMerge = mergeChildren === false; // For better performance on roam update, only enter if necessary. + + if (!newLen && !byName && !notMerge) { + return; + } + + if (byName) { + diffGroupChildren({ + api: api, + oldChildren: el.children() || [], + newChildren: newChildren || [], + dataIndex: dataIndex, + seriesModel: seriesModel, + group: el + }); + return; + } + + notMerge && el.removeAll(); // Mapping children of a group simply by index, which + // might be better performance. + + var index = 0; + + for (; index < newLen; index++) { + newChildren[index] && doCreateOrUpdateEl(api, el.childAt(index), dataIndex, newChildren[index], seriesModel, el); + } + + for (var i = el.childCount() - 1; i >= index; i--) { + // Do not supprot leave elements that are not mentioned in the latest + // `renderItem` return. Otherwise users may not have a clear and simple + // concept that how to contorl all of the elements. + doRemoveEl(el.childAt(i), seriesModel, el); + } + } + + function diffGroupChildren(context) { + new DataDiffer(context.oldChildren, context.newChildren, getKey, getKey, context).add(processAddUpdate).update(processAddUpdate).remove(processRemove).execute(); + } + + function getKey(item, idx) { + var name = item && item.name; + return name != null ? name : GROUP_DIFF_PREFIX + idx; + } + + function processAddUpdate(newIndex, oldIndex) { + var context = this.context; + var childOption = newIndex != null ? context.newChildren[newIndex] : null; + var child = oldIndex != null ? context.oldChildren[oldIndex] : null; + doCreateOrUpdateEl(context.api, child, context.dataIndex, childOption, context.seriesModel, context.group); + } + + function processRemove(oldIndex) { + var context = this.context; + var child = context.oldChildren[oldIndex]; + doRemoveEl(child, context.seriesModel, context.group); + } + + function doRemoveEl(el, seriesModel, group) { + if (el) { + var leaveToProps = customInnerStore(el).leaveToProps; + leaveToProps ? updateProps(el, leaveToProps, seriesModel, { + cb: function () { + group.remove(el); + } + }) : group.remove(el); + } + } + /** + * @return SVG Path data. + */ + + + function getPathData(shape) { + // "d" follows the SVG convention. + return shape && (shape.pathData || shape.d); + } + + function hasOwnPathData(shape) { + return shape && (hasOwn(shape, 'pathData') || hasOwn(shape, 'd')); + } + + function install$r(registers) { + registers.registerChartView(CustomChartView); + registers.registerSeriesModel(CustomSeriesModel); + } + + var inner$a = makeInner(); + var clone$3 = clone; + var bind$1 = bind; + /** + * Base axis pointer class in 2D. + */ + + var BaseAxisPointer = + /** @class */ + function () { + function BaseAxisPointer() { + this._dragging = false; + /** + * In px, arbitrary value. Do not set too small, + * no animation is ok for most cases. + */ + + this.animationThreshold = 15; + } + /** + * @implement + */ + + + BaseAxisPointer.prototype.render = function (axisModel, axisPointerModel, api, forceRender) { + var value = axisPointerModel.get('value'); + var status = axisPointerModel.get('status'); // Bind them to `this`, not in closure, otherwise they will not + // be replaced when user calling setOption in not merge mode. + + this._axisModel = axisModel; + this._axisPointerModel = axisPointerModel; + this._api = api; // Optimize: `render` will be called repeatly during mouse move. + // So it is power consuming if performing `render` each time, + // especially on mobile device. + + if (!forceRender && this._lastValue === value && this._lastStatus === status) { + return; + } + + this._lastValue = value; + this._lastStatus = status; + var group = this._group; + var handle = this._handle; + + if (!status || status === 'hide') { + // Do not clear here, for animation better. + group && group.hide(); + handle && handle.hide(); + return; + } + + group && group.show(); + handle && handle.show(); // Otherwise status is 'show' + + var elOption = {}; + this.makeElOption(elOption, value, axisModel, axisPointerModel, api); // Enable change axis pointer type. + + var graphicKey = elOption.graphicKey; + + if (graphicKey !== this._lastGraphicKey) { + this.clear(api); + } + + this._lastGraphicKey = graphicKey; + var moveAnimation = this._moveAnimation = this.determineAnimation(axisModel, axisPointerModel); + + if (!group) { + group = this._group = new Group(); + this.createPointerEl(group, elOption, axisModel, axisPointerModel); + this.createLabelEl(group, elOption, axisModel, axisPointerModel); + api.getZr().add(group); + } else { + var doUpdateProps = curry(updateProps$1, axisPointerModel, moveAnimation); + this.updatePointerEl(group, elOption, doUpdateProps); + this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel); + } + + updateMandatoryProps(group, axisPointerModel, true); + + this._renderHandle(value); + }; + /** + * @implement + */ + + + BaseAxisPointer.prototype.remove = function (api) { + this.clear(api); + }; + /** + * @implement + */ + + + BaseAxisPointer.prototype.dispose = function (api) { + this.clear(api); + }; + /** + * @protected + */ + + + BaseAxisPointer.prototype.determineAnimation = function (axisModel, axisPointerModel) { + var animation = axisPointerModel.get('animation'); + var axis = axisModel.axis; + var isCategoryAxis = axis.type === 'category'; + var useSnap = axisPointerModel.get('snap'); // Value axis without snap always do not snap. + + if (!useSnap && !isCategoryAxis) { + return false; + } + + if (animation === 'auto' || animation == null) { + var animationThreshold = this.animationThreshold; + + if (isCategoryAxis && axis.getBandWidth() > animationThreshold) { + return true; + } // It is important to auto animation when snap used. Consider if there is + // a dataZoom, animation will be disabled when too many points exist, while + // it will be enabled for better visual effect when little points exist. + + + if (useSnap) { + var seriesDataCount = getAxisInfo(axisModel).seriesDataCount; + var axisExtent = axis.getExtent(); // Approximate band width + + return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold; + } + + return false; + } + + return animation === true; + }; + /** + * add {pointer, label, graphicKey} to elOption + * @protected + */ + + + BaseAxisPointer.prototype.makeElOption = function (elOption, value, axisModel, axisPointerModel, api) {// Shoule be implemenented by sub-class. + }; + /** + * @protected + */ + + + BaseAxisPointer.prototype.createPointerEl = function (group, elOption, axisModel, axisPointerModel) { + var pointerOption = elOption.pointer; + + if (pointerOption) { + var pointerEl = inner$a(group).pointerEl = new graphic[pointerOption.type](clone$3(elOption.pointer)); + group.add(pointerEl); + } + }; + /** + * @protected + */ + + + BaseAxisPointer.prototype.createLabelEl = function (group, elOption, axisModel, axisPointerModel) { + if (elOption.label) { + var labelEl = inner$a(group).labelEl = new ZRText(clone$3(elOption.label)); + group.add(labelEl); + updateLabelShowHide(labelEl, axisPointerModel); + } + }; + /** + * @protected + */ + + + BaseAxisPointer.prototype.updatePointerEl = function (group, elOption, updateProps) { + var pointerEl = inner$a(group).pointerEl; + + if (pointerEl && elOption.pointer) { + pointerEl.setStyle(elOption.pointer.style); + updateProps(pointerEl, { + shape: elOption.pointer.shape + }); + } + }; + /** + * @protected + */ + + + BaseAxisPointer.prototype.updateLabelEl = function (group, elOption, updateProps, axisPointerModel) { + var labelEl = inner$a(group).labelEl; + + if (labelEl) { + labelEl.setStyle(elOption.label.style); + updateProps(labelEl, { + // Consider text length change in vertical axis, animation should + // be used on shape, otherwise the effect will be weird. + // TODOTODO + // shape: elOption.label.shape, + x: elOption.label.x, + y: elOption.label.y + }); + updateLabelShowHide(labelEl, axisPointerModel); + } + }; + /** + * @private + */ + + + BaseAxisPointer.prototype._renderHandle = function (value) { + if (this._dragging || !this.updateHandleTransform) { + return; + } + + var axisPointerModel = this._axisPointerModel; + + var zr = this._api.getZr(); + + var handle = this._handle; + var handleModel = axisPointerModel.getModel('handle'); + var status = axisPointerModel.get('status'); + + if (!handleModel.get('show') || !status || status === 'hide') { + handle && zr.remove(handle); + this._handle = null; + return; + } + + var isInit; + + if (!this._handle) { + isInit = true; + handle = this._handle = createIcon(handleModel.get('icon'), { + cursor: 'move', + draggable: true, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + onmousedown: bind$1(this._onHandleDragMove, this, 0, 0), + drift: bind$1(this._onHandleDragMove, this), + ondragend: bind$1(this._onHandleDragEnd, this) + }); + zr.add(handle); + } + + updateMandatoryProps(handle, axisPointerModel, false); // update style + + handle.setStyle(handleModel.getItemStyle(null, ['color', 'borderColor', 'borderWidth', 'opacity', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'])); // update position + + var handleSize = handleModel.get('size'); + + if (!isArray(handleSize)) { + handleSize = [handleSize, handleSize]; + } + + handle.scaleX = handleSize[0] / 2; + handle.scaleY = handleSize[1] / 2; + createOrUpdate(this, '_doDispatchAxisPointer', handleModel.get('throttle') || 0, 'fixRate'); + + this._moveHandleToValue(value, isInit); + }; + + BaseAxisPointer.prototype._moveHandleToValue = function (value, isInit) { + updateProps$1(this._axisPointerModel, !isInit && this._moveAnimation, this._handle, getHandleTransProps(this.getHandleTransform(value, this._axisModel, this._axisPointerModel))); + }; + + BaseAxisPointer.prototype._onHandleDragMove = function (dx, dy) { + var handle = this._handle; + + if (!handle) { + return; + } + + this._dragging = true; // Persistent for throttle. + + var trans = this.updateHandleTransform(getHandleTransProps(handle), [dx, dy], this._axisModel, this._axisPointerModel); + this._payloadInfo = trans; + handle.stopAnimation(); + handle.attr(getHandleTransProps(trans)); + inner$a(handle).lastProp = null; + + this._doDispatchAxisPointer(); + }; + /** + * Throttled method. + */ + + + BaseAxisPointer.prototype._doDispatchAxisPointer = function () { + var handle = this._handle; + + if (!handle) { + return; + } + + var payloadInfo = this._payloadInfo; + var axisModel = this._axisModel; + + this._api.dispatchAction({ + type: 'updateAxisPointer', + x: payloadInfo.cursorPoint[0], + y: payloadInfo.cursorPoint[1], + tooltipOption: payloadInfo.tooltipOption, + axesInfo: [{ + axisDim: axisModel.axis.dim, + axisIndex: axisModel.componentIndex + }] + }); + }; + + BaseAxisPointer.prototype._onHandleDragEnd = function () { + this._dragging = false; + var handle = this._handle; + + if (!handle) { + return; + } + + var value = this._axisPointerModel.get('value'); // Consider snap or categroy axis, handle may be not consistent with + // axisPointer. So move handle to align the exact value position when + // drag ended. + + + this._moveHandleToValue(value); // For the effect: tooltip will be shown when finger holding on handle + // button, and will be hidden after finger left handle button. + + + this._api.dispatchAction({ + type: 'hideTip' + }); + }; + /** + * @private + */ + + + BaseAxisPointer.prototype.clear = function (api) { + this._lastValue = null; + this._lastStatus = null; + var zr = api.getZr(); + var group = this._group; + var handle = this._handle; + + if (zr && group) { + this._lastGraphicKey = null; + group && zr.remove(group); + handle && zr.remove(handle); + this._group = null; + this._handle = null; + this._payloadInfo = null; + } + }; + /** + * @protected + */ + + + BaseAxisPointer.prototype.doClear = function () {// Implemented by sub-class if necessary. + }; + + BaseAxisPointer.prototype.buildLabel = function (xy, wh, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x: xy[xDimIndex], + y: xy[1 - xDimIndex], + width: wh[xDimIndex], + height: wh[1 - xDimIndex] + }; + }; + + return BaseAxisPointer; + }(); + + function updateProps$1(animationModel, moveAnimation, el, props) { + // Animation optimize. + if (!propsEqual(inner$a(el).lastProp, props)) { + inner$a(el).lastProp = props; + moveAnimation ? updateProps(el, props, animationModel) : (el.stopAnimation(), el.attr(props)); + } + } + + function propsEqual(lastProps, newProps) { + if (isObject(lastProps) && isObject(newProps)) { + var equals_1 = true; + each(newProps, function (item, key) { + equals_1 = equals_1 && propsEqual(lastProps[key], item); + }); + return !!equals_1; + } else { + return lastProps === newProps; + } + } + + function updateLabelShowHide(labelEl, axisPointerModel) { + labelEl[axisPointerModel.get(['label', 'show']) ? 'show' : 'hide'](); + } + + function getHandleTransProps(trans) { + return { + x: trans.x || 0, + y: trans.y || 0, + rotation: trans.rotation || 0 + }; + } + + function updateMandatoryProps(group, axisPointerModel, silent) { + var z = axisPointerModel.get('z'); + var zlevel = axisPointerModel.get('zlevel'); + group && group.traverse(function (el) { + if (el.type !== 'group') { + z != null && (el.z = z); + zlevel != null && (el.zlevel = zlevel); + el.silent = silent; + } + }); + } + + function buildElStyle(axisPointerModel) { + var axisPointerType = axisPointerModel.get('type'); + var styleModel = axisPointerModel.getModel(axisPointerType + 'Style'); + var style; + + if (axisPointerType === 'line') { + style = styleModel.getLineStyle(); + style.fill = null; + } else if (axisPointerType === 'shadow') { + style = styleModel.getAreaStyle(); + style.stroke = null; + } + + return style; + } + /** + * @param {Function} labelPos {align, verticalAlign, position} + */ + + function buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos) { + var value = axisPointerModel.get('value'); + var text = getValueLabel(value, axisModel.axis, axisModel.ecModel, axisPointerModel.get('seriesDataIndices'), { + precision: axisPointerModel.get(['label', 'precision']), + formatter: axisPointerModel.get(['label', 'formatter']) + }); + var labelModel = axisPointerModel.getModel('label'); + var paddings = normalizeCssArray$1(labelModel.get('padding') || 0); + var font = labelModel.getFont(); + var textRect = getBoundingRect(text, font); + var position = labelPos.position; + var width = textRect.width + paddings[1] + paddings[3]; + var height = textRect.height + paddings[0] + paddings[2]; // Adjust by align. + + var align = labelPos.align; + align === 'right' && (position[0] -= width); + align === 'center' && (position[0] -= width / 2); + var verticalAlign = labelPos.verticalAlign; + verticalAlign === 'bottom' && (position[1] -= height); + verticalAlign === 'middle' && (position[1] -= height / 2); // Not overflow ec container + + confineInContainer(position, width, height, api); + var bgColor = labelModel.get('backgroundColor'); + + if (!bgColor || bgColor === 'auto') { + bgColor = axisModel.get(['axisLine', 'lineStyle', 'color']); + } + + elOption.label = { + // shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')}, + x: position[0], + y: position[1], + style: createTextStyle(labelModel, { + text: text, + font: font, + fill: labelModel.getTextColor(), + padding: paddings, + backgroundColor: bgColor + }), + // Lable should be over axisPointer. + z2: 10 + }; + } // Do not overflow ec container + + function confineInContainer(position, width, height, api) { + var viewWidth = api.getWidth(); + var viewHeight = api.getHeight(); + position[0] = Math.min(position[0] + width, viewWidth) - width; + position[1] = Math.min(position[1] + height, viewHeight) - height; + position[0] = Math.max(position[0], 0); + position[1] = Math.max(position[1], 0); + } + + function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) { + value = axis.scale.parse(value); + var text = axis.scale.getLabel({ + value: value + }, { + // If `precision` is set, width can be fixed (like '12.00500'), which + // helps to debounce when when moving label. + precision: opt.precision + }); + var formatter = opt.formatter; + + if (formatter) { + var params_1 = { + value: getAxisRawValue(axis, { + value: value + }), + axisDimension: axis.dim, + axisIndex: axis.index, + seriesData: [] + }; + each(seriesDataIndices, function (idxItem) { + var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); + var dataIndex = idxItem.dataIndexInside; + var dataParams = series && series.getDataParams(dataIndex); + dataParams && params_1.seriesData.push(dataParams); + }); + + if (isString(formatter)) { + text = formatter.replace('{value}', text); + } else if (isFunction(formatter)) { + text = formatter(params_1); + } + } + + return text; + } + function getTransformedPosition(axis, value, layoutInfo) { + var transform = create$1(); + rotate(transform, transform, layoutInfo.rotation); + translate(transform, transform, layoutInfo.position); + return applyTransform$1([axis.dataToCoord(value), (layoutInfo.labelOffset || 0) + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)], transform); + } + function buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api) { + // @ts-ignore + var textLayout = AxisBuilder.innerTextLayout(layoutInfo.rotation, 0, layoutInfo.labelDirection); + layoutInfo.labelMargin = axisPointerModel.get(['label', 'margin']); + buildLabelElOption(elOption, axisModel, axisPointerModel, api, { + position: getTransformedPosition(axisModel.axis, value, layoutInfo), + align: textLayout.textAlign, + verticalAlign: textLayout.textVerticalAlign + }); + } + function makeLineShape(p1, p2, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x1: p1[xDimIndex], + y1: p1[1 - xDimIndex], + x2: p2[xDimIndex], + y2: p2[1 - xDimIndex] + }; + } + function makeRectShape(xy, wh, xDimIndex) { + xDimIndex = xDimIndex || 0; + return { + x: xy[xDimIndex], + y: xy[1 - xDimIndex], + width: wh[xDimIndex], + height: wh[1 - xDimIndex] + }; + } + function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) { + return { + cx: cx, + cy: cy, + r0: r0, + r: r, + startAngle: startAngle, + endAngle: endAngle, + clockwise: true + }; + } + + var CartesianAxisPointer = + /** @class */ + function (_super) { + __extends(CartesianAxisPointer, _super); + + function CartesianAxisPointer() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @override + */ + + + CartesianAxisPointer.prototype.makeElOption = function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + var grid = axis.grid; + var axisPointerType = axisPointerModel.get('type'); + var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent(); + var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true)); + + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder[axisPointerType](axis, pixelValue, otherExtent); + pointerOption.style = elStyle; + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var layoutInfo = layout$1(grid.model, axisModel); + buildCartesianSingleLabelElOption( // @ts-ignore + value, elOption, layoutInfo, axisModel, axisPointerModel, api); + }; + /** + * @override + */ + + + CartesianAxisPointer.prototype.getHandleTransform = function (value, axisModel, axisPointerModel) { + var layoutInfo = layout$1(axisModel.axis.grid.model, axisModel, { + labelInside: false + }); // @ts-ignore + + layoutInfo.labelMargin = axisPointerModel.get(['handle', 'margin']); + var pos = getTransformedPosition(axisModel.axis, value, layoutInfo); + return { + x: pos[0], + y: pos[1], + rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0) + }; + }; + /** + * @override + */ + + + CartesianAxisPointer.prototype.updateHandleTransform = function (transform, delta, axisModel, axisPointerModel) { + var axis = axisModel.axis; + var grid = axis.grid; + var axisExtent = axis.getGlobalExtent(true); + var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent(); + var dimIndex = axis.dim === 'x' ? 0 : 1; + var currPosition = [transform.x, transform.y]; + currPosition[dimIndex] += delta[dimIndex]; + currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]); + currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]); + var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2; + var cursorPoint = [cursorOtherValue, cursorOtherValue]; + cursorPoint[dimIndex] = currPosition[dimIndex]; // Make tooltip do not overlap axisPointer and in the middle of the grid. + + var tooltipOptions = [{ + verticalAlign: 'middle' + }, { + align: 'center' + }]; + return { + x: currPosition[0], + y: currPosition[1], + rotation: transform.rotation, + cursorPoint: cursorPoint, + tooltipOption: tooltipOptions[dimIndex] + }; + }; + + return CartesianAxisPointer; + }(BaseAxisPointer); + + function getCartesian(grid, axis) { + var opt = {}; + opt[axis.dim + 'AxisIndex'] = axis.index; + return grid.getCartesian(opt); + } + + var pointerShapeBuilder = { + line: function (axis, pixelValue, otherExtent) { + var targetShape = makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getAxisDimIndex(axis)); + return { + type: 'Line', + subPixelOptimize: true, + shape: targetShape + }; + }, + shadow: function (axis, pixelValue, otherExtent) { + var bandWidth = Math.max(1, axis.getBandWidth()); + var span = otherExtent[1] - otherExtent[0]; + return { + type: 'Rect', + shape: makeRectShape([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getAxisDimIndex(axis)) + }; + } + }; + + function getAxisDimIndex(axis) { + return axis.dim === 'x' ? 0 : 1; + } + + var AxisPointerModel = + /** @class */ + function (_super) { + __extends(AxisPointerModel, _super); + + function AxisPointerModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = AxisPointerModel.type; + return _this; + } + + AxisPointerModel.type = 'axisPointer'; + AxisPointerModel.defaultOption = { + // 'auto' means that show when triggered by tooltip or handle. + show: 'auto', + zlevel: 0, + z: 50, + type: 'line', + // axispointer triggered by tootip determine snap automatically, + // see `modelHelper`. + snap: false, + triggerTooltip: true, + value: null, + status: null, + link: [], + // Do not set 'auto' here, otherwise global animation: false + // will not effect at this axispointer. + animation: null, + animationDurationUpdate: 200, + lineStyle: { + color: '#B9BEC9', + width: 1, + type: 'dashed' + }, + shadowStyle: { + color: 'rgba(210,219,238,0.2)' + }, + label: { + show: true, + formatter: null, + precision: 'auto', + margin: 3, + color: '#fff', + padding: [5, 7, 5, 7], + backgroundColor: 'auto', + borderColor: null, + borderWidth: 0, + borderRadius: 3 + }, + handle: { + show: false, + // eslint-disable-next-line + icon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', + size: 45, + // handle margin is from symbol center to axis, which is stable when circular move. + margin: 50, + // color: '#1b8bbd' + // color: '#2f4554' + color: '#333', + shadowBlur: 3, + shadowColor: '#aaa', + shadowOffsetX: 0, + shadowOffsetY: 2, + // For mobile performance + throttle: 40 + } + }; + return AxisPointerModel; + }(ComponentModel); + + var inner$b = makeInner(); + var each$7 = each; + /** + * @param {string} key + * @param {module:echarts/ExtensionAPI} api + * @param {Function} handler + * param: {string} currTrigger + * param: {Array.} point + */ + + function register(key, api, handler) { + if (env.node) { + return; + } + + var zr = api.getZr(); + inner$b(zr).records || (inner$b(zr).records = {}); + initGlobalListeners(zr, api); + var record = inner$b(zr).records[key] || (inner$b(zr).records[key] = {}); + record.handler = handler; + } + + function initGlobalListeners(zr, api) { + if (inner$b(zr).initialized) { + return; + } + + inner$b(zr).initialized = true; + useHandler('click', curry(doEnter, 'click')); + useHandler('mousemove', curry(doEnter, 'mousemove')); // useHandler('mouseout', onLeave); + + useHandler('globalout', onLeave); + + function useHandler(eventType, cb) { + zr.on(eventType, function (e) { + var dis = makeDispatchAction(api); + each$7(inner$b(zr).records, function (record) { + record && cb(record, e, dis.dispatchAction); + }); + dispatchTooltipFinally(dis.pendings, api); + }); + } + } + + function dispatchTooltipFinally(pendings, api) { + var showLen = pendings.showTip.length; + var hideLen = pendings.hideTip.length; + var actuallyPayload; + + if (showLen) { + actuallyPayload = pendings.showTip[showLen - 1]; + } else if (hideLen) { + actuallyPayload = pendings.hideTip[hideLen - 1]; + } + + if (actuallyPayload) { + actuallyPayload.dispatchAction = null; + api.dispatchAction(actuallyPayload); + } + } + + function onLeave(record, e, dispatchAction) { + record.handler('leave', null, dispatchAction); + } + + function doEnter(currTrigger, record, e, dispatchAction) { + record.handler(currTrigger, e, dispatchAction); + } + + function makeDispatchAction(api) { + var pendings = { + showTip: [], + hideTip: [] + }; // FIXME + // better approach? + // 'showTip' and 'hideTip' can be triggered by axisPointer and tooltip, + // which may be conflict, (axisPointer call showTip but tooltip call hideTip); + // So we have to add "final stage" to merge those dispatched actions. + + var dispatchAction = function (payload) { + var pendingList = pendings[payload.type]; + + if (pendingList) { + pendingList.push(payload); + } else { + payload.dispatchAction = dispatchAction; + api.dispatchAction(payload); + } + }; + + return { + dispatchAction: dispatchAction, + pendings: pendings + }; + } + + function unregister(key, api) { + if (env.node) { + return; + } + + var zr = api.getZr(); + var record = (inner$b(zr).records || {})[key]; + + if (record) { + inner$b(zr).records[key] = null; + } + } + + var AxisPointerView = + /** @class */ + function (_super) { + __extends(AxisPointerView, _super); + + function AxisPointerView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = AxisPointerView.type; + return _this; + } + + AxisPointerView.prototype.render = function (globalAxisPointerModel, ecModel, api) { + var globalTooltipModel = ecModel.getComponent('tooltip'); + var triggerOn = globalAxisPointerModel.get('triggerOn') || globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click'; // Register global listener in AxisPointerView to enable + // AxisPointerView to be independent to Tooltip. + + register('axisPointer', api, function (currTrigger, e, dispatchAction) { + // If 'none', it is not controlled by mouse totally. + if (triggerOn !== 'none' && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0)) { + dispatchAction({ + type: 'updateAxisPointer', + currTrigger: currTrigger, + x: e && e.offsetX, + y: e && e.offsetY + }); + } + }); + }; + + AxisPointerView.prototype.remove = function (ecModel, api) { + unregister('axisPointer', api); + }; + + AxisPointerView.prototype.dispose = function (ecModel, api) { + unregister('axisPointer', api); + }; + + AxisPointerView.type = 'axisPointer'; + return AxisPointerView; + }(ComponentView); + + /** + * @param finder contains {seriesIndex, dataIndex, dataIndexInside} + * @param ecModel + * @return {point: [x, y], el: ...} point Will not be null. + */ + + function findPointFromSeries(finder, ecModel) { + var point = []; + var seriesIndex = finder.seriesIndex; + var seriesModel; + + if (seriesIndex == null || !(seriesModel = ecModel.getSeriesByIndex(seriesIndex))) { + return { + point: [] + }; + } + + var data = seriesModel.getData(); + var dataIndex = queryDataIndex(data, finder); + + if (dataIndex == null || dataIndex < 0 || isArray(dataIndex)) { + return { + point: [] + }; + } + + var el = data.getItemGraphicEl(dataIndex); + var coordSys = seriesModel.coordinateSystem; + + if (seriesModel.getTooltipPosition) { + point = seriesModel.getTooltipPosition(dataIndex) || []; + } else if (coordSys && coordSys.dataToPoint) { + if (finder.isStacked) { + var baseAxis = coordSys.getBaseAxis(); + var valueAxis = coordSys.getOtherAxis(baseAxis); + var valueAxisDim = valueAxis.dim; + var baseAxisDim = baseAxis.dim; + var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0; + var baseDim = data.mapDimension(baseAxisDim); + var stackedData = []; + stackedData[baseDataOffset] = data.get(baseDim, dataIndex); + stackedData[1 - baseDataOffset] = data.get(data.getCalculationInfo('stackResultDimension'), dataIndex); + point = coordSys.dataToPoint(stackedData) || []; + } else { + point = coordSys.dataToPoint(data.getValues(map(coordSys.dimensions, function (dim) { + return data.mapDimension(dim); + }), dataIndex)) || []; + } + } else if (el) { + // Use graphic bounding rect + var rect = el.getBoundingRect().clone(); + rect.applyTransform(el.transform); + point = [rect.x + rect.width / 2, rect.y + rect.height / 2]; + } + + return { + point: point, + el: el + }; + } + + var inner$c = makeInner(); + /** + * Basic logic: check all axis, if they do not demand show/highlight, + * then hide/downplay them. + * + * @return content of event obj for echarts.connect. + */ + + function axisTrigger(payload, ecModel, api) { + var currTrigger = payload.currTrigger; + var point = [payload.x, payload.y]; + var finder = payload; + var dispatchAction = payload.dispatchAction || bind(api.dispatchAction, api); + var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo; // Pending + // See #6121. But we are not able to reproduce it yet. + + if (!coordSysAxesInfo) { + return; + } + + if (illegalPoint(point)) { + // Used in the default behavior of `connection`: use the sample seriesIndex + // and dataIndex. And also used in the tooltipView trigger. + point = findPointFromSeries({ + seriesIndex: finder.seriesIndex, + // Do not use dataIndexInside from other ec instance. + // FIXME: auto detect it? + dataIndex: finder.dataIndex + }, ecModel).point; + } + + var isIllegalPoint = illegalPoint(point); // Axis and value can be specified when calling dispatchAction({type: 'updateAxisPointer'}). + // Notice: In this case, it is difficult to get the `point` (which is necessary to show + // tooltip, so if point is not given, we just use the point found by sample seriesIndex + // and dataIndex. + + var inputAxesInfo = finder.axesInfo; + var axesInfo = coordSysAxesInfo.axesInfo; + var shouldHide = currTrigger === 'leave' || illegalPoint(point); + var outputPayload = {}; + var showValueMap = {}; + var dataByCoordSys = { + list: [], + map: {} + }; + var updaters = { + showPointer: curry(showPointer, showValueMap), + showTooltip: curry(showTooltip, dataByCoordSys) + }; // Process for triggered axes. + + each(coordSysAxesInfo.coordSysMap, function (coordSys, coordSysKey) { + // If a point given, it must be contained by the coordinate system. + var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point); + each(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) { + var axis = axisInfo.axis; + var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo); // If no inputAxesInfo, no axis is restricted. + + if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) { + var val = inputAxisInfo && inputAxisInfo.value; + + if (val == null && !isIllegalPoint) { + val = axis.pointToData(point); + } + + val != null && processOnAxis(axisInfo, val, updaters, false, outputPayload); + } + }); + }); // Process for linked axes. + + var linkTriggers = {}; + each(axesInfo, function (tarAxisInfo, tarKey) { + var linkGroup = tarAxisInfo.linkGroup; // If axis has been triggered in the previous stage, it should not be triggered by link. + + if (linkGroup && !showValueMap[tarKey]) { + each(linkGroup.axesInfo, function (srcAxisInfo, srcKey) { + var srcValItem = showValueMap[srcKey]; // If srcValItem exist, source axis is triggered, so link to target axis. + + if (srcAxisInfo !== tarAxisInfo && srcValItem) { + var val = srcValItem.value; + linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo)))); + linkTriggers[tarAxisInfo.key] = val; + } + }); + } + }); + each(linkTriggers, function (val, tarKey) { + processOnAxis(axesInfo[tarKey], val, updaters, true, outputPayload); + }); + updateModelActually(showValueMap, axesInfo, outputPayload); + dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction); + dispatchHighDownActually(axesInfo, dispatchAction, api); + return outputPayload; + } + + function processOnAxis(axisInfo, newValue, updaters, noSnap, outputFinder) { + var axis = axisInfo.axis; + + if (axis.scale.isBlank() || !axis.containData(newValue)) { + return; + } + + if (!axisInfo.involveSeries) { + updaters.showPointer(axisInfo, newValue); + return; + } // Heavy calculation. So put it after axis.containData checking. + + + var payloadInfo = buildPayloadsBySeries(newValue, axisInfo); + var payloadBatch = payloadInfo.payloadBatch; + var snapToValue = payloadInfo.snapToValue; // Fill content of event obj for echarts.connect. + // By default use the first involved series data as a sample to connect. + + if (payloadBatch[0] && outputFinder.seriesIndex == null) { + extend(outputFinder, payloadBatch[0]); + } // If no linkSource input, this process is for collecting link + // target, where snap should not be accepted. + + + if (!noSnap && axisInfo.snap) { + if (axis.containData(snapToValue) && snapToValue != null) { + newValue = snapToValue; + } + } + + updaters.showPointer(axisInfo, newValue, payloadBatch); // Tooltip should always be snapToValue, otherwise there will be + // incorrect "axis value ~ series value" mapping displayed in tooltip. + + updaters.showTooltip(axisInfo, payloadInfo, snapToValue); + } + + function buildPayloadsBySeries(value, axisInfo) { + var axis = axisInfo.axis; + var dim = axis.dim; + var snapToValue = value; + var payloadBatch = []; + var minDist = Number.MAX_VALUE; + var minDiff = -1; + each(axisInfo.seriesModels, function (series, idx) { + var dataDim = series.getData().mapDimensionsAll(dim); + var seriesNestestValue; + var dataIndices; + + if (series.getAxisTooltipData) { + var result = series.getAxisTooltipData(dataDim, value, axis); + dataIndices = result.dataIndices; + seriesNestestValue = result.nestestValue; + } else { + dataIndices = series.getData().indicesOfNearest(dataDim[0], value, // Add a threshold to avoid find the wrong dataIndex + // when data length is not same. + // false, + axis.type === 'category' ? 0.5 : null); + + if (!dataIndices.length) { + return; + } + + seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]); + } + + if (seriesNestestValue == null || !isFinite(seriesNestestValue)) { + return; + } + + var diff = value - seriesNestestValue; + var dist = Math.abs(diff); // Consider category case + + if (dist <= minDist) { + if (dist < minDist || diff >= 0 && minDiff < 0) { + minDist = dist; + minDiff = diff; + snapToValue = seriesNestestValue; + payloadBatch.length = 0; + } + + each(dataIndices, function (dataIndex) { + payloadBatch.push({ + seriesIndex: series.seriesIndex, + dataIndexInside: dataIndex, + dataIndex: series.getData().getRawIndex(dataIndex) + }); + }); + } + }); + return { + payloadBatch: payloadBatch, + snapToValue: snapToValue + }; + } + + function showPointer(showValueMap, axisInfo, value, payloadBatch) { + showValueMap[axisInfo.key] = { + value: value, + payloadBatch: payloadBatch + }; + } + + function showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) { + var payloadBatch = payloadInfo.payloadBatch; + var axis = axisInfo.axis; + var axisModel = axis.model; + var axisPointerModel = axisInfo.axisPointerModel; // If no data, do not create anything in dataByCoordSys, + // whose length will be used to judge whether dispatch action. + + if (!axisInfo.triggerTooltip || !payloadBatch.length) { + return; + } + + var coordSysModel = axisInfo.coordSys.model; + var coordSysKey = makeKey(coordSysModel); + var coordSysItem = dataByCoordSys.map[coordSysKey]; + + if (!coordSysItem) { + coordSysItem = dataByCoordSys.map[coordSysKey] = { + coordSysId: coordSysModel.id, + coordSysIndex: coordSysModel.componentIndex, + coordSysType: coordSysModel.type, + coordSysMainType: coordSysModel.mainType, + dataByAxis: [] + }; + dataByCoordSys.list.push(coordSysItem); + } + + coordSysItem.dataByAxis.push({ + axisDim: axis.dim, + axisIndex: axisModel.componentIndex, + axisType: axisModel.type, + axisId: axisModel.id, + value: value, + // Caustion: viewHelper.getValueLabel is actually on "view stage", which + // depends that all models have been updated. So it should not be performed + // here. Considering axisPointerModel used here is volatile, which is hard + // to be retrieve in TooltipView, we prepare parameters here. + valueLabelOpt: { + precision: axisPointerModel.get(['label', 'precision']), + formatter: axisPointerModel.get(['label', 'formatter']) + }, + seriesDataIndices: payloadBatch.slice() + }); + } + + function updateModelActually(showValueMap, axesInfo, outputPayload) { + var outputAxesInfo = outputPayload.axesInfo = []; // Basic logic: If no 'show' required, 'hide' this axisPointer. + + each(axesInfo, function (axisInfo, key) { + var option = axisInfo.axisPointerModel.option; + var valItem = showValueMap[key]; + + if (valItem) { + !axisInfo.useHandle && (option.status = 'show'); + option.value = valItem.value; // For label formatter param and highlight. + + option.seriesDataIndices = (valItem.payloadBatch || []).slice(); + } // When always show (e.g., handle used), remain + // original value and status. + else { + // If hide, value still need to be set, consider + // click legend to toggle axis blank. + !axisInfo.useHandle && (option.status = 'hide'); + } // If status is 'hide', should be no info in payload. + + + option.status === 'show' && outputAxesInfo.push({ + axisDim: axisInfo.axis.dim, + axisIndex: axisInfo.axis.model.componentIndex, + value: option.value + }); + }); + } + + function dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) { + // Basic logic: If no showTip required, hideTip will be dispatched. + if (illegalPoint(point) || !dataByCoordSys.list.length) { + dispatchAction({ + type: 'hideTip' + }); + return; + } // In most case only one axis (or event one series is used). It is + // convinient to fetch payload.seriesIndex and payload.dataIndex + // dirtectly. So put the first seriesIndex and dataIndex of the first + // axis on the payload. + + + var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {}; + dispatchAction({ + type: 'showTip', + escapeConnect: true, + x: point[0], + y: point[1], + tooltipOption: payload.tooltipOption, + position: payload.position, + dataIndexInside: sampleItem.dataIndexInside, + dataIndex: sampleItem.dataIndex, + seriesIndex: sampleItem.seriesIndex, + dataByCoordSys: dataByCoordSys.list + }); + } + + function dispatchHighDownActually(axesInfo, dispatchAction, api) { + // FIXME + // highlight status modification shoule be a stage of main process? + // (Consider confilct (e.g., legend and axisPointer) and setOption) + var zr = api.getZr(); + var highDownKey = 'axisPointerLastHighlights'; + var lastHighlights = inner$c(zr)[highDownKey] || {}; + var newHighlights = inner$c(zr)[highDownKey] = {}; // Update highlight/downplay status according to axisPointer model. + // Build hash map and remove duplicate incidentally. + + each(axesInfo, function (axisInfo, key) { + var option = axisInfo.axisPointerModel.option; + option.status === 'show' && each(option.seriesDataIndices, function (batchItem) { + var key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex; + newHighlights[key] = batchItem; + }); + }); // Diff. + + var toHighlight = []; + var toDownplay = []; + each(lastHighlights, function (batchItem, key) { + !newHighlights[key] && toDownplay.push(batchItem); + }); + each(newHighlights, function (batchItem, key) { + !lastHighlights[key] && toHighlight.push(batchItem); + }); + toDownplay.length && api.dispatchAction({ + type: 'downplay', + escapeConnect: true, + // Not blur others when highlight in axisPointer. + notBlur: true, + batch: toDownplay + }); + toHighlight.length && api.dispatchAction({ + type: 'highlight', + escapeConnect: true, + // Not blur others when highlight in axisPointer. + notBlur: true, + batch: toHighlight + }); + } + + function findInputAxisInfo(inputAxesInfo, axisInfo) { + for (var i = 0; i < (inputAxesInfo || []).length; i++) { + var inputAxisInfo = inputAxesInfo[i]; + + if (axisInfo.axis.dim === inputAxisInfo.axisDim && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex) { + return inputAxisInfo; + } + } + } + + function makeMapperParam(axisInfo) { + var axisModel = axisInfo.axis.model; + var item = {}; + var dim = item.axisDim = axisInfo.axis.dim; + item.axisIndex = item[dim + 'AxisIndex'] = axisModel.componentIndex; + item.axisName = item[dim + 'AxisName'] = axisModel.name; + item.axisId = item[dim + 'AxisId'] = axisModel.id; + return item; + } + + function illegalPoint(point) { + return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]); + } + + function install$s(registers) { + // CartesianAxisPointer is not supposed to be required here. But consider + // echarts.simple.js and online build tooltip, which only require gridSimple, + // CartesianAxisPointer should be able to required somewhere. + AxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer); + registers.registerComponentModel(AxisPointerModel); + registers.registerComponentView(AxisPointerView); + registers.registerPreprocessor(function (option) { + // Always has a global axisPointerModel for default setting. + if (option) { + (!option.axisPointer || option.axisPointer.length === 0) && (option.axisPointer = {}); + var link = option.axisPointer.link; // Normalize to array to avoid object mergin. But if link + // is not set, remain null/undefined, otherwise it will + // override existent link setting. + + if (link && !isArray(link)) { + option.axisPointer.link = [link]; + } + } + }); // This process should proformed after coordinate systems created + // and series data processed. So put it on statistic processing stage. + + registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, function (ecModel, api) { + // Build axisPointerModel, mergin tooltip.axisPointer model for each axis. + // allAxesInfo should be updated when setOption performed. + ecModel.getComponent('axisPointer').coordSysAxesInfo = collect(ecModel, api); + }); // Broadcast to all views. + + registers.registerAction({ + type: 'updateAxisPointer', + event: 'updateAxisPointer', + update: ':updateAxisPointer' + }, axisTrigger); + } + + function install$t(registers) { + use(install$5); + use(install$s); + } + + var PolarAxisPointer = + /** @class */ + function (_super) { + __extends(PolarAxisPointer, _super); + + function PolarAxisPointer() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @override + */ + + + PolarAxisPointer.prototype.makeElOption = function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + + if (axis.dim === 'angle') { + this.animationThreshold = Math.PI / 18; + } + + var polar = axis.polar; + var otherAxis = polar.getOtherAxis(axis); + var otherExtent = otherAxis.getExtent(); + var coordValue = axis.dataToCoord(value); + var axisPointerType = axisPointerModel.get('type'); + + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder$1[axisPointerType](axis, polar, coordValue, otherExtent); + pointerOption.style = elStyle; + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var labelMargin = axisPointerModel.get(['label', 'margin']); + var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin); + buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos); + }; + + return PolarAxisPointer; + }(BaseAxisPointer); + + function getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) { + var axis = axisModel.axis; + var coord = axis.dataToCoord(value); + var axisAngle = polar.getAngleAxis().getExtent()[0]; + axisAngle = axisAngle / 180 * Math.PI; + var radiusExtent = polar.getRadiusAxis().getExtent(); + var position; + var align; + var verticalAlign; + + if (axis.dim === 'radius') { + var transform = create$1(); + rotate(transform, transform, axisAngle); + translate(transform, transform, [polar.cx, polar.cy]); + position = applyTransform$1([coord, -labelMargin], transform); + var labelRotation = axisModel.getModel('axisLabel').get('rotate') || 0; // @ts-ignore + + var labelLayout = AxisBuilder.innerTextLayout(axisAngle, labelRotation * Math.PI / 180, -1); + align = labelLayout.textAlign; + verticalAlign = labelLayout.textVerticalAlign; + } else { + // angle axis + var r = radiusExtent[1]; + position = polar.coordToPoint([r + labelMargin, coord]); + var cx = polar.cx; + var cy = polar.cy; + align = Math.abs(position[0] - cx) / r < 0.3 ? 'center' : position[0] > cx ? 'left' : 'right'; + verticalAlign = Math.abs(position[1] - cy) / r < 0.3 ? 'middle' : position[1] > cy ? 'top' : 'bottom'; + } + + return { + position: position, + align: align, + verticalAlign: verticalAlign + }; + } + + var pointerShapeBuilder$1 = { + line: function (axis, polar, coordValue, otherExtent) { + return axis.dim === 'angle' ? { + type: 'Line', + shape: makeLineShape(polar.coordToPoint([otherExtent[0], coordValue]), polar.coordToPoint([otherExtent[1], coordValue])) + } : { + type: 'Circle', + shape: { + cx: polar.cx, + cy: polar.cy, + r: coordValue + } + }; + }, + shadow: function (axis, polar, coordValue, otherExtent) { + var bandWidth = Math.max(1, axis.getBandWidth()); + var radian = Math.PI / 180; + return axis.dim === 'angle' ? { + type: 'Sector', + shape: makeSectorShape(polar.cx, polar.cy, otherExtent[0], otherExtent[1], // In ECharts y is negative if angle is positive + (-coordValue - bandWidth / 2) * radian, (-coordValue + bandWidth / 2) * radian) + } : { + type: 'Sector', + shape: makeSectorShape(polar.cx, polar.cy, coordValue - bandWidth / 2, coordValue + bandWidth / 2, 0, Math.PI * 2) + }; + } + }; + + var PolarModel = + /** @class */ + function (_super) { + __extends(PolarModel, _super); + + function PolarModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = PolarModel.type; + return _this; + } + + PolarModel.prototype.findAxisModel = function (axisType) { + var foundAxisModel; + var ecModel = this.ecModel; + ecModel.eachComponent(axisType, function (axisModel) { + if (axisModel.getCoordSysModel() === this) { + foundAxisModel = axisModel; + } + }, this); + return foundAxisModel; + }; + + PolarModel.type = 'polar'; + PolarModel.dependencies = ['radiusAxis', 'angleAxis']; + PolarModel.defaultOption = { + zlevel: 0, + z: 0, + center: ['50%', '50%'], + radius: '80%' + }; + return PolarModel; + }(ComponentModel); + + var PolarAxisModel = + /** @class */ + function (_super) { + __extends(PolarAxisModel, _super); + + function PolarAxisModel() { + return _super !== null && _super.apply(this, arguments) || this; + } + + PolarAxisModel.prototype.getCoordSysModel = function () { + return this.getReferringComponents('polar', SINGLE_REFERRING).models[0]; + }; + + PolarAxisModel.type = 'polarAxis'; + return PolarAxisModel; + }(ComponentModel); + + mixin(PolarAxisModel, AxisModelCommonMixin); + + var AngleAxisModel = + /** @class */ + function (_super) { + __extends(AngleAxisModel, _super); + + function AngleAxisModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = AngleAxisModel.type; + return _this; + } + + AngleAxisModel.type = 'angleAxis'; + return AngleAxisModel; + }(PolarAxisModel); + + var RadiusAxisModel = + /** @class */ + function (_super) { + __extends(RadiusAxisModel, _super); + + function RadiusAxisModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = RadiusAxisModel.type; + return _this; + } + + RadiusAxisModel.type = 'radiusAxis'; + return RadiusAxisModel; + }(PolarAxisModel); + + var RadiusAxis = + /** @class */ + function (_super) { + __extends(RadiusAxis, _super); + + function RadiusAxis(scale, radiusExtent) { + return _super.call(this, 'radius', scale, radiusExtent) || this; + } + + RadiusAxis.prototype.pointToData = function (point, clamp) { + return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1]; + }; + + return RadiusAxis; + }(Axis); + + RadiusAxis.prototype.dataToRadius = Axis.prototype.dataToCoord; + RadiusAxis.prototype.radiusToData = Axis.prototype.coordToData; + + var inner$d = makeInner(); + + var AngleAxis = + /** @class */ + function (_super) { + __extends(AngleAxis, _super); + + function AngleAxis(scale, angleExtent) { + return _super.call(this, 'angle', scale, angleExtent || [0, 360]) || this; + } + + AngleAxis.prototype.pointToData = function (point, clamp) { + return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1]; + }; + /** + * Only be called in category axis. + * Angle axis uses text height to decide interval + * + * @override + * @return {number} Auto interval for cateogry axis tick and label + */ + + + AngleAxis.prototype.calculateCategoryInterval = function () { + var axis = this; + var labelModel = axis.getLabelModel(); + var ordinalScale = axis.scale; + var ordinalExtent = ordinalScale.getExtent(); // Providing this method is for optimization: + // avoid generating a long array by `getTicks` + // in large category data case. + + var tickCount = ordinalScale.count(); + + if (ordinalExtent[1] - ordinalExtent[0] < 1) { + return 0; + } + + var tickValue = ordinalExtent[0]; + var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue); + var unitH = Math.abs(unitSpan); // Not precise, just use height as text width + // and each distance from axis line yet. + + var rect = getBoundingRect(tickValue == null ? '' : tickValue + '', labelModel.getFont(), 'center', 'top'); + var maxH = Math.max(rect.height, 7); + var dh = maxH / unitH; // 0/0 is NaN, 1/0 is Infinity. + + isNaN(dh) && (dh = Infinity); + var interval = Math.max(0, Math.floor(dh)); + var cache = inner$d(axis.model); + var lastAutoInterval = cache.lastAutoInterval; + var lastTickCount = cache.lastTickCount; // Use cache to keep interval stable while moving zoom window, + // otherwise the calculated interval might jitter when the zoom + // window size is close to the interval-changing size. + + if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1 // Always choose the bigger one, otherwise the critical + // point is not the same when zooming in or zooming out. + && lastAutoInterval > interval) { + interval = lastAutoInterval; + } // Only update cache if cache not used, otherwise the + // changing of interval is too insensitive. + else { + cache.lastTickCount = tickCount; + cache.lastAutoInterval = interval; + } + + return interval; + }; + + return AngleAxis; + }(Axis); + + AngleAxis.prototype.dataToAngle = Axis.prototype.dataToCoord; + AngleAxis.prototype.angleToData = Axis.prototype.coordToData; + + var polarDimensions = ['radius', 'angle']; + + var Polar = + /** @class */ + function () { + function Polar(name) { + this.dimensions = polarDimensions; + this.type = 'polar'; + /** + * x of polar center + */ + + this.cx = 0; + /** + * y of polar center + */ + + this.cy = 0; + this._radiusAxis = new RadiusAxis(); + this._angleAxis = new AngleAxis(); + this.axisPointerEnabled = true; + this.name = name || ''; + this._radiusAxis.polar = this._angleAxis.polar = this; + } + /** + * If contain coord + */ + + + Polar.prototype.containPoint = function (point) { + var coord = this.pointToCoord(point); + return this._radiusAxis.contain(coord[0]) && this._angleAxis.contain(coord[1]); + }; + /** + * If contain data + */ + + + Polar.prototype.containData = function (data) { + return this._radiusAxis.containData(data[0]) && this._angleAxis.containData(data[1]); + }; + + Polar.prototype.getAxis = function (dim) { + var key = '_' + dim + 'Axis'; + return this[key]; + }; + + Polar.prototype.getAxes = function () { + return [this._radiusAxis, this._angleAxis]; + }; + /** + * Get axes by type of scale + */ + + + Polar.prototype.getAxesByScale = function (scaleType) { + var axes = []; + var angleAxis = this._angleAxis; + var radiusAxis = this._radiusAxis; + angleAxis.scale.type === scaleType && axes.push(angleAxis); + radiusAxis.scale.type === scaleType && axes.push(radiusAxis); + return axes; + }; + + Polar.prototype.getAngleAxis = function () { + return this._angleAxis; + }; + + Polar.prototype.getRadiusAxis = function () { + return this._radiusAxis; + }; + + Polar.prototype.getOtherAxis = function (axis) { + var angleAxis = this._angleAxis; + return axis === angleAxis ? this._radiusAxis : angleAxis; + }; + /** + * Base axis will be used on stacking. + * + */ + + + Polar.prototype.getBaseAxis = function () { + return this.getAxesByScale('ordinal')[0] || this.getAxesByScale('time')[0] || this.getAngleAxis(); + }; + + Polar.prototype.getTooltipAxes = function (dim) { + var baseAxis = dim != null && dim !== 'auto' ? this.getAxis(dim) : this.getBaseAxis(); + return { + baseAxes: [baseAxis], + otherAxes: [this.getOtherAxis(baseAxis)] + }; + }; + /** + * Convert a single data item to (x, y) point. + * Parameter data is an array which the first element is radius and the second is angle + */ + + + Polar.prototype.dataToPoint = function (data, clamp) { + return this.coordToPoint([this._radiusAxis.dataToRadius(data[0], clamp), this._angleAxis.dataToAngle(data[1], clamp)]); + }; + /** + * Convert a (x, y) point to data + */ + + + Polar.prototype.pointToData = function (point, clamp) { + var coord = this.pointToCoord(point); + return [this._radiusAxis.radiusToData(coord[0], clamp), this._angleAxis.angleToData(coord[1], clamp)]; + }; + /** + * Convert a (x, y) point to (radius, angle) coord + */ + + + Polar.prototype.pointToCoord = function (point) { + var dx = point[0] - this.cx; + var dy = point[1] - this.cy; + var angleAxis = this.getAngleAxis(); + var extent = angleAxis.getExtent(); + var minAngle = Math.min(extent[0], extent[1]); + var maxAngle = Math.max(extent[0], extent[1]); // Fix fixed extent in polarCreator + // FIXME + + angleAxis.inverse ? minAngle = maxAngle - 360 : maxAngle = minAngle + 360; + var radius = Math.sqrt(dx * dx + dy * dy); + dx /= radius; + dy /= radius; + var radian = Math.atan2(-dy, dx) / Math.PI * 180; // move to angleExtent + + var dir = radian < minAngle ? 1 : -1; + + while (radian < minAngle || radian > maxAngle) { + radian += dir * 360; + } + + return [radius, radian]; + }; + /** + * Convert a (radius, angle) coord to (x, y) point + */ + + + Polar.prototype.coordToPoint = function (coord) { + var radius = coord[0]; + var radian = coord[1] / 180 * Math.PI; + var x = Math.cos(radian) * radius + this.cx; // Inverse the y + + var y = -Math.sin(radian) * radius + this.cy; + return [x, y]; + }; + /** + * Get ring area of cartesian. + * Area will have a contain function to determine if a point is in the coordinate system. + */ + + + Polar.prototype.getArea = function () { + var angleAxis = this.getAngleAxis(); + var radiusAxis = this.getRadiusAxis(); + var radiusExtent = radiusAxis.getExtent().slice(); + radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse(); + var angleExtent = angleAxis.getExtent(); + var RADIAN = Math.PI / 180; + return { + cx: this.cx, + cy: this.cy, + r0: radiusExtent[0], + r: radiusExtent[1], + startAngle: -angleExtent[0] * RADIAN, + endAngle: -angleExtent[1] * RADIAN, + clockwise: angleAxis.inverse, + contain: function (x, y) { + // It's a ring shape. + // Start angle and end angle don't matter + var dx = x - this.cx; + var dy = y - this.cy; + var d2 = dx * dx + dy * dy; + var r = this.r; + var r0 = this.r0; + return d2 <= r * r && d2 >= r0 * r0; + } + }; + }; + + Polar.prototype.convertToPixel = function (ecModel, finder, value) { + var coordSys = getCoordSys$2(finder); + return coordSys === this ? this.dataToPoint(value) : null; + }; + + Polar.prototype.convertFromPixel = function (ecModel, finder, pixel) { + var coordSys = getCoordSys$2(finder); + return coordSys === this ? this.pointToData(pixel) : null; + }; + + return Polar; + }(); + + function getCoordSys$2(finder) { + var seriesModel = finder.seriesModel; + var polarModel = finder.polarModel; + return polarModel && polarModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem; + } + + /** + * Resize method bound to the polar + */ + + function resizePolar(polar, polarModel, api) { + var center = polarModel.get('center'); + var width = api.getWidth(); + var height = api.getHeight(); + polar.cx = parsePercent$1(center[0], width); + polar.cy = parsePercent$1(center[1], height); + var radiusAxis = polar.getRadiusAxis(); + var size = Math.min(width, height) / 2; + var radius = polarModel.get('radius'); + + if (radius == null) { + radius = [0, '100%']; + } else if (!isArray(radius)) { + // r0 = 0 + radius = [0, radius]; + } + + var parsedRadius = [parsePercent$1(radius[0], size), parsePercent$1(radius[1], size)]; + radiusAxis.inverse ? radiusAxis.setExtent(parsedRadius[1], parsedRadius[0]) : radiusAxis.setExtent(parsedRadius[0], parsedRadius[1]); + } + /** + * Update polar + */ + + + function updatePolarScale(ecModel, api) { + var polar = this; + var angleAxis = polar.getAngleAxis(); + var radiusAxis = polar.getRadiusAxis(); // Reset scale + + angleAxis.scale.setExtent(Infinity, -Infinity); + radiusAxis.scale.setExtent(Infinity, -Infinity); + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.coordinateSystem === polar) { + var data_1 = seriesModel.getData(); + each(getDataDimensionsOnAxis(data_1, 'radius'), function (dim) { + radiusAxis.scale.unionExtentFromData(data_1, dim); + }); + each(getDataDimensionsOnAxis(data_1, 'angle'), function (dim) { + angleAxis.scale.unionExtentFromData(data_1, dim); + }); + } + }); + niceScaleExtent(angleAxis.scale, angleAxis.model); + niceScaleExtent(radiusAxis.scale, radiusAxis.model); // Fix extent of category angle axis + + if (angleAxis.type === 'category' && !angleAxis.onBand) { + var extent = angleAxis.getExtent(); + var diff = 360 / angleAxis.scale.count(); + angleAxis.inverse ? extent[1] += diff : extent[1] -= diff; + angleAxis.setExtent(extent[0], extent[1]); + } + } + + function isAngleAxisModel(axisModel) { + return axisModel.mainType === 'angleAxis'; + } + /** + * Set common axis properties + */ + + + function setAxis(axis, axisModel) { + axis.type = axisModel.get('type'); + axis.scale = createScaleByModel(axisModel); + axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category'; + axis.inverse = axisModel.get('inverse'); + + if (isAngleAxisModel(axisModel)) { + axis.inverse = axis.inverse !== axisModel.get('clockwise'); + var startAngle = axisModel.get('startAngle'); + axis.setExtent(startAngle, startAngle + (axis.inverse ? -360 : 360)); + } // Inject axis instance + + + axisModel.axis = axis; + axis.model = axisModel; + } + + var polarCreator = { + dimensions: polarDimensions, + create: function (ecModel, api) { + var polarList = []; + ecModel.eachComponent('polar', function (polarModel, idx) { + var polar = new Polar(idx + ''); // Inject resize and update method + + polar.update = updatePolarScale; + var radiusAxis = polar.getRadiusAxis(); + var angleAxis = polar.getAngleAxis(); + var radiusAxisModel = polarModel.findAxisModel('radiusAxis'); + var angleAxisModel = polarModel.findAxisModel('angleAxis'); + setAxis(radiusAxis, radiusAxisModel); + setAxis(angleAxis, angleAxisModel); + resizePolar(polar, polarModel, api); + polarList.push(polar); + polarModel.coordinateSystem = polar; + polar.model = polarModel; + }); // Inject coordinateSystem to series + + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'polar') { + var polarModel = seriesModel.getReferringComponents('polar', SINGLE_REFERRING).models[0]; + + if ("development" !== 'production') { + if (!polarModel) { + throw new Error('Polar "' + retrieve(seriesModel.get('polarIndex'), seriesModel.get('polarId'), 0) + '" not found'); + } + } + + seriesModel.coordinateSystem = polarModel.coordinateSystem; + } + }); + return polarList; + } + }; + + var elementList$1 = ['axisLine', 'axisLabel', 'axisTick', 'minorTick', 'splitLine', 'minorSplitLine', 'splitArea']; + + function getAxisLineShape(polar, rExtent, angle) { + rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse()); + var start = polar.coordToPoint([rExtent[0], angle]); + var end = polar.coordToPoint([rExtent[1], angle]); + return { + x1: start[0], + y1: start[1], + x2: end[0], + y2: end[1] + }; + } + + function getRadiusIdx(polar) { + var radiusAxis = polar.getRadiusAxis(); + return radiusAxis.inverse ? 0 : 1; + } // Remove the last tick which will overlap the first tick + + + function fixAngleOverlap(list) { + var firstItem = list[0]; + var lastItem = list[list.length - 1]; + + if (firstItem && lastItem && Math.abs(Math.abs(firstItem.coord - lastItem.coord) - 360) < 1e-4) { + list.pop(); + } + } + + var AngleAxisView = + /** @class */ + function (_super) { + __extends(AngleAxisView, _super); + + function AngleAxisView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = AngleAxisView.type; + _this.axisPointerClass = 'PolarAxisPointer'; + return _this; + } + + AngleAxisView.prototype.render = function (angleAxisModel, ecModel) { + this.group.removeAll(); + + if (!angleAxisModel.get('show')) { + return; + } + + var angleAxis = angleAxisModel.axis; + var polar = angleAxis.polar; + var radiusExtent = polar.getRadiusAxis().getExtent(); + var ticksAngles = angleAxis.getTicksCoords(); + var minorTickAngles = angleAxis.getMinorTicksCoords(); + var labels = map(angleAxis.getViewLabels(), function (labelItem) { + labelItem = clone(labelItem); + var scale = angleAxis.scale; + var tickValue = scale.type === 'ordinal' ? scale.getRawOrdinalNumber(labelItem.tickValue) : labelItem.tickValue; + labelItem.coord = angleAxis.dataToCoord(tickValue); + return labelItem; + }); + fixAngleOverlap(labels); + fixAngleOverlap(ticksAngles); + each(elementList$1, function (name) { + if (angleAxisModel.get([name, 'show']) && (!angleAxis.scale.isBlank() || name === 'axisLine')) { + angelAxisElementsBuilders[name](this.group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels); + } + }, this); + }; + + AngleAxisView.type = 'angleAxis'; + return AngleAxisView; + }(AxisView); + + var angelAxisElementsBuilders = { + axisLine: function (group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { + var lineStyleModel = angleAxisModel.getModel(['axisLine', 'lineStyle']); // extent id of the axis radius (r0 and r) + + var rId = getRadiusIdx(polar); + var r0Id = rId ? 0 : 1; + var shape; + + if (radiusExtent[r0Id] === 0) { + shape = new Circle({ + shape: { + cx: polar.cx, + cy: polar.cy, + r: radiusExtent[rId] + }, + style: lineStyleModel.getLineStyle(), + z2: 1, + silent: true + }); + } else { + shape = new Ring({ + shape: { + cx: polar.cx, + cy: polar.cy, + r: radiusExtent[rId], + r0: radiusExtent[r0Id] + }, + style: lineStyleModel.getLineStyle(), + z2: 1, + silent: true + }); + } + + shape.style.fill = null; + group.add(shape); + }, + axisTick: function (group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { + var tickModel = angleAxisModel.getModel('axisTick'); + var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length'); + var radius = radiusExtent[getRadiusIdx(polar)]; + var lines = map(ticksAngles, function (tickAngleItem) { + return new Line({ + shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngleItem.coord) + }); + }); + group.add(mergePath$1(lines, { + style: defaults(tickModel.getModel('lineStyle').getLineStyle(), { + stroke: angleAxisModel.get(['axisLine', 'lineStyle', 'color']) + }) + })); + }, + minorTick: function (group, angleAxisModel, polar, tickAngles, minorTickAngles, radiusExtent) { + if (!minorTickAngles.length) { + return; + } + + var tickModel = angleAxisModel.getModel('axisTick'); + var minorTickModel = angleAxisModel.getModel('minorTick'); + var tickLen = (tickModel.get('inside') ? -1 : 1) * minorTickModel.get('length'); + var radius = radiusExtent[getRadiusIdx(polar)]; + var lines = []; + + for (var i = 0; i < minorTickAngles.length; i++) { + for (var k = 0; k < minorTickAngles[i].length; k++) { + lines.push(new Line({ + shape: getAxisLineShape(polar, [radius, radius + tickLen], minorTickAngles[i][k].coord) + })); + } + } + + group.add(mergePath$1(lines, { + style: defaults(minorTickModel.getModel('lineStyle').getLineStyle(), defaults(tickModel.getLineStyle(), { + stroke: angleAxisModel.get(['axisLine', 'lineStyle', 'color']) + })) + })); + }, + axisLabel: function (group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels) { + var rawCategoryData = angleAxisModel.getCategories(true); + var commonLabelModel = angleAxisModel.getModel('axisLabel'); + var labelMargin = commonLabelModel.get('margin'); + var triggerEvent = angleAxisModel.get('triggerEvent'); // Use length of ticksAngles because it may remove the last tick to avoid overlapping + + each(labels, function (labelItem, idx) { + var labelModel = commonLabelModel; + var tickValue = labelItem.tickValue; + var r = radiusExtent[getRadiusIdx(polar)]; + var p = polar.coordToPoint([r + labelMargin, labelItem.coord]); + var cx = polar.cx; + var cy = polar.cy; + var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3 ? 'center' : p[0] > cx ? 'left' : 'right'; + var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3 ? 'middle' : p[1] > cy ? 'top' : 'bottom'; + + if (rawCategoryData && rawCategoryData[tickValue]) { + var rawCategoryItem = rawCategoryData[tickValue]; + + if (isObject(rawCategoryItem) && rawCategoryItem.textStyle) { + labelModel = new Model(rawCategoryItem.textStyle, commonLabelModel, commonLabelModel.ecModel); + } + } + + var textEl = new ZRText({ + silent: AxisBuilder.isLabelSilent(angleAxisModel), + style: createTextStyle(labelModel, { + x: p[0], + y: p[1], + fill: labelModel.getTextColor() || angleAxisModel.get(['axisLine', 'lineStyle', 'color']), + text: labelItem.formattedLabel, + align: labelTextAlign, + verticalAlign: labelTextVerticalAlign + }) + }); + group.add(textEl); // Pack data for mouse event + + if (triggerEvent) { + var eventData = AxisBuilder.makeAxisEventDataBase(angleAxisModel); + eventData.targetType = 'axisLabel'; + eventData.value = labelItem.rawLabel; + getECData(textEl).eventData = eventData; + } + }, this); + }, + splitLine: function (group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { + var splitLineModel = angleAxisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + var lineCount = 0; + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + var splitLines = []; + + for (var i = 0; i < ticksAngles.length; i++) { + var colorIndex = lineCount++ % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Line({ + shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i].coord) + })); + } // Simple optimization + // Batching the lines if color are the same + + + for (var i = 0; i < splitLines.length; i++) { + group.add(mergePath$1(splitLines[i], { + style: defaults({ + stroke: lineColors[i % lineColors.length] + }, lineStyleModel.getLineStyle()), + silent: true, + z: angleAxisModel.get('z') + })); + } + }, + minorSplitLine: function (group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { + if (!minorTickAngles.length) { + return; + } + + var minorSplitLineModel = angleAxisModel.getModel('minorSplitLine'); + var lineStyleModel = minorSplitLineModel.getModel('lineStyle'); + var lines = []; + + for (var i = 0; i < minorTickAngles.length; i++) { + for (var k = 0; k < minorTickAngles[i].length; k++) { + lines.push(new Line({ + shape: getAxisLineShape(polar, radiusExtent, minorTickAngles[i][k].coord) + })); + } + } + + group.add(mergePath$1(lines, { + style: lineStyleModel.getLineStyle(), + silent: true, + z: angleAxisModel.get('z') + })); + }, + splitArea: function (group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) { + if (!ticksAngles.length) { + return; + } + + var splitAreaModel = angleAxisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + var lineCount = 0; + areaColors = areaColors instanceof Array ? areaColors : [areaColors]; + var splitAreas = []; + var RADIAN = Math.PI / 180; + var prevAngle = -ticksAngles[0].coord * RADIAN; + var r0 = Math.min(radiusExtent[0], radiusExtent[1]); + var r1 = Math.max(radiusExtent[0], radiusExtent[1]); + var clockwise = angleAxisModel.get('clockwise'); + + for (var i = 1, len = ticksAngles.length; i <= len; i++) { + var coord = i === len ? ticksAngles[0].coord : ticksAngles[i].coord; + var colorIndex = lineCount++ % areaColors.length; + splitAreas[colorIndex] = splitAreas[colorIndex] || []; + splitAreas[colorIndex].push(new Sector({ + shape: { + cx: polar.cx, + cy: polar.cy, + r0: r0, + r: r1, + startAngle: prevAngle, + endAngle: -coord * RADIAN, + clockwise: clockwise + }, + silent: true + })); + prevAngle = -coord * RADIAN; + } // Simple optimization + // Batching the lines if color are the same + + + for (var i = 0; i < splitAreas.length; i++) { + group.add(mergePath$1(splitAreas[i], { + style: defaults({ + fill: areaColors[i % areaColors.length] + }, areaStyleModel.getAreaStyle()), + silent: true + })); + } + } + }; + + var axisBuilderAttrs$2 = ['axisLine', 'axisTickLabel', 'axisName']; + var selfBuilderAttrs$1 = ['splitLine', 'splitArea', 'minorSplitLine']; + + var RadiusAxisView = + /** @class */ + function (_super) { + __extends(RadiusAxisView, _super); + + function RadiusAxisView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = RadiusAxisView.type; + _this.axisPointerClass = 'PolarAxisPointer'; + return _this; + } + + RadiusAxisView.prototype.render = function (radiusAxisModel, ecModel) { + this.group.removeAll(); + + if (!radiusAxisModel.get('show')) { + return; + } + + var oldAxisGroup = this._axisGroup; + var newAxisGroup = this._axisGroup = new Group(); + this.group.add(newAxisGroup); + var radiusAxis = radiusAxisModel.axis; + var polar = radiusAxis.polar; + var angleAxis = polar.getAngleAxis(); + var ticksCoords = radiusAxis.getTicksCoords(); + var minorTicksCoords = radiusAxis.getMinorTicksCoords(); + var axisAngle = angleAxis.getExtent()[0]; + var radiusExtent = radiusAxis.getExtent(); + var layout = layoutAxis(polar, radiusAxisModel, axisAngle); + var axisBuilder = new AxisBuilder(radiusAxisModel, layout); + each(axisBuilderAttrs$2, axisBuilder.add, axisBuilder); + newAxisGroup.add(axisBuilder.getGroup()); + groupTransition(oldAxisGroup, newAxisGroup, radiusAxisModel); + each(selfBuilderAttrs$1, function (name) { + if (radiusAxisModel.get([name, 'show']) && !radiusAxis.scale.isBlank()) { + axisElementBuilders$1[name](this.group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords); + } + }, this); + }; + + RadiusAxisView.type = 'radiusAxis'; + return RadiusAxisView; + }(AxisView); + + var axisElementBuilders$1 = { + splitLine: function (group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) { + var splitLineModel = radiusAxisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + var lineCount = 0; + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + var splitLines = []; + + for (var i = 0; i < ticksCoords.length; i++) { + var colorIndex = lineCount++ % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Circle({ + shape: { + cx: polar.cx, + cy: polar.cy, + r: ticksCoords[i].coord + } + })); + } // Simple optimization + // Batching the lines if color are the same + + + for (var i = 0; i < splitLines.length; i++) { + group.add(mergePath$1(splitLines[i], { + style: defaults({ + stroke: lineColors[i % lineColors.length], + fill: null + }, lineStyleModel.getLineStyle()), + silent: true + })); + } + }, + minorSplitLine: function (group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords) { + if (!minorTicksCoords.length) { + return; + } + + var minorSplitLineModel = radiusAxisModel.getModel('minorSplitLine'); + var lineStyleModel = minorSplitLineModel.getModel('lineStyle'); + var lines = []; + + for (var i = 0; i < minorTicksCoords.length; i++) { + for (var k = 0; k < minorTicksCoords[i].length; k++) { + lines.push(new Circle({ + shape: { + cx: polar.cx, + cy: polar.cy, + r: minorTicksCoords[i][k].coord + } + })); + } + } + + group.add(mergePath$1(lines, { + style: defaults({ + fill: null + }, lineStyleModel.getLineStyle()), + silent: true + })); + }, + splitArea: function (group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) { + if (!ticksCoords.length) { + return; + } + + var splitAreaModel = radiusAxisModel.getModel('splitArea'); + var areaStyleModel = splitAreaModel.getModel('areaStyle'); + var areaColors = areaStyleModel.get('color'); + var lineCount = 0; + areaColors = areaColors instanceof Array ? areaColors : [areaColors]; + var splitAreas = []; + var prevRadius = ticksCoords[0].coord; + + for (var i = 1; i < ticksCoords.length; i++) { + var colorIndex = lineCount++ % areaColors.length; + splitAreas[colorIndex] = splitAreas[colorIndex] || []; + splitAreas[colorIndex].push(new Sector({ + shape: { + cx: polar.cx, + cy: polar.cy, + r0: prevRadius, + r: ticksCoords[i].coord, + startAngle: 0, + endAngle: Math.PI * 2 + }, + silent: true + })); + prevRadius = ticksCoords[i].coord; + } // Simple optimization + // Batching the lines if color are the same + + + for (var i = 0; i < splitAreas.length; i++) { + group.add(mergePath$1(splitAreas[i], { + style: defaults({ + fill: areaColors[i % areaColors.length] + }, areaStyleModel.getAreaStyle()), + silent: true + })); + } + } + }; + /** + * @inner + */ + + function layoutAxis(polar, radiusAxisModel, axisAngle) { + return { + position: [polar.cx, polar.cy], + rotation: axisAngle / 180 * Math.PI, + labelDirection: -1, + tickDirection: -1, + nameDirection: 1, + labelRotate: radiusAxisModel.getModel('axisLabel').get('rotate'), + // Over splitLine and splitArea + z2: 1 + }; + } + + function getSeriesStackId$1(seriesModel) { + return seriesModel.get('stack') || '__ec_stack_' + seriesModel.seriesIndex; + } + + function getAxisKey$1(polar, axis) { + return axis.dim + polar.model.componentIndex; + } + + function barLayoutPolar(seriesType, ecModel, api) { + var lastStackCoords = {}; + var barWidthAndOffset = calRadialBar(filter(ecModel.getSeriesByType(seriesType), function (seriesModel) { + return !ecModel.isSeriesFiltered(seriesModel) && seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'polar'; + })); + ecModel.eachSeriesByType(seriesType, function (seriesModel) { + // Check series coordinate, do layout for polar only + if (seriesModel.coordinateSystem.type !== 'polar') { + return; + } + + var data = seriesModel.getData(); + var polar = seriesModel.coordinateSystem; + var baseAxis = polar.getBaseAxis(); + var axisKey = getAxisKey$1(polar, baseAxis); + var stackId = getSeriesStackId$1(seriesModel); + var columnLayoutInfo = barWidthAndOffset[axisKey][stackId]; + var columnOffset = columnLayoutInfo.offset; + var columnWidth = columnLayoutInfo.width; + var valueAxis = polar.getOtherAxis(baseAxis); + var cx = seriesModel.coordinateSystem.cx; + var cy = seriesModel.coordinateSystem.cy; + var barMinHeight = seriesModel.get('barMinHeight') || 0; + var barMinAngle = seriesModel.get('barMinAngle') || 0; + lastStackCoords[stackId] = lastStackCoords[stackId] || []; + var valueDim = data.mapDimension(valueAxis.dim); + var baseDim = data.mapDimension(baseAxis.dim); + var stacked = isDimensionStacked(data, valueDim + /*, baseDim*/ + ); + var clampLayout = baseAxis.dim !== 'radius' || !seriesModel.get('roundCap', true); + var valueAxisStart = valueAxis.dataToCoord(0); + + for (var idx = 0, len = data.count(); idx < len; idx++) { + var value = data.get(valueDim, idx); + var baseValue = data.get(baseDim, idx); + var sign = value >= 0 ? 'p' : 'n'; + var baseCoord = valueAxisStart; // Because of the barMinHeight, we can not use the value in + // stackResultDimension directly. + // Only ordinal axis can be stacked. + + if (stacked) { + if (!lastStackCoords[stackId][baseValue]) { + lastStackCoords[stackId][baseValue] = { + p: valueAxisStart, + n: valueAxisStart // Negative stack + + }; + } // Should also consider #4243 + + + baseCoord = lastStackCoords[stackId][baseValue][sign]; + } + + var r0 = void 0; + var r = void 0; + var startAngle = void 0; + var endAngle = void 0; // radial sector + + if (valueAxis.dim === 'radius') { + var radiusSpan = valueAxis.dataToCoord(value) - valueAxisStart; + var angle = baseAxis.dataToCoord(baseValue); + + if (Math.abs(radiusSpan) < barMinHeight) { + radiusSpan = (radiusSpan < 0 ? -1 : 1) * barMinHeight; + } + + r0 = baseCoord; + r = baseCoord + radiusSpan; + startAngle = angle - columnOffset; + endAngle = startAngle - columnWidth; + stacked && (lastStackCoords[stackId][baseValue][sign] = r); + } // tangential sector + else { + var angleSpan = valueAxis.dataToCoord(value, clampLayout) - valueAxisStart; + var radius = baseAxis.dataToCoord(baseValue); + + if (Math.abs(angleSpan) < barMinAngle) { + angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle; + } + + r0 = radius + columnOffset; + r = r0 + columnWidth; + startAngle = baseCoord; + endAngle = baseCoord + angleSpan; // if the previous stack is at the end of the ring, + // add a round to differentiate it from origin + // let extent = angleAxis.getExtent(); + // let stackCoord = angle; + // if (stackCoord === extent[0] && value > 0) { + // stackCoord = extent[1]; + // } + // else if (stackCoord === extent[1] && value < 0) { + // stackCoord = extent[0]; + // } + + stacked && (lastStackCoords[stackId][baseValue][sign] = endAngle); + } + + data.setItemLayout(idx, { + cx: cx, + cy: cy, + r0: r0, + r: r, + // Consider that positive angle is anti-clockwise, + // while positive radian of sector is clockwise + startAngle: -startAngle * Math.PI / 180, + endAngle: -endAngle * Math.PI / 180, + + /** + * Keep the same logic with bar in catesion: use end value to + * control direction. Notice that if clockwise is true (by + * default), the sector will always draw clockwisely, no matter + * whether endAngle is greater or less than startAngle. + */ + clockwise: startAngle >= endAngle + }); + } + }); + } + /** + * Calculate bar width and offset for radial bar charts + */ + + + function calRadialBar(barSeries) { + // Columns info on each category axis. Key is polar name + var columnsMap = {}; + each(barSeries, function (seriesModel, idx) { + var data = seriesModel.getData(); + var polar = seriesModel.coordinateSystem; + var baseAxis = polar.getBaseAxis(); + var axisKey = getAxisKey$1(polar, baseAxis); + var axisExtent = baseAxis.getExtent(); + var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : Math.abs(axisExtent[1] - axisExtent[0]) / data.count(); + var columnsOnAxis = columnsMap[axisKey] || { + bandWidth: bandWidth, + remainedWidth: bandWidth, + autoWidthCount: 0, + categoryGap: '20%', + gap: '30%', + stacks: {} + }; + var stacks = columnsOnAxis.stacks; + columnsMap[axisKey] = columnsOnAxis; + var stackId = getSeriesStackId$1(seriesModel); + + if (!stacks[stackId]) { + columnsOnAxis.autoWidthCount++; + } + + stacks[stackId] = stacks[stackId] || { + width: 0, + maxWidth: 0 + }; + var barWidth = parsePercent$1(seriesModel.get('barWidth'), bandWidth); + var barMaxWidth = parsePercent$1(seriesModel.get('barMaxWidth'), bandWidth); + var barGap = seriesModel.get('barGap'); + var barCategoryGap = seriesModel.get('barCategoryGap'); + + if (barWidth && !stacks[stackId].width) { + barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth); + stacks[stackId].width = barWidth; + columnsOnAxis.remainedWidth -= barWidth; + } + + barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth); + barGap != null && (columnsOnAxis.gap = barGap); + barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap); + }); + var result = {}; + each(columnsMap, function (columnsOnAxis, coordSysName) { + result[coordSysName] = {}; + var stacks = columnsOnAxis.stacks; + var bandWidth = columnsOnAxis.bandWidth; + var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth); + var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1); + var remainedWidth = columnsOnAxis.remainedWidth; + var autoWidthCount = columnsOnAxis.autoWidthCount; + var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth + + each(stacks, function (column, stack) { + var maxWidth = column.maxWidth; + + if (maxWidth && maxWidth < autoWidth) { + maxWidth = Math.min(maxWidth, remainedWidth); + + if (column.width) { + maxWidth = Math.min(maxWidth, column.width); + } + + remainedWidth -= maxWidth; + column.width = maxWidth; + autoWidthCount--; + } + }); // Recalculate width again + + autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent); + autoWidth = Math.max(autoWidth, 0); + var widthSum = 0; + var lastColumn; + each(stacks, function (column, idx) { + if (!column.width) { + column.width = autoWidth; + } + + lastColumn = column; + widthSum += column.width * (1 + barGapPercent); + }); + + if (lastColumn) { + widthSum -= lastColumn.width * barGapPercent; + } + + var offset = -widthSum / 2; + each(stacks, function (column, stackId) { + result[coordSysName][stackId] = result[coordSysName][stackId] || { + offset: offset, + width: column.width + }; + offset += column.width * (1 + barGapPercent); + }); + }); + return result; + } + + var angleAxisExtraOption = { + startAngle: 90, + clockwise: true, + splitNumber: 12, + axisLabel: { + rotate: 0 + } + }; + var radiusAxisExtraOption = { + splitNumber: 5 + }; + + var PolarView = + /** @class */ + function (_super) { + __extends(PolarView, _super); + + function PolarView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = PolarView.type; + return _this; + } + + PolarView.type = 'polar'; + return PolarView; + }(ComponentView); + + function install$u(registers) { + use(install$s); + AxisView.registerAxisPointerClass('PolarAxisPointer', PolarAxisPointer); + registers.registerCoordinateSystem('polar', polarCreator); + registers.registerComponentModel(PolarModel); + registers.registerComponentView(PolarView); // Model and view for angleAxis and radiusAxis + + axisModelCreator(registers, 'angle', AngleAxisModel, angleAxisExtraOption); + axisModelCreator(registers, 'radius', RadiusAxisModel, radiusAxisExtraOption); + registers.registerComponentView(AngleAxisView); + registers.registerComponentView(RadiusAxisView); + registers.registerLayout(curry(barLayoutPolar, 'bar')); + } + + function layout$2(axisModel, opt) { + opt = opt || {}; + var single = axisModel.coordinateSystem; + var axis = axisModel.axis; + var layout = {}; + var axisPosition = axis.position; + var orient = axis.orient; + var rect = single.getRect(); + var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height]; + var positionMap = { + horizontal: { + top: rectBound[2], + bottom: rectBound[3] + }, + vertical: { + left: rectBound[0], + right: rectBound[1] + } + }; + layout.position = [orient === 'vertical' ? positionMap.vertical[axisPosition] : rectBound[0], orient === 'horizontal' ? positionMap.horizontal[axisPosition] : rectBound[3]]; + var r = { + horizontal: 0, + vertical: 1 + }; + layout.rotation = Math.PI / 2 * r[orient]; + var directionMap = { + top: -1, + bottom: 1, + right: 1, + left: -1 + }; + layout.labelDirection = layout.tickDirection = layout.nameDirection = directionMap[axisPosition]; + + if (axisModel.get(['axisTick', 'inside'])) { + layout.tickDirection = -layout.tickDirection; + } + + if (retrieve(opt.labelInside, axisModel.get(['axisLabel', 'inside']))) { + layout.labelDirection = -layout.labelDirection; + } + + var labelRotation = opt.rotate; + labelRotation == null && (labelRotation = axisModel.get(['axisLabel', 'rotate'])); + layout.labelRotation = axisPosition === 'top' ? -labelRotation : labelRotation; + layout.z2 = 1; + return layout; + } + + var axisBuilderAttrs$3 = ['axisLine', 'axisTickLabel', 'axisName']; + var selfBuilderAttrs$2 = ['splitArea', 'splitLine']; + + var SingleAxisView = + /** @class */ + function (_super) { + __extends(SingleAxisView, _super); + + function SingleAxisView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SingleAxisView.type; + _this.axisPointerClass = 'SingleAxisPointer'; + return _this; + } + + SingleAxisView.prototype.render = function (axisModel, ecModel, api, payload) { + var group = this.group; + group.removeAll(); + var oldAxisGroup = this._axisGroup; + this._axisGroup = new Group(); + var layout = layout$2(axisModel); + var axisBuilder = new AxisBuilder(axisModel, layout); + each(axisBuilderAttrs$3, axisBuilder.add, axisBuilder); + group.add(this._axisGroup); + group.add(axisBuilder.getGroup()); + each(selfBuilderAttrs$2, function (name) { + if (axisModel.get([name, 'show'])) { + axisElementBuilders$2[name](this, this.group, this._axisGroup, axisModel); + } + }, this); + groupTransition(oldAxisGroup, this._axisGroup, axisModel); + + _super.prototype.render.call(this, axisModel, ecModel, api, payload); + }; + + SingleAxisView.prototype.remove = function () { + rectCoordAxisHandleRemove(this); + }; + + SingleAxisView.type = 'singleAxis'; + return SingleAxisView; + }(AxisView); + + var axisElementBuilders$2 = { + splitLine: function (axisView, group, axisGroup, axisModel) { + var axis = axisModel.axis; + + if (axis.scale.isBlank()) { + return; + } + + var splitLineModel = axisModel.getModel('splitLine'); + var lineStyleModel = splitLineModel.getModel('lineStyle'); + var lineColors = lineStyleModel.get('color'); + lineColors = lineColors instanceof Array ? lineColors : [lineColors]; + var gridRect = axisModel.coordinateSystem.getRect(); + var isHorizontal = axis.isHorizontal(); + var splitLines = []; + var lineCount = 0; + var ticksCoords = axis.getTicksCoords({ + tickModel: splitLineModel + }); + var p1 = []; + var p2 = []; + + for (var i = 0; i < ticksCoords.length; ++i) { + var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord); + + if (isHorizontal) { + p1[0] = tickCoord; + p1[1] = gridRect.y; + p2[0] = tickCoord; + p2[1] = gridRect.y + gridRect.height; + } else { + p1[0] = gridRect.x; + p1[1] = tickCoord; + p2[0] = gridRect.x + gridRect.width; + p2[1] = tickCoord; + } + + var colorIndex = lineCount++ % lineColors.length; + splitLines[colorIndex] = splitLines[colorIndex] || []; + splitLines[colorIndex].push(new Line({ + subPixelOptimize: true, + shape: { + x1: p1[0], + y1: p1[1], + x2: p2[0], + y2: p2[1] + }, + silent: true + })); + } + + var lineStyle = lineStyleModel.getLineStyle(['color']); + + for (var i = 0; i < splitLines.length; ++i) { + group.add(mergePath$1(splitLines[i], { + style: defaults({ + stroke: lineColors[i % lineColors.length] + }, lineStyle), + silent: true + })); + } + }, + splitArea: function (axisView, group, axisGroup, axisModel) { + rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, axisModel); + } + }; + + var SingleAxisModel = + /** @class */ + function (_super) { + __extends(SingleAxisModel, _super); + + function SingleAxisModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SingleAxisModel.type; + return _this; + } + + SingleAxisModel.prototype.getCoordSysModel = function () { + return this; + }; + + SingleAxisModel.type = 'singleAxis'; + SingleAxisModel.layoutMode = 'box'; + SingleAxisModel.defaultOption = { + left: '5%', + top: '5%', + right: '5%', + bottom: '5%', + type: 'value', + position: 'bottom', + orient: 'horizontal', + axisLine: { + show: true, + lineStyle: { + width: 1, + type: 'solid' + } + }, + // Single coordinate system and single axis is the, + // which is used as the parent tooltip model. + // same model, so we set default tooltip show as true. + tooltip: { + show: true + }, + axisTick: { + show: true, + length: 6, + lineStyle: { + width: 1 + } + }, + axisLabel: { + show: true, + interval: 'auto' + }, + splitLine: { + show: true, + lineStyle: { + type: 'dashed', + opacity: 0.2 + } + } + }; + return SingleAxisModel; + }(ComponentModel); + + mixin(SingleAxisModel, AxisModelCommonMixin.prototype); + + var SingleAxis = + /** @class */ + function (_super) { + __extends(SingleAxis, _super); + + function SingleAxis(dim, scale, coordExtent, axisType, position) { + var _this = _super.call(this, dim, scale, coordExtent) || this; + + _this.type = axisType || 'value'; + _this.position = position || 'bottom'; + return _this; + } + /** + * Judge the orient of the axis. + */ + + + SingleAxis.prototype.isHorizontal = function () { + var position = this.position; + return position === 'top' || position === 'bottom'; + }; + + SingleAxis.prototype.pointToData = function (point, clamp) { + return this.coordinateSystem.pointToData(point)[0]; + }; + + return SingleAxis; + }(Axis); + + var singleDimensions = ['single']; + /** + * Create a single coordinates system. + */ + + var Single = + /** @class */ + function () { + function Single(axisModel, ecModel, api) { + this.type = 'single'; + this.dimension = 'single'; + /** + * Add it just for draw tooltip. + */ + + this.dimensions = singleDimensions; + this.axisPointerEnabled = true; + this.model = axisModel; + + this._init(axisModel, ecModel, api); + } + /** + * Initialize single coordinate system. + */ + + + Single.prototype._init = function (axisModel, ecModel, api) { + var dim = this.dimension; + var axis = new SingleAxis(dim, createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisModel.get('position')); + var isCategory = axis.type === 'category'; + axis.onBand = isCategory && axisModel.get('boundaryGap'); + axis.inverse = axisModel.get('inverse'); + axis.orient = axisModel.get('orient'); + axisModel.axis = axis; + axis.model = axisModel; + axis.coordinateSystem = this; + this._axis = axis; + }; + /** + * Update axis scale after data processed + */ + + + Single.prototype.update = function (ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.coordinateSystem === this) { + var data_1 = seriesModel.getData(); + each(data_1.mapDimensionsAll(this.dimension), function (dim) { + this._axis.scale.unionExtentFromData(data_1, dim); + }, this); + niceScaleExtent(this._axis.scale, this._axis.model); + } + }, this); + }; + /** + * Resize the single coordinate system. + */ + + + Single.prototype.resize = function (axisModel, api) { + this._rect = getLayoutRect({ + left: axisModel.get('left'), + top: axisModel.get('top'), + right: axisModel.get('right'), + bottom: axisModel.get('bottom'), + width: axisModel.get('width'), + height: axisModel.get('height') + }, { + width: api.getWidth(), + height: api.getHeight() + }); + + this._adjustAxis(); + }; + + Single.prototype.getRect = function () { + return this._rect; + }; + + Single.prototype._adjustAxis = function () { + var rect = this._rect; + var axis = this._axis; + var isHorizontal = axis.isHorizontal(); + var extent = isHorizontal ? [0, rect.width] : [0, rect.height]; + var idx = axis.reverse ? 1 : 0; + axis.setExtent(extent[idx], extent[1 - idx]); + + this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y); + }; + + Single.prototype._updateAxisTransform = function (axis, coordBase) { + var axisExtent = axis.getExtent(); + var extentSum = axisExtent[0] + axisExtent[1]; + var isHorizontal = axis.isHorizontal(); + axis.toGlobalCoord = isHorizontal ? function (coord) { + return coord + coordBase; + } : function (coord) { + return extentSum - coord + coordBase; + }; + axis.toLocalCoord = isHorizontal ? function (coord) { + return coord - coordBase; + } : function (coord) { + return extentSum - coord + coordBase; + }; + }; + /** + * Get axis. + */ + + + Single.prototype.getAxis = function () { + return this._axis; + }; + /** + * Get axis, add it just for draw tooltip. + */ + + + Single.prototype.getBaseAxis = function () { + return this._axis; + }; + + Single.prototype.getAxes = function () { + return [this._axis]; + }; + + Single.prototype.getTooltipAxes = function () { + return { + baseAxes: [this.getAxis()], + // Empty otherAxes + otherAxes: [] + }; + }; + /** + * If contain point. + */ + + + Single.prototype.containPoint = function (point) { + var rect = this.getRect(); + var axis = this.getAxis(); + var orient = axis.orient; + + if (orient === 'horizontal') { + return axis.contain(axis.toLocalCoord(point[0])) && point[1] >= rect.y && point[1] <= rect.y + rect.height; + } else { + return axis.contain(axis.toLocalCoord(point[1])) && point[0] >= rect.y && point[0] <= rect.y + rect.height; + } + }; + + Single.prototype.pointToData = function (point) { + var axis = this.getAxis(); + return [axis.coordToData(axis.toLocalCoord(point[axis.orient === 'horizontal' ? 0 : 1]))]; + }; + /** + * Convert the series data to concrete point. + * Can be [val] | val + */ + + + Single.prototype.dataToPoint = function (val) { + var axis = this.getAxis(); + var rect = this.getRect(); + var pt = []; + var idx = axis.orient === 'horizontal' ? 0 : 1; + + if (val instanceof Array) { + val = val[0]; + } + + pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val)); + pt[1 - idx] = idx === 0 ? rect.y + rect.height / 2 : rect.x + rect.width / 2; + return pt; + }; + + Single.prototype.convertToPixel = function (ecModel, finder, value) { + var coordSys = getCoordSys$3(finder); + return coordSys === this ? this.dataToPoint(value) : null; + }; + + Single.prototype.convertFromPixel = function (ecModel, finder, pixel) { + var coordSys = getCoordSys$3(finder); + return coordSys === this ? this.pointToData(pixel) : null; + }; + + return Single; + }(); + + function getCoordSys$3(finder) { + var seriesModel = finder.seriesModel; + var singleModel = finder.singleAxisModel; + return singleModel && singleModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem; + } + + /** + * Create single coordinate system and inject it into seriesModel. + */ + + function create$2(ecModel, api) { + var singles = []; + ecModel.eachComponent('singleAxis', function (axisModel, idx) { + var single = new Single(axisModel, ecModel, api); + single.name = 'single_' + idx; + single.resize(axisModel, api); + axisModel.coordinateSystem = single; + singles.push(single); + }); + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.get('coordinateSystem') === 'singleAxis') { + var singleAxisModel = seriesModel.getReferringComponents('singleAxis', SINGLE_REFERRING).models[0]; + seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem; + } + }); + return singles; + } + + var singleCreator = { + create: create$2, + dimensions: singleDimensions + }; + + var XY = ['x', 'y']; + var WH = ['width', 'height']; + + var SingleAxisPointer = + /** @class */ + function (_super) { + __extends(SingleAxisPointer, _super); + + function SingleAxisPointer() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * @override + */ + + + SingleAxisPointer.prototype.makeElOption = function (elOption, value, axisModel, axisPointerModel, api) { + var axis = axisModel.axis; + var coordSys = axis.coordinateSystem; + var otherExtent = getGlobalExtent(coordSys, 1 - getPointDimIndex(axis)); + var pixelValue = coordSys.dataToPoint(value)[0]; + var axisPointerType = axisPointerModel.get('type'); + + if (axisPointerType && axisPointerType !== 'none') { + var elStyle = buildElStyle(axisPointerModel); + var pointerOption = pointerShapeBuilder$2[axisPointerType](axis, pixelValue, otherExtent); + pointerOption.style = elStyle; + elOption.graphicKey = pointerOption.type; + elOption.pointer = pointerOption; + } + + var layoutInfo = layout$2(axisModel); + buildCartesianSingleLabelElOption( // @ts-ignore + value, elOption, layoutInfo, axisModel, axisPointerModel, api); + }; + /** + * @override + */ + + + SingleAxisPointer.prototype.getHandleTransform = function (value, axisModel, axisPointerModel) { + var layoutInfo = layout$2(axisModel, { + labelInside: false + }); // @ts-ignore + + layoutInfo.labelMargin = axisPointerModel.get(['handle', 'margin']); + var position = getTransformedPosition(axisModel.axis, value, layoutInfo); + return { + x: position[0], + y: position[1], + rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0) + }; + }; + /** + * @override + */ + + + SingleAxisPointer.prototype.updateHandleTransform = function (transform, delta, axisModel, axisPointerModel) { + var axis = axisModel.axis; + var coordSys = axis.coordinateSystem; + var dimIndex = getPointDimIndex(axis); + var axisExtent = getGlobalExtent(coordSys, dimIndex); + var currPosition = [transform.x, transform.y]; + currPosition[dimIndex] += delta[dimIndex]; + currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]); + currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]); + var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex); + var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2; + var cursorPoint = [cursorOtherValue, cursorOtherValue]; + cursorPoint[dimIndex] = currPosition[dimIndex]; + return { + x: currPosition[0], + y: currPosition[1], + rotation: transform.rotation, + cursorPoint: cursorPoint, + tooltipOption: { + verticalAlign: 'middle' + } + }; + }; + + return SingleAxisPointer; + }(BaseAxisPointer); + + var pointerShapeBuilder$2 = { + line: function (axis, pixelValue, otherExtent) { + var targetShape = makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getPointDimIndex(axis)); + return { + type: 'Line', + subPixelOptimize: true, + shape: targetShape + }; + }, + shadow: function (axis, pixelValue, otherExtent) { + var bandWidth = axis.getBandWidth(); + var span = otherExtent[1] - otherExtent[0]; + return { + type: 'Rect', + shape: makeRectShape([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getPointDimIndex(axis)) + }; + } + }; + + function getPointDimIndex(axis) { + return axis.isHorizontal() ? 0 : 1; + } + + function getGlobalExtent(coordSys, dimIndex) { + var rect = coordSys.getRect(); + return [rect[XY[dimIndex]], rect[XY[dimIndex]] + rect[WH[dimIndex]]]; + } + + var SingleView = + /** @class */ + function (_super) { + __extends(SingleView, _super); + + function SingleView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SingleView.type; + return _this; + } + + SingleView.type = 'single'; + return SingleView; + }(ComponentView); + + function install$v(registers) { + use(install$s); + AxisView.registerAxisPointerClass('SingleAxisPointer', SingleAxisPointer); + registers.registerComponentView(SingleView); // Axis + + registers.registerComponentView(SingleAxisView); + registers.registerComponentModel(SingleAxisModel); + axisModelCreator(registers, 'single', SingleAxisModel, SingleAxisModel.defaultOption); + registers.registerCoordinateSystem('single', singleCreator); + } + + var CalendarModel = + /** @class */ + function (_super) { + __extends(CalendarModel, _super); + + function CalendarModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CalendarModel.type; + return _this; + } + /** + * @override + */ + + + CalendarModel.prototype.init = function (option, parentModel, ecModel) { + var inputPositionParams = getLayoutParams(option); + + _super.prototype.init.apply(this, arguments); + + mergeAndNormalizeLayoutParams(option, inputPositionParams); + }; + /** + * @override + */ + + + CalendarModel.prototype.mergeOption = function (option) { + _super.prototype.mergeOption.apply(this, arguments); + + mergeAndNormalizeLayoutParams(this.option, option); + }; + + CalendarModel.prototype.getCellSize = function () { + // Has been normalized + return this.option.cellSize; + }; + + CalendarModel.type = 'calendar'; + CalendarModel.defaultOption = { + zlevel: 0, + z: 2, + left: 80, + top: 60, + cellSize: 20, + // horizontal vertical + orient: 'horizontal', + // month separate line style + splitLine: { + show: true, + lineStyle: { + color: '#000', + width: 1, + type: 'solid' + } + }, + // rect style temporarily unused emphasis + itemStyle: { + color: '#fff', + borderWidth: 1, + borderColor: '#ccc' + }, + // week text style + dayLabel: { + show: true, + firstDay: 0, + // start end + position: 'start', + margin: '50%', + color: '#000' + }, + // month text style + monthLabel: { + show: true, + // start end + position: 'start', + margin: 5, + // center or left + align: 'center', + formatter: null, + color: '#000' + }, + // year text style + yearLabel: { + show: true, + // top bottom left right + position: null, + margin: 30, + formatter: null, + color: '#ccc', + fontFamily: 'sans-serif', + fontWeight: 'bolder', + fontSize: 20 + } + }; + return CalendarModel; + }(ComponentModel); + + function mergeAndNormalizeLayoutParams(target, raw) { + // Normalize cellSize + var cellSize = target.cellSize; + var cellSizeArr; + + if (!isArray(cellSize)) { + cellSizeArr = target.cellSize = [cellSize, cellSize]; + } else { + cellSizeArr = cellSize; + } + + if (cellSizeArr.length === 1) { + cellSizeArr[1] = cellSizeArr[0]; + } + + var ignoreSize = map([0, 1], function (hvIdx) { + // If user have set `width` or both `left` and `right`, cellSizeArr + // will be automatically set to 'auto', otherwise the default + // setting of cellSizeArr will make `width` setting not work. + if (sizeCalculable(raw, hvIdx)) { + cellSizeArr[hvIdx] = 'auto'; + } + + return cellSizeArr[hvIdx] != null && cellSizeArr[hvIdx] !== 'auto'; + }); + mergeLayoutParam(target, raw, { + type: 'box', + ignoreSize: ignoreSize + }); + } + + var CalendarView = + /** @class */ + function (_super) { + __extends(CalendarView, _super); + + function CalendarView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = CalendarView.type; + return _this; + } + + CalendarView.prototype.render = function (calendarModel, ecModel, api) { + var group = this.group; + group.removeAll(); + var coordSys = calendarModel.coordinateSystem; // range info + + var rangeData = coordSys.getRangeInfo(); + var orient = coordSys.getOrient(); // locale + + var localeModel = ecModel.getLocaleModel(); + + this._renderDayRect(calendarModel, rangeData, group); // _renderLines must be called prior to following function + + + this._renderLines(calendarModel, rangeData, orient, group); + + this._renderYearText(calendarModel, rangeData, orient, group); + + this._renderMonthText(calendarModel, localeModel, orient, group); + + this._renderWeekText(calendarModel, localeModel, rangeData, orient, group); + }; // render day rect + + + CalendarView.prototype._renderDayRect = function (calendarModel, rangeData, group) { + var coordSys = calendarModel.coordinateSystem; + var itemRectStyleModel = calendarModel.getModel('itemStyle').getItemStyle(); + var sw = coordSys.getCellWidth(); + var sh = coordSys.getCellHeight(); + + for (var i = rangeData.start.time; i <= rangeData.end.time; i = coordSys.getNextNDay(i, 1).time) { + var point = coordSys.dataToRect([i], false).tl; // every rect + + var rect = new Rect({ + shape: { + x: point[0], + y: point[1], + width: sw, + height: sh + }, + cursor: 'default', + style: itemRectStyleModel + }); + group.add(rect); + } + }; // render separate line + + + CalendarView.prototype._renderLines = function (calendarModel, rangeData, orient, group) { + var self = this; + var coordSys = calendarModel.coordinateSystem; + var lineStyleModel = calendarModel.getModel(['splitLine', 'lineStyle']).getLineStyle(); + var show = calendarModel.get(['splitLine', 'show']); + var lineWidth = lineStyleModel.lineWidth; + this._tlpoints = []; + this._blpoints = []; + this._firstDayOfMonth = []; + this._firstDayPoints = []; + var firstDay = rangeData.start; + + for (var i = 0; firstDay.time <= rangeData.end.time; i++) { + addPoints(firstDay.formatedDate); + + if (i === 0) { + firstDay = coordSys.getDateInfo(rangeData.start.y + '-' + rangeData.start.m); + } + + var date = firstDay.date; + date.setMonth(date.getMonth() + 1); + firstDay = coordSys.getDateInfo(date); + } + + addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate); + + function addPoints(date) { + self._firstDayOfMonth.push(coordSys.getDateInfo(date)); + + self._firstDayPoints.push(coordSys.dataToRect([date], false).tl); + + var points = self._getLinePointsOfOneWeek(calendarModel, date, orient); + + self._tlpoints.push(points[0]); + + self._blpoints.push(points[points.length - 1]); + + show && self._drawSplitline(points, lineStyleModel, group); + } // render top/left line + + + show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group); // render bottom/right line + + show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group); + }; // get points at both ends + + + CalendarView.prototype._getEdgesPoints = function (points, lineWidth, orient) { + var rs = [points[0].slice(), points[points.length - 1].slice()]; + var idx = orient === 'horizontal' ? 0 : 1; // both ends of the line are extend half lineWidth + + rs[0][idx] = rs[0][idx] - lineWidth / 2; + rs[1][idx] = rs[1][idx] + lineWidth / 2; + return rs; + }; // render split line + + + CalendarView.prototype._drawSplitline = function (points, lineStyle, group) { + var poyline = new Polyline({ + z2: 20, + shape: { + points: points + }, + style: lineStyle + }); + group.add(poyline); + }; // render month line of one week points + + + CalendarView.prototype._getLinePointsOfOneWeek = function (calendarModel, date, orient) { + var coordSys = calendarModel.coordinateSystem; + var parsedDate = coordSys.getDateInfo(date); + var points = []; + + for (var i = 0; i < 7; i++) { + var tmpD = coordSys.getNextNDay(parsedDate.time, i); + var point = coordSys.dataToRect([tmpD.time], false); + points[2 * tmpD.day] = point.tl; + points[2 * tmpD.day + 1] = point[orient === 'horizontal' ? 'bl' : 'tr']; + } + + return points; + }; + + CalendarView.prototype._formatterLabel = function (formatter, params) { + if (typeof formatter === 'string' && formatter) { + return formatTplSimple(formatter, params); + } + + if (typeof formatter === 'function') { + return formatter(params); + } + + return params.nameMap; + }; + + CalendarView.prototype._yearTextPositionControl = function (textEl, point, orient, position, margin) { + var x = point[0]; + var y = point[1]; + var aligns = ['center', 'bottom']; + + if (position === 'bottom') { + y += margin; + aligns = ['center', 'top']; + } else if (position === 'left') { + x -= margin; + } else if (position === 'right') { + x += margin; + aligns = ['center', 'top']; + } else { + // top + y -= margin; + } + + var rotate = 0; + + if (position === 'left' || position === 'right') { + rotate = Math.PI / 2; + } + + return { + rotation: rotate, + x: x, + y: y, + style: { + align: aligns[0], + verticalAlign: aligns[1] + } + }; + }; // render year + + + CalendarView.prototype._renderYearText = function (calendarModel, rangeData, orient, group) { + var yearLabel = calendarModel.getModel('yearLabel'); + + if (!yearLabel.get('show')) { + return; + } + + var margin = yearLabel.get('margin'); + var pos = yearLabel.get('position'); + + if (!pos) { + pos = orient !== 'horizontal' ? 'top' : 'left'; + } + + var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]]; + var xc = (points[0][0] + points[1][0]) / 2; + var yc = (points[0][1] + points[1][1]) / 2; + var idx = orient === 'horizontal' ? 0 : 1; + var posPoints = { + top: [xc, points[idx][1]], + bottom: [xc, points[1 - idx][1]], + left: [points[1 - idx][0], yc], + right: [points[idx][0], yc] + }; + var name = rangeData.start.y; + + if (+rangeData.end.y > +rangeData.start.y) { + name = name + '-' + rangeData.end.y; + } + + var formatter = yearLabel.get('formatter'); + var params = { + start: rangeData.start.y, + end: rangeData.end.y, + nameMap: name + }; + + var content = this._formatterLabel(formatter, params); + + var yearText = new ZRText({ + z2: 30, + style: createTextStyle(yearLabel, { + text: content + }) + }); + yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin)); + group.add(yearText); + }; + + CalendarView.prototype._monthTextPositionControl = function (point, isCenter, orient, position, margin) { + var align = 'left'; + var vAlign = 'top'; + var x = point[0]; + var y = point[1]; + + if (orient === 'horizontal') { + y = y + margin; + + if (isCenter) { + align = 'center'; + } + + if (position === 'start') { + vAlign = 'bottom'; + } + } else { + x = x + margin; + + if (isCenter) { + vAlign = 'middle'; + } + + if (position === 'start') { + align = 'right'; + } + } + + return { + x: x, + y: y, + align: align, + verticalAlign: vAlign + }; + }; // render month and year text + + + CalendarView.prototype._renderMonthText = function (calendarModel, localeModel, orient, group) { + var monthLabel = calendarModel.getModel('monthLabel'); + + if (!monthLabel.get('show')) { + return; + } + + var nameMap = monthLabel.get('nameMap'); + var margin = monthLabel.get('margin'); + var pos = monthLabel.get('position'); + var align = monthLabel.get('align'); + var termPoints = [this._tlpoints, this._blpoints]; + + if (!nameMap || isString(nameMap)) { + if (nameMap) { + // case-sensitive + localeModel = getLocaleModel(nameMap) || localeModel; + } // PENDING + // for ZH locale, original form is `一月` but current form is `1月` + + + nameMap = localeModel.get(['time', 'monthAbbr']) || []; + } + + var idx = pos === 'start' ? 0 : 1; + var axis = orient === 'horizontal' ? 0 : 1; + margin = pos === 'start' ? -margin : margin; + var isCenter = align === 'center'; + + for (var i = 0; i < termPoints[idx].length - 1; i++) { + var tmp = termPoints[idx][i].slice(); + var firstDay = this._firstDayOfMonth[i]; + + if (isCenter) { + var firstDayPoints = this._firstDayPoints[i]; + tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2; + } + + var formatter = monthLabel.get('formatter'); + var name_1 = nameMap[+firstDay.m - 1]; + var params = { + yyyy: firstDay.y, + yy: (firstDay.y + '').slice(2), + MM: firstDay.m, + M: +firstDay.m, + nameMap: name_1 + }; + + var content = this._formatterLabel(formatter, params); + + var monthText = new ZRText({ + z2: 30, + style: extend(createTextStyle(monthLabel, { + text: content + }), this._monthTextPositionControl(tmp, isCenter, orient, pos, margin)) + }); + group.add(monthText); + } + }; + + CalendarView.prototype._weekTextPositionControl = function (point, orient, position, margin, cellSize) { + var align = 'center'; + var vAlign = 'middle'; + var x = point[0]; + var y = point[1]; + var isStart = position === 'start'; + + if (orient === 'horizontal') { + x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2; + align = isStart ? 'right' : 'left'; + } else { + y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2; + vAlign = isStart ? 'bottom' : 'top'; + } + + return { + x: x, + y: y, + align: align, + verticalAlign: vAlign + }; + }; // render weeks + + + CalendarView.prototype._renderWeekText = function (calendarModel, localeModel, rangeData, orient, group) { + var dayLabel = calendarModel.getModel('dayLabel'); + + if (!dayLabel.get('show')) { + return; + } + + var coordSys = calendarModel.coordinateSystem; + var pos = dayLabel.get('position'); + var nameMap = dayLabel.get('nameMap'); + var margin = dayLabel.get('margin'); + var firstDayOfWeek = coordSys.getFirstDayOfWeek(); + + if (!nameMap || isString(nameMap)) { + if (nameMap) { + // case-sensitive + localeModel = getLocaleModel(nameMap) || localeModel; + } // Use the first letter of `dayOfWeekAbbr` if `dayOfWeekShort` doesn't exist in the locale file + + + var dayOfWeekShort = localeModel.get(['time', 'dayOfWeekShort']); + nameMap = dayOfWeekShort || map(localeModel.get(['time', 'dayOfWeekAbbr']), function (val) { + return val[0]; + }); + } + + var start = coordSys.getNextNDay(rangeData.end.time, 7 - rangeData.lweek).time; + var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()]; + margin = parsePercent$1(margin, Math.min(cellSize[1], cellSize[0])); + + if (pos === 'start') { + start = coordSys.getNextNDay(rangeData.start.time, -(7 + rangeData.fweek)).time; + margin = -margin; + } + + for (var i = 0; i < 7; i++) { + var tmpD = coordSys.getNextNDay(start, i); + var point = coordSys.dataToRect([tmpD.time], false).center; + var day = i; + day = Math.abs((i + firstDayOfWeek) % 7); + var weekText = new ZRText({ + z2: 30, + style: extend(createTextStyle(dayLabel, { + text: nameMap[day] + }), this._weekTextPositionControl(point, orient, pos, margin, cellSize)) + }); + group.add(weekText); + } + }; + + CalendarView.type = 'calendar'; + return CalendarView; + }(ComponentView); + + var PROXIMATE_ONE_DAY = 86400000; + + var Calendar = + /** @class */ + function () { + function Calendar(calendarModel, ecModel, api) { + this.type = 'calendar'; + this.dimensions = Calendar.dimensions; // Required in createListFromData + + this.getDimensionsInfo = Calendar.getDimensionsInfo; + this._model = calendarModel; + } + + Calendar.getDimensionsInfo = function () { + return [{ + name: 'time', + type: 'time' + }, 'value']; + }; + + Calendar.prototype.getRangeInfo = function () { + return this._rangeInfo; + }; + + Calendar.prototype.getModel = function () { + return this._model; + }; + + Calendar.prototype.getRect = function () { + return this._rect; + }; + + Calendar.prototype.getCellWidth = function () { + return this._sw; + }; + + Calendar.prototype.getCellHeight = function () { + return this._sh; + }; + + Calendar.prototype.getOrient = function () { + return this._orient; + }; + /** + * getFirstDayOfWeek + * + * @example + * 0 : start at Sunday + * 1 : start at Monday + * + * @return {number} + */ + + + Calendar.prototype.getFirstDayOfWeek = function () { + return this._firstDayOfWeek; + }; + /** + * get date info + * } + */ + + + Calendar.prototype.getDateInfo = function (date) { + date = parseDate(date); + var y = date.getFullYear(); + var m = date.getMonth() + 1; + var mStr = m < 10 ? '0' + m : '' + m; + var d = date.getDate(); + var dStr = d < 10 ? '0' + d : '' + d; + var day = date.getDay(); + day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7); + return { + y: y + '', + m: mStr, + d: dStr, + day: day, + time: date.getTime(), + formatedDate: y + '-' + mStr + '-' + dStr, + date: date + }; + }; + + Calendar.prototype.getNextNDay = function (date, n) { + n = n || 0; + + if (n === 0) { + return this.getDateInfo(date); + } + + date = new Date(this.getDateInfo(date).time); + date.setDate(date.getDate() + n); + return this.getDateInfo(date); + }; + + Calendar.prototype.update = function (ecModel, api) { + this._firstDayOfWeek = +this._model.getModel('dayLabel').get('firstDay'); + this._orient = this._model.get('orient'); + this._lineWidth = this._model.getModel('itemStyle').getItemStyle().lineWidth || 0; + this._rangeInfo = this._getRangeInfo(this._initRangeOption()); + var weeks = this._rangeInfo.weeks || 1; + var whNames = ['width', 'height']; + + var cellSize = this._model.getCellSize().slice(); + + var layoutParams = this._model.getBoxLayoutParams(); + + var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks]; + each([0, 1], function (idx) { + if (cellSizeSpecified(cellSize, idx)) { + layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx]; + } + }); + var whGlobal = { + width: api.getWidth(), + height: api.getHeight() + }; + var calendarRect = this._rect = getLayoutRect(layoutParams, whGlobal); + each([0, 1], function (idx) { + if (!cellSizeSpecified(cellSize, idx)) { + cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx]; + } + }); + + function cellSizeSpecified(cellSize, idx) { + return cellSize[idx] != null && cellSize[idx] !== 'auto'; + } // Has been calculated out number. + + + this._sw = cellSize[0]; + this._sh = cellSize[1]; + }; + /** + * Convert a time data(time, value) item to (x, y) point. + */ + // TODO Clamp of calendar is not same with cartesian coordinate systems. + // It will return NaN if data exceeds. + + + Calendar.prototype.dataToPoint = function (data, clamp) { + isArray(data) && (data = data[0]); + clamp == null && (clamp = true); + var dayInfo = this.getDateInfo(data); + var range = this._rangeInfo; + var date = dayInfo.formatedDate; // if not in range return [NaN, NaN] + + if (clamp && !(dayInfo.time >= range.start.time && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY)) { + return [NaN, NaN]; + } + + var week = dayInfo.day; + + var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek; + + if (this._orient === 'vertical') { + return [this._rect.x + week * this._sw + this._sw / 2, this._rect.y + nthWeek * this._sh + this._sh / 2]; + } + + return [this._rect.x + nthWeek * this._sw + this._sw / 2, this._rect.y + week * this._sh + this._sh / 2]; + }; + /** + * Convert a (x, y) point to time data + */ + + + Calendar.prototype.pointToData = function (point) { + var date = this.pointToDate(point); + return date && date.time; + }; + /** + * Convert a time date item to (x, y) four point. + */ + + + Calendar.prototype.dataToRect = function (data, clamp) { + var point = this.dataToPoint(data, clamp); + return { + contentShape: { + x: point[0] - (this._sw - this._lineWidth) / 2, + y: point[1] - (this._sh - this._lineWidth) / 2, + width: this._sw - this._lineWidth, + height: this._sh - this._lineWidth + }, + center: point, + tl: [point[0] - this._sw / 2, point[1] - this._sh / 2], + tr: [point[0] + this._sw / 2, point[1] - this._sh / 2], + br: [point[0] + this._sw / 2, point[1] + this._sh / 2], + bl: [point[0] - this._sw / 2, point[1] + this._sh / 2] + }; + }; + /** + * Convert a (x, y) point to time date + * + * @param {Array} point point + * @return {Object} date + */ + + + Calendar.prototype.pointToDate = function (point) { + var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1; + var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1; + var range = this._rangeInfo.range; + + if (this._orient === 'vertical') { + return this._getDateByWeeksAndDay(nthY, nthX - 1, range); + } + + return this._getDateByWeeksAndDay(nthX, nthY - 1, range); + }; + + Calendar.prototype.convertToPixel = function (ecModel, finder, value) { + var coordSys = getCoordSys$4(finder); + return coordSys === this ? coordSys.dataToPoint(value) : null; + }; + + Calendar.prototype.convertFromPixel = function (ecModel, finder, pixel) { + var coordSys = getCoordSys$4(finder); + return coordSys === this ? coordSys.pointToData(pixel) : null; + }; + + Calendar.prototype.containPoint = function (point) { + console.warn('Not implemented.'); + return false; + }; + /** + * initRange + * Normalize to an [start, end] array + */ + + + Calendar.prototype._initRangeOption = function () { + var range = this._model.get('range'); + + var normalizedRange; // Convert [1990] to 1990 + + if (isArray(range) && range.length === 1) { + range = range[0]; + } + + if (!isArray(range)) { + var rangeStr = range.toString(); // One year. + + if (/^\d{4}$/.test(rangeStr)) { + normalizedRange = [rangeStr + '-01-01', rangeStr + '-12-31']; + } // One month + + + if (/^\d{4}[\/|-]\d{1,2}$/.test(rangeStr)) { + var start = this.getDateInfo(rangeStr); + var firstDay = start.date; + firstDay.setMonth(firstDay.getMonth() + 1); + var end = this.getNextNDay(firstDay, -1); + normalizedRange = [start.formatedDate, end.formatedDate]; + } // One day + + + if (/^\d{4}[\/|-]\d{1,2}[\/|-]\d{1,2}$/.test(rangeStr)) { + normalizedRange = [rangeStr, rangeStr]; + } + } else { + normalizedRange = range; + } + + if (!normalizedRange) { + if ("development" !== 'production') { + logError('Invalid date range.'); + } // Not handling it. + + + return range; + } + + var tmp = this._getRangeInfo(normalizedRange); + + if (tmp.start.time > tmp.end.time) { + normalizedRange.reverse(); + } + + return normalizedRange; + }; + /** + * range info + * + * @private + * @param {Array} range range ['2017-01-01', '2017-07-08'] + * If range[0] > range[1], they will not be reversed. + * @return {Object} obj + */ + + + Calendar.prototype._getRangeInfo = function (range) { + var parsedRange = [this.getDateInfo(range[0]), this.getDateInfo(range[1])]; + var reversed; + + if (parsedRange[0].time > parsedRange[1].time) { + reversed = true; + parsedRange.reverse(); + } + + var allDay = Math.floor(parsedRange[1].time / PROXIMATE_ONE_DAY) - Math.floor(parsedRange[0].time / PROXIMATE_ONE_DAY) + 1; // Consider case1 (#11677 #10430): + // Set the system timezone as "UK", set the range to `['2016-07-01', '2016-12-31']` + // Consider case2: + // Firstly set system timezone as "Time Zone: America/Toronto", + // ``` + // let first = new Date(1478412000000 - 3600 * 1000 * 2.5); + // let second = new Date(1478412000000); + // let allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1; + // ``` + // will get wrong result because of DST. So we should fix it. + + var date = new Date(parsedRange[0].time); + var startDateNum = date.getDate(); + var endDateNum = parsedRange[1].date.getDate(); + date.setDate(startDateNum + allDay - 1); // The bias can not over a month, so just compare date. + + var dateNum = date.getDate(); + + if (dateNum !== endDateNum) { + var sign = date.getTime() - parsedRange[1].time > 0 ? 1 : -1; + + while ((dateNum = date.getDate()) !== endDateNum && (date.getTime() - parsedRange[1].time) * sign > 0) { + allDay -= sign; + date.setDate(dateNum - sign); + } + } + + var weeks = Math.floor((allDay + parsedRange[0].day + 6) / 7); + var nthWeek = reversed ? -weeks + 1 : weeks - 1; + reversed && parsedRange.reverse(); + return { + range: [parsedRange[0].formatedDate, parsedRange[1].formatedDate], + start: parsedRange[0], + end: parsedRange[1], + allDay: allDay, + weeks: weeks, + // From 0. + nthWeek: nthWeek, + fweek: parsedRange[0].day, + lweek: parsedRange[1].day + }; + }; + /** + * get date by nthWeeks and week day in range + * + * @private + * @param {number} nthWeek the week + * @param {number} day the week day + * @param {Array} range [d1, d2] + * @return {Object} + */ + + + Calendar.prototype._getDateByWeeksAndDay = function (nthWeek, day, range) { + var rangeInfo = this._getRangeInfo(range); + + if (nthWeek > rangeInfo.weeks || nthWeek === 0 && day < rangeInfo.fweek || nthWeek === rangeInfo.weeks && day > rangeInfo.lweek) { + return null; + } + + var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day; + var date = new Date(rangeInfo.start.time); + date.setDate(+rangeInfo.start.d + nthDay); + return this.getDateInfo(date); + }; + + Calendar.create = function (ecModel, api) { + var calendarList = []; + ecModel.eachComponent('calendar', function (calendarModel) { + var calendar = new Calendar(calendarModel, ecModel, api); + calendarList.push(calendar); + calendarModel.coordinateSystem = calendar; + }); + ecModel.eachSeries(function (calendarSeries) { + if (calendarSeries.get('coordinateSystem') === 'calendar') { + // Inject coordinate system + calendarSeries.coordinateSystem = calendarList[calendarSeries.get('calendarIndex') || 0]; + } + }); + return calendarList; + }; + + Calendar.dimensions = ['time', 'value']; + return Calendar; + }(); + + function getCoordSys$4(finder) { + var calendarModel = finder.calendarModel; + var seriesModel = finder.seriesModel; + var coordSys = calendarModel ? calendarModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem : null; + return coordSys; + } + + function install$w(registers) { + registers.registerComponentModel(CalendarModel); + registers.registerComponentView(CalendarView); + registers.registerCoordinateSystem('calendar', Calendar); + } + + var inner$e = makeInner(); + var _nonShapeGraphicElements = { + // Reserved but not supported in graphic component. + path: null, + compoundPath: null, + // Supported in graphic component. + group: Group, + image: ZRImage, + text: ZRText + }; // ------------------------ + // Preprocessor + // ------------------------ + + var preprocessor = function (option) { + var graphicOption = option.graphic; // Convert + // {graphic: [{left: 10, type: 'circle'}, ...]} + // or + // {graphic: {left: 10, type: 'circle'}} + // to + // {graphic: [{elements: [{left: 10, type: 'circle'}, ...]}]} + + if (isArray(graphicOption)) { + if (!graphicOption[0] || !graphicOption[0].elements) { + option.graphic = [{ + elements: graphicOption + }]; + } else { + // Only one graphic instance can be instantiated. (We dont + // want that too many views are created in echarts._viewMap) + option.graphic = [option.graphic[0]]; + } + } else if (graphicOption && !graphicOption.elements) { + option.graphic = [{ + elements: [graphicOption] + }]; + } + }; + + var GraphicComponentModel = + /** @class */ + function (_super) { + __extends(GraphicComponentModel, _super); + + function GraphicComponentModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = GraphicComponentModel.type; + _this.preventAutoZ = true; + return _this; + } + + GraphicComponentModel.prototype.mergeOption = function (option, ecModel) { + // Prevent default merge to elements + var elements = this.option.elements; + this.option.elements = null; + + _super.prototype.mergeOption.call(this, option, ecModel); + + this.option.elements = elements; + }; + + GraphicComponentModel.prototype.optionUpdated = function (newOption, isInit) { + var thisOption = this.option; + var newList = (isInit ? thisOption : newOption).elements; + var existList = thisOption.elements = isInit ? [] : thisOption.elements; + var flattenedList = []; + + this._flatten(newList, flattenedList, null); + + var mappingResult = mappingToExists(existList, flattenedList, 'normalMerge'); // Clear elOptionsToUpdate + + var elOptionsToUpdate = this._elOptionsToUpdate = []; + each(mappingResult, function (resultItem, index) { + var newElOption = resultItem.newOption; + + if ("development" !== 'production') { + assert(isObject(newElOption) || resultItem.existing, 'Empty graphic option definition'); + } + + if (!newElOption) { + return; + } + + elOptionsToUpdate.push(newElOption); + setKeyInfoToNewElOption(resultItem, newElOption); + mergeNewElOptionToExist(existList, index, newElOption); + setLayoutInfoToExist(existList[index], newElOption); + }, this); // Clean + + for (var i = existList.length - 1; i >= 0; i--) { + if (existList[i] == null) { + existList.splice(i, 1); + } else { + // $action should be volatile, otherwise option gotten from + // `getOption` will contain unexpected $action. + delete existList[i].$action; + } + } + }; + /** + * Convert + * [{ + * type: 'group', + * id: 'xx', + * children: [{type: 'circle'}, {type: 'polygon'}] + * }] + * to + * [ + * {type: 'group', id: 'xx'}, + * {type: 'circle', parentId: 'xx'}, + * {type: 'polygon', parentId: 'xx'} + * ] + */ + + + GraphicComponentModel.prototype._flatten = function (optionList, result, parentOption) { + each(optionList, function (option) { + if (!option) { + return; + } + + if (parentOption) { + option.parentOption = parentOption; + } + + result.push(option); + var children = option.children; + + if (option.type === 'group' && children) { + this._flatten(children, result, option); + } // Deleting for JSON output, and for not affecting group creation. + + + delete option.children; + }, this); + }; // FIXME + // Pass to view using payload? setOption has a payload? + + + GraphicComponentModel.prototype.useElOptionsToUpdate = function () { + var els = this._elOptionsToUpdate; // Clear to avoid render duplicately when zooming. + + this._elOptionsToUpdate = null; + return els; + }; + + GraphicComponentModel.type = 'graphic'; + GraphicComponentModel.defaultOption = { + elements: [] // parentId: null + + }; + return GraphicComponentModel; + }(ComponentModel); // ------------------------ + // View + // ------------------------ + + + var GraphicComponentView = + /** @class */ + function (_super) { + __extends(GraphicComponentView, _super); + + function GraphicComponentView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = GraphicComponentView.type; + return _this; + } + + GraphicComponentView.prototype.init = function () { + this._elMap = createHashMap(); + }; + + GraphicComponentView.prototype.render = function (graphicModel, ecModel, api) { + // Having leveraged between use cases and algorithm complexity, a very + // simple layout mechanism is used: + // The size(width/height) can be determined by itself or its parent (not + // implemented yet), but can not by its children. (Top-down travel) + // The location(x/y) can be determined by the bounding rect of itself + // (can including its descendants or not) and the size of its parent. + // (Bottom-up travel) + // When `chart.clear()` or `chart.setOption({...}, true)` with the same id, + // view will be reused. + if (graphicModel !== this._lastGraphicModel) { + this._clear(); + } + + this._lastGraphicModel = graphicModel; + + this._updateElements(graphicModel); + + this._relocate(graphicModel, api); + }; + /** + * Update graphic elements. + */ + + + GraphicComponentView.prototype._updateElements = function (graphicModel) { + var elOptionsToUpdate = graphicModel.useElOptionsToUpdate(); + + if (!elOptionsToUpdate) { + return; + } + + var elMap = this._elMap; + var rootGroup = this.group; // Top-down tranverse to assign graphic settings to each elements. + + each(elOptionsToUpdate, function (elOption) { + var id = convertOptionIdName(elOption.id, null); + var elExisting = id != null ? elMap.get(id) : null; + var parentId = convertOptionIdName(elOption.parentId, null); + var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup; + var elType = elOption.type; + var elOptionStyle = elOption.style; + + if (elType === 'text' && elOptionStyle) { + // In top/bottom mode, textVerticalAlign should not be used, which cause + // inaccurately locating. + if (elOption.hv && elOption.hv[1]) { + elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = elOptionStyle.verticalAlign = elOptionStyle.align = null; + } + } + + var textContentOption = elOption.textContent; + var textConfig = elOption.textConfig; + + if (elOptionStyle && isEC4CompatibleStyle(elOptionStyle, elType, !!textConfig, !!textContentOption)) { + var convertResult = convertFromEC4CompatibleStyle(elOptionStyle, elType, true); + + if (!textConfig && convertResult.textConfig) { + textConfig = elOption.textConfig = convertResult.textConfig; + } + + if (!textContentOption && convertResult.textContent) { + textContentOption = convertResult.textContent; + } + } // Remove unnecessary props to avoid potential problems. + + + var elOptionCleaned = getCleanedElOption(elOption); // For simple, do not support parent change, otherwise reorder is needed. + + if ("development" !== 'production') { + elExisting && assert(targetElParent === elExisting.parent, 'Changing parent is not supported.'); + } + + var $action = elOption.$action || 'merge'; + + if ($action === 'merge') { + elExisting ? elExisting.attr(elOptionCleaned) : createEl$1(id, targetElParent, elOptionCleaned, elMap); + } else if ($action === 'replace') { + removeEl(elExisting, elMap); + createEl$1(id, targetElParent, elOptionCleaned, elMap); + } else if ($action === 'remove') { + removeEl(elExisting, elMap); + } + + var el = elMap.get(id); + + if (el && textContentOption) { + if ($action === 'merge') { + var textContentExisting = el.getTextContent(); + textContentExisting ? textContentExisting.attr(textContentOption) : el.setTextContent(new ZRText(textContentOption)); + } else if ($action === 'replace') { + el.setTextContent(new ZRText(textContentOption)); + } + } + + if (el) { + var elInner = inner$e(el); + elInner.__ecGraphicWidthOption = elOption.width; + elInner.__ecGraphicHeightOption = elOption.height; + setEventData(el, graphicModel, elOption); + setTooltipConfig({ + el: el, + componentModel: graphicModel, + itemName: el.name, + itemTooltipOption: elOption.tooltip + }); + } + }); + }; + /** + * Locate graphic elements. + */ + + + GraphicComponentView.prototype._relocate = function (graphicModel, api) { + var elOptions = graphicModel.option.elements; + var rootGroup = this.group; + var elMap = this._elMap; + var apiWidth = api.getWidth(); + var apiHeight = api.getHeight(); // Top-down to calculate percentage width/height of group + + for (var i = 0; i < elOptions.length; i++) { + var elOption = elOptions[i]; + var id = convertOptionIdName(elOption.id, null); + var el = id != null ? elMap.get(id) : null; + + if (!el || !el.isGroup) { + continue; + } + + var parentEl = el.parent; + var isParentRoot = parentEl === rootGroup; // Like 'position:absolut' in css, default 0. + + var elInner = inner$e(el); + var parentElInner = inner$e(parentEl); + elInner.__ecGraphicWidth = parsePercent$1(elInner.__ecGraphicWidthOption, isParentRoot ? apiWidth : parentElInner.__ecGraphicWidth) || 0; + elInner.__ecGraphicHeight = parsePercent$1(elInner.__ecGraphicHeightOption, isParentRoot ? apiHeight : parentElInner.__ecGraphicHeight) || 0; + } // Bottom-up tranvese all elements (consider ec resize) to locate elements. + + + for (var i = elOptions.length - 1; i >= 0; i--) { + var elOption = elOptions[i]; + var id = convertOptionIdName(elOption.id, null); + var el = id != null ? elMap.get(id) : null; + + if (!el) { + continue; + } + + var parentEl = el.parent; + var parentElInner = inner$e(parentEl); + var containerInfo = parentEl === rootGroup ? { + width: apiWidth, + height: apiHeight + } : { + width: parentElInner.__ecGraphicWidth, + height: parentElInner.__ecGraphicHeight + }; // PENDING + // Currently, when `bounding: 'all'`, the union bounding rect of the group + // does not include the rect of [0, 0, group.width, group.height], which + // is probably weird for users. Should we make a break change for it? + + positionElement(el, elOption, containerInfo, null, { + hv: elOption.hv, + boundingMode: elOption.bounding + }); + } + }; + /** + * Clear all elements. + */ + + + GraphicComponentView.prototype._clear = function () { + var elMap = this._elMap; + elMap.each(function (el) { + removeEl(el, elMap); + }); + this._elMap = createHashMap(); + }; + + GraphicComponentView.prototype.dispose = function () { + this._clear(); + }; + + GraphicComponentView.type = 'graphic'; + return GraphicComponentView; + }(ComponentView); + + function createEl$1(id, targetElParent, elOption, elMap) { + var graphicType = elOption.type; + + if ("development" !== 'production') { + assert(graphicType, 'graphic type MUST be set'); + } + + var Clz = hasOwn(_nonShapeGraphicElements, graphicType) // Those graphic elements are not shapes. They should not be + // overwritten by users, so do them first. + ? _nonShapeGraphicElements[graphicType] : getShapeClass(graphicType); + + if ("development" !== 'production') { + assert(Clz, 'graphic type can not be found'); + } + + var el = new Clz(elOption); + targetElParent.add(el); + elMap.set(id, el); + inner$e(el).__ecGraphicId = id; + } + + function removeEl(elExisting, elMap) { + var existElParent = elExisting && elExisting.parent; + + if (existElParent) { + elExisting.type === 'group' && elExisting.traverse(function (el) { + removeEl(el, elMap); + }); + elMap.removeKey(inner$e(elExisting).__ecGraphicId); + existElParent.remove(elExisting); + } + } // Remove unnecessary props to avoid potential problems. + + + function getCleanedElOption(elOption) { + elOption = extend({}, elOption); + each(['id', 'parentId', '$action', 'hv', 'bounding', 'textContent'].concat(LOCATION_PARAMS), function (name) { + delete elOption[name]; + }); + return elOption; + } + + function isSetLoc(obj, props) { + var isSet; + each(props, function (prop) { + obj[prop] != null && obj[prop] !== 'auto' && (isSet = true); + }); + return isSet; + } + + function setKeyInfoToNewElOption(resultItem, newElOption) { + var existElOption = resultItem.existing; // Set id and type after id assigned. + + newElOption.id = resultItem.keyInfo.id; + !newElOption.type && existElOption && (newElOption.type = existElOption.type); // Set parent id if not specified + + if (newElOption.parentId == null) { + var newElParentOption = newElOption.parentOption; + + if (newElParentOption) { + newElOption.parentId = newElParentOption.id; + } else if (existElOption) { + newElOption.parentId = existElOption.parentId; + } + } // Clear + + + newElOption.parentOption = null; + } + + function mergeNewElOptionToExist(existList, index, newElOption) { + // Update existing options, for `getOption` feature. + var newElOptCopy = extend({}, newElOption); + var existElOption = existList[index]; + var $action = newElOption.$action || 'merge'; + + if ($action === 'merge') { + if (existElOption) { + if ("development" !== 'production') { + var newType = newElOption.type; + assert(!newType || existElOption.type === newType, 'Please set $action: "replace" to change `type`'); + } // We can ensure that newElOptCopy and existElOption are not + // the same object, so `merge` will not change newElOptCopy. + + + merge(existElOption, newElOptCopy, true); // Rigid body, use ignoreSize. + + mergeLayoutParam(existElOption, newElOptCopy, { + ignoreSize: true + }); // Will be used in render. + + copyLayoutParams(newElOption, existElOption); + } else { + existList[index] = newElOptCopy; + } + } else if ($action === 'replace') { + existList[index] = newElOptCopy; + } else if ($action === 'remove') { + // null will be cleaned later. + existElOption && (existList[index] = null); + } + } + + function setLayoutInfoToExist(existItem, newElOption) { + if (!existItem) { + return; + } + + existItem.hv = newElOption.hv = [// Rigid body, dont care `width`. + isSetLoc(newElOption, ['left', 'right']), // Rigid body, dont care `height`. + isSetLoc(newElOption, ['top', 'bottom'])]; // Give default group size. Otherwise layout error may occur. + + if (existItem.type === 'group') { + var existingGroupOpt = existItem; + var newGroupOpt = newElOption; + existingGroupOpt.width == null && (existingGroupOpt.width = newGroupOpt.width = 0); + existingGroupOpt.height == null && (existingGroupOpt.height = newGroupOpt.height = 0); + } + } + + function setEventData(el, graphicModel, elOption) { + var eventData = getECData(el).eventData; // Simple optimize for large amount of elements that no need event. + + if (!el.silent && !el.ignore && !eventData) { + eventData = getECData(el).eventData = { + componentType: 'graphic', + componentIndex: graphicModel.componentIndex, + name: el.name + }; + } // `elOption.info` enables user to mount some info on + // elements and use them in event handlers. + + + if (eventData) { + eventData.info = elOption.info; + } + } + + function install$x(registers) { + registers.registerComponentModel(GraphicComponentModel); + registers.registerComponentView(GraphicComponentView); + registers.registerPreprocessor(preprocessor); + } + + var DATA_ZOOM_AXIS_DIMENSIONS = ['x', 'y', 'radius', 'angle', 'single']; // Supported coords. + // FIXME: polar has been broken (but rarely used). + + var SERIES_COORDS = ['cartesian2d', 'polar', 'singleAxis']; + function isCoordSupported(seriesModel) { + var coordType = seriesModel.get('coordinateSystem'); + return indexOf(SERIES_COORDS, coordType) >= 0; + } + function getAxisMainType(axisDim) { + if ("development" !== 'production') { + assert(axisDim); + } + + return axisDim + 'Axis'; + } + /** + * If two dataZoomModels has the same axis controlled, we say that they are 'linked'. + * This function finds all linked dataZoomModels start from the given payload. + */ + + function findEffectedDataZooms(ecModel, payload) { + // Key: `DataZoomAxisDimension` + var axisRecords = createHashMap(); + var effectedModels = []; // Key: uid of dataZoomModel + + var effectedModelMap = createHashMap(); // Find the dataZooms specified by payload. + + ecModel.eachComponent({ + mainType: 'dataZoom', + query: payload + }, function (dataZoomModel) { + if (!effectedModelMap.get(dataZoomModel.uid)) { + addToEffected(dataZoomModel); + } + }); // Start from the given dataZoomModels, travel the graph to find + // all of the linked dataZoom models. + + var foundNewLink; + + do { + foundNewLink = false; + ecModel.eachComponent('dataZoom', processSingle); + } while (foundNewLink); + + function processSingle(dataZoomModel) { + if (!effectedModelMap.get(dataZoomModel.uid) && isLinked(dataZoomModel)) { + addToEffected(dataZoomModel); + foundNewLink = true; + } + } + + function addToEffected(dataZoom) { + effectedModelMap.set(dataZoom.uid, true); + effectedModels.push(dataZoom); + markAxisControlled(dataZoom); + } + + function isLinked(dataZoomModel) { + var isLink = false; + dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) { + var axisIdxArr = axisRecords.get(axisDim); + + if (axisIdxArr && axisIdxArr[axisIndex]) { + isLink = true; + } + }); + return isLink; + } + + function markAxisControlled(dataZoomModel) { + dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) { + (axisRecords.get(axisDim) || axisRecords.set(axisDim, []))[axisIndex] = true; + }); + } + + return effectedModels; + } + /** + * Find the first target coordinate system. + * Available after model built. + * + * @return Like { + * grid: [ + * {model: coord0, axisModels: [axis1, axis3], coordIndex: 1}, + * {model: coord1, axisModels: [axis0, axis2], coordIndex: 0}, + * ... + * ], // cartesians must not be null/undefined. + * polar: [ + * {model: coord0, axisModels: [axis4], coordIndex: 0}, + * ... + * ], // polars must not be null/undefined. + * singleAxis: [ + * {model: coord0, axisModels: [], coordIndex: 0} + * ] + * } + */ + + function collectReferCoordSysModelInfo(dataZoomModel) { + var ecModel = dataZoomModel.ecModel; + var coordSysInfoWrap = { + infoList: [], + infoMap: createHashMap() + }; + dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) { + var axisModel = ecModel.getComponent(getAxisMainType(axisDim), axisIndex); + + if (!axisModel) { + return; + } + + var coordSysModel = axisModel.getCoordSysModel(); + + if (!coordSysModel) { + return; + } + + var coordSysUid = coordSysModel.uid; + var coordSysInfo = coordSysInfoWrap.infoMap.get(coordSysUid); + + if (!coordSysInfo) { + coordSysInfo = { + model: coordSysModel, + axisModels: [] + }; + coordSysInfoWrap.infoList.push(coordSysInfo); + coordSysInfoWrap.infoMap.set(coordSysUid, coordSysInfo); + } + + coordSysInfo.axisModels.push(axisModel); + }); + return coordSysInfoWrap; + } + + var DataZoomAxisInfo = + /** @class */ + function () { + function DataZoomAxisInfo() { + this.indexList = []; + this.indexMap = []; + } + + DataZoomAxisInfo.prototype.add = function (axisCmptIdx) { + // Remove duplication. + if (!this.indexMap[axisCmptIdx]) { + this.indexList.push(axisCmptIdx); + this.indexMap[axisCmptIdx] = true; + } + }; + + return DataZoomAxisInfo; + }(); + + var DataZoomModel = + /** @class */ + function (_super) { + __extends(DataZoomModel, _super); + + function DataZoomModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = DataZoomModel.type; + _this._autoThrottle = true; + _this._noTarget = true; + /** + * It is `[rangeModeForMin, rangeModeForMax]`. + * The optional values for `rangeMode`: + * + `'value'` mode: the axis extent will always be determined by + * `dataZoom.startValue` and `dataZoom.endValue`, despite + * how data like and how `axis.min` and `axis.max` are. + * + `'percent'` mode: `100` represents 100% of the `[dMin, dMax]`, + * where `dMin` is `axis.min` if `axis.min` specified, otherwise `data.extent[0]`, + * and `dMax` is `axis.max` if `axis.max` specified, otherwise `data.extent[1]`. + * Axis extent will be determined by the result of the percent of `[dMin, dMax]`. + * + * For example, when users are using dynamic data (update data periodically via `setOption`), + * if in `'value`' mode, the window will be kept in a fixed value range despite how + * data are appended, while if in `'percent'` mode, whe window range will be changed alone with + * the appended data (suppose `axis.min` and `axis.max` are not specified). + */ + + _this._rangePropMode = ['percent', 'percent']; + return _this; + } + + DataZoomModel.prototype.init = function (option, parentModel, ecModel) { + var inputRawOption = retrieveRawOption(option); + /** + * Suppose a "main process" start at the point that model prepared (that is, + * model initialized or merged or method called in `action`). + * We should keep the `main process` idempotent, that is, given a set of values + * on `option`, we get the same result. + * + * But sometimes, values on `option` will be updated for providing users + * a "final calculated value" (`dataZoomProcessor` will do that). Those value + * should not be the base/input of the `main process`. + * + * So in that case we should save and keep the input of the `main process` + * separately, called `settledOption`. + * + * For example, consider the case: + * (Step_1) brush zoom the grid by `toolbox.dataZoom`, + * where the original input `option.startValue`, `option.endValue` are earsed by + * calculated value. + * (Step)2) click the legend to hide and show a series, + * where the new range is calculated by the earsed `startValue` and `endValue`, + * which brings incorrect result. + */ + + this.settledOption = inputRawOption; + this.mergeDefaultAndTheme(option, ecModel); + + this._doInit(inputRawOption); + }; + + DataZoomModel.prototype.mergeOption = function (newOption) { + var inputRawOption = retrieveRawOption(newOption); //FIX #2591 + + merge(this.option, newOption, true); + merge(this.settledOption, inputRawOption, true); + + this._doInit(inputRawOption); + }; + + DataZoomModel.prototype._doInit = function (inputRawOption) { + var thisOption = this.option; // if (!env.canvasSupported) { + // thisOption.realtime = false; + // } + + this._setDefaultThrottle(inputRawOption); + + this._updateRangeUse(inputRawOption); + + var settledOption = this.settledOption; + each([['start', 'startValue'], ['end', 'endValue']], function (names, index) { + // start/end has higher priority over startValue/endValue if they + // both set, but we should make chart.setOption({endValue: 1000}) + // effective, rather than chart.setOption({endValue: 1000, end: null}). + if (this._rangePropMode[index] === 'value') { + thisOption[names[0]] = settledOption[names[0]] = null; + } // Otherwise do nothing and use the merge result. + + }, this); + + this._resetTarget(); + }; + + DataZoomModel.prototype._resetTarget = function () { + var optionOrient = this.get('orient', true); + var targetAxisIndexMap = this._targetAxisInfoMap = createHashMap(); + + var hasAxisSpecified = this._fillSpecifiedTargetAxis(targetAxisIndexMap); + + if (hasAxisSpecified) { + this._orient = optionOrient || this._makeAutoOrientByTargetAxis(); + } else { + this._orient = optionOrient || 'horizontal'; + + this._fillAutoTargetAxisByOrient(targetAxisIndexMap, this._orient); + } + + this._noTarget = true; + targetAxisIndexMap.each(function (axisInfo) { + if (axisInfo.indexList.length) { + this._noTarget = false; + } + }, this); + }; + + DataZoomModel.prototype._fillSpecifiedTargetAxis = function (targetAxisIndexMap) { + var hasAxisSpecified = false; + each(DATA_ZOOM_AXIS_DIMENSIONS, function (axisDim) { + var refering = this.getReferringComponents(getAxisMainType(axisDim), MULTIPLE_REFERRING); // When user set axisIndex as a empty array, we think that user specify axisIndex + // but do not want use auto mode. Because empty array may be encountered when + // some error occured. + + if (!refering.specified) { + return; + } + + hasAxisSpecified = true; + var axisInfo = new DataZoomAxisInfo(); + each(refering.models, function (axisModel) { + axisInfo.add(axisModel.componentIndex); + }); + targetAxisIndexMap.set(axisDim, axisInfo); + }, this); + return hasAxisSpecified; + }; + + DataZoomModel.prototype._fillAutoTargetAxisByOrient = function (targetAxisIndexMap, orient) { + var ecModel = this.ecModel; + var needAuto = true; // Find axis that parallel to dataZoom as default. + + if (needAuto) { + var axisDim = orient === 'vertical' ? 'y' : 'x'; + var axisModels = ecModel.findComponents({ + mainType: axisDim + 'Axis' + }); + setParallelAxis(axisModels, axisDim); + } // Find axis that parallel to dataZoom as default. + + + if (needAuto) { + var axisModels = ecModel.findComponents({ + mainType: 'singleAxis', + filter: function (axisModel) { + return axisModel.get('orient', true) === orient; + } + }); + setParallelAxis(axisModels, 'single'); + } + + function setParallelAxis(axisModels, axisDim) { + // At least use the first parallel axis as the target axis. + var axisModel = axisModels[0]; + + if (!axisModel) { + return; + } + + var axisInfo = new DataZoomAxisInfo(); + axisInfo.add(axisModel.componentIndex); + targetAxisIndexMap.set(axisDim, axisInfo); + needAuto = false; // Find parallel axes in the same grid. + + if (axisDim === 'x' || axisDim === 'y') { + var gridModel_1 = axisModel.getReferringComponents('grid', SINGLE_REFERRING).models[0]; + gridModel_1 && each(axisModels, function (axModel) { + if (axisModel.componentIndex !== axModel.componentIndex && gridModel_1 === axModel.getReferringComponents('grid', SINGLE_REFERRING).models[0]) { + axisInfo.add(axModel.componentIndex); + } + }); + } + } + + if (needAuto) { + // If no parallel axis, find the first category axis as default. (Also consider polar). + each(DATA_ZOOM_AXIS_DIMENSIONS, function (axisDim) { + if (!needAuto) { + return; + } + + var axisModels = ecModel.findComponents({ + mainType: getAxisMainType(axisDim), + filter: function (axisModel) { + return axisModel.get('type', true) === 'category'; + } + }); + + if (axisModels[0]) { + var axisInfo = new DataZoomAxisInfo(); + axisInfo.add(axisModels[0].componentIndex); + targetAxisIndexMap.set(axisDim, axisInfo); + needAuto = false; + } + }, this); + } + }; + + DataZoomModel.prototype._makeAutoOrientByTargetAxis = function () { + var dim; // Find the first axis + + this.eachTargetAxis(function (axisDim) { + !dim && (dim = axisDim); + }, this); + return dim === 'y' ? 'vertical' : 'horizontal'; + }; + + DataZoomModel.prototype._setDefaultThrottle = function (inputRawOption) { + // When first time user set throttle, auto throttle ends. + if (inputRawOption.hasOwnProperty('throttle')) { + this._autoThrottle = false; + } + + if (this._autoThrottle) { + var globalOption = this.ecModel.option; + this.option.throttle = globalOption.animation && globalOption.animationDurationUpdate > 0 ? 100 : 20; + } + }; + + DataZoomModel.prototype._updateRangeUse = function (inputRawOption) { + var rangePropMode = this._rangePropMode; + var rangeModeInOption = this.get('rangeMode'); + each([['start', 'startValue'], ['end', 'endValue']], function (names, index) { + var percentSpecified = inputRawOption[names[0]] != null; + var valueSpecified = inputRawOption[names[1]] != null; + + if (percentSpecified && !valueSpecified) { + rangePropMode[index] = 'percent'; + } else if (!percentSpecified && valueSpecified) { + rangePropMode[index] = 'value'; + } else if (rangeModeInOption) { + rangePropMode[index] = rangeModeInOption[index]; + } else if (percentSpecified) { + // percentSpecified && valueSpecified + rangePropMode[index] = 'percent'; + } // else remain its original setting. + + }); + }; + + DataZoomModel.prototype.noTarget = function () { + return this._noTarget; + }; + + DataZoomModel.prototype.getFirstTargetAxisModel = function () { + var firstAxisModel; + this.eachTargetAxis(function (axisDim, axisIndex) { + if (firstAxisModel == null) { + firstAxisModel = this.ecModel.getComponent(getAxisMainType(axisDim), axisIndex); + } + }, this); + return firstAxisModel; + }; + /** + * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel + */ + + + DataZoomModel.prototype.eachTargetAxis = function (callback, context) { + this._targetAxisInfoMap.each(function (axisInfo, axisDim) { + each(axisInfo.indexList, function (axisIndex) { + callback.call(context, axisDim, axisIndex); + }); + }); + }; + /** + * @return If not found, return null/undefined. + */ + + + DataZoomModel.prototype.getAxisProxy = function (axisDim, axisIndex) { + var axisModel = this.getAxisModel(axisDim, axisIndex); + + if (axisModel) { + return axisModel.__dzAxisProxy; + } + }; + /** + * @return If not found, return null/undefined. + */ + + + DataZoomModel.prototype.getAxisModel = function (axisDim, axisIndex) { + if ("development" !== 'production') { + assert(axisDim && axisIndex != null); + } + + var axisInfo = this._targetAxisInfoMap.get(axisDim); + + if (axisInfo && axisInfo.indexMap[axisIndex]) { + return this.ecModel.getComponent(getAxisMainType(axisDim), axisIndex); + } + }; + /** + * If not specified, set to undefined. + */ + + + DataZoomModel.prototype.setRawRange = function (opt) { + var thisOption = this.option; + var settledOption = this.settledOption; + each([['start', 'startValue'], ['end', 'endValue']], function (names) { + // Consider the pair : + // If one has value and the other one is `null/undefined`, we both set them + // to `settledOption`. This strategy enables the feature to clear the original + // value in `settledOption` to `null/undefined`. + // But if both of them are `null/undefined`, we do not set them to `settledOption` + // and keep `settledOption` with the original value. This strategy enables users to + // only set but not set when calling + // `dispatchAction`. + // The pair is treated in the same way. + if (opt[names[0]] != null || opt[names[1]] != null) { + thisOption[names[0]] = settledOption[names[0]] = opt[names[0]]; + thisOption[names[1]] = settledOption[names[1]] = opt[names[1]]; + } + }, this); + + this._updateRangeUse(opt); + }; + + DataZoomModel.prototype.setCalculatedRange = function (opt) { + var option = this.option; + each(['start', 'startValue', 'end', 'endValue'], function (name) { + option[name] = opt[name]; + }); + }; + + DataZoomModel.prototype.getPercentRange = function () { + var axisProxy = this.findRepresentativeAxisProxy(); + + if (axisProxy) { + return axisProxy.getDataPercentWindow(); + } + }; + /** + * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0); + * + * @return [startValue, endValue] value can only be '-' or finite number. + */ + + + DataZoomModel.prototype.getValueRange = function (axisDim, axisIndex) { + if (axisDim == null && axisIndex == null) { + var axisProxy = this.findRepresentativeAxisProxy(); + + if (axisProxy) { + return axisProxy.getDataValueWindow(); + } + } else { + return this.getAxisProxy(axisDim, axisIndex).getDataValueWindow(); + } + }; + /** + * @param axisModel If axisModel given, find axisProxy + * corresponding to the axisModel + */ + + + DataZoomModel.prototype.findRepresentativeAxisProxy = function (axisModel) { + if (axisModel) { + return axisModel.__dzAxisProxy; + } // Find the first hosted axisProxy + + + var firstProxy; + + var axisDimList = this._targetAxisInfoMap.keys(); + + for (var i = 0; i < axisDimList.length; i++) { + var axisDim = axisDimList[i]; + + var axisInfo = this._targetAxisInfoMap.get(axisDim); + + for (var j = 0; j < axisInfo.indexList.length; j++) { + var proxy = this.getAxisProxy(axisDim, axisInfo.indexList[j]); + + if (proxy.hostedBy(this)) { + return proxy; + } + + if (!firstProxy) { + firstProxy = proxy; + } + } + } // If no hosted proxy found, still need to return a proxy. + // This case always happens in toolbox dataZoom, where axes are all hosted by + // other dataZooms. + + + return firstProxy; + }; + + DataZoomModel.prototype.getRangePropMode = function () { + return this._rangePropMode.slice(); + }; + + DataZoomModel.prototype.getOrient = function () { + if ("development" !== 'production') { + // Should not be called before initialized. + assert(this._orient); + } + + return this._orient; + }; + + DataZoomModel.type = 'dataZoom'; + DataZoomModel.dependencies = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series', 'toolbox']; + DataZoomModel.defaultOption = { + zlevel: 0, + z: 4, + filterMode: 'filter', + start: 0, + end: 100 + }; + return DataZoomModel; + }(ComponentModel); + /** + * Retrieve the those raw params from option, which will be cached separately. + * becasue they will be overwritten by normalized/calculated values in the main + * process. + */ + + + function retrieveRawOption(option) { + var ret = {}; + each(['start', 'end', 'startValue', 'endValue', 'throttle'], function (name) { + option.hasOwnProperty(name) && (ret[name] = option[name]); + }); + return ret; + } + + var SelectDataZoomModel = + /** @class */ + function (_super) { + __extends(SelectDataZoomModel, _super); + + function SelectDataZoomModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SelectDataZoomModel.type; + return _this; + } + + SelectDataZoomModel.type = 'dataZoom.select'; + return SelectDataZoomModel; + }(DataZoomModel); + + var DataZoomView = + /** @class */ + function (_super) { + __extends(DataZoomView, _super); + + function DataZoomView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = DataZoomView.type; + return _this; + } + + DataZoomView.prototype.render = function (dataZoomModel, ecModel, api, payload) { + this.dataZoomModel = dataZoomModel; + this.ecModel = ecModel; + this.api = api; + }; + + DataZoomView.type = 'dataZoom'; + return DataZoomView; + }(ComponentView); + + var SelectDataZoomView = + /** @class */ + function (_super) { + __extends(SelectDataZoomView, _super); + + function SelectDataZoomView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SelectDataZoomView.type; + return _this; + } + + SelectDataZoomView.type = 'dataZoom.select'; + return SelectDataZoomView; + }(DataZoomView); + + var each$8 = each; + var asc$1 = asc; + /** + * Operate single axis. + * One axis can only operated by one axis operator. + * Different dataZoomModels may be defined to operate the same axis. + * (i.e. 'inside' data zoom and 'slider' data zoom components) + * So dataZoomModels share one axisProxy in that case. + */ + + var AxisProxy = + /** @class */ + function () { + function AxisProxy(dimName, axisIndex, dataZoomModel, ecModel) { + this._dimName = dimName; + this._axisIndex = axisIndex; + this.ecModel = ecModel; + this._dataZoomModel = dataZoomModel; // /** + // * @readOnly + // * @private + // */ + // this.hasSeriesStacked; + } + /** + * Whether the axisProxy is hosted by dataZoomModel. + */ + + + AxisProxy.prototype.hostedBy = function (dataZoomModel) { + return this._dataZoomModel === dataZoomModel; + }; + /** + * @return Value can only be NaN or finite value. + */ + + + AxisProxy.prototype.getDataValueWindow = function () { + return this._valueWindow.slice(); + }; + /** + * @return {Array.} + */ + + + AxisProxy.prototype.getDataPercentWindow = function () { + return this._percentWindow.slice(); + }; + + AxisProxy.prototype.getTargetSeriesModels = function () { + var seriesModels = []; + this.ecModel.eachSeries(function (seriesModel) { + if (isCoordSupported(seriesModel)) { + var axisMainType = getAxisMainType(this._dimName); + var axisModel = seriesModel.getReferringComponents(axisMainType, SINGLE_REFERRING).models[0]; + + if (axisModel && this._axisIndex === axisModel.componentIndex) { + seriesModels.push(seriesModel); + } + } + }, this); + return seriesModels; + }; + + AxisProxy.prototype.getAxisModel = function () { + return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex); + }; + + AxisProxy.prototype.getMinMaxSpan = function () { + return clone(this._minMaxSpan); + }; + /** + * Only calculate by given range and this._dataExtent, do not change anything. + */ + + + AxisProxy.prototype.calculateDataWindow = function (opt) { + var dataExtent = this._dataExtent; + var axisModel = this.getAxisModel(); + var scale = axisModel.axis.scale; + + var rangePropMode = this._dataZoomModel.getRangePropMode(); + + var percentExtent = [0, 100]; + var percentWindow = []; + var valueWindow = []; + var hasPropModeValue; + each$8(['start', 'end'], function (prop, idx) { + var boundPercent = opt[prop]; + var boundValue = opt[prop + 'Value']; // Notice: dataZoom is based either on `percentProp` ('start', 'end') or + // on `valueProp` ('startValue', 'endValue'). (They are based on the data extent + // but not min/max of axis, which will be calculated by data window then). + // The former one is suitable for cases that a dataZoom component controls multiple + // axes with different unit or extent, and the latter one is suitable for accurate + // zoom by pixel (e.g., in dataZoomSelect). + // we use `getRangePropMode()` to mark which prop is used. `rangePropMode` is updated + // only when setOption or dispatchAction, otherwise it remains its original value. + // (Why not only record `percentProp` and always map to `valueProp`? Because + // the map `valueProp` -> `percentProp` -> `valueProp` probably not the original + // `valueProp`. consider two axes constrolled by one dataZoom. They have different + // data extent. All of values that are overflow the `dataExtent` will be calculated + // to percent '100%'). + + if (rangePropMode[idx] === 'percent') { + boundPercent == null && (boundPercent = percentExtent[idx]); // Use scale.parse to math round for category or time axis. + + boundValue = scale.parse(linearMap(boundPercent, percentExtent, dataExtent)); + } else { + hasPropModeValue = true; + boundValue = boundValue == null ? dataExtent[idx] : scale.parse(boundValue); // Calculating `percent` from `value` may be not accurate, because + // This calculation can not be inversed, because all of values that + // are overflow the `dataExtent` will be calculated to percent '100%' + + boundPercent = linearMap(boundValue, dataExtent, percentExtent); + } // valueWindow[idx] = round(boundValue); + // percentWindow[idx] = round(boundPercent); + + + valueWindow[idx] = boundValue; + percentWindow[idx] = boundPercent; + }); + asc$1(valueWindow); + asc$1(percentWindow); // The windows from user calling of `dispatchAction` might be out of the extent, + // or do not obey the `min/maxSpan`, `min/maxValueSpan`. But we dont restrict window + // by `zoomLock` here, because we see `zoomLock` just as a interaction constraint, + // where API is able to initialize/modify the window size even though `zoomLock` + // specified. + + var spans = this._minMaxSpan; + hasPropModeValue ? restrictSet(valueWindow, percentWindow, dataExtent, percentExtent, false) : restrictSet(percentWindow, valueWindow, percentExtent, dataExtent, true); + + function restrictSet(fromWindow, toWindow, fromExtent, toExtent, toValue) { + var suffix = toValue ? 'Span' : 'ValueSpan'; + sliderMove(0, fromWindow, fromExtent, 'all', spans['min' + suffix], spans['max' + suffix]); + + for (var i = 0; i < 2; i++) { + toWindow[i] = linearMap(fromWindow[i], fromExtent, toExtent, true); + toValue && (toWindow[i] = scale.parse(toWindow[i])); + } + } + + return { + valueWindow: valueWindow, + percentWindow: percentWindow + }; + }; + /** + * Notice: reset should not be called before series.restoreData() called, + * so it is recommanded to be called in "process stage" but not "model init + * stage". + */ + + + AxisProxy.prototype.reset = function (dataZoomModel) { + if (dataZoomModel !== this._dataZoomModel) { + return; + } + + var targetSeries = this.getTargetSeriesModels(); // Culculate data window and data extent, and record them. + + this._dataExtent = calculateDataExtent(this, this._dimName, targetSeries); // `calculateDataWindow` uses min/maxSpan. + + this._updateMinMaxSpan(); + + var dataWindow = this.calculateDataWindow(dataZoomModel.settledOption); + this._valueWindow = dataWindow.valueWindow; + this._percentWindow = dataWindow.percentWindow; // Update axis setting then. + + this._setAxisModel(); + }; + + AxisProxy.prototype.filterData = function (dataZoomModel, api) { + if (dataZoomModel !== this._dataZoomModel) { + return; + } + + var axisDim = this._dimName; + var seriesModels = this.getTargetSeriesModels(); + var filterMode = dataZoomModel.get('filterMode'); + var valueWindow = this._valueWindow; + + if (filterMode === 'none') { + return; + } // FIXME + // Toolbox may has dataZoom injected. And if there are stacked bar chart + // with NaN data, NaN will be filtered and stack will be wrong. + // So we need to force the mode to be set empty. + // In fect, it is not a big deal that do not support filterMode-'filter' + // when using toolbox#dataZoom, utill tooltip#dataZoom support "single axis + // selection" some day, which might need "adapt to data extent on the + // otherAxis", which is disabled by filterMode-'empty'. + // But currently, stack has been fixed to based on value but not index, + // so this is not an issue any more. + // let otherAxisModel = this.getOtherAxisModel(); + // if (dataZoomModel.get('$fromToolbox') + // && otherAxisModel + // && otherAxisModel.hasSeriesStacked + // ) { + // filterMode = 'empty'; + // } + // TODO + // filterMode 'weakFilter' and 'empty' is not optimized for huge data yet. + + + each$8(seriesModels, function (seriesModel) { + var seriesData = seriesModel.getData(); + var dataDims = seriesData.mapDimensionsAll(axisDim); + + if (!dataDims.length) { + return; + } + + if (filterMode === 'weakFilter') { + var store_1 = seriesData.getStore(); + var dataDimIndices_1 = map(dataDims, function (dim) { + return seriesData.getDimensionIndex(dim); + }, seriesData); + seriesData.filterSelf(function (dataIndex) { + var leftOut; + var rightOut; + var hasValue; + + for (var i = 0; i < dataDims.length; i++) { + var value = store_1.get(dataDimIndices_1[i], dataIndex); + var thisHasValue = !isNaN(value); + var thisLeftOut = value < valueWindow[0]; + var thisRightOut = value > valueWindow[1]; + + if (thisHasValue && !thisLeftOut && !thisRightOut) { + return true; + } + + thisHasValue && (hasValue = true); + thisLeftOut && (leftOut = true); + thisRightOut && (rightOut = true); + } // If both left out and right out, do not filter. + + + return hasValue && leftOut && rightOut; + }); + } else { + each$8(dataDims, function (dim) { + if (filterMode === 'empty') { + seriesModel.setData(seriesData = seriesData.map(dim, function (value) { + return !isInWindow(value) ? NaN : value; + })); + } else { + var range = {}; + range[dim] = valueWindow; // console.time('select'); + + seriesData.selectRange(range); // console.timeEnd('select'); + } + }); + } + + each$8(dataDims, function (dim) { + seriesData.setApproximateExtent(valueWindow, dim); + }); + }); + + function isInWindow(value) { + return value >= valueWindow[0] && value <= valueWindow[1]; + } + }; + + AxisProxy.prototype._updateMinMaxSpan = function () { + var minMaxSpan = this._minMaxSpan = {}; + var dataZoomModel = this._dataZoomModel; + var dataExtent = this._dataExtent; + each$8(['min', 'max'], function (minMax) { + var percentSpan = dataZoomModel.get(minMax + 'Span'); + var valueSpan = dataZoomModel.get(minMax + 'ValueSpan'); + valueSpan != null && (valueSpan = this.getAxisModel().axis.scale.parse(valueSpan)); // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan + + if (valueSpan != null) { + percentSpan = linearMap(dataExtent[0] + valueSpan, dataExtent, [0, 100], true); + } else if (percentSpan != null) { + valueSpan = linearMap(percentSpan, [0, 100], dataExtent, true) - dataExtent[0]; + } + + minMaxSpan[minMax + 'Span'] = percentSpan; + minMaxSpan[minMax + 'ValueSpan'] = valueSpan; + }, this); + }; + + AxisProxy.prototype._setAxisModel = function () { + var axisModel = this.getAxisModel(); + var percentWindow = this._percentWindow; + var valueWindow = this._valueWindow; + + if (!percentWindow) { + return; + } // [0, 500]: arbitrary value, guess axis extent. + + + var precision = getPixelPrecision(valueWindow, [0, 500]); + precision = Math.min(precision, 20); // For value axis, if min/max/scale are not set, we just use the extent obtained + // by series data, which may be a little different from the extent calculated by + // `axisHelper.getScaleExtent`. But the different just affects the experience a + // little when zooming. So it will not be fixed until some users require it strongly. + + var rawExtentInfo = axisModel.axis.scale.rawExtentInfo; + + if (percentWindow[0] !== 0) { + rawExtentInfo.setDeterminedMinMax('min', +valueWindow[0].toFixed(precision)); + } + + if (percentWindow[1] !== 100) { + rawExtentInfo.setDeterminedMinMax('max', +valueWindow[1].toFixed(precision)); + } + + rawExtentInfo.freeze(); + }; + + return AxisProxy; + }(); + + function calculateDataExtent(axisProxy, axisDim, seriesModels) { + var dataExtent = [Infinity, -Infinity]; + each$8(seriesModels, function (seriesModel) { + unionAxisExtentFromData(dataExtent, seriesModel.getData(), axisDim); + }); // It is important to get "consistent" extent when more then one axes is + // controlled by a `dataZoom`, otherwise those axes will not be synchronized + // when zooming. But it is difficult to know what is "consistent", considering + // axes have different type or even different meanings (For example, two + // time axes are used to compare data of the same date in different years). + // So basically dataZoom just obtains extent by series.data (in category axis + // extent can be obtained from axis.data). + // Nevertheless, user can set min/max/scale on axes to make extent of axes + // consistent. + + var axisModel = axisProxy.getAxisModel(); + var rawExtentResult = ensureScaleRawExtentInfo(axisModel.axis.scale, axisModel, dataExtent).calculate(); + return [rawExtentResult.min, rawExtentResult.max]; + } + + var dataZoomProcessor = { + // `dataZoomProcessor` will only be performed in needed series. Consider if + // there is a line series and a pie series, it is better not to update the + // line series if only pie series is needed to be updated. + getTargetSeries: function (ecModel) { + function eachAxisModel(cb) { + ecModel.eachComponent('dataZoom', function (dataZoomModel) { + dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) { + var axisModel = ecModel.getComponent(getAxisMainType(axisDim), axisIndex); + cb(axisDim, axisIndex, axisModel, dataZoomModel); + }); + }); + } // FIXME: it brings side-effect to `getTargetSeries`. + // Prepare axis proxies. + + + eachAxisModel(function (axisDim, axisIndex, axisModel, dataZoomModel) { + // dispose all last axis proxy, in case that some axis are deleted. + axisModel.__dzAxisProxy = null; + }); + var proxyList = []; + eachAxisModel(function (axisDim, axisIndex, axisModel, dataZoomModel) { + // Different dataZooms may constrol the same axis. In that case, + // an axisProxy serves both of them. + if (!axisModel.__dzAxisProxy) { + // Use the first dataZoomModel as the main model of axisProxy. + axisModel.__dzAxisProxy = new AxisProxy(axisDim, axisIndex, dataZoomModel, ecModel); + proxyList.push(axisModel.__dzAxisProxy); + } + }); + var seriesModelMap = createHashMap(); + each(proxyList, function (axisProxy) { + each(axisProxy.getTargetSeriesModels(), function (seriesModel) { + seriesModelMap.set(seriesModel.uid, seriesModel); + }); + }); + return seriesModelMap; + }, + // Consider appendData, where filter should be performed. Because data process is + // in block mode currently, it is not need to worry about that the overallProgress + // execute every frame. + overallReset: function (ecModel, api) { + ecModel.eachComponent('dataZoom', function (dataZoomModel) { + // We calculate window and reset axis here but not in model + // init stage and not after action dispatch handler, because + // reset should be called after seriesData.restoreData. + dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) { + dataZoomModel.getAxisProxy(axisDim, axisIndex).reset(dataZoomModel); + }); // Caution: data zoom filtering is order sensitive when using + // percent range and no min/max/scale set on axis. + // For example, we have dataZoom definition: + // [ + // {xAxisIndex: 0, start: 30, end: 70}, + // {yAxisIndex: 0, start: 20, end: 80} + // ] + // In this case, [20, 80] of y-dataZoom should be based on data + // that have filtered by x-dataZoom using range of [30, 70], + // but should not be based on full raw data. Thus sliding + // x-dataZoom will change both ranges of xAxis and yAxis, + // while sliding y-dataZoom will only change the range of yAxis. + // So we should filter x-axis after reset x-axis immediately, + // and then reset y-axis and filter y-axis. + + dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) { + dataZoomModel.getAxisProxy(axisDim, axisIndex).filterData(dataZoomModel, api); + }); + }); + ecModel.eachComponent('dataZoom', function (dataZoomModel) { + // Fullfill all of the range props so that user + // is able to get them from chart.getOption(). + var axisProxy = dataZoomModel.findRepresentativeAxisProxy(); + + if (axisProxy) { + var percentRange = axisProxy.getDataPercentWindow(); + var valueRange = axisProxy.getDataValueWindow(); + dataZoomModel.setCalculatedRange({ + start: percentRange[0], + end: percentRange[1], + startValue: valueRange[0], + endValue: valueRange[1] + }); + } + }); + } + }; + + function installDataZoomAction(registers) { + registers.registerAction('dataZoom', function (payload, ecModel) { + var effectedModels = findEffectedDataZooms(ecModel, payload); + each(effectedModels, function (dataZoomModel) { + dataZoomModel.setRawRange({ + start: payload.start, + end: payload.end, + startValue: payload.startValue, + endValue: payload.endValue + }); + }); + }); + } + + var installed = false; + function installCommon(registers) { + if (installed) { + return; + } + + installed = true; + registers.registerProcessor(registers.PRIORITY.PROCESSOR.FILTER, dataZoomProcessor); + installDataZoomAction(registers); + registers.registerSubTypeDefaulter('dataZoom', function () { + // Default 'slider' when no type specified. + return 'slider'; + }); + } + + function install$y(registers) { + registers.registerComponentModel(SelectDataZoomModel); + registers.registerComponentView(SelectDataZoomView); + installCommon(registers); + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + var ToolboxFeature = + /** @class */ + function () { + function ToolboxFeature() {} + + return ToolboxFeature; + }(); + var features = {}; + function registerFeature(name, ctor) { + features[name] = ctor; + } + function getFeature(name) { + return features[name]; + } + + var ToolboxModel = + /** @class */ + function (_super) { + __extends(ToolboxModel, _super); + + function ToolboxModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ToolboxModel.type; + return _this; + } + + ToolboxModel.prototype.optionUpdated = function () { + _super.prototype.optionUpdated.apply(this, arguments); + + var ecModel = this.ecModel; + each(this.option.feature, function (featureOpt, featureName) { + var Feature = getFeature(featureName); + + if (Feature) { + if (Feature.getDefaultOption) { + Feature.defaultOption = Feature.getDefaultOption(ecModel); + } + + merge(featureOpt, Feature.defaultOption); + } + }); + }; + + ToolboxModel.type = 'toolbox'; + ToolboxModel.layoutMode = { + type: 'box', + ignoreSize: true + }; + ToolboxModel.defaultOption = { + show: true, + z: 6, + zlevel: 0, + orient: 'horizontal', + left: 'right', + top: 'top', + // right + // bottom + backgroundColor: 'transparent', + borderColor: '#ccc', + borderRadius: 0, + borderWidth: 0, + padding: 5, + itemSize: 15, + itemGap: 8, + showTitle: true, + iconStyle: { + borderColor: '#666', + color: 'none' + }, + emphasis: { + iconStyle: { + borderColor: '#3E98C5' + } + }, + // textStyle: {}, + // feature + tooltip: { + show: false, + position: 'bottom' + } + }; + return ToolboxModel; + }(ComponentModel); + + /** + * Layout list like component. + * It will box layout each items in group of component and then position the whole group in the viewport + * @param {module:zrender/group/Group} group + * @param {module:echarts/model/Component} componentModel + * @param {module:echarts/ExtensionAPI} + */ + + function layout$3(group, componentModel, api) { + var boxLayoutParams = componentModel.getBoxLayoutParams(); + var padding = componentModel.get('padding'); + var viewportSize = { + width: api.getWidth(), + height: api.getHeight() + }; + var rect = getLayoutRect(boxLayoutParams, viewportSize, padding); + box(componentModel.get('orient'), group, componentModel.get('itemGap'), rect.width, rect.height); + positionElement(group, boxLayoutParams, viewportSize, padding); + } + function makeBackground(rect, componentModel) { + var padding = normalizeCssArray$1(componentModel.get('padding')); + var style = componentModel.getItemStyle(['color', 'opacity']); + style.fill = componentModel.get('backgroundColor'); + rect = new Rect({ + shape: { + x: rect.x - padding[3], + y: rect.y - padding[0], + width: rect.width + padding[1] + padding[3], + height: rect.height + padding[0] + padding[2], + r: componentModel.get('borderRadius') + }, + style: style, + silent: true, + z2: -1 + }); // FIXME + // `subPixelOptimizeRect` may bring some gap between edge of viewpart + // and background rect when setting like `left: 0`, `top: 0`. + // graphic.subPixelOptimizeRect(rect); + + return rect; + } + + var ToolboxView = + /** @class */ + function (_super) { + __extends(ToolboxView, _super); + + function ToolboxView() { + return _super !== null && _super.apply(this, arguments) || this; + } + + ToolboxView.prototype.render = function (toolboxModel, ecModel, api, payload) { + var group = this.group; + group.removeAll(); + + if (!toolboxModel.get('show')) { + return; + } + + var itemSize = +toolboxModel.get('itemSize'); + var featureOpts = toolboxModel.get('feature') || {}; + var features = this._features || (this._features = {}); + var featureNames = []; + each(featureOpts, function (opt, name) { + featureNames.push(name); + }); + new DataDiffer(this._featureNames || [], featureNames).add(processFeature).update(processFeature).remove(curry(processFeature, null)).execute(); // Keep for diff. + + this._featureNames = featureNames; + + function processFeature(newIndex, oldIndex) { + var featureName = featureNames[newIndex]; + var oldName = featureNames[oldIndex]; + var featureOpt = featureOpts[featureName]; + var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel); + var feature; // FIX#11236, merge feature title from MagicType newOption. TODO: consider seriesIndex ? + + if (payload && payload.newTitle != null && payload.featureName === featureName) { + featureOpt.title = payload.newTitle; + } + + if (featureName && !oldName) { + // Create + if (isUserFeatureName(featureName)) { + feature = { + onclick: featureModel.option.onclick, + featureName: featureName + }; + } else { + var Feature = getFeature(featureName); + + if (!Feature) { + return; + } + + feature = new Feature(); + } + + features[featureName] = feature; + } else { + feature = features[oldName]; // If feature does not exsit. + + if (!feature) { + return; + } + } + + feature.uid = getUID('toolbox-feature'); + feature.model = featureModel; + feature.ecModel = ecModel; + feature.api = api; + var isToolboxFeature = feature instanceof ToolboxFeature; + + if (!featureName && oldName) { + isToolboxFeature && feature.dispose && feature.dispose(ecModel, api); + return; + } + + if (!featureModel.get('show') || isToolboxFeature && feature.unusable) { + isToolboxFeature && feature.remove && feature.remove(ecModel, api); + return; + } + + createIconPaths(featureModel, feature, featureName); + + featureModel.setIconStatus = function (iconName, status) { + var option = this.option; + var iconPaths = this.iconPaths; + option.iconStatus = option.iconStatus || {}; + option.iconStatus[iconName] = status; + + if (iconPaths[iconName]) { + (status === 'emphasis' ? enterEmphasis : leaveEmphasis)(iconPaths[iconName]); + } + }; + + if (feature instanceof ToolboxFeature) { + if (feature.render) { + feature.render(featureModel, ecModel, api, payload); + } + } + } + + function createIconPaths(featureModel, feature, featureName) { + var iconStyleModel = featureModel.getModel('iconStyle'); + var iconStyleEmphasisModel = featureModel.getModel(['emphasis', 'iconStyle']); // If one feature has mutiple icon. they are orginaized as + // { + // icon: { + // foo: '', + // bar: '' + // }, + // title: { + // foo: '', + // bar: '' + // } + // } + + var icons = feature instanceof ToolboxFeature && feature.getIcons ? feature.getIcons() : featureModel.get('icon'); + var titles = featureModel.get('title') || {}; + var iconsMap; + var titlesMap; + + if (typeof icons === 'string') { + iconsMap = {}; + iconsMap[featureName] = icons; + } else { + iconsMap = icons; + } + + if (typeof titles === 'string') { + titlesMap = {}; + titlesMap[featureName] = titles; + } else { + titlesMap = titles; + } + + var iconPaths = featureModel.iconPaths = {}; + each(iconsMap, function (iconStr, iconName) { + var path = createIcon(iconStr, {}, { + x: -itemSize / 2, + y: -itemSize / 2, + width: itemSize, + height: itemSize + }); // TODO handling image + + path.setStyle(iconStyleModel.getItemStyle()); + var pathEmphasisState = path.ensureState('emphasis'); + pathEmphasisState.style = iconStyleEmphasisModel.getItemStyle(); // Text position calculation + + var textContent = new ZRText({ + style: { + text: titlesMap[iconName], + align: iconStyleEmphasisModel.get('textAlign'), + borderRadius: iconStyleEmphasisModel.get('textBorderRadius'), + padding: iconStyleEmphasisModel.get('textPadding'), + fill: null + }, + ignore: true + }); + path.setTextContent(textContent); + setTooltipConfig({ + el: path, + componentModel: toolboxModel, + itemName: iconName, + formatterParamsExtra: { + title: titlesMap[iconName] + } + }); // graphic.enableHoverEmphasis(path); + + path.__title = titlesMap[iconName]; + path.on('mouseover', function () { + // Should not reuse above hoverStyle, which might be modified. + var hoverStyle = iconStyleEmphasisModel.getItemStyle(); + var defaultTextPosition = toolboxModel.get('orient') === 'vertical' ? toolboxModel.get('right') == null ? 'right' : 'left' : toolboxModel.get('bottom') == null ? 'bottom' : 'top'; + textContent.setStyle({ + fill: iconStyleEmphasisModel.get('textFill') || hoverStyle.fill || hoverStyle.stroke || '#000', + backgroundColor: iconStyleEmphasisModel.get('textBackgroundColor') + }); + path.setTextConfig({ + position: iconStyleEmphasisModel.get('textPosition') || defaultTextPosition + }); + textContent.ignore = !toolboxModel.get('showTitle'); // Use enterEmphasis and leaveEmphasis provide by ec. + // There are flags managed by the echarts. + + enterEmphasis(this); + }).on('mouseout', function () { + if (featureModel.get(['iconStatus', iconName]) !== 'emphasis') { + leaveEmphasis(this); + } + + textContent.hide(); + }); + (featureModel.get(['iconStatus', iconName]) === 'emphasis' ? enterEmphasis : leaveEmphasis)(path); + group.add(path); + path.on('click', bind(feature.onclick, feature, ecModel, api, iconName)); + iconPaths[iconName] = path; + }); + } + + layout$3(group, toolboxModel, api); // Render background after group is layout + // FIXME + + group.add(makeBackground(group.getBoundingRect(), toolboxModel)); // Adjust icon title positions to avoid them out of screen + + group.eachChild(function (icon) { + var titleText = icon.__title; // const hoverStyle = icon.hoverStyle; + // TODO simplify code? + + var emphasisState = icon.ensureState('emphasis'); + var emphasisTextConfig = emphasisState.textConfig || (emphasisState.textConfig = {}); + var textContent = icon.getTextContent(); + var emphasisTextState = textContent && textContent.states.emphasis; // May be background element + + if (emphasisTextState && !isFunction(emphasisTextState) && titleText) { + var emphasisTextStyle = emphasisTextState.style || (emphasisTextState.style = {}); + var rect = getBoundingRect(titleText, ZRText.makeFont(emphasisTextStyle)); + var offsetX = icon.x + group.x; + var offsetY = icon.y + group.y + itemSize; + var needPutOnTop = false; + + if (offsetY + rect.height > api.getHeight()) { + emphasisTextConfig.position = 'top'; + needPutOnTop = true; + } + + var topOffset = needPutOnTop ? -5 - rect.height : itemSize + 8; + + if (offsetX + rect.width / 2 > api.getWidth()) { + emphasisTextConfig.position = ['100%', topOffset]; + emphasisTextStyle.align = 'right'; + } else if (offsetX - rect.width / 2 < 0) { + emphasisTextConfig.position = [0, topOffset]; + emphasisTextStyle.align = 'left'; + } + } + }); + }; + + ToolboxView.prototype.updateView = function (toolboxModel, ecModel, api, payload) { + each(this._features, function (feature) { + feature instanceof ToolboxFeature && feature.updateView && feature.updateView(feature.model, ecModel, api, payload); + }); + }; // updateLayout(toolboxModel, ecModel, api, payload) { + // zrUtil.each(this._features, function (feature) { + // feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload); + // }); + // }, + + + ToolboxView.prototype.remove = function (ecModel, api) { + each(this._features, function (feature) { + feature instanceof ToolboxFeature && feature.remove && feature.remove(ecModel, api); + }); + this.group.removeAll(); + }; + + ToolboxView.prototype.dispose = function (ecModel, api) { + each(this._features, function (feature) { + feature instanceof ToolboxFeature && feature.dispose && feature.dispose(ecModel, api); + }); + }; + + ToolboxView.type = 'toolbox'; + return ToolboxView; + }(ComponentView); + + function isUserFeatureName(featureName) { + return featureName.indexOf('my') === 0; + } + + /* global window, document */ + + var SaveAsImage = + /** @class */ + function (_super) { + __extends(SaveAsImage, _super); + + function SaveAsImage() { + return _super !== null && _super.apply(this, arguments) || this; + } + + SaveAsImage.prototype.onclick = function (ecModel, api) { + var model = this.model; + var title = model.get('name') || ecModel.get('title.0.text') || 'echarts'; + var isSvg = api.getZr().painter.getType() === 'svg'; + var type = isSvg ? 'svg' : model.get('type', true) || 'png'; + var url = api.getConnectedDataURL({ + type: type, + backgroundColor: model.get('backgroundColor', true) || ecModel.get('backgroundColor') || '#fff', + connectedBackgroundColor: model.get('connectedBackgroundColor'), + excludeComponents: model.get('excludeComponents'), + pixelRatio: model.get('pixelRatio') + }); // Chrome, Firefox, New Edge + + if (typeof MouseEvent === 'function' && (env.browser.newEdge || !env.browser.ie && !env.browser.edge)) { + var $a = document.createElement('a'); + $a.download = title + '.' + type; + $a.target = '_blank'; + $a.href = url; + var evt = new MouseEvent('click', { + // some micro front-end framework, window maybe is a Proxy + view: document.defaultView, + bubbles: true, + cancelable: false + }); + $a.dispatchEvent(evt); + } // IE or old Edge + else { + if (window.navigator.msSaveOrOpenBlob || isSvg) { + var parts = url.split(','); // data:[][;charset=][;base64], + + var base64Encoded = parts[0].indexOf('base64') > -1; + var bstr = isSvg // should decode the svg data uri first + ? decodeURIComponent(parts[1]) : parts[1]; // only `atob` when the data uri is encoded with base64 + // otherwise, like `svg` data uri exported by zrender, + // there will be an error, for it's not encoded with base64. + // (just a url-encoded string through `encodeURIComponent`) + + base64Encoded && (bstr = window.atob(bstr)); + var filename = title + '.' + type; + + if (window.navigator.msSaveOrOpenBlob) { + var n = bstr.length; + var u8arr = new Uint8Array(n); + + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + + var blob = new Blob([u8arr]); + window.navigator.msSaveOrOpenBlob(blob, filename); + } else { + var frame = document.createElement('iframe'); + document.body.appendChild(frame); + var cw = frame.contentWindow; + var doc = cw.document; + doc.open('image/svg+xml', 'replace'); + doc.write(bstr); + doc.close(); + cw.focus(); + doc.execCommand('SaveAs', true, filename); + document.body.removeChild(frame); + } + } else { + var lang = model.get('lang'); + var html = '' + '' + '' + ''; + var tab = window.open(); + tab.document.write(html); + tab.document.title = title; + } + } + }; + + SaveAsImage.getDefaultOption = function (ecModel) { + var defaultOption = { + show: true, + icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0', + title: ecModel.getLocaleModel().get(['toolbox', 'saveAsImage', 'title']), + type: 'png', + // Default use option.backgroundColor + // backgroundColor: '#fff', + connectedBackgroundColor: '#fff', + name: '', + excludeComponents: ['toolbox'], + // use current pixel ratio of device by default + // pixelRatio: 1, + lang: ecModel.getLocaleModel().get(['toolbox', 'saveAsImage', 'lang']) + }; + return defaultOption; + }; + + return SaveAsImage; + }(ToolboxFeature); + + SaveAsImage.prototype.unusable = !env.canvasSupported; + + var INNER_STACK_KEYWORD = '__ec_magicType_stack__'; + var radioTypes = [['line', 'bar'], ['stack']]; + + var MagicType = + /** @class */ + function (_super) { + __extends(MagicType, _super); + + function MagicType() { + return _super !== null && _super.apply(this, arguments) || this; + } + + MagicType.prototype.getIcons = function () { + var model = this.model; + var availableIcons = model.get('icon'); + var icons = {}; + each(model.get('type'), function (type) { + if (availableIcons[type]) { + icons[type] = availableIcons[type]; + } + }); + return icons; + }; + + MagicType.getDefaultOption = function (ecModel) { + var defaultOption = { + show: true, + type: [], + // Icon group + icon: { + line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4', + bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7', + // eslint-disable-next-line + stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z' // jshint ignore:line + + }, + // `line`, `bar`, `stack`, `tiled` + title: ecModel.getLocaleModel().get(['toolbox', 'magicType', 'title']), + option: {}, + seriesIndex: {} + }; + return defaultOption; + }; + + MagicType.prototype.onclick = function (ecModel, api, type) { + var model = this.model; + var seriesIndex = model.get(['seriesIndex', type]); // Not supported magicType + + if (!seriesOptGenreator[type]) { + return; + } + + var newOption = { + series: [] + }; + + var generateNewSeriesTypes = function (seriesModel) { + var seriesType = seriesModel.subType; + var seriesId = seriesModel.id; + var newSeriesOpt = seriesOptGenreator[type](seriesType, seriesId, seriesModel, model); + + if (newSeriesOpt) { + // PENDING If merge original option? + defaults(newSeriesOpt, seriesModel.option); + newOption.series.push(newSeriesOpt); + } // Modify boundaryGap + + + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) { + var categoryAxis = coordSys.getAxesByScale('ordinal')[0]; + + if (categoryAxis) { + var axisDim = categoryAxis.dim; + var axisType = axisDim + 'Axis'; + var axisModel = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0]; + var axisIndex = axisModel.componentIndex; + newOption[axisType] = newOption[axisType] || []; + + for (var i = 0; i <= axisIndex; i++) { + newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {}; + } + + newOption[axisType][axisIndex].boundaryGap = type === 'bar'; + } + } + }; + + each(radioTypes, function (radio) { + if (indexOf(radio, type) >= 0) { + each(radio, function (item) { + model.setIconStatus(item, 'normal'); + }); + } + }); + model.setIconStatus(type, 'emphasis'); + ecModel.eachComponent({ + mainType: 'series', + query: seriesIndex == null ? null : { + seriesIndex: seriesIndex + } + }, generateNewSeriesTypes); + var newTitle; + var currentType = type; // Change title of stack + + if (type === 'stack') { + // use titles in model instead of ecModel + // as stack and tiled appears in pair, just flip them + // no need of checking stack state + newTitle = merge({ + stack: model.option.title.tiled, + tiled: model.option.title.stack + }, model.option.title); + + if (model.get(['iconStatus', type]) !== 'emphasis') { + currentType = 'tiled'; + } + } + + api.dispatchAction({ + type: 'changeMagicType', + currentType: currentType, + newOption: newOption, + newTitle: newTitle, + featureName: 'magicType' + }); + }; + + return MagicType; + }(ToolboxFeature); + + var seriesOptGenreator = { + 'line': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'bar') { + return merge({ + id: seriesId, + type: 'line', + // Preserve data related option + data: seriesModel.get('data'), + stack: seriesModel.get('stack'), + markPoint: seriesModel.get('markPoint'), + markLine: seriesModel.get('markLine') + }, model.get(['option', 'line']) || {}, true); + } + }, + 'bar': function (seriesType, seriesId, seriesModel, model) { + if (seriesType === 'line') { + return merge({ + id: seriesId, + type: 'bar', + // Preserve data related option + data: seriesModel.get('data'), + stack: seriesModel.get('stack'), + markPoint: seriesModel.get('markPoint'), + markLine: seriesModel.get('markLine') + }, model.get(['option', 'bar']) || {}, true); + } + }, + 'stack': function (seriesType, seriesId, seriesModel, model) { + var isStack = seriesModel.get('stack') === INNER_STACK_KEYWORD; + + if (seriesType === 'line' || seriesType === 'bar') { + model.setIconStatus('stack', isStack ? 'normal' : 'emphasis'); + return merge({ + id: seriesId, + stack: isStack ? '' : INNER_STACK_KEYWORD + }, model.get(['option', 'stack']) || {}, true); + } + } + }; // TODO: SELF REGISTERED. + + registerAction({ + type: 'changeMagicType', + event: 'magicTypeChanged', + update: 'prepareAndUpdate' + }, function (payload, ecModel) { + ecModel.mergeOption(payload.newOption); + }); + + /* global document */ + + var BLOCK_SPLITER = new Array(60).join('-'); + var ITEM_SPLITER = '\t'; + /** + * Group series into two types + * 1. on category axis, like line, bar + * 2. others, like scatter, pie + */ + + function groupSeries(ecModel) { + var seriesGroupByCategoryAxis = {}; + var otherSeries = []; + var meta = []; + ecModel.eachRawSeries(function (seriesModel) { + var coordSys = seriesModel.coordinateSystem; + + if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) { + // TODO: TYPE Consider polar? Include polar may increase unecessary bundle size. + var baseAxis = coordSys.getBaseAxis(); + + if (baseAxis.type === 'category') { + var key = baseAxis.dim + '_' + baseAxis.index; + + if (!seriesGroupByCategoryAxis[key]) { + seriesGroupByCategoryAxis[key] = { + categoryAxis: baseAxis, + valueAxis: coordSys.getOtherAxis(baseAxis), + series: [] + }; + meta.push({ + axisDim: baseAxis.dim, + axisIndex: baseAxis.index + }); + } + + seriesGroupByCategoryAxis[key].series.push(seriesModel); + } else { + otherSeries.push(seriesModel); + } + } else { + otherSeries.push(seriesModel); + } + }); + return { + seriesGroupByCategoryAxis: seriesGroupByCategoryAxis, + other: otherSeries, + meta: meta + }; + } + /** + * Assemble content of series on cateogory axis + * @inner + */ + + + function assembleSeriesWithCategoryAxis(groups) { + var tables = []; + each(groups, function (group, key) { + var categoryAxis = group.categoryAxis; + var valueAxis = group.valueAxis; + var valueAxisDim = valueAxis.dim; + var headers = [' '].concat(map(group.series, function (series) { + return series.name; + })); // @ts-ignore TODO Polar + + var columns = [categoryAxis.model.getCategories()]; + each(group.series, function (series) { + var rawData = series.getRawData(); + columns.push(series.getRawData().mapArray(rawData.mapDimension(valueAxisDim), function (val) { + return val; + })); + }); // Assemble table content + + var lines = [headers.join(ITEM_SPLITER)]; + + for (var i = 0; i < columns[0].length; i++) { + var items = []; + + for (var j = 0; j < columns.length; j++) { + items.push(columns[j][i]); + } + + lines.push(items.join(ITEM_SPLITER)); + } + + tables.push(lines.join('\n')); + }); + return tables.join('\n\n' + BLOCK_SPLITER + '\n\n'); + } + /** + * Assemble content of other series + */ + + + function assembleOtherSeries(series) { + return map(series, function (series) { + var data = series.getRawData(); + var lines = [series.name]; + var vals = []; + data.each(data.dimensions, function () { + var argLen = arguments.length; + var dataIndex = arguments[argLen - 1]; + var name = data.getName(dataIndex); + + for (var i = 0; i < argLen - 1; i++) { + vals[i] = arguments[i]; + } + + lines.push((name ? name + ITEM_SPLITER : '') + vals.join(ITEM_SPLITER)); + }); + return lines.join('\n'); + }).join('\n\n' + BLOCK_SPLITER + '\n\n'); + } + + function getContentFromModel(ecModel) { + var result = groupSeries(ecModel); + return { + value: filter([assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), assembleOtherSeries(result.other)], function (str) { + return !!str.replace(/[\n\t\s]/g, ''); + }).join('\n\n' + BLOCK_SPLITER + '\n\n'), + meta: result.meta + }; + } + + function trim$1(str) { + return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); + } + /** + * If a block is tsv format + */ + + + function isTSVFormat(block) { + // Simple method to find out if a block is tsv format + var firstLine = block.slice(0, block.indexOf('\n')); + + if (firstLine.indexOf(ITEM_SPLITER) >= 0) { + return true; + } + } + + var itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g'); + /** + * @param {string} tsv + * @return {Object} + */ + + function parseTSVContents(tsv) { + var tsvLines = tsv.split(/\n+/g); + var headers = trim$1(tsvLines.shift()).split(itemSplitRegex); + var categories = []; + var series = map(headers, function (header) { + return { + name: header, + data: [] + }; + }); + + for (var i = 0; i < tsvLines.length; i++) { + var items = trim$1(tsvLines[i]).split(itemSplitRegex); + categories.push(items.shift()); + + for (var j = 0; j < items.length; j++) { + series[j] && (series[j].data[i] = items[j]); + } + } + + return { + series: series, + categories: categories + }; + } + + function parseListContents(str) { + var lines = str.split(/\n+/g); + var seriesName = trim$1(lines.shift()); + var data = []; + + for (var i = 0; i < lines.length; i++) { + // if line is empty, ignore it. + // there is a case that a user forgot to delete `\n`. + var line = trim$1(lines[i]); + + if (!line) { + continue; + } + + var items = line.split(itemSplitRegex); + var name_1 = ''; + var value = void 0; + var hasName = false; + + if (isNaN(items[0])) { + // First item is name + hasName = true; + name_1 = items[0]; + items = items.slice(1); + data[i] = { + name: name_1, + value: [] + }; + value = data[i].value; + } else { + value = data[i] = []; + } + + for (var j = 0; j < items.length; j++) { + value.push(+items[j]); + } + + if (value.length === 1) { + hasName ? data[i].value = value[0] : data[i] = value[0]; + } + } + + return { + name: seriesName, + data: data + }; + } + + function parseContents(str, blockMetaList) { + var blocks = str.split(new RegExp('\n*' + BLOCK_SPLITER + '\n*', 'g')); + var newOption = { + series: [] + }; + each(blocks, function (block, idx) { + if (isTSVFormat(block)) { + var result = parseTSVContents(block); + var blockMeta = blockMetaList[idx]; + var axisKey = blockMeta.axisDim + 'Axis'; + + if (blockMeta) { + newOption[axisKey] = newOption[axisKey] || []; + newOption[axisKey][blockMeta.axisIndex] = { + data: result.categories + }; + newOption.series = newOption.series.concat(result.series); + } + } else { + var result = parseListContents(block); + newOption.series.push(result); + } + }); + return newOption; + } + + var DataView = + /** @class */ + function (_super) { + __extends(DataView, _super); + + function DataView() { + return _super !== null && _super.apply(this, arguments) || this; + } + + DataView.prototype.onclick = function (ecModel, api) { + var container = api.getDom(); + var model = this.model; + + if (this._dom) { + container.removeChild(this._dom); + } + + var root = document.createElement('div'); + root.style.cssText = 'position:absolute;left:5px;top:5px;bottom:5px;right:5px;'; + root.style.backgroundColor = model.get('backgroundColor') || '#fff'; // Create elements + + var header = document.createElement('h4'); + var lang = model.get('lang') || []; + header.innerHTML = lang[0] || model.get('title'); + header.style.cssText = 'margin: 10px 20px;'; + header.style.color = model.get('textColor'); + var viewMain = document.createElement('div'); + var textarea = document.createElement('textarea'); + viewMain.style.cssText = 'display:block;width:100%;overflow:auto;'; + var optionToContent = model.get('optionToContent'); + var contentToOption = model.get('contentToOption'); + var result = getContentFromModel(ecModel); + + if (typeof optionToContent === 'function') { + var htmlOrDom = optionToContent(api.getOption()); + + if (typeof htmlOrDom === 'string') { + viewMain.innerHTML = htmlOrDom; + } else if (isDom(htmlOrDom)) { + viewMain.appendChild(htmlOrDom); + } + } else { + // Use default textarea + viewMain.appendChild(textarea); + textarea.readOnly = model.get('readOnly'); + textarea.style.cssText = 'width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;'; + textarea.style.color = model.get('textColor'); + textarea.style.borderColor = model.get('textareaBorderColor'); + textarea.style.backgroundColor = model.get('textareaColor'); + textarea.value = result.value; + } + + var blockMetaList = result.meta; + var buttonContainer = document.createElement('div'); + buttonContainer.style.cssText = 'position:absolute;bottom:0;left:0;right:0;'; + var buttonStyle = 'float:right;margin-right:20px;border:none;' + 'cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px'; + var closeButton = document.createElement('div'); + var refreshButton = document.createElement('div'); + buttonStyle += ';background-color:' + model.get('buttonColor'); + buttonStyle += ';color:' + model.get('buttonTextColor'); + var self = this; + + function close() { + container.removeChild(root); + self._dom = null; + } + + addEventListener(closeButton, 'click', close); + addEventListener(refreshButton, 'click', function () { + if (contentToOption == null && optionToContent != null || contentToOption != null && optionToContent == null) { + if ("development" !== 'production') { + // eslint-disable-next-line + console.warn('It seems you have just provided one of `contentToOption` and `optionToContent` functions but missed the other one. Data change is ignored.'); + } + + close(); + return; + } + + var newOption; + + try { + if (typeof contentToOption === 'function') { + newOption = contentToOption(viewMain, api.getOption()); + } else { + newOption = parseContents(textarea.value, blockMetaList); + } + } catch (e) { + close(); + throw new Error('Data view format error ' + e); + } + + if (newOption) { + api.dispatchAction({ + type: 'changeDataView', + newOption: newOption + }); + } + + close(); + }); + closeButton.innerHTML = lang[1]; + refreshButton.innerHTML = lang[2]; + refreshButton.style.cssText = buttonStyle; + closeButton.style.cssText = buttonStyle; + !model.get('readOnly') && buttonContainer.appendChild(refreshButton); + buttonContainer.appendChild(closeButton); + root.appendChild(header); + root.appendChild(viewMain); + root.appendChild(buttonContainer); + viewMain.style.height = container.clientHeight - 80 + 'px'; + container.appendChild(root); + this._dom = root; + }; + + DataView.prototype.remove = function (ecModel, api) { + this._dom && api.getDom().removeChild(this._dom); + }; + + DataView.prototype.dispose = function (ecModel, api) { + this.remove(ecModel, api); + }; + + DataView.getDefaultOption = function (ecModel) { + var defaultOption = { + show: true, + readOnly: false, + optionToContent: null, + contentToOption: null, + // eslint-disable-next-line + icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28', + title: ecModel.getLocaleModel().get(['toolbox', 'dataView', 'title']), + lang: ecModel.getLocaleModel().get(['toolbox', 'dataView', 'lang']), + backgroundColor: '#fff', + textColor: '#000', + textareaColor: '#fff', + textareaBorderColor: '#333', + buttonColor: '#c23531', + buttonTextColor: '#fff' + }; + return defaultOption; + }; + + return DataView; + }(ToolboxFeature); + /** + * @inner + */ + + + function tryMergeDataOption(newData, originalData) { + return map(newData, function (newVal, idx) { + var original = originalData && originalData[idx]; + + if (isObject(original) && !isArray(original)) { + var newValIsObject = isObject(newVal) && !isArray(newVal); + + if (!newValIsObject) { + newVal = { + value: newVal + }; + } // original data has name but new data has no name + + + var shouldDeleteName = original.name != null && newVal.name == null; // Original data has option + + newVal = defaults(newVal, original); + shouldDeleteName && delete newVal.name; + return newVal; + } else { + return newVal; + } + }); + } // TODO: SELF REGISTERED. + + + registerAction({ + type: 'changeDataView', + event: 'dataViewChanged', + update: 'prepareAndUpdate' + }, function (payload, ecModel) { + var newSeriesOptList = []; + each(payload.newOption.series, function (seriesOpt) { + var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0]; + + if (!seriesModel) { + // New created series + // Geuss the series type + newSeriesOptList.push(extend({ + // Default is scatter + type: 'scatter' + }, seriesOpt)); + } else { + var originalData = seriesModel.get('data'); + newSeriesOptList.push({ + name: seriesOpt.name, + data: tryMergeDataOption(seriesOpt.data, originalData) + }); + } + }); + ecModel.mergeOption(defaults({ + series: newSeriesOptList + }, payload.newOption)); + }); + + var each$9 = each; + var inner$f = makeInner(); + /** + * @param ecModel + * @param newSnapshot key is dataZoomId + */ + + function push(ecModel, newSnapshot) { + var storedSnapshots = getStoreSnapshots(ecModel); // If previous dataZoom can not be found, + // complete an range with current range. + + each$9(newSnapshot, function (batchItem, dataZoomId) { + var i = storedSnapshots.length - 1; + + for (; i >= 0; i--) { + var snapshot = storedSnapshots[i]; + + if (snapshot[dataZoomId]) { + break; + } + } + + if (i < 0) { + // No origin range set, create one by current range. + var dataZoomModel = ecModel.queryComponents({ + mainType: 'dataZoom', + subType: 'select', + id: dataZoomId + })[0]; + + if (dataZoomModel) { + var percentRange = dataZoomModel.getPercentRange(); + storedSnapshots[0][dataZoomId] = { + dataZoomId: dataZoomId, + start: percentRange[0], + end: percentRange[1] + }; + } + } + }); + storedSnapshots.push(newSnapshot); + } + function pop(ecModel) { + var storedSnapshots = getStoreSnapshots(ecModel); + var head = storedSnapshots[storedSnapshots.length - 1]; + storedSnapshots.length > 1 && storedSnapshots.pop(); // Find top for all dataZoom. + + var snapshot = {}; + each$9(head, function (batchItem, dataZoomId) { + for (var i = storedSnapshots.length - 1; i >= 0; i--) { + batchItem = storedSnapshots[i][dataZoomId]; + + if (batchItem) { + snapshot[dataZoomId] = batchItem; + break; + } + } + }); + return snapshot; + } + function clear$1(ecModel) { + inner$f(ecModel).snapshots = null; + } + function count(ecModel) { + return getStoreSnapshots(ecModel).length; + } + /** + * History length of each dataZoom may be different. + * this._history[0] is used to store origin range. + */ + + function getStoreSnapshots(ecModel) { + var store = inner$f(ecModel); + + if (!store.snapshots) { + store.snapshots = [{}]; + } + + return store.snapshots; + } + + var RestoreOption = + /** @class */ + function (_super) { + __extends(RestoreOption, _super); + + function RestoreOption() { + return _super !== null && _super.apply(this, arguments) || this; + } + + RestoreOption.prototype.onclick = function (ecModel, api) { + clear$1(ecModel); + api.dispatchAction({ + type: 'restore', + from: this.uid + }); + }; + + RestoreOption.getDefaultOption = function (ecModel) { + var defaultOption = { + show: true, + // eslint-disable-next-line + icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5', + title: ecModel.getLocaleModel().get(['toolbox', 'restore', 'title']) + }; + return defaultOption; + }; + + return RestoreOption; + }(ToolboxFeature); // TODO: SELF REGISTERED. + + + registerAction({ + type: 'restore', + event: 'restore', + update: 'prepareAndUpdate' + }, function (payload, ecModel) { + ecModel.resetOption('recreate'); + }); + + // how to genarialize to more coordinate systems. + + var INCLUDE_FINDER_MAIN_TYPES = ['grid', 'xAxis', 'yAxis', 'geo', 'graph', 'polar', 'radiusAxis', 'angleAxis', 'bmap']; + + var BrushTargetManager = + /** @class */ + function () { + /** + * @param finder contains Index/Id/Name of xAxis/yAxis/geo/grid + * Each can be {number|Array.}. like: {xAxisIndex: [3, 4]} + * @param opt.include include coordinate system types. + */ + function BrushTargetManager(finder, ecModel, opt) { + var _this = this; + + this._targetInfoList = []; + var foundCpts = parseFinder$1(ecModel, finder); + each(targetInfoBuilders, function (builder, type) { + if (!opt || !opt.include || indexOf(opt.include, type) >= 0) { + builder(foundCpts, _this._targetInfoList); + } + }); + } + + BrushTargetManager.prototype.setOutputRanges = function (areas, ecModel) { + this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) { + (area.coordRanges || (area.coordRanges = [])).push(coordRange); // area.coordRange is the first of area.coordRanges + + if (!area.coordRange) { + area.coordRange = coordRange; // In 'category' axis, coord to pixel is not reversible, so we can not + // rebuild range by coordRange accrately, which may bring trouble when + // brushing only one item. So we use __rangeOffset to rebuilding range + // by coordRange. And this it only used in brush component so it is no + // need to be adapted to coordRanges. + + var result = coordConvert[area.brushType](0, coordSys, coordRange); + area.__rangeOffset = { + offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]), + xyMinMax: result.xyMinMax + }; + } + }); + return areas; + }; + + BrushTargetManager.prototype.matchOutputRanges = function (areas, ecModel, cb) { + each(areas, function (area) { + var targetInfo = this.findTargetInfo(area, ecModel); + + if (targetInfo && targetInfo !== true) { + each(targetInfo.coordSyses, function (coordSys) { + var result = coordConvert[area.brushType](1, coordSys, area.range, true); + cb(area, result.values, coordSys, ecModel); + }); + } + }, this); + }; + /** + * the `areas` is `BrushModel.areas`. + * Called in layout stage. + * convert `area.coordRange` to global range and set panelId to `area.range`. + */ + + + BrushTargetManager.prototype.setInputRanges = function (areas, ecModel) { + each(areas, function (area) { + var targetInfo = this.findTargetInfo(area, ecModel); + + if ("development" !== 'production') { + assert(!targetInfo || targetInfo === true || area.coordRange, 'coordRange must be specified when coord index specified.'); + assert(!targetInfo || targetInfo !== true || area.range, 'range must be specified in global brush.'); + } + + area.range = area.range || []; // convert coordRange to global range and set panelId. + + if (targetInfo && targetInfo !== true) { + area.panelId = targetInfo.panelId; // (1) area.range shoule always be calculate from coordRange but does + // not keep its original value, for the sake of the dataZoom scenario, + // where area.coordRange remains unchanged but area.range may be changed. + // (2) Only support converting one coordRange to pixel range in brush + // component. So do not consider `coordRanges`. + // (3) About __rangeOffset, see comment above. + + var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange); + var rangeOffset = area.__rangeOffset; + area.range = rangeOffset ? diffProcessor[area.brushType](result.values, rangeOffset.offset, getScales(result.xyMinMax, rangeOffset.xyMinMax)) : result.values; + } + }, this); + }; + + BrushTargetManager.prototype.makePanelOpts = function (api, getDefaultBrushType) { + return map(this._targetInfoList, function (targetInfo) { + var rect = targetInfo.getPanelRect(); + return { + panelId: targetInfo.panelId, + defaultBrushType: getDefaultBrushType ? getDefaultBrushType(targetInfo) : null, + clipPath: makeRectPanelClipPath(rect), + isTargetByCursor: makeRectIsTargetByCursor(rect, api, targetInfo.coordSysModel), + getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect) + }; + }); + }; + + BrushTargetManager.prototype.controlSeries = function (area, seriesModel, ecModel) { + // Check whether area is bound in coord, and series do not belong to that coord. + // If do not do this check, some brush (like lineX) will controll all axes. + var targetInfo = this.findTargetInfo(area, ecModel); + return targetInfo === true || targetInfo && indexOf(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0; + }; + /** + * If return Object, a coord found. + * If reutrn true, global found. + * Otherwise nothing found. + */ + + + BrushTargetManager.prototype.findTargetInfo = function (area, ecModel) { + var targetInfoList = this._targetInfoList; + var foundCpts = parseFinder$1(ecModel, area); + + for (var i = 0; i < targetInfoList.length; i++) { + var targetInfo = targetInfoList[i]; + var areaPanelId = area.panelId; + + if (areaPanelId) { + if (targetInfo.panelId === areaPanelId) { + return targetInfo; + } + } else { + for (var j = 0; j < targetInfoMatchers.length; j++) { + if (targetInfoMatchers[j](foundCpts, targetInfo)) { + return targetInfo; + } + } + } + } + + return true; + }; + + return BrushTargetManager; + }(); + + function formatMinMax(minMax) { + minMax[0] > minMax[1] && minMax.reverse(); + return minMax; + } + + function parseFinder$1(ecModel, finder) { + return parseFinder(ecModel, finder, { + includeMainTypes: INCLUDE_FINDER_MAIN_TYPES + }); + } + + var targetInfoBuilders = { + grid: function (foundCpts, targetInfoList) { + var xAxisModels = foundCpts.xAxisModels; + var yAxisModels = foundCpts.yAxisModels; + var gridModels = foundCpts.gridModels; // Remove duplicated. + + var gridModelMap = createHashMap(); + var xAxesHas = {}; + var yAxesHas = {}; + + if (!xAxisModels && !yAxisModels && !gridModels) { + return; + } + + each(xAxisModels, function (axisModel) { + var gridModel = axisModel.axis.grid.model; + gridModelMap.set(gridModel.id, gridModel); + xAxesHas[gridModel.id] = true; + }); + each(yAxisModels, function (axisModel) { + var gridModel = axisModel.axis.grid.model; + gridModelMap.set(gridModel.id, gridModel); + yAxesHas[gridModel.id] = true; + }); + each(gridModels, function (gridModel) { + gridModelMap.set(gridModel.id, gridModel); + xAxesHas[gridModel.id] = true; + yAxesHas[gridModel.id] = true; + }); + gridModelMap.each(function (gridModel) { + var grid = gridModel.coordinateSystem; + var cartesians = []; + each(grid.getCartesians(), function (cartesian, index) { + if (indexOf(xAxisModels, cartesian.getAxis('x').model) >= 0 || indexOf(yAxisModels, cartesian.getAxis('y').model) >= 0) { + cartesians.push(cartesian); + } + }); + targetInfoList.push({ + panelId: 'grid--' + gridModel.id, + gridModel: gridModel, + coordSysModel: gridModel, + // Use the first one as the representitive coordSys. + coordSys: cartesians[0], + coordSyses: cartesians, + getPanelRect: panelRectBuilders.grid, + xAxisDeclared: xAxesHas[gridModel.id], + yAxisDeclared: yAxesHas[gridModel.id] + }); + }); + }, + geo: function (foundCpts, targetInfoList) { + each(foundCpts.geoModels, function (geoModel) { + var coordSys = geoModel.coordinateSystem; + targetInfoList.push({ + panelId: 'geo--' + geoModel.id, + geoModel: geoModel, + coordSysModel: geoModel, + coordSys: coordSys, + coordSyses: [coordSys], + getPanelRect: panelRectBuilders.geo + }); + }); + } + }; + var targetInfoMatchers = [// grid + function (foundCpts, targetInfo) { + var xAxisModel = foundCpts.xAxisModel; + var yAxisModel = foundCpts.yAxisModel; + var gridModel = foundCpts.gridModel; + !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model); + !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model); + return gridModel && gridModel === targetInfo.gridModel; + }, // geo + function (foundCpts, targetInfo) { + var geoModel = foundCpts.geoModel; + return geoModel && geoModel === targetInfo.geoModel; + }]; + var panelRectBuilders = { + grid: function () { + // grid is not Transformable. + return this.coordSys.master.getRect().clone(); + }, + geo: function () { + var coordSys = this.coordSys; + var rect = coordSys.getBoundingRect().clone(); // geo roam and zoom transform + + rect.applyTransform(getTransform(coordSys)); + return rect; + } + }; + var coordConvert = { + lineX: curry(axisConvert, 0), + lineY: curry(axisConvert, 1), + rect: function (to, coordSys, rangeOrCoordRange, clamp) { + var xminymin = to ? coordSys.pointToData([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp) : coordSys.dataToPoint([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp); + var xmaxymax = to ? coordSys.pointToData([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp) : coordSys.dataToPoint([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp); + var values = [formatMinMax([xminymin[0], xmaxymax[0]]), formatMinMax([xminymin[1], xmaxymax[1]])]; + return { + values: values, + xyMinMax: values + }; + }, + polygon: function (to, coordSys, rangeOrCoordRange, clamp) { + var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]]; + var values = map(rangeOrCoordRange, function (item) { + var p = to ? coordSys.pointToData(item, clamp) : coordSys.dataToPoint(item, clamp); + xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]); + xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]); + xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]); + xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]); + return p; + }); + return { + values: values, + xyMinMax: xyMinMax + }; + } + }; + + function axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) { + if ("development" !== 'production') { + assert(coordSys.type === 'cartesian2d', 'lineX/lineY brush is available only in cartesian2d.'); + } + + var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]); + var values = formatMinMax(map([0, 1], function (i) { + return to ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i]), true) : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i])); + })); + var xyMinMax = []; + xyMinMax[axisNameIndex] = values; + xyMinMax[1 - axisNameIndex] = [NaN, NaN]; + return { + values: values, + xyMinMax: xyMinMax + }; + } + + var diffProcessor = { + lineX: curry(axisDiffProcessor, 0), + lineY: curry(axisDiffProcessor, 1), + rect: function (values, refer, scales) { + return [[values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]]; + }, + polygon: function (values, refer, scales) { + return map(values, function (item, idx) { + return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]]; + }); + } + }; + + function axisDiffProcessor(axisNameIndex, values, refer, scales) { + return [values[0] - scales[axisNameIndex] * refer[0], values[1] - scales[axisNameIndex] * refer[1]]; + } // We have to process scale caused by dataZoom manually, + // although it might be not accurate. + // Return [0~1, 0~1] + + + function getScales(xyMinMaxCurr, xyMinMaxOrigin) { + var sizeCurr = getSize(xyMinMaxCurr); + var sizeOrigin = getSize(xyMinMaxOrigin); + var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]]; + isNaN(scales[0]) && (scales[0] = 1); + isNaN(scales[1]) && (scales[1] = 1); + return scales; + } + + function getSize(xyMinMax) { + return xyMinMax ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] : [NaN, NaN]; + } + + var each$a = each; + var DATA_ZOOM_ID_BASE = makeInternalComponentId('toolbox-dataZoom_'); + + var DataZoomFeature = + /** @class */ + function (_super) { + __extends(DataZoomFeature, _super); + + function DataZoomFeature() { + return _super !== null && _super.apply(this, arguments) || this; + } + + DataZoomFeature.prototype.render = function (featureModel, ecModel, api, payload) { + if (!this._brushController) { + this._brushController = new BrushController(api.getZr()); + + this._brushController.on('brush', bind(this._onBrush, this)).mount(); + } + + updateZoomBtnStatus(featureModel, ecModel, this, payload, api); + updateBackBtnStatus(featureModel, ecModel); + }; + + DataZoomFeature.prototype.onclick = function (ecModel, api, type) { + handlers$1[type].call(this); + }; + + DataZoomFeature.prototype.remove = function (ecModel, api) { + this._brushController && this._brushController.unmount(); + }; + + DataZoomFeature.prototype.dispose = function (ecModel, api) { + this._brushController && this._brushController.dispose(); + }; + + DataZoomFeature.prototype._onBrush = function (eventParam) { + var areas = eventParam.areas; + + if (!eventParam.isEnd || !areas.length) { + return; + } + + var snapshot = {}; + var ecModel = this.ecModel; + + this._brushController.updateCovers([]); // remove cover + + + var brushTargetManager = new BrushTargetManager(makeAxisFinder(this.model), ecModel, { + include: ['grid'] + }); + brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) { + if (coordSys.type !== 'cartesian2d') { + return; + } + + var brushType = area.brushType; + + if (brushType === 'rect') { + setBatch('x', coordSys, coordRange[0]); + setBatch('y', coordSys, coordRange[1]); + } else { + setBatch({ + lineX: 'x', + lineY: 'y' + }[brushType], coordSys, coordRange); + } + }); + push(ecModel, snapshot); + + this._dispatchZoomAction(snapshot); + + function setBatch(dimName, coordSys, minMax) { + var axis = coordSys.getAxis(dimName); + var axisModel = axis.model; + var dataZoomModel = findDataZoom(dimName, axisModel, ecModel); // Restrict range. + + var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan(); + + if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) { + minMax = sliderMove(0, minMax.slice(), axis.scale.getExtent(), 0, minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan); + } + + dataZoomModel && (snapshot[dataZoomModel.id] = { + dataZoomId: dataZoomModel.id, + startValue: minMax[0], + endValue: minMax[1] + }); + } + + function findDataZoom(dimName, axisModel, ecModel) { + var found; + ecModel.eachComponent({ + mainType: 'dataZoom', + subType: 'select' + }, function (dzModel) { + var has = dzModel.getAxisModel(dimName, axisModel.componentIndex); + has && (found = dzModel); + }); + return found; + } + }; + + DataZoomFeature.prototype._dispatchZoomAction = function (snapshot) { + var batch = []; // Convert from hash map to array. + + each$a(snapshot, function (batchItem, dataZoomId) { + batch.push(clone(batchItem)); + }); + batch.length && this.api.dispatchAction({ + type: 'dataZoom', + from: this.uid, + batch: batch + }); + }; + + DataZoomFeature.getDefaultOption = function (ecModel) { + var defaultOption = { + show: true, + filterMode: 'filter', + // Icon group + icon: { + zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1', + back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26' + }, + // `zoom`, `back` + title: ecModel.getLocaleModel().get(['toolbox', 'dataZoom', 'title']), + brushStyle: { + borderWidth: 0, + color: 'rgba(210,219,238,0.2)' + } + }; + return defaultOption; + }; + + return DataZoomFeature; + }(ToolboxFeature); + + var handlers$1 = { + zoom: function () { + var nextActive = !this._isZoomActive; + this.api.dispatchAction({ + type: 'takeGlobalCursor', + key: 'dataZoomSelect', + dataZoomSelectActive: nextActive + }); + }, + back: function () { + this._dispatchZoomAction(pop(this.ecModel)); + } + }; + + function makeAxisFinder(dzFeatureModel) { + var setting = { + xAxisIndex: dzFeatureModel.get('xAxisIndex', true), + yAxisIndex: dzFeatureModel.get('yAxisIndex', true), + xAxisId: dzFeatureModel.get('xAxisId', true), + yAxisId: dzFeatureModel.get('yAxisId', true) + }; // If both `xAxisIndex` `xAxisId` not set, it means 'all'. + // If both `yAxisIndex` `yAxisId` not set, it means 'all'. + // Some old cases set like this below to close yAxis control but leave xAxis control: + // `{ feature: { dataZoom: { yAxisIndex: false } }`. + + if (setting.xAxisIndex == null && setting.xAxisId == null) { + setting.xAxisIndex = 'all'; + } + + if (setting.yAxisIndex == null && setting.yAxisId == null) { + setting.yAxisIndex = 'all'; + } + + return setting; + } + + function updateBackBtnStatus(featureModel, ecModel) { + featureModel.setIconStatus('back', count(ecModel) > 1 ? 'emphasis' : 'normal'); + } + + function updateZoomBtnStatus(featureModel, ecModel, view, payload, api) { + var zoomActive = view._isZoomActive; + + if (payload && payload.type === 'takeGlobalCursor') { + zoomActive = payload.key === 'dataZoomSelect' ? payload.dataZoomSelectActive : false; + } + + view._isZoomActive = zoomActive; + featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal'); + var brushTargetManager = new BrushTargetManager(makeAxisFinder(featureModel), ecModel, { + include: ['grid'] + }); + var panels = brushTargetManager.makePanelOpts(api, function (targetInfo) { + return targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared ? 'lineX' : !targetInfo.xAxisDeclared && targetInfo.yAxisDeclared ? 'lineY' : 'rect'; + }); + + view._brushController.setPanels(panels).enableBrush(zoomActive && panels.length ? { + brushType: 'auto', + brushStyle: featureModel.getModel('brushStyle').getItemStyle() + } : false); + } + + registerInternalOptionCreator('dataZoom', function (ecModel) { + var toolboxModel = ecModel.getComponent('toolbox', 0); + var featureDataZoomPath = ['feature', 'dataZoom']; + + if (!toolboxModel || toolboxModel.get(featureDataZoomPath) == null) { + return; + } + + var dzFeatureModel = toolboxModel.getModel(featureDataZoomPath); + var dzOptions = []; + var finder = makeAxisFinder(dzFeatureModel); + var finderResult = parseFinder(ecModel, finder); + each$a(finderResult.xAxisModels, function (axisModel) { + return buildInternalOptions(axisModel, 'xAxis', 'xAxisIndex'); + }); + each$a(finderResult.yAxisModels, function (axisModel) { + return buildInternalOptions(axisModel, 'yAxis', 'yAxisIndex'); + }); + + function buildInternalOptions(axisModel, axisMainType, axisIndexPropName) { + var axisIndex = axisModel.componentIndex; + var newOpt = { + type: 'select', + $fromToolbox: true, + // Default to be filter + filterMode: dzFeatureModel.get('filterMode', true) || 'filter', + // Id for merge mapping. + id: DATA_ZOOM_ID_BASE + axisMainType + axisIndex + }; + newOpt[axisIndexPropName] = axisIndex; + dzOptions.push(newOpt); + } + + return dzOptions; + }); + + function install$z(registers) { + registers.registerComponentModel(ToolboxModel); + registers.registerComponentView(ToolboxView); + registerFeature('saveAsImage', SaveAsImage); + registerFeature('magicType', MagicType); + registerFeature('dataView', DataView); + registerFeature('dataZoom', DataZoomFeature); + registerFeature('restore', RestoreOption); + use(install$y); + } + + var TooltipModel = + /** @class */ + function (_super) { + __extends(TooltipModel, _super); + + function TooltipModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TooltipModel.type; + return _this; + } + + TooltipModel.type = 'tooltip'; + TooltipModel.dependencies = ['axisPointer']; + TooltipModel.defaultOption = { + zlevel: 0, + z: 60, + show: true, + // tooltip main content + showContent: true, + // 'trigger' only works on coordinate system. + // 'item' | 'axis' | 'none' + trigger: 'item', + // 'click' | 'mousemove' | 'none' + triggerOn: 'mousemove|click', + alwaysShowContent: false, + displayMode: 'single', + renderMode: 'auto', + // whether restraint content inside viewRect. + // If renderMode: 'richText', default true. + // If renderMode: 'html', defaut false (for backward compat). + confine: null, + showDelay: 0, + hideDelay: 100, + // Animation transition time, unit is second + transitionDuration: 0.4, + enterable: false, + backgroundColor: '#fff', + // box shadow + shadowBlur: 10, + shadowColor: 'rgba(0, 0, 0, .2)', + shadowOffsetX: 1, + shadowOffsetY: 2, + // tooltip border radius, unit is px, default is 4 + borderRadius: 4, + // tooltip border width, unit is px, default is 0 (no border) + borderWidth: 1, + // Tooltip inside padding, default is 5 for all direction + // Array is allowed to set up, right, bottom, left, same with css + // The default value: See `tooltip/tooltipMarkup.ts#getPaddingFromTooltipModel`. + padding: null, + // Extra css text + extraCssText: '', + // axis indicator, trigger by axis + axisPointer: { + // default is line + // legal values: 'line' | 'shadow' | 'cross' + type: 'line', + // Valid when type is line, appoint tooltip line locate on which line. Optional + // legal values: 'x' | 'y' | 'angle' | 'radius' | 'auto' + // default is 'auto', chose the axis which type is category. + // for multiply y axis, cartesian coord chose x axis, polar chose angle axis + axis: 'auto', + animation: 'auto', + animationDurationUpdate: 200, + animationEasingUpdate: 'exponentialOut', + crossStyle: { + color: '#999', + width: 1, + type: 'dashed', + // TODO formatter + textStyle: {} + } // lineStyle and shadowStyle should not be specified here, + // otherwise it will always override those styles on option.axisPointer. + + }, + textStyle: { + color: '#666', + fontSize: 14 + } + }; + return TooltipModel; + }(ComponentModel); + + /* global document */ + + function shouldTooltipConfine(tooltipModel) { + var confineOption = tooltipModel.get('confine'); + return confineOption != null ? !!confineOption // In richText mode, the outside part can not be visible. + : tooltipModel.get('renderMode') === 'richText'; + } + + function testStyle(styleProps) { + if (!env.domSupported) { + return; + } + + var style = document.documentElement.style; + + for (var i = 0, len = styleProps.length; i < len; i++) { + if (styleProps[i] in style) { + return styleProps[i]; + } + } + } + + var TRANSFORM_VENDOR = testStyle(['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']); + var TRANSITION_VENDOR = testStyle(['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']); + function toCSSVendorPrefix(styleVendor, styleProp) { + if (!styleVendor) { + return styleProp; + } + + styleProp = toCamelCase(styleProp, true); + var idx = styleVendor.indexOf(styleProp); + styleVendor = idx === -1 ? styleProp : "-" + styleVendor.slice(0, idx) + "-" + styleProp; + return styleVendor.toLowerCase(); + } + function getComputedStyle(el, style) { + var stl = el.currentStyle || document.defaultView && document.defaultView.getComputedStyle(el); + return stl ? style ? stl[style] : stl : null; + } + + /* global document, window */ + + var CSS_TRANSITION_VENDOR = toCSSVendorPrefix(TRANSITION_VENDOR, 'transition'); + var CSS_TRANSFORM_VENDOR = toCSSVendorPrefix(TRANSFORM_VENDOR, 'transform'); // eslint-disable-next-line + + var gCssText = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;" + (env.transform3dSupported ? 'will-change:transform;' : ''); + + function mirrorPos(pos) { + pos = pos === 'left' ? 'right' : pos === 'right' ? 'left' : pos === 'top' ? 'bottom' : 'top'; + return pos; + } + + function assembleArrow(tooltipModel, borderColor, arrowPosition) { + if (!isString(arrowPosition) || arrowPosition === 'inside') { + return ''; + } + + var backgroundColor = tooltipModel.get('backgroundColor'); + var borderWidth = tooltipModel.get('borderWidth'); + borderColor = convertToColorString(borderColor); + var arrowPos = mirrorPos(arrowPosition); + var arrowSize = Math.max(Math.round(borderWidth) * 1.5, 6); + var positionStyle = ''; + var transformStyle = CSS_TRANSFORM_VENDOR + ':'; + var rotateDeg; + + if (indexOf(['left', 'right'], arrowPos) > -1) { + positionStyle += 'top:50%'; + transformStyle += "translateY(-50%) rotate(" + (rotateDeg = arrowPos === 'left' ? -225 : -45) + "deg)"; + } else { + positionStyle += 'left:50%'; + transformStyle += "translateX(-50%) rotate(" + (rotateDeg = arrowPos === 'top' ? 225 : 45) + "deg)"; + } + + var rotateRadian = rotateDeg * Math.PI / 180; + var arrowWH = arrowSize + borderWidth; + var rotatedWH = arrowWH * Math.abs(Math.cos(rotateRadian)) + arrowWH * Math.abs(Math.sin(rotateRadian)); + var arrowOffset = Math.round(((rotatedWH - Math.SQRT2 * borderWidth) / 2 + Math.SQRT2 * borderWidth - (rotatedWH - arrowWH) / 2) * 100) / 100; + positionStyle += ";" + arrowPos + ":-" + arrowOffset + "px"; + var borderStyle = borderColor + " solid " + borderWidth + "px;"; + var styleCss = ["position:absolute;width:" + arrowSize + "px;height:" + arrowSize + "px;", positionStyle + ";" + transformStyle + ";", "border-bottom:" + borderStyle, "border-right:" + borderStyle, "background-color:" + backgroundColor + ";"]; + return "
"; + } + + function assembleTransition(duration, onlyFade) { + var transitionCurve = 'cubic-bezier(0.23,1,0.32,1)'; + var transitionOption = " " + duration / 2 + "s " + transitionCurve; + var transitionText = "opacity" + transitionOption + ",visibility" + transitionOption; + + if (!onlyFade) { + transitionOption = " " + duration + "s " + transitionCurve; + transitionText += env.transformSupported ? "," + CSS_TRANSFORM_VENDOR + transitionOption : ",left" + transitionOption + ",top" + transitionOption; + } + + return CSS_TRANSITION_VENDOR + ':' + transitionText; + } + + function assembleTransform(x, y, toString) { + // If using float on style, the final width of the dom might + // keep changing slightly while mouse move. So `toFixed(0)` them. + var x0 = x.toFixed(0) + 'px'; + var y0 = y.toFixed(0) + 'px'; // not support transform, use `left` and `top` instead. + + if (!env.transformSupported) { + return toString ? "top:" + y0 + ";left:" + x0 + ";" : [['top', y0], ['left', x0]]; + } // support transform + + + var is3d = env.transform3dSupported; + var translate = "translate" + (is3d ? '3d' : '') + "(" + x0 + "," + y0 + (is3d ? ',0' : '') + ")"; + return toString ? 'top:0;left:0;' + CSS_TRANSFORM_VENDOR + ':' + translate + ';' : [['top', 0], ['left', 0], [TRANSFORM_VENDOR, translate]]; + } + /** + * @param {Object} textStyle + * @return {string} + * @inner + */ + + + function assembleFont(textStyleModel) { + var cssText = []; + var fontSize = textStyleModel.get('fontSize'); + var color = textStyleModel.getTextColor(); + color && cssText.push('color:' + color); + cssText.push('font:' + textStyleModel.getFont()); + fontSize // @ts-ignore, leave it to the tooltip refactor. + && cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px'); + var shadowColor = textStyleModel.get('textShadowColor'); + var shadowBlur = textStyleModel.get('textShadowBlur') || 0; + var shadowOffsetX = textStyleModel.get('textShadowOffsetX') || 0; + var shadowOffsetY = textStyleModel.get('textShadowOffsetY') || 0; + shadowColor && shadowBlur && cssText.push('text-shadow:' + shadowOffsetX + 'px ' + shadowOffsetY + 'px ' + shadowBlur + 'px ' + shadowColor); + each(['decoration', 'align'], function (name) { + var val = textStyleModel.get(name); + val && cssText.push('text-' + name + ':' + val); + }); + return cssText.join(';'); + } + + function assembleCssText(tooltipModel, enableTransition, onlyFade) { + var cssText = []; + var transitionDuration = tooltipModel.get('transitionDuration'); + var backgroundColor = tooltipModel.get('backgroundColor'); + var shadowBlur = tooltipModel.get('shadowBlur'); + var shadowColor = tooltipModel.get('shadowColor'); + var shadowOffsetX = tooltipModel.get('shadowOffsetX'); + var shadowOffsetY = tooltipModel.get('shadowOffsetY'); + var textStyleModel = tooltipModel.getModel('textStyle'); + var padding = getPaddingFromTooltipModel(tooltipModel, 'html'); + var boxShadow = shadowOffsetX + "px " + shadowOffsetY + "px " + shadowBlur + "px " + shadowColor; + cssText.push('box-shadow:' + boxShadow); // Animation transition. Do not animate when transitionDuration is 0. + + enableTransition && transitionDuration && cssText.push(assembleTransition(transitionDuration, onlyFade)); + + if (backgroundColor) { + if (env.canvasSupported) { + cssText.push('background-color:' + backgroundColor); + } else { + // for ie + cssText.push('background-color:#' + toHex(backgroundColor)); + cssText.push('filter:alpha(opacity=70)'); + } + } // Border style + + + each(['width', 'color', 'radius'], function (name) { + var borderName = 'border-' + name; + var camelCase = toCamelCase(borderName); + var val = tooltipModel.get(camelCase); + val != null && cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px')); + }); // Text style + + cssText.push(assembleFont(textStyleModel)); // Padding + + if (padding != null) { + cssText.push('padding:' + normalizeCssArray$1(padding).join('px ') + 'px'); + } + + return cssText.join(';') + ';'; + } // If not able to make, do not modify the input `out`. + + + function makeStyleCoord(out, zr, appendToBody, zrX, zrY) { + var zrPainter = zr && zr.painter; + + if (appendToBody) { + var zrViewportRoot = zrPainter && zrPainter.getViewportRoot(); + + if (zrViewportRoot) { + // Some APPs might use scale on body, so we support CSS transform here. + transformLocalCoord(out, zrViewportRoot, document.body, zrX, zrY); + } + } else { + out[0] = zrX; + out[1] = zrY; // xy should be based on canvas root. But tooltipContent is + // the sibling of canvas root. So padding of ec container + // should be considered here. + + var viewportRootOffset = zrPainter && zrPainter.getViewportRootOffset(); + + if (viewportRootOffset) { + out[0] += viewportRootOffset.offsetLeft; + out[1] += viewportRootOffset.offsetTop; + } + } + + out[2] = out[0] / zr.getWidth(); + out[3] = out[1] / zr.getHeight(); + } + + var TooltipHTMLContent = + /** @class */ + function () { + function TooltipHTMLContent(container, api, opt) { + this._show = false; + this._styleCoord = [0, 0, 0, 0]; + this._enterable = true; + this._firstShow = true; + this._longHide = true; + + if (env.wxa) { + return null; + } + + var el = document.createElement('div'); // TODO: TYPE + + el.domBelongToZr = true; + this.el = el; + var zr = this._zr = api.getZr(); + var appendToBody = this._appendToBody = opt && opt.appendToBody; + makeStyleCoord(this._styleCoord, zr, appendToBody, api.getWidth() / 2, api.getHeight() / 2); + + if (appendToBody) { + document.body.appendChild(el); + } else { + container.appendChild(el); + } + + this._container = container; // FIXME + // Is it needed to trigger zr event manually if + // the browser do not support `pointer-events: none`. + + var self = this; + + el.onmouseenter = function () { + // clear the timeout in hideLater and keep showing tooltip + if (self._enterable) { + clearTimeout(self._hideTimeout); + self._show = true; + } + + self._inContent = true; + }; + + el.onmousemove = function (e) { + e = e || window.event; + + if (!self._enterable) { + // `pointer-events: none` is set to tooltip content div + // if `enterable` is set as `false`, and `el.onmousemove` + // can not be triggered. But in browser that do not + // support `pointer-events`, we need to do this: + // Try trigger zrender event to avoid mouse + // in and out shape too frequently + var handler = zr.handler; + var zrViewportRoot = zr.painter.getViewportRoot(); + normalizeEvent(zrViewportRoot, e, true); + handler.dispatch('mousemove', e); + } + }; + + el.onmouseleave = function () { + // set `_inContent` to `false` before `hideLater` + self._inContent = false; + + if (self._enterable) { + if (self._show) { + self.hideLater(self._hideDelay); + } + } + }; + } + /** + * Update when tooltip is rendered + */ + + + TooltipHTMLContent.prototype.update = function (tooltipModel) { + // FIXME + // Move this logic to ec main? + var container = this._container; + var position = getComputedStyle(container, 'position'); + var domStyle = container.style; + + if (domStyle.position !== 'absolute' && position !== 'absolute') { + domStyle.position = 'relative'; + } // move tooltip if chart resized + + + var alwaysShowContent = tooltipModel.get('alwaysShowContent'); + alwaysShowContent && this._moveIfResized(); // update className + + this.el.className = tooltipModel.get('className') || ''; // Hide the tooltip + // PENDING + // this.hide(); + }; + + TooltipHTMLContent.prototype.show = function (tooltipModel, nearPointColor) { + clearTimeout(this._hideTimeout); + clearTimeout(this._longHideTimeout); + var el = this.el; + var style = el.style; + var styleCoord = this._styleCoord; + + if (!el.innerHTML) { + style.display = 'none'; + } else { + style.cssText = gCssText + assembleCssText(tooltipModel, !this._firstShow, this._longHide) // initial transform + + assembleTransform(styleCoord[0], styleCoord[1], true) + ("border-color:" + convertToColorString(nearPointColor) + ";") + (tooltipModel.get('extraCssText') || '') // If mouse occasionally move over the tooltip, a mouseout event will be + // triggered by canvas, and cause some unexpectable result like dragging + // stop, "unfocusAdjacency". Here `pointer-events: none` is used to solve + // it. Although it is not supported by IE8~IE10, fortunately it is a rare + // scenario. + + (";pointer-events:" + (this._enterable ? 'auto' : 'none')); + } + + this._show = true; + this._firstShow = false; + this._longHide = false; + }; + + TooltipHTMLContent.prototype.setContent = function (content, markers, tooltipModel, borderColor, arrowPosition) { + var el = this.el; + + if (content == null) { + el.innerHTML = ''; + return; + } + + var arrow = ''; + + if (isString(arrowPosition) && tooltipModel.get('trigger') === 'item' && !shouldTooltipConfine(tooltipModel)) { + arrow = assembleArrow(tooltipModel, borderColor, arrowPosition); + } + + if (isString(content)) { + el.innerHTML = content + arrow; + } else if (content) { + // Clear previous + el.innerHTML = ''; + + if (!isArray(content)) { + content = [content]; + } + + for (var i = 0; i < content.length; i++) { + if (isDom(content[i]) && content[i].parentNode !== el) { + el.appendChild(content[i]); + } + } // no arrow if empty + + + if (arrow && el.childNodes.length) { + // no need to create a new parent element, but it's not supported by IE 10 and older. + // const arrowEl = document.createRange().createContextualFragment(arrow); + var arrowEl = document.createElement('div'); + arrowEl.innerHTML = arrow; + el.appendChild(arrowEl); + } + } + }; + + TooltipHTMLContent.prototype.setEnterable = function (enterable) { + this._enterable = enterable; + }; + + TooltipHTMLContent.prototype.getSize = function () { + var el = this.el; + return [el.offsetWidth, el.offsetHeight]; + }; + + TooltipHTMLContent.prototype.moveTo = function (zrX, zrY) { + var styleCoord = this._styleCoord; + makeStyleCoord(styleCoord, this._zr, this._appendToBody, zrX, zrY); + + if (styleCoord[0] != null && styleCoord[1] != null) { + var style_1 = this.el.style; + var transforms = assembleTransform(styleCoord[0], styleCoord[1]); + each(transforms, function (transform) { + style_1[transform[0]] = transform[1]; + }); + } + }; + /** + * when `alwaysShowContent` is true, + * move the tooltip after chart resized + */ + + + TooltipHTMLContent.prototype._moveIfResized = function () { + // The ratio of left to width + var ratioX = this._styleCoord[2]; // The ratio of top to height + + var ratioY = this._styleCoord[3]; + this.moveTo(ratioX * this._zr.getWidth(), ratioY * this._zr.getHeight()); + }; + + TooltipHTMLContent.prototype.hide = function () { + var _this = this; + + var style = this.el.style; + style.visibility = 'hidden'; + style.opacity = '0'; + env.transform3dSupported && (style.willChange = ''); + this._show = false; + this._longHideTimeout = setTimeout(function () { + return _this._longHide = true; + }, 500); + }; + + TooltipHTMLContent.prototype.hideLater = function (time) { + if (this._show && !(this._inContent && this._enterable)) { + if (time) { + this._hideDelay = time; // Set show false to avoid invoke hideLater multiple times + + this._show = false; + this._hideTimeout = setTimeout(bind(this.hide, this), time); + } else { + this.hide(); + } + } + }; + + TooltipHTMLContent.prototype.isShow = function () { + return this._show; + }; + + TooltipHTMLContent.prototype.dispose = function () { + this.el.parentNode.removeChild(this.el); + }; + + return TooltipHTMLContent; + }(); + + var TooltipRichContent = + /** @class */ + function () { + function TooltipRichContent(api) { + this._show = false; + this._styleCoord = [0, 0, 0, 0]; + this._enterable = true; + this._zr = api.getZr(); + makeStyleCoord$1(this._styleCoord, this._zr, api.getWidth() / 2, api.getHeight() / 2); + } + /** + * Update when tooltip is rendered + */ + + + TooltipRichContent.prototype.update = function (tooltipModel) { + var alwaysShowContent = tooltipModel.get('alwaysShowContent'); + alwaysShowContent && this._moveIfResized(); + }; + + TooltipRichContent.prototype.show = function () { + if (this._hideTimeout) { + clearTimeout(this._hideTimeout); + } + + this.el.show(); + this._show = true; + }; + /** + * Set tooltip content + */ + + + TooltipRichContent.prototype.setContent = function (content, markupStyleCreator, tooltipModel, borderColor, arrowPosition) { + if (isObject(content)) { + throwError("development" !== 'production' ? 'Passing DOM nodes as content is not supported in richText tooltip!' : ''); + } + + if (this.el) { + this._zr.remove(this.el); + } + + var textStyleModel = tooltipModel.getModel('textStyle'); + this.el = new ZRText({ + style: { + rich: markupStyleCreator.richTextStyles, + text: content, + lineHeight: 22, + backgroundColor: tooltipModel.get('backgroundColor'), + borderRadius: tooltipModel.get('borderRadius'), + borderWidth: 1, + borderColor: borderColor, + shadowColor: tooltipModel.get('shadowColor'), + shadowBlur: tooltipModel.get('shadowBlur'), + shadowOffsetX: tooltipModel.get('shadowOffsetX'), + shadowOffsetY: tooltipModel.get('shadowOffsetY'), + textShadowColor: textStyleModel.get('textShadowColor'), + textShadowBlur: textStyleModel.get('textShadowBlur') || 0, + textShadowOffsetX: textStyleModel.get('textShadowOffsetX') || 0, + textShadowOffsetY: textStyleModel.get('textShadowOffsetY') || 0, + fill: tooltipModel.get(['textStyle', 'color']), + padding: getPaddingFromTooltipModel(tooltipModel, 'richText'), + verticalAlign: 'top', + align: 'left' + }, + z: tooltipModel.get('z') + }); + + this._zr.add(this.el); + + var self = this; + this.el.on('mouseover', function () { + // clear the timeout in hideLater and keep showing tooltip + if (self._enterable) { + clearTimeout(self._hideTimeout); + self._show = true; + } + + self._inContent = true; + }); + this.el.on('mouseout', function () { + if (self._enterable) { + if (self._show) { + self.hideLater(self._hideDelay); + } + } + + self._inContent = false; + }); + }; + + TooltipRichContent.prototype.setEnterable = function (enterable) { + this._enterable = enterable; + }; + + TooltipRichContent.prototype.getSize = function () { + var el = this.el; + var bounding = this.el.getBoundingRect(); // bounding rect does not include shadow. For renderMode richText, + // if overflow, it will be cut. So calculate them accurately. + + var shadowOuterSize = calcShadowOuterSize(el.style); + return [bounding.width + shadowOuterSize.left + shadowOuterSize.right, bounding.height + shadowOuterSize.top + shadowOuterSize.bottom]; + }; + + TooltipRichContent.prototype.moveTo = function (x, y) { + var el = this.el; + + if (el) { + var styleCoord = this._styleCoord; + makeStyleCoord$1(styleCoord, this._zr, x, y); + x = styleCoord[0]; + y = styleCoord[1]; + var style = el.style; + var borderWidth = mathMaxWith0(style.borderWidth || 0); + var shadowOuterSize = calcShadowOuterSize(style); // rich text x, y do not include border. + + el.x = x + borderWidth + shadowOuterSize.left; + el.y = y + borderWidth + shadowOuterSize.top; + el.markRedraw(); + } + }; + /** + * when `alwaysShowContent` is true, + * move the tooltip after chart resized + */ + + + TooltipRichContent.prototype._moveIfResized = function () { + // The ratio of left to width + var ratioX = this._styleCoord[2]; // The ratio of top to height + + var ratioY = this._styleCoord[3]; + this.moveTo(ratioX * this._zr.getWidth(), ratioY * this._zr.getHeight()); + }; + + TooltipRichContent.prototype.hide = function () { + if (this.el) { + this.el.hide(); + } + + this._show = false; + }; + + TooltipRichContent.prototype.hideLater = function (time) { + if (this._show && !(this._inContent && this._enterable)) { + if (time) { + this._hideDelay = time; // Set show false to avoid invoke hideLater multiple times + + this._show = false; + this._hideTimeout = setTimeout(bind(this.hide, this), time); + } else { + this.hide(); + } + } + }; + + TooltipRichContent.prototype.isShow = function () { + return this._show; + }; + + TooltipRichContent.prototype.dispose = function () { + this._zr.remove(this.el); + }; + + return TooltipRichContent; + }(); + + function mathMaxWith0(val) { + return Math.max(0, val); + } + + function calcShadowOuterSize(style) { + var shadowBlur = mathMaxWith0(style.shadowBlur || 0); + var shadowOffsetX = mathMaxWith0(style.shadowOffsetX || 0); + var shadowOffsetY = mathMaxWith0(style.shadowOffsetY || 0); + return { + left: mathMaxWith0(shadowBlur - shadowOffsetX), + right: mathMaxWith0(shadowBlur + shadowOffsetX), + top: mathMaxWith0(shadowBlur - shadowOffsetY), + bottom: mathMaxWith0(shadowBlur + shadowOffsetY) + }; + } + + function makeStyleCoord$1(out, zr, zrX, zrY) { + out[0] = zrX; + out[1] = zrY; + out[2] = out[0] / zr.getWidth(); + out[3] = out[1] / zr.getHeight(); + } + + var bind$2 = bind; + var each$b = each; + var parsePercent$2 = parsePercent$1; + var proxyRect = new Rect({ + shape: { + x: -1, + y: -1, + width: 2, + height: 2 + } + }); + + var TooltipView = + /** @class */ + function (_super) { + __extends(TooltipView, _super); + + function TooltipView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TooltipView.type; + return _this; + } + + TooltipView.prototype.init = function (ecModel, api) { + if (env.node) { + return; + } + + var tooltipModel = ecModel.getComponent('tooltip'); + var renderMode = tooltipModel.get('renderMode'); + this._renderMode = getTooltipRenderMode(renderMode); + this._tooltipContent = this._renderMode === 'richText' ? new TooltipRichContent(api) : new TooltipHTMLContent(api.getDom(), api, { + appendToBody: tooltipModel.get('appendToBody', true) + }); + }; + + TooltipView.prototype.render = function (tooltipModel, ecModel, api) { + if (env.node) { + return; + } // Reset + + + this.group.removeAll(); + this._tooltipModel = tooltipModel; + this._ecModel = ecModel; + this._api = api; + /** + * @private + * @type {boolean} + */ + + this._alwaysShowContent = tooltipModel.get('alwaysShowContent'); + var tooltipContent = this._tooltipContent; + tooltipContent.update(tooltipModel); + tooltipContent.setEnterable(tooltipModel.get('enterable')); + + this._initGlobalListener(); + + this._keepShow(); // PENDING + // `mousemove` event will be triggered very frequently when the mouse moves fast, + // which causes that the updatePosition was also called very frequently. + // In Chrome with devtools open and Firefox, tooltip looks lagged and shaked around. See #14695. + // To avoid the frequent triggering, + // consider throttling it in 50ms. (the tested result may need to validate) + + + this._updatePosition = this._renderMode === 'html' ? throttle(bind$2(this._doUpdatePosition, this), 50) : this._doUpdatePosition; + }; + + TooltipView.prototype._initGlobalListener = function () { + var tooltipModel = this._tooltipModel; + var triggerOn = tooltipModel.get('triggerOn'); + register('itemTooltip', this._api, bind$2(function (currTrigger, e, dispatchAction) { + // If 'none', it is not controlled by mouse totally. + if (triggerOn !== 'none') { + if (triggerOn.indexOf(currTrigger) >= 0) { + this._tryShow(e, dispatchAction); + } else if (currTrigger === 'leave') { + this._hide(dispatchAction); + } + } + }, this)); + }; + + TooltipView.prototype._keepShow = function () { + var tooltipModel = this._tooltipModel; + var ecModel = this._ecModel; + var api = this._api; // Try to keep the tooltip show when refreshing + + if (this._lastX != null && this._lastY != null // When user is willing to control tooltip totally using API, + // self.manuallyShowTip({x, y}) might cause tooltip hide, + // which is not expected. + && tooltipModel.get('triggerOn') !== 'none') { + var self_1 = this; + clearTimeout(this._refreshUpdateTimeout); + this._refreshUpdateTimeout = setTimeout(function () { + // Show tip next tick after other charts are rendered + // In case highlight action has wrong result + // FIXME + !api.isDisposed() && self_1.manuallyShowTip(tooltipModel, ecModel, api, { + x: self_1._lastX, + y: self_1._lastY, + dataByCoordSys: self_1._lastDataByCoordSys + }); + }); + } + }; + /** + * Show tip manually by + * dispatchAction({ + * type: 'showTip', + * x: 10, + * y: 10 + * }); + * Or + * dispatchAction({ + * type: 'showTip', + * seriesIndex: 0, + * dataIndex or dataIndexInside or name + * }); + * + * TODO Batch + */ + + + TooltipView.prototype.manuallyShowTip = function (tooltipModel, ecModel, api, payload) { + if (payload.from === this.uid || env.node) { + return; + } + + var dispatchAction = makeDispatchAction$1(payload, api); // Reset ticket + + this._ticket = ''; // When triggered from axisPointer. + + var dataByCoordSys = payload.dataByCoordSys; + var cmptRef = findComponentReference(payload, ecModel, api); + + if (cmptRef) { + var rect = cmptRef.el.getBoundingRect().clone(); + rect.applyTransform(cmptRef.el.transform); + + this._tryShow({ + offsetX: rect.x + rect.width / 2, + offsetY: rect.y + rect.height / 2, + target: cmptRef.el, + position: payload.position, + // When manully trigger, the mouse is not on the el, so we'd better to + // position tooltip on the bottom of the el and display arrow is possible. + positionDefault: 'bottom' + }, dispatchAction); + } else if (payload.tooltip && payload.x != null && payload.y != null) { + var el = proxyRect; + el.x = payload.x; + el.y = payload.y; + el.update(); + getECData(el).tooltipConfig = { + name: null, + option: payload.tooltip + }; // Manually show tooltip while view is not using zrender elements. + + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + target: el + }, dispatchAction); + } else if (dataByCoordSys) { + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + position: payload.position, + dataByCoordSys: dataByCoordSys, + tooltipOption: payload.tooltipOption + }, dispatchAction); + } else if (payload.seriesIndex != null) { + if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) { + return; + } + + var pointInfo = findPointFromSeries(payload, ecModel); + var cx = pointInfo.point[0]; + var cy = pointInfo.point[1]; + + if (cx != null && cy != null) { + this._tryShow({ + offsetX: cx, + offsetY: cy, + target: pointInfo.el, + position: payload.position, + // When manully trigger, the mouse is not on the el, so we'd better to + // position tooltip on the bottom of the el and display arrow is possible. + positionDefault: 'bottom' + }, dispatchAction); + } + } else if (payload.x != null && payload.y != null) { + // FIXME + // should wrap dispatchAction like `axisPointer/globalListener` ? + api.dispatchAction({ + type: 'updateAxisPointer', + x: payload.x, + y: payload.y + }); + + this._tryShow({ + offsetX: payload.x, + offsetY: payload.y, + position: payload.position, + target: api.getZr().findHover(payload.x, payload.y).target + }, dispatchAction); + } + }; + + TooltipView.prototype.manuallyHideTip = function (tooltipModel, ecModel, api, payload) { + var tooltipContent = this._tooltipContent; + + if (!this._alwaysShowContent && this._tooltipModel) { + tooltipContent.hideLater(this._tooltipModel.get('hideDelay')); + } + + this._lastX = this._lastY = this._lastDataByCoordSys = null; + + if (payload.from !== this.uid) { + this._hide(makeDispatchAction$1(payload, api)); + } + }; // Be compatible with previous design, that is, when tooltip.type is 'axis' and + // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer + // and tooltip. + + + TooltipView.prototype._manuallyAxisShowTip = function (tooltipModel, ecModel, api, payload) { + var seriesIndex = payload.seriesIndex; + var dataIndex = payload.dataIndex; // @ts-ignore + + var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo; + + if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) { + return; + } + + var seriesModel = ecModel.getSeriesByIndex(seriesIndex); + + if (!seriesModel) { + return; + } + + var data = seriesModel.getData(); + var tooltipCascadedModel = buildTooltipModel([data.getItemModel(dataIndex), seriesModel, (seriesModel.coordinateSystem || {}).model], this._tooltipModel); + + if (tooltipCascadedModel.get('trigger') !== 'axis') { + return; + } + + api.dispatchAction({ + type: 'updateAxisPointer', + seriesIndex: seriesIndex, + dataIndex: dataIndex, + position: payload.position + }); + return true; + }; + + TooltipView.prototype._tryShow = function (e, dispatchAction) { + var el = e.target; + var tooltipModel = this._tooltipModel; + + if (!tooltipModel) { + return; + } // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed + + + this._lastX = e.offsetX; + this._lastY = e.offsetY; + var dataByCoordSys = e.dataByCoordSys; + + if (dataByCoordSys && dataByCoordSys.length) { + this._showAxisTooltip(dataByCoordSys, e); + } else if (el) { + this._lastDataByCoordSys = null; + var seriesDispatcher_1; + var cmptDispatcher_1; + findEventDispatcher(el, function (target) { + // Always show item tooltip if mouse is on the element with dataIndex + if (getECData(target).dataIndex != null) { + seriesDispatcher_1 = target; + return true; + } // Tooltip provided directly. Like legend. + + + if (getECData(target).tooltipConfig != null) { + cmptDispatcher_1 = target; + return true; + } + }, true); + + if (seriesDispatcher_1) { + this._showSeriesItemTooltip(e, seriesDispatcher_1, dispatchAction); + } else if (cmptDispatcher_1) { + this._showComponentItemTooltip(e, cmptDispatcher_1, dispatchAction); + } else { + this._hide(dispatchAction); + } + } else { + this._lastDataByCoordSys = null; + + this._hide(dispatchAction); + } + }; + + TooltipView.prototype._showOrMove = function (tooltipModel, cb) { + // showDelay is used in this case: tooltip.enterable is set + // as true. User intent to move mouse into tooltip and click + // something. `showDelay` makes it easier to enter the content + // but tooltip do not move immediately. + var delay = tooltipModel.get('showDelay'); + cb = bind(cb, this); + clearTimeout(this._showTimout); + delay > 0 ? this._showTimout = setTimeout(cb, delay) : cb(); + }; + + TooltipView.prototype._showAxisTooltip = function (dataByCoordSys, e) { + var ecModel = this._ecModel; + var globalTooltipModel = this._tooltipModel; + var point = [e.offsetX, e.offsetY]; + var singleTooltipModel = buildTooltipModel([e.tooltipOption], globalTooltipModel); + var renderMode = this._renderMode; + var cbParamsList = []; + var articleMarkup = createTooltipMarkup('section', { + blocks: [], + noHeader: true + }); // Only for legacy: `Serise['formatTooltip']` returns a string. + + var markupTextArrLegacy = []; + var markupStyleCreator = new TooltipMarkupStyleCreator(); + each$b(dataByCoordSys, function (itemCoordSys) { + each$b(itemCoordSys.dataByAxis, function (axisItem) { + var axisModel = ecModel.getComponent(axisItem.axisDim + 'Axis', axisItem.axisIndex); + var axisValue = axisItem.value; + + if (!axisModel || axisValue == null) { + return; + } + + var axisValueLabel = getValueLabel(axisValue, axisModel.axis, ecModel, axisItem.seriesDataIndices, axisItem.valueLabelOpt); + var axisSectionMarkup = createTooltipMarkup('section', { + header: axisValueLabel, + noHeader: !trim(axisValueLabel), + sortBlocks: true, + blocks: [] + }); + articleMarkup.blocks.push(axisSectionMarkup); + each(axisItem.seriesDataIndices, function (idxItem) { + var series = ecModel.getSeriesByIndex(idxItem.seriesIndex); + var dataIndex = idxItem.dataIndexInside; + var cbParams = series.getDataParams(dataIndex); // Can't find data. + + if (cbParams.dataIndex < 0) { + return; + } + + cbParams.axisDim = axisItem.axisDim; + cbParams.axisIndex = axisItem.axisIndex; + cbParams.axisType = axisItem.axisType; + cbParams.axisId = axisItem.axisId; + cbParams.axisValue = getAxisRawValue(axisModel.axis, { + value: axisValue + }); + cbParams.axisValueLabel = axisValueLabel; // Pre-create marker style for makers. Users can assemble richText + // text in `formatter` callback and use those markers style. + + cbParams.marker = markupStyleCreator.makeTooltipMarker('item', convertToColorString(cbParams.color), renderMode); + var seriesTooltipResult = normalizeTooltipFormatResult(series.formatTooltip(dataIndex, true, null)); + + if (seriesTooltipResult.markupFragment) { + axisSectionMarkup.blocks.push(seriesTooltipResult.markupFragment); + } + + if (seriesTooltipResult.markupText) { + markupTextArrLegacy.push(seriesTooltipResult.markupText); + } + + cbParamsList.push(cbParams); + }); + }); + }); // In most cases, the second axis is displays upper on the first one. + // So we reverse it to look better. + + articleMarkup.blocks.reverse(); + markupTextArrLegacy.reverse(); + var positionExpr = e.position; + var orderMode = singleTooltipModel.get('order'); + var builtMarkupText = buildTooltipMarkup(articleMarkup, markupStyleCreator, renderMode, orderMode, ecModel.get('useUTC'), singleTooltipModel.get('textStyle')); + builtMarkupText && markupTextArrLegacy.unshift(builtMarkupText); + var blockBreak = renderMode === 'richText' ? '\n\n' : '
'; + var allMarkupText = markupTextArrLegacy.join(blockBreak); + + this._showOrMove(singleTooltipModel, function () { + if (this._updateContentNotChangedOnAxis(dataByCoordSys, cbParamsList)) { + this._updatePosition(singleTooltipModel, positionExpr, point[0], point[1], this._tooltipContent, cbParamsList); + } else { + this._showTooltipContent(singleTooltipModel, allMarkupText, cbParamsList, Math.random() + '', point[0], point[1], positionExpr, null, markupStyleCreator); + } + }); // Do not trigger events here, because this branch only be entered + // from dispatchAction. + + }; + + TooltipView.prototype._showSeriesItemTooltip = function (e, dispatcher, dispatchAction) { + var ecModel = this._ecModel; + var ecData = getECData(dispatcher); // Use dataModel in element if possible + // Used when mouseover on a element like markPoint or edge + // In which case, the data is not main data in series. + + var seriesIndex = ecData.seriesIndex; + var seriesModel = ecModel.getSeriesByIndex(seriesIndex); // For example, graph link. + + var dataModel = ecData.dataModel || seriesModel; + var dataIndex = ecData.dataIndex; + var dataType = ecData.dataType; + var data = dataModel.getData(dataType); + var renderMode = this._renderMode; + var positionDefault = e.positionDefault; + var tooltipModel = buildTooltipModel([data.getItemModel(dataIndex), dataModel, seriesModel && (seriesModel.coordinateSystem || {}).model], this._tooltipModel, positionDefault ? { + position: positionDefault + } : null); + var tooltipTrigger = tooltipModel.get('trigger'); + + if (tooltipTrigger != null && tooltipTrigger !== 'item') { + return; + } + + var params = dataModel.getDataParams(dataIndex, dataType); + var markupStyleCreator = new TooltipMarkupStyleCreator(); // Pre-create marker style for makers. Users can assemble richText + // text in `formatter` callback and use those markers style. + + params.marker = markupStyleCreator.makeTooltipMarker('item', convertToColorString(params.color), renderMode); + var seriesTooltipResult = normalizeTooltipFormatResult(dataModel.formatTooltip(dataIndex, false, dataType)); + var orderMode = tooltipModel.get('order'); + var markupText = seriesTooltipResult.markupFragment ? buildTooltipMarkup(seriesTooltipResult.markupFragment, markupStyleCreator, renderMode, orderMode, ecModel.get('useUTC'), tooltipModel.get('textStyle')) : seriesTooltipResult.markupText; + var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex; + + this._showOrMove(tooltipModel, function () { + this._showTooltipContent(tooltipModel, markupText, params, asyncTicket, e.offsetX, e.offsetY, e.position, e.target, markupStyleCreator); + }); // FIXME + // duplicated showtip if manuallyShowTip is called from dispatchAction. + + + dispatchAction({ + type: 'showTip', + dataIndexInside: dataIndex, + dataIndex: data.getRawIndex(dataIndex), + seriesIndex: seriesIndex, + from: this.uid + }); + }; + + TooltipView.prototype._showComponentItemTooltip = function (e, el, dispatchAction) { + var ecData = getECData(el); + var tooltipConfig = ecData.tooltipConfig; + var tooltipOpt = tooltipConfig.option || {}; + + if (isString(tooltipOpt)) { + var content = tooltipOpt; + tooltipOpt = { + content: content, + // Fixed formatter + formatter: content + }; + } + + var tooltipModelCascade = [tooltipOpt]; + + var cmpt = this._ecModel.getComponent(ecData.componentMainType, ecData.componentIndex); + + if (cmpt) { + tooltipModelCascade.push(cmpt); + } // In most cases, component tooltip formatter has different params with series tooltip formatter, + // so that they can not share the same formatter. Since the global tooltip formatter is used for series + // by convension, we do not use it as the default formatter for component. + + + tooltipModelCascade.push({ + formatter: tooltipOpt.content + }); + var positionDefault = e.positionDefault; + var subTooltipModel = buildTooltipModel(tooltipModelCascade, this._tooltipModel, positionDefault ? { + position: positionDefault + } : null); + var defaultHtml = subTooltipModel.get('content'); + var asyncTicket = Math.random() + ''; // PENDING: this case do not support richText style yet. + + var markupStyleCreator = new TooltipMarkupStyleCreator(); // Do not check whether `trigger` is 'none' here, because `trigger` + // only works on coordinate system. In fact, we have not found case + // that requires setting `trigger` nothing on component yet. + + this._showOrMove(subTooltipModel, function () { + // Use formatterParams from element defined in component + // Avoid users modify it. + var formatterParams = clone(subTooltipModel.get('formatterParams') || {}); + + this._showTooltipContent(subTooltipModel, defaultHtml, formatterParams, asyncTicket, e.offsetX, e.offsetY, e.position, el, markupStyleCreator); + }); // If not dispatch showTip, tip may be hide triggered by axis. + + + dispatchAction({ + type: 'showTip', + from: this.uid + }); + }; + + TooltipView.prototype._showTooltipContent = function ( // Use Model insteadof TooltipModel because this model may be from series or other options. + // Instead of top level tooltip. + tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markupStyleCreator) { + // Reset ticket + this._ticket = ''; + + if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) { + return; + } + + var tooltipContent = this._tooltipContent; + var formatter = tooltipModel.get('formatter'); + positionExpr = positionExpr || tooltipModel.get('position'); + var html = defaultHtml; + + var nearPoint = this._getNearestPoint([x, y], params, tooltipModel.get('trigger'), tooltipModel.get('borderColor')); + + var nearPointColor = nearPoint.color; + + if (formatter) { + if (isString(formatter)) { + var useUTC = tooltipModel.ecModel.get('useUTC'); + var params0 = isArray(params) ? params[0] : params; + var isTimeAxis = params0 && params0.axisType && params0.axisType.indexOf('time') >= 0; + html = formatter; + + if (isTimeAxis) { + html = format(params0.axisValue, html, useUTC); + } + + html = formatTpl(html, params, true); + } else if (isFunction(formatter)) { + var callback = bind$2(function (cbTicket, html) { + if (cbTicket === this._ticket) { + tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr); + + this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el); + } + }, this); + this._ticket = asyncTicket; + html = formatter(params, asyncTicket, callback); + } else { + html = formatter; + } + } + + tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr); + tooltipContent.show(tooltipModel, nearPointColor); + + this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el); + }; + + TooltipView.prototype._getNearestPoint = function (point, tooltipDataParams, trigger, borderColor) { + if (trigger === 'axis' || isArray(tooltipDataParams)) { + return { + color: borderColor || (this._renderMode === 'html' ? '#fff' : 'none') + }; + } + + if (!isArray(tooltipDataParams)) { + return { + color: borderColor || tooltipDataParams.color || tooltipDataParams.borderColor + }; + } + }; + + TooltipView.prototype._doUpdatePosition = function (tooltipModel, positionExpr, x, // Mouse x + y, // Mouse y + content, params, el) { + var viewWidth = this._api.getWidth(); + + var viewHeight = this._api.getHeight(); + + positionExpr = positionExpr || tooltipModel.get('position'); + var contentSize = content.getSize(); + var align = tooltipModel.get('align'); + var vAlign = tooltipModel.get('verticalAlign'); + var rect = el && el.getBoundingRect().clone(); + el && rect.applyTransform(el.transform); + + if (isFunction(positionExpr)) { + // Callback of position can be an array or a string specify the position + positionExpr = positionExpr([x, y], params, content.el, rect, { + viewSize: [viewWidth, viewHeight], + contentSize: contentSize.slice() + }); + } + + if (isArray(positionExpr)) { + x = parsePercent$2(positionExpr[0], viewWidth); + y = parsePercent$2(positionExpr[1], viewHeight); + } else if (isObject(positionExpr)) { + var boxLayoutPosition = positionExpr; + boxLayoutPosition.width = contentSize[0]; + boxLayoutPosition.height = contentSize[1]; + var layoutRect = getLayoutRect(boxLayoutPosition, { + width: viewWidth, + height: viewHeight + }); + x = layoutRect.x; + y = layoutRect.y; + align = null; // When positionExpr is left/top/right/bottom, + // align and verticalAlign will not work. + + vAlign = null; + } // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element + else if (isString(positionExpr) && el) { + var pos = calcTooltipPosition(positionExpr, rect, contentSize, tooltipModel.get('borderWidth')); + x = pos[0]; + y = pos[1]; + } else { + var pos = refixTooltipPosition(x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20); + x = pos[0]; + y = pos[1]; + } + + align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0); + vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0); + + if (shouldTooltipConfine(tooltipModel)) { + var pos = confineTooltipPosition(x, y, content, viewWidth, viewHeight); + x = pos[0]; + y = pos[1]; + } + + content.moveTo(x, y); + }; // FIXME + // Should we remove this but leave this to user? + + + TooltipView.prototype._updateContentNotChangedOnAxis = function (dataByCoordSys, cbParamsList) { + var lastCoordSys = this._lastDataByCoordSys; + var lastCbParamsList = this._cbParamsList; + var contentNotChanged = !!lastCoordSys && lastCoordSys.length === dataByCoordSys.length; + contentNotChanged && each$b(lastCoordSys, function (lastItemCoordSys, indexCoordSys) { + var lastDataByAxis = lastItemCoordSys.dataByAxis || []; + var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {}; + var thisDataByAxis = thisItemCoordSys.dataByAxis || []; + contentNotChanged = contentNotChanged && lastDataByAxis.length === thisDataByAxis.length; + contentNotChanged && each$b(lastDataByAxis, function (lastItem, indexAxis) { + var thisItem = thisDataByAxis[indexAxis] || {}; + var lastIndices = lastItem.seriesDataIndices || []; + var newIndices = thisItem.seriesDataIndices || []; + contentNotChanged = contentNotChanged && lastItem.value === thisItem.value && lastItem.axisType === thisItem.axisType && lastItem.axisId === thisItem.axisId && lastIndices.length === newIndices.length; + contentNotChanged && each$b(lastIndices, function (lastIdxItem, j) { + var newIdxItem = newIndices[j]; + contentNotChanged = contentNotChanged && lastIdxItem.seriesIndex === newIdxItem.seriesIndex && lastIdxItem.dataIndex === newIdxItem.dataIndex; + }); // check is cbParams data value changed + + lastCbParamsList && each(lastItem.seriesDataIndices, function (idxItem) { + var seriesIdx = idxItem.seriesIndex; + var cbParams = cbParamsList[seriesIdx]; + var lastCbParams = lastCbParamsList[seriesIdx]; + + if (cbParams && lastCbParams && lastCbParams.data !== cbParams.data) { + contentNotChanged = false; + } + }); + }); + }); + this._lastDataByCoordSys = dataByCoordSys; + this._cbParamsList = cbParamsList; + return !!contentNotChanged; + }; + + TooltipView.prototype._hide = function (dispatchAction) { + // Do not directly hideLater here, because this behavior may be prevented + // in dispatchAction when showTip is dispatched. + // FIXME + // duplicated hideTip if manuallyHideTip is called from dispatchAction. + this._lastDataByCoordSys = null; + dispatchAction({ + type: 'hideTip', + from: this.uid + }); + }; + + TooltipView.prototype.dispose = function (ecModel, api) { + if (env.node) { + return; + } + + this._tooltipContent.dispose(); + + unregister('itemTooltip', api); + }; + + TooltipView.type = 'tooltip'; + return TooltipView; + }(ComponentView); + /** + * From top to bottom. (the last one should be globalTooltipModel); + */ + + + function buildTooltipModel(modelCascade, globalTooltipModel, defaultTooltipOption) { + // Last is always tooltip model. + var ecModel = globalTooltipModel.ecModel; + var resultModel; + + if (defaultTooltipOption) { + resultModel = new Model(defaultTooltipOption, ecModel, ecModel); + resultModel = new Model(globalTooltipModel.option, resultModel, ecModel); + } else { + resultModel = globalTooltipModel; + } + + for (var i = modelCascade.length - 1; i >= 0; i--) { + var tooltipOpt = modelCascade[i]; + + if (tooltipOpt) { + if (tooltipOpt instanceof Model) { + tooltipOpt = tooltipOpt.get('tooltip', true); + } // In each data item tooltip can be simply write: + // { + // value: 10, + // tooltip: 'Something you need to know' + // } + + + if (isString(tooltipOpt)) { + tooltipOpt = { + formatter: tooltipOpt + }; + } + + if (tooltipOpt) { + resultModel = new Model(tooltipOpt, resultModel, ecModel); + } + } + } + + return resultModel; + } + + function makeDispatchAction$1(payload, api) { + return payload.dispatchAction || bind(api.dispatchAction, api); + } + + function refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) { + var size = content.getSize(); + var width = size[0]; + var height = size[1]; + + if (gapH != null) { + // Add extra 2 pixels for this case: + // At present the "values" in defaut tooltip are using CSS `float: right`. + // When the right edge of the tooltip box is on the right side of the + // viewport, the `float` layout might push the "values" to the second line. + if (x + width + gapH + 2 > viewWidth) { + x -= width + gapH; + } else { + x += gapH; + } + } + + if (gapV != null) { + if (y + height + gapV > viewHeight) { + y -= height + gapV; + } else { + y += gapV; + } + } + + return [x, y]; + } + + function confineTooltipPosition(x, y, content, viewWidth, viewHeight) { + var size = content.getSize(); + var width = size[0]; + var height = size[1]; + x = Math.min(x + width, viewWidth) - width; + y = Math.min(y + height, viewHeight) - height; + x = Math.max(x, 0); + y = Math.max(y, 0); + return [x, y]; + } + + function calcTooltipPosition(position, rect, contentSize, borderWidth) { + var domWidth = contentSize[0]; + var domHeight = contentSize[1]; + var offset = Math.ceil(Math.SQRT2 * borderWidth) + 8; + var x = 0; + var y = 0; + var rectWidth = rect.width; + var rectHeight = rect.height; + + switch (position) { + case 'inside': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y + rectHeight / 2 - domHeight / 2; + break; + + case 'top': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y - domHeight - offset; + break; + + case 'bottom': + x = rect.x + rectWidth / 2 - domWidth / 2; + y = rect.y + rectHeight + offset; + break; + + case 'left': + x = rect.x - domWidth - offset; + y = rect.y + rectHeight / 2 - domHeight / 2; + break; + + case 'right': + x = rect.x + rectWidth + offset; + y = rect.y + rectHeight / 2 - domHeight / 2; + } + + return [x, y]; + } + + function isCenterAlign(align) { + return align === 'center' || align === 'middle'; + } + /** + * Find target component by payload like: + * ```js + * { legendId: 'some_id', name: 'xxx' } + * { toolboxIndex: 1, name: 'xxx' } + * { geoName: 'some_name', name: 'xxx' } + * ``` + * PENDING: at present only + * + * If not found, return null/undefined. + */ + + + function findComponentReference(payload, ecModel, api) { + var queryOptionMap = preParseFinder(payload).queryOptionMap; + var componentMainType = queryOptionMap.keys()[0]; + + if (!componentMainType || componentMainType === 'series') { + return; + } + + var queryResult = queryReferringComponents(ecModel, componentMainType, queryOptionMap.get(componentMainType), { + useDefault: false, + enableAll: false, + enableNone: false + }); + var model = queryResult.models[0]; + + if (!model) { + return; + } + + var view = api.getViewOfComponentModel(model); + var el; + view.group.traverse(function (subEl) { + var tooltipConfig = getECData(subEl).tooltipConfig; + + if (tooltipConfig && tooltipConfig.name === payload.name) { + el = subEl; + return true; // stop + } + }); + + if (el) { + return { + componentMainType: componentMainType, + componentIndex: model.componentIndex, + el: el + }; + } + } + + function install$A(registers) { + use(install$s); + registers.registerComponentModel(TooltipModel); + registers.registerComponentView(TooltipView); + /** + * @action + * @property {string} type + * @property {number} seriesIndex + * @property {number} dataIndex + * @property {number} [x] + * @property {number} [y] + */ + + registers.registerAction({ + type: 'showTip', + event: 'showTip', + update: 'tooltip:manuallyShowTip' + }, // noop + function () {}); + registers.registerAction({ + type: 'hideTip', + event: 'hideTip', + update: 'tooltip:manuallyHideTip' + }, // noop + function () {}); + } + + var DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear']; + function brushPreprocessor(option, isNew) { + var brushComponents = normalizeToArray(option ? option.brush : []); + + if (!brushComponents.length) { + return; + } + + var brushComponentSpecifiedBtns = []; + each(brushComponents, function (brushOpt) { + var tbs = brushOpt.hasOwnProperty('toolbox') ? brushOpt.toolbox : []; + + if (tbs instanceof Array) { + brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs); + } + }); + var toolbox = option && option.toolbox; + + if (isArray(toolbox)) { + toolbox = toolbox[0]; + } + + if (!toolbox) { + toolbox = { + feature: {} + }; + option.toolbox = [toolbox]; + } + + var toolboxFeature = toolbox.feature || (toolbox.feature = {}); + var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {}); + var brushTypes = toolboxBrush.type || (toolboxBrush.type = []); + brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns); + removeDuplicate(brushTypes); + + if (isNew && !brushTypes.length) { + brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS); + } + } + + function removeDuplicate(arr) { + var map = {}; + each(arr, function (val) { + map[val] = 1; + }); + arr.length = 0; + each(map, function (flag, val) { + arr.push(val); + }); + } + + var each$c = each; + + function hasKeys(obj) { + if (obj) { + for (var name_1 in obj) { + if (obj.hasOwnProperty(name_1)) { + return true; + } + } + } + } + + function createVisualMappings(option, stateList, supplementVisualOption) { + var visualMappings = {}; + each$c(stateList, function (state) { + var mappings = visualMappings[state] = createMappings(); + each$c(option[state], function (visualData, visualType) { + if (!VisualMapping.isValidType(visualType)) { + return; + } + + var mappingOption = { + type: visualType, + visual: visualData + }; + supplementVisualOption && supplementVisualOption(mappingOption, state); + mappings[visualType] = new VisualMapping(mappingOption); // Prepare a alpha for opacity, for some case that opacity + // is not supported, such as rendering using gradient color. + + if (visualType === 'opacity') { + mappingOption = clone(mappingOption); + mappingOption.type = 'colorAlpha'; + mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption); + } + }); + }); + return visualMappings; + + function createMappings() { + var Creater = function () {}; // Make sure hidden fields will not be visited by + // object iteration (with hasOwnProperty checking). + + + Creater.prototype.__hidden = Creater.prototype; + var obj = new Creater(); + return obj; + } + } + function replaceVisualOption(thisOption, newOption, keys) { + // Visual attributes merge is not supported, otherwise it + // brings overcomplicated merge logic. See #2853. So if + // newOption has anyone of these keys, all of these keys + // will be reset. Otherwise, all keys remain. + var has; + each(keys, function (key) { + if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) { + has = true; + } + }); + has && each(keys, function (key) { + if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) { + thisOption[key] = clone(newOption[key]); + } else { + delete thisOption[key]; + } + }); + } + /** + * @param stateList + * @param visualMappings + * @param list + * @param getValueState param: valueOrIndex, return: state. + * @param scope Scope for getValueState + * @param dimension Concrete dimension, if used. + */ + // ???! handle brush? + + function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) { + var visualTypesMap = {}; + each(stateList, function (state) { + var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]); + visualTypesMap[state] = visualTypes; + }); + var dataIndex; + + function getVisual(key) { + return getItemVisualFromData(data, dataIndex, key); + } + + function setVisual(key, value) { + setItemVisualFromData(data, dataIndex, key, value); + } + + if (dimension == null) { + data.each(eachItem); + } else { + data.each([dimension], eachItem); + } + + function eachItem(valueOrIndex, index) { + dataIndex = dimension == null ? valueOrIndex // First argument is index + : index; + var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance + // @ts-ignore + + if (rawDataItem && rawDataItem.visualMap === false) { + return; + } + + var valueState = getValueState.call(scope, valueOrIndex); + var mappings = visualMappings[valueState]; + var visualTypes = visualTypesMap[valueState]; + + for (var i = 0, len = visualTypes.length; i < len; i++) { + var type = visualTypes[i]; + mappings[type] && mappings[type].applyVisual(valueOrIndex, getVisual, setVisual); + } + } + } + /** + * @param data + * @param stateList + * @param visualMappings > + * @param getValueState param: valueOrIndex, return: state. + * @param dim dimension or dimension index. + */ + + function incrementalApplyVisual(stateList, visualMappings, getValueState, dim) { + var visualTypesMap = {}; + each(stateList, function (state) { + var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]); + visualTypesMap[state] = visualTypes; + }); + return { + progress: function progress(params, data) { + var dimIndex; + + if (dim != null) { + dimIndex = data.getDimensionIndex(dim); + } + + function getVisual(key) { + return getItemVisualFromData(data, dataIndex, key); + } + + function setVisual(key, value) { + setItemVisualFromData(data, dataIndex, key, value); + } + + var dataIndex; + var store = data.getStore(); + + while ((dataIndex = params.next()) != null) { + var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance + // @ts-ignore + + if (rawDataItem && rawDataItem.visualMap === false) { + continue; + } + + var value = dim != null ? store.get(dimIndex, dataIndex) : dataIndex; + var valueState = getValueState(value); + var mappings = visualMappings[valueState]; + var visualTypes = visualTypesMap[valueState]; + + for (var i = 0, len = visualTypes.length; i < len; i++) { + var type = visualTypes[i]; + mappings[type] && mappings[type].applyVisual(value, getVisual, setVisual); + } + } + } + }; + } + + function makeBrushCommonSelectorForSeries(area) { + var brushType = area.brushType; // Do not use function binding or curry for performance. + + var selectors = { + point: function (itemLayout) { + return selector[brushType].point(itemLayout, selectors, area); + }, + rect: function (itemLayout) { + return selector[brushType].rect(itemLayout, selectors, area); + } + }; + return selectors; + } + var selector = { + lineX: getLineSelectors(0), + lineY: getLineSelectors(1), + rect: { + point: function (itemLayout, selectors, area) { + return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]); + }, + rect: function (itemLayout, selectors, area) { + return itemLayout && area.boundingRect.intersect(itemLayout); + } + }, + polygon: { + point: function (itemLayout, selectors, area) { + return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]) && contain$1(area.range, itemLayout[0], itemLayout[1]); + }, + rect: function (itemLayout, selectors, area) { + var points = area.range; + + if (!itemLayout || points.length <= 1) { + return false; + } + + var x = itemLayout.x; + var y = itemLayout.y; + var width = itemLayout.width; + var height = itemLayout.height; + var p = points[0]; + + if (contain$1(points, x, y) || contain$1(points, x + width, y) || contain$1(points, x, y + height) || contain$1(points, x + width, y + height) || BoundingRect.create(itemLayout).contain(p[0], p[1]) || linePolygonIntersect(x, y, x + width, y, points) || linePolygonIntersect(x, y, x, y + height, points) || linePolygonIntersect(x + width, y, x + width, y + height, points) || linePolygonIntersect(x, y + height, x + width, y + height, points)) { + return true; + } + } + } + }; + + function getLineSelectors(xyIndex) { + var xy = ['x', 'y']; + var wh = ['width', 'height']; + return { + point: function (itemLayout, selectors, area) { + if (itemLayout) { + var range = area.range; + var p = itemLayout[xyIndex]; + return inLineRange(p, range); + } + }, + rect: function (itemLayout, selectors, area) { + if (itemLayout) { + var range = area.range; + var layoutRange = [itemLayout[xy[xyIndex]], itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]]]; + layoutRange[1] < layoutRange[0] && layoutRange.reverse(); + return inLineRange(layoutRange[0], range) || inLineRange(layoutRange[1], range) || inLineRange(range[0], layoutRange) || inLineRange(range[1], layoutRange); + } + } + }; + } + + function inLineRange(p, range) { + return range[0] <= p && p <= range[1]; + } + + var STATE_LIST = ['inBrush', 'outOfBrush']; + var DISPATCH_METHOD = '__ecBrushSelect'; + var DISPATCH_FLAG = '__ecInBrushSelectEvent'; + function layoutCovers(ecModel) { + ecModel.eachComponent({ + mainType: 'brush' + }, function (brushModel) { + var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel); + brushTargetManager.setInputRanges(brushModel.areas, ecModel); + }); + } + /** + * Register the visual encoding if this modules required. + */ + + function brushVisual(ecModel, api, payload) { + var brushSelected = []; + var throttleType; + var throttleDelay; + ecModel.eachComponent({ + mainType: 'brush' + }, function (brushModel) { + payload && payload.type === 'takeGlobalCursor' && brushModel.setBrushOption(payload.key === 'brush' ? payload.brushOption : { + brushType: false + }); + }); + layoutCovers(ecModel); + ecModel.eachComponent({ + mainType: 'brush' + }, function (brushModel, brushIndex) { + var thisBrushSelected = { + brushId: brushModel.id, + brushIndex: brushIndex, + brushName: brushModel.name, + areas: clone(brushModel.areas), + selected: [] + }; // Every brush component exists in event params, convenient + // for user to find by index. + + brushSelected.push(thisBrushSelected); + var brushOption = brushModel.option; + var brushLink = brushOption.brushLink; + var linkedSeriesMap = []; + var selectedDataIndexForLink = []; + var rangeInfoBySeries = []; + var hasBrushExists = false; + + if (!brushIndex) { + // Only the first throttle setting works. + throttleType = brushOption.throttleType; + throttleDelay = brushOption.throttleDelay; + } // Add boundingRect and selectors to range. + + + var areas = map(brushModel.areas, function (area) { + var builder = boundingRectBuilders[area.brushType]; + var selectableArea = defaults({ + boundingRect: builder ? builder(area) : void 0 + }, area); + selectableArea.selectors = makeBrushCommonSelectorForSeries(selectableArea); + return selectableArea; + }); + var visualMappings = createVisualMappings(brushModel.option, STATE_LIST, function (mappingOption) { + mappingOption.mappingMethod = 'fixed'; + }); + isArray(brushLink) && each(brushLink, function (seriesIndex) { + linkedSeriesMap[seriesIndex] = 1; + }); + + function linkOthers(seriesIndex) { + return brushLink === 'all' || !!linkedSeriesMap[seriesIndex]; + } // If no supported brush or no brush on the series, + // all visuals should be in original state. + + + function brushed(rangeInfoList) { + return !!rangeInfoList.length; + } + /** + * Logic for each series: (If the logic has to be modified one day, do it carefully!) + * + * ( brushed ┬ && ┬hasBrushExist ┬ && linkOthers ) => StepA: ┬record, ┬ StepB: ┬visualByRecord. + * !brushed┘ ├hasBrushExist ┤ └nothing,┘ ├visualByRecord. + * └!hasBrushExist┘ └nothing. + * ( !brushed && ┬hasBrushExist ┬ && linkOthers ) => StepA: nothing, StepB: ┬visualByRecord. + * └!hasBrushExist┘ └nothing. + * ( brushed ┬ && !linkOthers ) => StepA: nothing, StepB: ┬visualByCheck. + * !brushed┘ └nothing. + * ( !brushed && !linkOthers ) => StepA: nothing, StepB: nothing. + */ + // Step A + + + ecModel.eachSeries(function (seriesModel, seriesIndex) { + var rangeInfoList = rangeInfoBySeries[seriesIndex] = []; + seriesModel.subType === 'parallel' ? stepAParallel(seriesModel, seriesIndex) : stepAOthers(seriesModel, seriesIndex, rangeInfoList); + }); + + function stepAParallel(seriesModel, seriesIndex) { + var coordSys = seriesModel.coordinateSystem; + hasBrushExists = hasBrushExists || coordSys.hasAxisBrushed(); + linkOthers(seriesIndex) && coordSys.eachActiveState(seriesModel.getData(), function (activeState, dataIndex) { + activeState === 'active' && (selectedDataIndexForLink[dataIndex] = 1); + }); + } + + function stepAOthers(seriesModel, seriesIndex, rangeInfoList) { + if (!seriesModel.brushSelector || brushModelNotControll(brushModel, seriesIndex)) { + return; + } + + each(areas, function (area) { + if (brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel)) { + rangeInfoList.push(area); + } + + hasBrushExists = hasBrushExists || brushed(rangeInfoList); + }); + + if (linkOthers(seriesIndex) && brushed(rangeInfoList)) { + var data_1 = seriesModel.getData(); + data_1.each(function (dataIndex) { + if (checkInRange(seriesModel, rangeInfoList, data_1, dataIndex)) { + selectedDataIndexForLink[dataIndex] = 1; + } + }); + } + } // Step B + + + ecModel.eachSeries(function (seriesModel, seriesIndex) { + var seriesBrushSelected = { + seriesId: seriesModel.id, + seriesIndex: seriesIndex, + seriesName: seriesModel.name, + dataIndex: [] + }; // Every series exists in event params, convenient + // for user to find series by seriesIndex. + + thisBrushSelected.selected.push(seriesBrushSelected); + var rangeInfoList = rangeInfoBySeries[seriesIndex]; + var data = seriesModel.getData(); + var getValueState = linkOthers(seriesIndex) ? function (dataIndex) { + return selectedDataIndexForLink[dataIndex] ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') : 'outOfBrush'; + } : function (dataIndex) { + return checkInRange(seriesModel, rangeInfoList, data, dataIndex) ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') : 'outOfBrush'; + }; // If no supported brush or no brush, all visuals are in original state. + + (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList)) && applyVisual(STATE_LIST, visualMappings, data, getValueState); + }); + }); + dispatchAction(api, throttleType, throttleDelay, brushSelected, payload); + } + + function dispatchAction(api, throttleType, throttleDelay, brushSelected, payload) { + // This event will not be triggered when `setOpion`, otherwise dead lock may + // triggered when do `setOption` in event listener, which we do not find + // satisfactory way to solve yet. Some considered resolutions: + // (a) Diff with prevoius selected data ant only trigger event when changed. + // But store previous data and diff precisely (i.e., not only by dataIndex, but + // also detect value changes in selected data) might bring complexity or fragility. + // (b) Use spectial param like `silent` to suppress event triggering. + // But such kind of volatile param may be weird in `setOption`. + if (!payload) { + return; + } + + var zr = api.getZr(); + + if (zr[DISPATCH_FLAG]) { + return; + } + + if (!zr[DISPATCH_METHOD]) { + zr[DISPATCH_METHOD] = doDispatch; + } + + var fn = createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType); + fn(api, brushSelected); + } + + function doDispatch(api, brushSelected) { + if (!api.isDisposed()) { + var zr = api.getZr(); + zr[DISPATCH_FLAG] = true; + api.dispatchAction({ + type: 'brushSelect', + batch: brushSelected + }); + zr[DISPATCH_FLAG] = false; + } + } + + function checkInRange(seriesModel, rangeInfoList, data, dataIndex) { + for (var i = 0, len = rangeInfoList.length; i < len; i++) { + var area = rangeInfoList[i]; + + if (seriesModel.brushSelector(dataIndex, data, area.selectors, area)) { + return true; + } + } + } + + function brushModelNotControll(brushModel, seriesIndex) { + var seriesIndices = brushModel.option.seriesIndex; + return seriesIndices != null && seriesIndices !== 'all' && (isArray(seriesIndices) ? indexOf(seriesIndices, seriesIndex) < 0 : seriesIndex !== seriesIndices); + } + + var boundingRectBuilders = { + rect: function (area) { + return getBoundingRectFromMinMax(area.range); + }, + polygon: function (area) { + var minMax; + var range = area.range; + + for (var i = 0, len = range.length; i < len; i++) { + minMax = minMax || [[Infinity, -Infinity], [Infinity, -Infinity]]; + var rg = range[i]; + rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]); + rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]); + rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]); + rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]); + } + + return minMax && getBoundingRectFromMinMax(minMax); + } + }; + + function getBoundingRectFromMinMax(minMax) { + return new BoundingRect(minMax[0][0], minMax[1][0], minMax[0][1] - minMax[0][0], minMax[1][1] - minMax[1][0]); + } + + var BrushView = + /** @class */ + function (_super) { + __extends(BrushView, _super); + + function BrushView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = BrushView.type; + return _this; + } + + BrushView.prototype.init = function (ecModel, api) { + this.ecModel = ecModel; + this.api = api; + this.model; + (this._brushController = new BrushController(api.getZr())).on('brush', bind(this._onBrush, this)).mount(); + }; + + BrushView.prototype.render = function (brushModel, ecModel, api, payload) { + this.model = brushModel; + + this._updateController(brushModel, ecModel, api, payload); + }; + + BrushView.prototype.updateTransform = function (brushModel, ecModel, api, payload) { + // PENDING: `updateTransform` is a little tricky, whose layout need + // to be calculate mandatorily and other stages will not be performed. + // Take care the correctness of the logic. See #11754 . + layoutCovers(ecModel); + + this._updateController(brushModel, ecModel, api, payload); + }; + + BrushView.prototype.updateVisual = function (brushModel, ecModel, api, payload) { + this.updateTransform(brushModel, ecModel, api, payload); + }; + + BrushView.prototype.updateView = function (brushModel, ecModel, api, payload) { + this._updateController(brushModel, ecModel, api, payload); + }; + + BrushView.prototype._updateController = function (brushModel, ecModel, api, payload) { + // Do not update controller when drawing. + (!payload || payload.$from !== brushModel.id) && this._brushController.setPanels(brushModel.brushTargetManager.makePanelOpts(api)).enableBrush(brushModel.brushOption).updateCovers(brushModel.areas.slice()); + }; // updateLayout: updateController, + // updateVisual: updateController, + + + BrushView.prototype.dispose = function () { + this._brushController.dispose(); + }; + + BrushView.prototype._onBrush = function (eventParam) { + var modelId = this.model.id; + var areas = this.model.brushTargetManager.setOutputRanges(eventParam.areas, this.ecModel); // Action is not dispatched on drag end, because the drag end + // emits the same params with the last drag move event, and + // may have some delay when using touch pad, which makes + // animation not smooth (when using debounce). + + (!eventParam.isEnd || eventParam.removeOnClick) && this.api.dispatchAction({ + type: 'brush', + brushId: modelId, + areas: clone(areas), + $from: modelId + }); + eventParam.isEnd && this.api.dispatchAction({ + type: 'brushEnd', + brushId: modelId, + areas: clone(areas), + $from: modelId + }); + }; + + BrushView.type = 'brush'; + return BrushView; + }(ComponentView); + + var DEFAULT_OUT_OF_BRUSH_COLOR = '#ddd'; + + var BrushModel = + /** @class */ + function (_super) { + __extends(BrushModel, _super); + + function BrushModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = BrushModel.type; + /** + * @readOnly + */ + + _this.areas = []; + /** + * Current brush painting area settings. + * @readOnly + */ + + _this.brushOption = {}; + return _this; + } + + BrushModel.prototype.optionUpdated = function (newOption, isInit) { + var thisOption = this.option; + !isInit && replaceVisualOption(thisOption, newOption, ['inBrush', 'outOfBrush']); + var inBrush = thisOption.inBrush = thisOption.inBrush || {}; // Always give default visual, consider setOption at the second time. + + thisOption.outOfBrush = thisOption.outOfBrush || { + color: DEFAULT_OUT_OF_BRUSH_COLOR + }; + + if (!inBrush.hasOwnProperty('liftZ')) { + // Bigger than the highlight z lift, otherwise it will + // be effected by the highlight z when brush. + inBrush.liftZ = 5; + } + }; + /** + * If `areas` is null/undefined, range state remain. + */ + + + BrushModel.prototype.setAreas = function (areas) { + if ("development" !== 'production') { + assert(isArray(areas)); + each(areas, function (area) { + assert(area.brushType, 'Illegal areas'); + }); + } // If areas is null/undefined, range state remain. + // This helps user to dispatchAction({type: 'brush'}) with no areas + // set but just want to get the current brush select info from a `brush` event. + + + if (!areas) { + return; + } + + this.areas = map(areas, function (area) { + return generateBrushOption(this.option, area); + }, this); + }; + /** + * Set the current painting brush option. + */ + + + BrushModel.prototype.setBrushOption = function (brushOption) { + this.brushOption = generateBrushOption(this.option, brushOption); + this.brushType = this.brushOption.brushType; + }; + + BrushModel.type = 'brush'; + BrushModel.dependencies = ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series']; + BrushModel.defaultOption = { + seriesIndex: 'all', + brushType: 'rect', + brushMode: 'single', + transformable: true, + brushStyle: { + borderWidth: 1, + color: 'rgba(210,219,238,0.3)', + borderColor: '#D2DBEE' + }, + throttleType: 'fixRate', + throttleDelay: 0, + removeOnClick: true, + z: 10000 + }; + return BrushModel; + }(ComponentModel); + + function generateBrushOption(option, brushOption) { + return merge({ + brushType: option.brushType, + brushMode: option.brushMode, + transformable: option.transformable, + brushStyle: new Model(option.brushStyle).getItemStyle(), + removeOnClick: option.removeOnClick, + z: option.z + }, brushOption, true); + } + + var ICON_TYPES = ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear']; + + var BrushFeature = + /** @class */ + function (_super) { + __extends(BrushFeature, _super); + + function BrushFeature() { + return _super !== null && _super.apply(this, arguments) || this; + } + + BrushFeature.prototype.render = function (featureModel, ecModel, api) { + var brushType; + var brushMode; + var isBrushed; + ecModel.eachComponent({ + mainType: 'brush' + }, function (brushModel) { + brushType = brushModel.brushType; + brushMode = brushModel.brushOption.brushMode || 'single'; + isBrushed = isBrushed || !!brushModel.areas.length; + }); + this._brushType = brushType; + this._brushMode = brushMode; + each(featureModel.get('type', true), function (type) { + featureModel.setIconStatus(type, (type === 'keep' ? brushMode === 'multiple' : type === 'clear' ? isBrushed : type === brushType) ? 'emphasis' : 'normal'); + }); + }; + + BrushFeature.prototype.updateView = function (featureModel, ecModel, api) { + this.render(featureModel, ecModel, api); + }; + + BrushFeature.prototype.getIcons = function () { + var model = this.model; + var availableIcons = model.get('icon', true); + var icons = {}; + each(model.get('type', true), function (type) { + if (availableIcons[type]) { + icons[type] = availableIcons[type]; + } + }); + return icons; + }; + + BrushFeature.prototype.onclick = function (ecModel, api, type) { + var brushType = this._brushType; + var brushMode = this._brushMode; + + if (type === 'clear') { + // Trigger parallel action firstly + api.dispatchAction({ + type: 'axisAreaSelect', + intervals: [] + }); + api.dispatchAction({ + type: 'brush', + command: 'clear', + // Clear all areas of all brush components. + areas: [] + }); + } else { + api.dispatchAction({ + type: 'takeGlobalCursor', + key: 'brush', + brushOption: { + brushType: type === 'keep' ? brushType : brushType === type ? false : type, + brushMode: type === 'keep' ? brushMode === 'multiple' ? 'single' : 'multiple' : brushMode + } + }); + } + }; + + BrushFeature.getDefaultOption = function (ecModel) { + var defaultOption = { + show: true, + type: ICON_TYPES.slice(), + icon: { + /* eslint-disable */ + rect: 'M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13', + polygon: 'M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2', + lineX: 'M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4', + lineY: 'M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4', + keep: 'M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z', + clear: 'M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2' // jshint ignore:line + + /* eslint-enable */ + + }, + // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear` + title: ecModel.getLocaleModel().get(['toolbox', 'brush', 'title']) + }; + return defaultOption; + }; + + return BrushFeature; + }(ToolboxFeature); + + function install$B(registers) { + registers.registerComponentView(BrushView); + registers.registerComponentModel(BrushModel); + registers.registerPreprocessor(brushPreprocessor); + registers.registerVisual(registers.PRIORITY.VISUAL.BRUSH, brushVisual); + registers.registerAction({ + type: 'brush', + event: 'brush', + update: 'updateVisual' + }, function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'brush', + query: payload + }, function (brushModel) { + brushModel.setAreas(payload.areas); + }); + }); + /** + * payload: { + * brushComponents: [ + * { + * brushId, + * brushIndex, + * brushName, + * series: [ + * { + * seriesId, + * seriesIndex, + * seriesName, + * rawIndices: [21, 34, ...] + * }, + * ... + * ] + * }, + * ... + * ] + * } + */ + + registers.registerAction({ + type: 'brushSelect', + event: 'brushSelected', + update: 'none' + }, function () {}); + registers.registerAction({ + type: 'brushEnd', + event: 'brushEnd', + update: 'none' + }, function () {}); + registerFeature('brush', BrushFeature); + } + + var TitleModel = + /** @class */ + function (_super) { + __extends(TitleModel, _super); + + function TitleModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TitleModel.type; + _this.layoutMode = { + type: 'box', + ignoreSize: true + }; + return _this; + } + + TitleModel.type = 'title'; + TitleModel.defaultOption = { + zlevel: 0, + z: 6, + show: true, + text: '', + target: 'blank', + subtext: '', + subtarget: 'blank', + left: 0, + top: 0, + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderWidth: 0, + padding: 5, + itemGap: 10, + textStyle: { + fontSize: 18, + fontWeight: 'bold', + color: '#464646' + }, + subtextStyle: { + fontSize: 12, + color: '#6E7079' + } + }; + return TitleModel; + }(ComponentModel); // View + + + var TitleView = + /** @class */ + function (_super) { + __extends(TitleView, _super); + + function TitleView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TitleView.type; + return _this; + } + + TitleView.prototype.render = function (titleModel, ecModel, api) { + this.group.removeAll(); + + if (!titleModel.get('show')) { + return; + } + + var group = this.group; + var textStyleModel = titleModel.getModel('textStyle'); + var subtextStyleModel = titleModel.getModel('subtextStyle'); + var textAlign = titleModel.get('textAlign'); + var textVerticalAlign = retrieve2(titleModel.get('textBaseline'), titleModel.get('textVerticalAlign')); + var textEl = new ZRText({ + style: createTextStyle(textStyleModel, { + text: titleModel.get('text'), + fill: textStyleModel.getTextColor() + }, { + disableBox: true + }), + z2: 10 + }); + var textRect = textEl.getBoundingRect(); + var subText = titleModel.get('subtext'); + var subTextEl = new ZRText({ + style: createTextStyle(subtextStyleModel, { + text: subText, + fill: subtextStyleModel.getTextColor(), + y: textRect.height + titleModel.get('itemGap'), + verticalAlign: 'top' + }, { + disableBox: true + }), + z2: 10 + }); + var link = titleModel.get('link'); + var sublink = titleModel.get('sublink'); + var triggerEvent = titleModel.get('triggerEvent', true); + textEl.silent = !link && !triggerEvent; + subTextEl.silent = !sublink && !triggerEvent; + + if (link) { + textEl.on('click', function () { + windowOpen(link, '_' + titleModel.get('target')); + }); + } + + if (sublink) { + subTextEl.on('click', function () { + windowOpen(sublink, '_' + titleModel.get('subtarget')); + }); + } + + getECData(textEl).eventData = getECData(subTextEl).eventData = triggerEvent ? { + componentType: 'title', + componentIndex: titleModel.componentIndex + } : null; + group.add(textEl); + subText && group.add(subTextEl); // If no subText, but add subTextEl, there will be an empty line. + + var groupRect = group.getBoundingRect(); + var layoutOption = titleModel.getBoxLayoutParams(); + layoutOption.width = groupRect.width; + layoutOption.height = groupRect.height; + var layoutRect = getLayoutRect(layoutOption, { + width: api.getWidth(), + height: api.getHeight() + }, titleModel.get('padding')); // Adjust text align based on position + + if (!textAlign) { + // Align left if title is on the left. center and right is same + textAlign = titleModel.get('left') || titleModel.get('right'); // @ts-ignore + + if (textAlign === 'middle') { + textAlign = 'center'; + } // Adjust layout by text align + + + if (textAlign === 'right') { + layoutRect.x += layoutRect.width; + } else if (textAlign === 'center') { + layoutRect.x += layoutRect.width / 2; + } + } + + if (!textVerticalAlign) { + textVerticalAlign = titleModel.get('top') || titleModel.get('bottom'); // @ts-ignore + + if (textVerticalAlign === 'center') { + textVerticalAlign = 'middle'; + } + + if (textVerticalAlign === 'bottom') { + layoutRect.y += layoutRect.height; + } else if (textVerticalAlign === 'middle') { + layoutRect.y += layoutRect.height / 2; + } + + textVerticalAlign = textVerticalAlign || 'top'; + } + + group.x = layoutRect.x; + group.y = layoutRect.y; + group.markRedraw(); + var alignStyle = { + align: textAlign, + verticalAlign: textVerticalAlign + }; + textEl.setStyle(alignStyle); + subTextEl.setStyle(alignStyle); // Render background + // Get groupRect again because textAlign has been changed + + groupRect = group.getBoundingRect(); + var padding = layoutRect.margin; + var style = titleModel.getItemStyle(['color', 'opacity']); + style.fill = titleModel.get('backgroundColor'); + var rect = new Rect({ + shape: { + x: groupRect.x - padding[3], + y: groupRect.y - padding[0], + width: groupRect.width + padding[1] + padding[3], + height: groupRect.height + padding[0] + padding[2], + r: titleModel.get('borderRadius') + }, + style: style, + subPixelOptimize: true, + silent: true + }); + group.add(rect); + }; + + TitleView.type = 'title'; + return TitleView; + }(ComponentView); + + function install$C(registers) { + registers.registerComponentModel(TitleModel); + registers.registerComponentView(TitleView); + } + + var TimelineModel = + /** @class */ + function (_super) { + __extends(TimelineModel, _super); + + function TimelineModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TimelineModel.type; + _this.layoutMode = 'box'; + return _this; + } + /** + * @override + */ + + + TimelineModel.prototype.init = function (option, parentModel, ecModel) { + this.mergeDefaultAndTheme(option, ecModel); + + this._initData(); + }; + /** + * @override + */ + + + TimelineModel.prototype.mergeOption = function (option) { + _super.prototype.mergeOption.apply(this, arguments); + + this._initData(); + }; + + TimelineModel.prototype.setCurrentIndex = function (currentIndex) { + if (currentIndex == null) { + currentIndex = this.option.currentIndex; + } + + var count = this._data.count(); + + if (this.option.loop) { + currentIndex = (currentIndex % count + count) % count; + } else { + currentIndex >= count && (currentIndex = count - 1); + currentIndex < 0 && (currentIndex = 0); + } + + this.option.currentIndex = currentIndex; + }; + /** + * @return {number} currentIndex + */ + + + TimelineModel.prototype.getCurrentIndex = function () { + return this.option.currentIndex; + }; + /** + * @return {boolean} + */ + + + TimelineModel.prototype.isIndexMax = function () { + return this.getCurrentIndex() >= this._data.count() - 1; + }; + /** + * @param {boolean} state true: play, false: stop + */ + + + TimelineModel.prototype.setPlayState = function (state) { + this.option.autoPlay = !!state; + }; + /** + * @return {boolean} true: play, false: stop + */ + + + TimelineModel.prototype.getPlayState = function () { + return !!this.option.autoPlay; + }; + /** + * @private + */ + + + TimelineModel.prototype._initData = function () { + var thisOption = this.option; + var dataArr = thisOption.data || []; + var axisType = thisOption.axisType; + var names = this._names = []; + var processedDataArr; + + if (axisType === 'category') { + processedDataArr = []; + each(dataArr, function (item, index) { + var value = convertOptionIdName(getDataItemValue(item), ''); + var newItem; + + if (isObject(item)) { + newItem = clone(item); + newItem.value = index; + } else { + newItem = index; + } + + processedDataArr.push(newItem); + names.push(value); + }); + } else { + processedDataArr = dataArr; + } + + var dimType = { + category: 'ordinal', + time: 'time', + value: 'number' + }[axisType] || 'number'; + var data = this._data = new SeriesData([{ + name: 'value', + type: dimType + }], this); + data.initData(processedDataArr, names); + }; + + TimelineModel.prototype.getData = function () { + return this._data; + }; + /** + * @public + * @return {Array.} categoreis + */ + + + TimelineModel.prototype.getCategories = function () { + if (this.get('axisType') === 'category') { + return this._names.slice(); + } + }; + + TimelineModel.type = 'timeline'; + /** + * @protected + */ + + TimelineModel.defaultOption = { + zlevel: 0, + z: 4, + show: true, + axisType: 'time', + realtime: true, + left: '20%', + top: null, + right: '20%', + bottom: 0, + width: null, + height: 40, + padding: 5, + controlPosition: 'left', + autoPlay: false, + rewind: false, + loop: true, + playInterval: 2000, + currentIndex: 0, + itemStyle: {}, + label: { + color: '#000' + }, + data: [] + }; + return TimelineModel; + }(ComponentModel); + + var SliderTimelineModel = + /** @class */ + function (_super) { + __extends(SliderTimelineModel, _super); + + function SliderTimelineModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SliderTimelineModel.type; + return _this; + } + + SliderTimelineModel.type = 'timeline.slider'; + /** + * @protected + */ + + SliderTimelineModel.defaultOption = inheritDefaultOption(TimelineModel.defaultOption, { + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderWidth: 0, + orient: 'horizontal', + inverse: false, + tooltip: { + trigger: 'item' // data item may also have tootip attr. + + }, + symbol: 'circle', + symbolSize: 12, + lineStyle: { + show: true, + width: 2, + color: '#DAE1F5' + }, + label: { + position: 'auto', + // When using number, label position is not + // restricted by viewRect. + // positive: right/bottom, negative: left/top + show: true, + interval: 'auto', + rotate: 0, + // formatter: null, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#A4B1D7' + }, + itemStyle: { + color: '#A4B1D7', + borderWidth: 1 + }, + checkpointStyle: { + symbol: 'circle', + symbolSize: 15, + color: '#316bf3', + borderColor: '#fff', + borderWidth: 2, + shadowBlur: 2, + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowColor: 'rgba(0, 0, 0, 0.3)', + // borderColor: 'rgba(194,53,49, 0.5)', + animation: true, + animationDuration: 300, + animationEasing: 'quinticInOut' + }, + controlStyle: { + show: true, + showPlayBtn: true, + showPrevBtn: true, + showNextBtn: true, + itemSize: 24, + itemGap: 12, + position: 'left', + playIcon: 'path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z', + stopIcon: 'path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z', + // eslint-disable-next-line max-len + nextIcon: 'M2,18.5A1.52,1.52,0,0,1,.92,18a1.49,1.49,0,0,1,0-2.12L7.81,9.36,1,3.11A1.5,1.5,0,1,1,3,.89l8,7.34a1.48,1.48,0,0,1,.49,1.09,1.51,1.51,0,0,1-.46,1.1L3,18.08A1.5,1.5,0,0,1,2,18.5Z', + // eslint-disable-next-line max-len + prevIcon: 'M10,.5A1.52,1.52,0,0,1,11.08,1a1.49,1.49,0,0,1,0,2.12L4.19,9.64,11,15.89a1.5,1.5,0,1,1-2,2.22L1,10.77A1.48,1.48,0,0,1,.5,9.68,1.51,1.51,0,0,1,1,8.58L9,.92A1.5,1.5,0,0,1,10,.5Z', + prevBtnSize: 18, + nextBtnSize: 18, + color: '#A4B1D7', + borderColor: '#A4B1D7', + borderWidth: 1 + }, + emphasis: { + label: { + show: true, + // 其余属性默认使用全局文本样式,详见TEXTSTYLE + color: '#6f778d' + }, + itemStyle: { + color: '#316BF3' + }, + controlStyle: { + color: '#316BF3', + borderColor: '#316BF3', + borderWidth: 2 + } + }, + progress: { + lineStyle: { + color: '#316BF3' + }, + itemStyle: { + color: '#316BF3' + }, + label: { + color: '#6f778d' + } + }, + data: [] + }); + return SliderTimelineModel; + }(TimelineModel); + + mixin(SliderTimelineModel, DataFormatMixin.prototype); + + var TimelineView = + /** @class */ + function (_super) { + __extends(TimelineView, _super); + + function TimelineView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = TimelineView.type; + return _this; + } + + TimelineView.type = 'timeline'; + return TimelineView; + }(ComponentView); + + /** + * Extend axis 2d + */ + + var TimelineAxis = + /** @class */ + function (_super) { + __extends(TimelineAxis, _super); + + function TimelineAxis(dim, scale, coordExtent, axisType) { + var _this = _super.call(this, dim, scale, coordExtent) || this; + + _this.type = axisType || 'value'; + return _this; + } + /** + * @override + */ + + + TimelineAxis.prototype.getLabelModel = function () { + // Force override + return this.model.getModel('label'); + }; + /** + * @override + */ + + + TimelineAxis.prototype.isHorizontal = function () { + return this.model.get('orient') === 'horizontal'; + }; + + return TimelineAxis; + }(Axis); + + var PI$8 = Math.PI; + var labelDataIndexStore = makeInner(); + + var SliderTimelineView = + /** @class */ + function (_super) { + __extends(SliderTimelineView, _super); + + function SliderTimelineView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SliderTimelineView.type; + return _this; + } + + SliderTimelineView.prototype.init = function (ecModel, api) { + this.api = api; + }; + /** + * @override + */ + + + SliderTimelineView.prototype.render = function (timelineModel, ecModel, api) { + this.model = timelineModel; + this.api = api; + this.ecModel = ecModel; + this.group.removeAll(); + + if (timelineModel.get('show', true)) { + var layoutInfo_1 = this._layout(timelineModel, api); + + var mainGroup_1 = this._createGroup('_mainGroup'); + + var labelGroup = this._createGroup('_labelGroup'); + + var axis_1 = this._axis = this._createAxis(layoutInfo_1, timelineModel); + + timelineModel.formatTooltip = function (dataIndex) { + var name = axis_1.scale.getLabel({ + value: dataIndex + }); + return createTooltipMarkup('nameValue', { + noName: true, + value: name + }); + }; + + each(['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'], function (name) { + this['_render' + name](layoutInfo_1, mainGroup_1, axis_1, timelineModel); + }, this); + + this._renderAxisLabel(layoutInfo_1, labelGroup, axis_1, timelineModel); + + this._position(layoutInfo_1, timelineModel); + } + + this._doPlayStop(); + + this._updateTicksStatus(); + }; + /** + * @override + */ + + + SliderTimelineView.prototype.remove = function () { + this._clearTimer(); + + this.group.removeAll(); + }; + /** + * @override + */ + + + SliderTimelineView.prototype.dispose = function () { + this._clearTimer(); + }; + + SliderTimelineView.prototype._layout = function (timelineModel, api) { + var labelPosOpt = timelineModel.get(['label', 'position']); + var orient = timelineModel.get('orient'); + var viewRect = getViewRect$5(timelineModel, api); + var parsedLabelPos; // Auto label offset. + + if (labelPosOpt == null || labelPosOpt === 'auto') { + parsedLabelPos = orient === 'horizontal' ? viewRect.y + viewRect.height / 2 < api.getHeight() / 2 ? '-' : '+' : viewRect.x + viewRect.width / 2 < api.getWidth() / 2 ? '+' : '-'; + } else if (isString(labelPosOpt)) { + parsedLabelPos = { + horizontal: { + top: '-', + bottom: '+' + }, + vertical: { + left: '-', + right: '+' + } + }[orient][labelPosOpt]; + } else { + // is number + parsedLabelPos = labelPosOpt; + } + + var labelAlignMap = { + horizontal: 'center', + vertical: parsedLabelPos >= 0 || parsedLabelPos === '+' ? 'left' : 'right' + }; + var labelBaselineMap = { + horizontal: parsedLabelPos >= 0 || parsedLabelPos === '+' ? 'top' : 'bottom', + vertical: 'middle' + }; + var rotationMap = { + horizontal: 0, + vertical: PI$8 / 2 + }; // Position + + var mainLength = orient === 'vertical' ? viewRect.height : viewRect.width; + var controlModel = timelineModel.getModel('controlStyle'); + var showControl = controlModel.get('show', true); + var controlSize = showControl ? controlModel.get('itemSize') : 0; + var controlGap = showControl ? controlModel.get('itemGap') : 0; + var sizePlusGap = controlSize + controlGap; // Special label rotate. + + var labelRotation = timelineModel.get(['label', 'rotate']) || 0; + labelRotation = labelRotation * PI$8 / 180; // To radian. + + var playPosition; + var prevBtnPosition; + var nextBtnPosition; + var controlPosition = controlModel.get('position', true); + var showPlayBtn = showControl && controlModel.get('showPlayBtn', true); + var showPrevBtn = showControl && controlModel.get('showPrevBtn', true); + var showNextBtn = showControl && controlModel.get('showNextBtn', true); + var xLeft = 0; + var xRight = mainLength; // position[0] means left, position[1] means middle. + + if (controlPosition === 'left' || controlPosition === 'bottom') { + showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap); + showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap); + showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + } else { + // 'top' 'right' + showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap); + showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap); + } + + var axisExtent = [xLeft, xRight]; + + if (timelineModel.get('inverse')) { + axisExtent.reverse(); + } + + return { + viewRect: viewRect, + mainLength: mainLength, + orient: orient, + rotation: rotationMap[orient], + labelRotation: labelRotation, + labelPosOpt: parsedLabelPos, + labelAlign: timelineModel.get(['label', 'align']) || labelAlignMap[orient], + labelBaseline: timelineModel.get(['label', 'verticalAlign']) || timelineModel.get(['label', 'baseline']) || labelBaselineMap[orient], + // Based on mainGroup. + playPosition: playPosition, + prevBtnPosition: prevBtnPosition, + nextBtnPosition: nextBtnPosition, + axisExtent: axisExtent, + controlSize: controlSize, + controlGap: controlGap + }; + }; + + SliderTimelineView.prototype._position = function (layoutInfo, timelineModel) { + // Position is be called finally, because bounding rect is needed for + // adapt content to fill viewRect (auto adapt offset). + // Timeline may be not all in the viewRect when 'offset' is specified + // as a number, because it is more appropriate that label aligns at + // 'offset' but not the other edge defined by viewRect. + var mainGroup = this._mainGroup; + var labelGroup = this._labelGroup; + var viewRect = layoutInfo.viewRect; + + if (layoutInfo.orient === 'vertical') { + // transform to horizontal, inverse rotate by left-top point. + var m = create$1(); + var rotateOriginX = viewRect.x; + var rotateOriginY = viewRect.y + viewRect.height; + translate(m, m, [-rotateOriginX, -rotateOriginY]); + rotate(m, m, -PI$8 / 2); + translate(m, m, [rotateOriginX, rotateOriginY]); + viewRect = viewRect.clone(); + viewRect.applyTransform(m); + } + + var viewBound = getBound(viewRect); + var mainBound = getBound(mainGroup.getBoundingRect()); + var labelBound = getBound(labelGroup.getBoundingRect()); + var mainPosition = [mainGroup.x, mainGroup.y]; + var labelsPosition = [labelGroup.x, labelGroup.y]; + labelsPosition[0] = mainPosition[0] = viewBound[0][0]; + var labelPosOpt = layoutInfo.labelPosOpt; + + if (labelPosOpt == null || isString(labelPosOpt)) { + // '+' or '-' + var mainBoundIdx = labelPosOpt === '+' ? 0 : 1; + toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx); + toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx); + } else { + var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1; + toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx); + labelsPosition[1] = mainPosition[1] + labelPosOpt; + } + + mainGroup.setPosition(mainPosition); + labelGroup.setPosition(labelsPosition); + mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation; + setOrigin(mainGroup); + setOrigin(labelGroup); + + function setOrigin(targetGroup) { + targetGroup.originX = viewBound[0][0] - targetGroup.x; + targetGroup.originY = viewBound[1][0] - targetGroup.y; + } + + function getBound(rect) { + // [[xmin, xmax], [ymin, ymax]] + return [[rect.x, rect.x + rect.width], [rect.y, rect.y + rect.height]]; + } + + function toBound(fromPos, from, to, dimIdx, boundIdx) { + fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx]; + } + }; + + SliderTimelineView.prototype._createAxis = function (layoutInfo, timelineModel) { + var data = timelineModel.getData(); + var axisType = timelineModel.get('axisType'); + var scale = createScaleByModel$1(timelineModel, axisType); // Customize scale. The `tickValue` is `dataIndex`. + + scale.getTicks = function () { + return data.mapArray(['value'], function (value) { + return { + value: value + }; + }); + }; + + var dataExtent = data.getDataExtent('value'); + scale.setExtent(dataExtent[0], dataExtent[1]); + scale.niceTicks(); + var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType); + axis.model = timelineModel; + return axis; + }; + + SliderTimelineView.prototype._createGroup = function (key) { + var newGroup = this[key] = new Group(); + this.group.add(newGroup); + return newGroup; + }; + + SliderTimelineView.prototype._renderAxisLine = function (layoutInfo, group, axis, timelineModel) { + var axisExtent = axis.getExtent(); + + if (!timelineModel.get(['lineStyle', 'show'])) { + return; + } + + var line = new Line({ + shape: { + x1: axisExtent[0], + y1: 0, + x2: axisExtent[1], + y2: 0 + }, + style: extend({ + lineCap: 'round' + }, timelineModel.getModel('lineStyle').getLineStyle()), + silent: true, + z2: 1 + }); + group.add(line); + var progressLine = this._progressLine = new Line({ + shape: { + x1: axisExtent[0], + x2: this._currentPointer ? this._currentPointer.x : axisExtent[0], + y1: 0, + y2: 0 + }, + style: defaults({ + lineCap: 'round', + lineWidth: line.style.lineWidth + }, timelineModel.getModel(['progress', 'lineStyle']).getLineStyle()), + silent: true, + z2: 1 + }); + group.add(progressLine); + }; + + SliderTimelineView.prototype._renderAxisTick = function (layoutInfo, group, axis, timelineModel) { + var _this = this; + + var data = timelineModel.getData(); // Show all ticks, despite ignoring strategy. + + var ticks = axis.scale.getTicks(); + this._tickSymbols = []; // The value is dataIndex, see the costomized scale. + + each(ticks, function (tick) { + var tickCoord = axis.dataToCoord(tick.value); + var itemModel = data.getItemModel(tick.value); + var itemStyleModel = itemModel.getModel('itemStyle'); + var hoverStyleModel = itemModel.getModel(['emphasis', 'itemStyle']); + var progressStyleModel = itemModel.getModel(['progress', 'itemStyle']); + var symbolOpt = { + x: tickCoord, + y: 0, + onclick: bind(_this._changeTimeline, _this, tick.value) + }; + var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt); + el.ensureState('emphasis').style = hoverStyleModel.getItemStyle(); + el.ensureState('progress').style = progressStyleModel.getItemStyle(); + enableHoverEmphasis(el); + var ecData = getECData(el); + + if (itemModel.get('tooltip')) { + ecData.dataIndex = tick.value; + ecData.dataModel = timelineModel; + } else { + ecData.dataIndex = ecData.dataModel = null; + } + + _this._tickSymbols.push(el); + }); + }; + + SliderTimelineView.prototype._renderAxisLabel = function (layoutInfo, group, axis, timelineModel) { + var _this = this; + + var labelModel = axis.getLabelModel(); + + if (!labelModel.get('show')) { + return; + } + + var data = timelineModel.getData(); + var labels = axis.getViewLabels(); + this._tickLabels = []; + each(labels, function (labelItem) { + // The tickValue is dataIndex, see the costomized scale. + var dataIndex = labelItem.tickValue; + var itemModel = data.getItemModel(dataIndex); + var normalLabelModel = itemModel.getModel('label'); + var hoverLabelModel = itemModel.getModel(['emphasis', 'label']); + var progressLabelModel = itemModel.getModel(['progress', 'label']); + var tickCoord = axis.dataToCoord(labelItem.tickValue); + var textEl = new ZRText({ + x: tickCoord, + y: 0, + rotation: layoutInfo.labelRotation - layoutInfo.rotation, + onclick: bind(_this._changeTimeline, _this, dataIndex), + silent: false, + style: createTextStyle(normalLabelModel, { + text: labelItem.formattedLabel, + align: layoutInfo.labelAlign, + verticalAlign: layoutInfo.labelBaseline + }) + }); + textEl.ensureState('emphasis').style = createTextStyle(hoverLabelModel); + textEl.ensureState('progress').style = createTextStyle(progressLabelModel); + group.add(textEl); + enableHoverEmphasis(textEl); + labelDataIndexStore(textEl).dataIndex = dataIndex; + + _this._tickLabels.push(textEl); + }); + }; + + SliderTimelineView.prototype._renderControl = function (layoutInfo, group, axis, timelineModel) { + var controlSize = layoutInfo.controlSize; + var rotation = layoutInfo.rotation; + var itemStyle = timelineModel.getModel('controlStyle').getItemStyle(); + var hoverStyle = timelineModel.getModel(['emphasis', 'controlStyle']).getItemStyle(); + var playState = timelineModel.getPlayState(); + var inverse = timelineModel.get('inverse', true); + makeBtn(layoutInfo.nextBtnPosition, 'next', bind(this._changeTimeline, this, inverse ? '-' : '+')); + makeBtn(layoutInfo.prevBtnPosition, 'prev', bind(this._changeTimeline, this, inverse ? '+' : '-')); + makeBtn(layoutInfo.playPosition, playState ? 'stop' : 'play', bind(this._handlePlayClick, this, !playState), true); + + function makeBtn(position, iconName, onclick, willRotate) { + if (!position) { + return; + } + + var iconSize = parsePercent(retrieve2(timelineModel.get(['controlStyle', iconName + 'BtnSize']), controlSize), controlSize); + var rect = [0, -iconSize / 2, iconSize, iconSize]; + var btn = makeControlIcon(timelineModel, iconName + 'Icon', rect, { + x: position[0], + y: position[1], + originX: controlSize / 2, + originY: 0, + rotation: willRotate ? -rotation : 0, + rectHover: true, + style: itemStyle, + onclick: onclick + }); + btn.ensureState('emphasis').style = hoverStyle; + group.add(btn); + enableHoverEmphasis(btn); + } + }; + + SliderTimelineView.prototype._renderCurrentPointer = function (layoutInfo, group, axis, timelineModel) { + var data = timelineModel.getData(); + var currentIndex = timelineModel.getCurrentIndex(); + var pointerModel = data.getItemModel(currentIndex).getModel('checkpointStyle'); + var me = this; + var callback = { + onCreate: function (pointer) { + pointer.draggable = true; + pointer.drift = bind(me._handlePointerDrag, me); + pointer.ondragend = bind(me._handlePointerDragend, me); + pointerMoveTo(pointer, me._progressLine, currentIndex, axis, timelineModel, true); + }, + onUpdate: function (pointer) { + pointerMoveTo(pointer, me._progressLine, currentIndex, axis, timelineModel); + } + }; // Reuse when exists, for animation and drag. + + this._currentPointer = giveSymbol(pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback); + }; + + SliderTimelineView.prototype._handlePlayClick = function (nextState) { + this._clearTimer(); + + this.api.dispatchAction({ + type: 'timelinePlayChange', + playState: nextState, + from: this.uid + }); + }; + + SliderTimelineView.prototype._handlePointerDrag = function (dx, dy, e) { + this._clearTimer(); + + this._pointerChangeTimeline([e.offsetX, e.offsetY]); + }; + + SliderTimelineView.prototype._handlePointerDragend = function (e) { + this._pointerChangeTimeline([e.offsetX, e.offsetY], true); + }; + + SliderTimelineView.prototype._pointerChangeTimeline = function (mousePos, trigger) { + var toCoord = this._toAxisCoord(mousePos)[0]; + + var axis = this._axis; + var axisExtent = asc(axis.getExtent().slice()); + toCoord > axisExtent[1] && (toCoord = axisExtent[1]); + toCoord < axisExtent[0] && (toCoord = axisExtent[0]); + this._currentPointer.x = toCoord; + + this._currentPointer.markRedraw(); + + this._progressLine.shape.x2 = toCoord; + + this._progressLine.dirty(); + + var targetDataIndex = this._findNearestTick(toCoord); + + var timelineModel = this.model; + + if (trigger || targetDataIndex !== timelineModel.getCurrentIndex() && timelineModel.get('realtime')) { + this._changeTimeline(targetDataIndex); + } + }; + + SliderTimelineView.prototype._doPlayStop = function () { + var _this = this; + + this._clearTimer(); + + if (this.model.getPlayState()) { + this._timer = setTimeout(function () { + // Do not cache + var timelineModel = _this.model; + + _this._changeTimeline(timelineModel.getCurrentIndex() + (timelineModel.get('rewind', true) ? -1 : 1)); + }, this.model.get('playInterval')); + } + }; + + SliderTimelineView.prototype._toAxisCoord = function (vertex) { + var trans = this._mainGroup.getLocalTransform(); + + return applyTransform$1(vertex, trans, true); + }; + + SliderTimelineView.prototype._findNearestTick = function (axisCoord) { + var data = this.model.getData(); + var dist = Infinity; + var targetDataIndex; + var axis = this._axis; + data.each(['value'], function (value, dataIndex) { + var coord = axis.dataToCoord(value); + var d = Math.abs(coord - axisCoord); + + if (d < dist) { + dist = d; + targetDataIndex = dataIndex; + } + }); + return targetDataIndex; + }; + + SliderTimelineView.prototype._clearTimer = function () { + if (this._timer) { + clearTimeout(this._timer); + this._timer = null; + } + }; + + SliderTimelineView.prototype._changeTimeline = function (nextIndex) { + var currentIndex = this.model.getCurrentIndex(); + + if (nextIndex === '+') { + nextIndex = currentIndex + 1; + } else if (nextIndex === '-') { + nextIndex = currentIndex - 1; + } + + this.api.dispatchAction({ + type: 'timelineChange', + currentIndex: nextIndex, + from: this.uid + }); + }; + + SliderTimelineView.prototype._updateTicksStatus = function () { + var currentIndex = this.model.getCurrentIndex(); + var tickSymbols = this._tickSymbols; + var tickLabels = this._tickLabels; + + if (tickSymbols) { + for (var i = 0; i < tickSymbols.length; i++) { + tickSymbols && tickSymbols[i] && tickSymbols[i].toggleState('progress', i < currentIndex); + } + } + + if (tickLabels) { + for (var i = 0; i < tickLabels.length; i++) { + tickLabels && tickLabels[i] && tickLabels[i].toggleState('progress', labelDataIndexStore(tickLabels[i]).dataIndex <= currentIndex); + } + } + }; + + SliderTimelineView.type = 'timeline.slider'; + return SliderTimelineView; + }(TimelineView); + + function createScaleByModel$1(model, axisType) { + axisType = axisType || model.get('type'); + + if (axisType) { + switch (axisType) { + // Buildin scale + case 'category': + return new OrdinalScale({ + ordinalMeta: model.getCategories(), + extent: [Infinity, -Infinity] + }); + + case 'time': + return new TimeScale({ + locale: model.ecModel.getLocaleModel(), + useUTC: model.ecModel.get('useUTC') + }); + + default: + // default to be value + return new IntervalScale(); + } + } + } + + function getViewRect$5(model, api) { + return getLayoutRect(model.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }, model.get('padding')); + } + + function makeControlIcon(timelineModel, objPath, rect, opts) { + var style = opts.style; + var icon = createIcon(timelineModel.get(['controlStyle', objPath]), opts || {}, new BoundingRect(rect[0], rect[1], rect[2], rect[3])); // TODO createIcon won't use style in opt. + + if (style) { + icon.setStyle(style); + } + + return icon; + } + /** + * Create symbol or update symbol + * opt: basic position and event handlers + */ + + + function giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) { + var color = itemStyleModel.get('color'); + + if (!symbol) { + var symbolType = hostModel.get('symbol'); + symbol = createSymbol(symbolType, -1, -1, 2, 2, color); + symbol.setStyle('strokeNoScale', true); + group.add(symbol); + callback && callback.onCreate(symbol); + } else { + symbol.setColor(color); + group.add(symbol); // Group may be new, also need to add. + + callback && callback.onUpdate(symbol); + } // Style + + + var itemStyle = itemStyleModel.getItemStyle(['color']); + symbol.setStyle(itemStyle); // Transform and events. + + opt = merge({ + rectHover: true, + z2: 100 + }, opt, true); + var symbolSize = normalizeSymbolSize(hostModel.get('symbolSize')); + opt.scaleX = symbolSize[0] / 2; + opt.scaleY = symbolSize[1] / 2; + var symbolOffset = normalizeSymbolOffset(hostModel.get('symbolOffset'), symbolSize); + + if (symbolOffset) { + opt.x = (opt.x || 0) + symbolOffset[0]; + opt.y = (opt.y || 0) + symbolOffset[1]; + } + + var symbolRotate = hostModel.get('symbolRotate'); + opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0; + symbol.attr(opt); // FIXME + // (1) When symbol.style.strokeNoScale is true and updateTransform is not performed, + // getBoundingRect will return wrong result. + // (This is supposed to be resolved in zrender, but it is a little difficult to + // leverage performance and auto updateTransform) + // (2) All of ancesters of symbol do not scale, so we can just updateTransform symbol. + + symbol.updateTransform(); + return symbol; + } + + function pointerMoveTo(pointer, progressLine, dataIndex, axis, timelineModel, noAnimation) { + if (pointer.dragging) { + return; + } + + var pointerModel = timelineModel.getModel('checkpointStyle'); + var toCoord = axis.dataToCoord(timelineModel.getData().get('value', dataIndex)); + + if (noAnimation || !pointerModel.get('animation', true)) { + pointer.attr({ + x: toCoord, + y: 0 + }); + progressLine && progressLine.attr({ + shape: { + x2: toCoord + } + }); + } else { + var animationCfg = { + duration: pointerModel.get('animationDuration', true), + easing: pointerModel.get('animationEasing', true) + }; + pointer.stopAnimation(null, true); + pointer.animateTo({ + x: toCoord, + y: 0 + }, animationCfg); + progressLine && progressLine.animateTo({ + shape: { + x2: toCoord + } + }, animationCfg); + } + } + + function installTimelineAction(registers) { + registers.registerAction({ + type: 'timelineChange', + event: 'timelineChanged', + update: 'prepareAndUpdate' + }, function (payload, ecModel, api) { + var timelineModel = ecModel.getComponent('timeline'); + + if (timelineModel && payload.currentIndex != null) { + timelineModel.setCurrentIndex(payload.currentIndex); + + if (!timelineModel.get('loop', true) && timelineModel.isIndexMax() && timelineModel.getPlayState()) { + timelineModel.setPlayState(false); // The timeline has played to the end, trigger event + + api.dispatchAction({ + type: 'timelinePlayChange', + playState: false, + from: payload.from + }); + } + } // Set normalized currentIndex to payload. + + + ecModel.resetOption('timeline', { + replaceMerge: timelineModel.get('replaceMerge', true) + }); + return defaults({ + currentIndex: timelineModel.option.currentIndex + }, payload); + }); + registers.registerAction({ + type: 'timelinePlayChange', + event: 'timelinePlayChanged', + update: 'update' + }, function (payload, ecModel) { + var timelineModel = ecModel.getComponent('timeline'); + + if (timelineModel && payload.playState != null) { + timelineModel.setPlayState(payload.playState); + } + }); + } + + function timelinePreprocessor(option) { + var timelineOpt = option && option.timeline; + + if (!isArray(timelineOpt)) { + timelineOpt = timelineOpt ? [timelineOpt] : []; + } + + each(timelineOpt, function (opt) { + if (!opt) { + return; + } + + compatibleEC2(opt); + }); + } + + function compatibleEC2(opt) { + var type = opt.type; + var ec2Types = { + 'number': 'value', + 'time': 'time' + }; // Compatible with ec2 + + if (ec2Types[type]) { + opt.axisType = ec2Types[type]; + delete opt.type; + } + + transferItem(opt); + + if (has(opt, 'controlPosition')) { + var controlStyle = opt.controlStyle || (opt.controlStyle = {}); + + if (!has(controlStyle, 'position')) { + controlStyle.position = opt.controlPosition; + } + + if (controlStyle.position === 'none' && !has(controlStyle, 'show')) { + controlStyle.show = false; + delete controlStyle.position; + } + + delete opt.controlPosition; + } + + each(opt.data || [], function (dataItem) { + if (isObject(dataItem) && !isArray(dataItem)) { + if (!has(dataItem, 'value') && has(dataItem, 'name')) { + // In ec2, using name as value. + dataItem.value = dataItem.name; + } + + transferItem(dataItem); + } + }); + } + + function transferItem(opt) { + var itemStyle = opt.itemStyle || (opt.itemStyle = {}); + var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {}); // Transfer label out + + var label = opt.label || opt.label || {}; + var labelNormal = label.normal || (label.normal = {}); + var excludeLabelAttr = { + normal: 1, + emphasis: 1 + }; + each(label, function (value, name) { + if (!excludeLabelAttr[name] && !has(labelNormal, name)) { + labelNormal[name] = value; + } + }); + + if (itemStyleEmphasis.label && !has(label, 'emphasis')) { + label.emphasis = itemStyleEmphasis.label; + delete itemStyleEmphasis.label; + } + } + + function has(obj, attr) { + return obj.hasOwnProperty(attr); + } + + function install$D(registers) { + registers.registerComponentModel(SliderTimelineModel); + registers.registerComponentView(SliderTimelineView); + registers.registerSubTypeDefaulter('timeline', function () { + // Only slider now. + return 'slider'; + }); + installTimelineAction(registers); + registers.registerPreprocessor(timelinePreprocessor); + } + + function checkMarkerInSeries(seriesOpts, markerType) { + if (!seriesOpts) { + return false; + } + + var seriesOptArr = isArray(seriesOpts) ? seriesOpts : [seriesOpts]; + + for (var idx = 0; idx < seriesOptArr.length; idx++) { + if (seriesOptArr[idx] && seriesOptArr[idx][markerType]) { + return true; + } + } + + return false; + } + + function fillLabel(opt) { + defaultEmphasis(opt, 'label', ['show']); + } // { [componentType]: MarkerModel } + + + var inner$g = makeInner(); + + var MarkerModel = + /** @class */ + function (_super) { + __extends(MarkerModel, _super); + + function MarkerModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MarkerModel.type; + /** + * If marker model is created by self from series + */ + + _this.createdBySelf = false; + return _this; + } + /** + * @overrite + */ + + + MarkerModel.prototype.init = function (option, parentModel, ecModel) { + if ("development" !== 'production') { + if (this.type === 'marker') { + throw new Error('Marker component is abstract component. Use markLine, markPoint, markArea instead.'); + } + } + + this.mergeDefaultAndTheme(option, ecModel); + + this._mergeOption(option, ecModel, false, true); + }; + + MarkerModel.prototype.isAnimationEnabled = function () { + if (env.node) { + return false; + } + + var hostSeries = this.__hostSeries; + return this.getShallow('animation') && hostSeries && hostSeries.isAnimationEnabled(); + }; + /** + * @overrite + */ + + + MarkerModel.prototype.mergeOption = function (newOpt, ecModel) { + this._mergeOption(newOpt, ecModel, false, false); + }; + + MarkerModel.prototype._mergeOption = function (newOpt, ecModel, createdBySelf, isInit) { + var componentType = this.mainType; + + if (!createdBySelf) { + ecModel.eachSeries(function (seriesModel) { + // mainType can be markPoint, markLine, markArea + var markerOpt = seriesModel.get(this.mainType, true); + var markerModel = inner$g(seriesModel)[componentType]; + + if (!markerOpt || !markerOpt.data) { + inner$g(seriesModel)[componentType] = null; + return; + } + + if (!markerModel) { + if (isInit) { + // Default label emphasis `position` and `show` + fillLabel(markerOpt); + } + + each(markerOpt.data, function (item) { + // FIXME Overwrite fillLabel method ? + if (item instanceof Array) { + fillLabel(item[0]); + fillLabel(item[1]); + } else { + fillLabel(item); + } + }); + markerModel = this.createMarkerModelFromSeries(markerOpt, this, ecModel); // markerModel = new ImplementedMarkerModel( + // markerOpt, this, ecModel + // ); + + extend(markerModel, { + mainType: this.mainType, + // Use the same series index and name + seriesIndex: seriesModel.seriesIndex, + name: seriesModel.name, + createdBySelf: true + }); + markerModel.__hostSeries = seriesModel; + } else { + markerModel._mergeOption(markerOpt, ecModel, true); + } + + inner$g(seriesModel)[componentType] = markerModel; + }, this); + } + }; + + MarkerModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) { + var data = this.getData(); + var value = this.getRawValue(dataIndex); + var itemName = data.getName(dataIndex); + return createTooltipMarkup('section', { + header: this.name, + blocks: [createTooltipMarkup('nameValue', { + name: itemName, + value: value, + noName: !itemName, + noValue: value == null + })] + }); + }; + + MarkerModel.prototype.getData = function () { + return this._data; + }; + + MarkerModel.prototype.setData = function (data) { + this._data = data; + }; + + MarkerModel.getMarkerModelFromSeries = function (seriesModel, // Support three types of markers. Strict check. + componentType) { + return inner$g(seriesModel)[componentType]; + }; + + MarkerModel.type = 'marker'; + MarkerModel.dependencies = ['series', 'grid', 'polar', 'geo']; + return MarkerModel; + }(ComponentModel); + + mixin(MarkerModel, DataFormatMixin.prototype); + + var MarkPointModel = + /** @class */ + function (_super) { + __extends(MarkPointModel, _super); + + function MarkPointModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MarkPointModel.type; + return _this; + } + + MarkPointModel.prototype.createMarkerModelFromSeries = function (markerOpt, masterMarkerModel, ecModel) { + return new MarkPointModel(markerOpt, masterMarkerModel, ecModel); + }; + + MarkPointModel.type = 'markPoint'; + MarkPointModel.defaultOption = { + zlevel: 0, + z: 5, + symbol: 'pin', + symbolSize: 50, + //symbolRotate: 0, + //symbolOffset: [0, 0] + tooltip: { + trigger: 'item' + }, + label: { + show: true, + position: 'inside' + }, + itemStyle: { + borderWidth: 2 + }, + emphasis: { + label: { + show: true + } + } + }; + return MarkPointModel; + }(MarkerModel); + + function hasXOrY(item) { + return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y))); + } + + function hasXAndY(item) { + return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y)); + } + + function markerTypeCalculatorWithExtent(markerType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex) { + var coordArr = []; + var stacked = isDimensionStacked(data, targetDataDim + /*, otherDataDim*/ + ); + var calcDataDim = stacked ? data.getCalculationInfo('stackResultDimension') : targetDataDim; + var value = numCalculate(data, calcDataDim, markerType); + var dataIndex = data.indicesOfNearest(calcDataDim, value)[0]; + coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex); + coordArr[targetCoordIndex] = data.get(calcDataDim, dataIndex); + var coordArrValue = data.get(targetDataDim, dataIndex); // Make it simple, do not visit all stacked value to count precision. + + var precision = getPrecision(data.get(targetDataDim, dataIndex)); + precision = Math.min(precision, 20); + + if (precision >= 0) { + coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision); + } + + return [coordArr, coordArrValue]; + } // TODO Specified percent + + + var markerTypeCalculator = { + min: curry(markerTypeCalculatorWithExtent, 'min'), + max: curry(markerTypeCalculatorWithExtent, 'max'), + average: curry(markerTypeCalculatorWithExtent, 'average'), + median: curry(markerTypeCalculatorWithExtent, 'median') + }; + /** + * Transform markPoint data item to format used in List by do the following + * 1. Calculate statistic like `max`, `min`, `average` + * 2. Convert `item.xAxis`, `item.yAxis` to `item.coord` array + */ + + function dataTransform(seriesModel, item) { + var data = seriesModel.getData(); + var coordSys = seriesModel.coordinateSystem; // 1. If not specify the position with pixel directly + // 2. If `coord` is not a data array. Which uses `xAxis`, + // `yAxis` to specify the coord on each dimension + // parseFloat first because item.x and item.y can be percent string like '20%' + + if (item && !hasXAndY(item) && !isArray(item.coord) && coordSys) { + var dims = coordSys.dimensions; + var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel); // Clone the option + // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value + + item = clone(item); + + if (item.type && markerTypeCalculator[item.type] && axisInfo.baseAxis && axisInfo.valueAxis) { + var otherCoordIndex = indexOf(dims, axisInfo.baseAxis.dim); + var targetCoordIndex = indexOf(dims, axisInfo.valueAxis.dim); + var coordInfo = markerTypeCalculator[item.type](data, axisInfo.baseDataDim, axisInfo.valueDataDim, otherCoordIndex, targetCoordIndex); + item.coord = coordInfo[0]; // Force to use the value of calculated value. + // let item use the value without stack. + + item.value = coordInfo[1]; + } else { + // FIXME Only has one of xAxis and yAxis. + var coord = [item.xAxis != null ? item.xAxis : item.radiusAxis, item.yAxis != null ? item.yAxis : item.angleAxis]; // Each coord support max, min, average + + for (var i = 0; i < 2; i++) { + if (markerTypeCalculator[coord[i]]) { + coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]); + } + } + + item.coord = coord; + } + } + + return item; + } + function getAxisInfo$1(item, data, coordSys, seriesModel) { + var ret = {}; + + if (item.valueIndex != null || item.valueDim != null) { + ret.valueDataDim = item.valueIndex != null ? data.getDimension(item.valueIndex) : item.valueDim; + ret.valueAxis = coordSys.getAxis(dataDimToCoordDim(seriesModel, ret.valueDataDim)); + ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis); + ret.baseDataDim = data.mapDimension(ret.baseAxis.dim); + } else { + ret.baseAxis = seriesModel.getBaseAxis(); + ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis); + ret.baseDataDim = data.mapDimension(ret.baseAxis.dim); + ret.valueDataDim = data.mapDimension(ret.valueAxis.dim); + } + + return ret; + } + + function dataDimToCoordDim(seriesModel, dataDim) { + var dimItem = seriesModel.getData().getDimensionInfo(dataDim); + return dimItem && dimItem.coordDim; + } + /** + * Filter data which is out of coordinateSystem range + * [dataFilter description] + */ + + + function dataFilter$1( // Currently only polar and cartesian has containData. + coordSys, item) { + // Alwalys return true if there is no coordSys + return coordSys && coordSys.containData && item.coord && !hasXOrY(item) ? coordSys.containData(item.coord) : true; + } + function createMarkerDimValueGetter(inCoordSys, dims) { + return inCoordSys ? function (item, dimName, dataIndex, dimIndex) { + var rawVal = dimIndex < 2 // x, y, radius, angle + ? item.coord && item.coord[dimIndex] : item.value; + return parseDataValue(rawVal, dims[dimIndex]); + } : function (item, dimName, dataIndex, dimIndex) { + return parseDataValue(item.value, dims[dimIndex]); + }; + } + function numCalculate(data, valueDataDim, type) { + if (type === 'average') { + var sum_1 = 0; + var count_1 = 0; + data.each(valueDataDim, function (val, idx) { + if (!isNaN(val)) { + sum_1 += val; + count_1++; + } + }); + return sum_1 / count_1; + } else if (type === 'median') { + return data.getMedian(valueDataDim); + } else { + // max & min + return data.getDataExtent(valueDataDim)[type === 'max' ? 1 : 0]; + } + } + + var inner$h = makeInner(); + + var MarkerView = + /** @class */ + function (_super) { + __extends(MarkerView, _super); + + function MarkerView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MarkerView.type; + return _this; + } + + MarkerView.prototype.init = function () { + this.markerGroupMap = createHashMap(); + }; + + MarkerView.prototype.render = function (markerModel, ecModel, api) { + var _this = this; + + var markerGroupMap = this.markerGroupMap; + markerGroupMap.each(function (item) { + inner$h(item).keep = false; + }); + ecModel.eachSeries(function (seriesModel) { + var markerModel = MarkerModel.getMarkerModelFromSeries(seriesModel, _this.type); + markerModel && _this.renderSeries(seriesModel, markerModel, ecModel, api); + }); + markerGroupMap.each(function (item) { + !inner$h(item).keep && _this.group.remove(item.group); + }); + }; + + MarkerView.prototype.markKeep = function (drawGroup) { + inner$h(drawGroup).keep = true; + }; + + MarkerView.prototype.blurSeries = function (seriesModelList) { + var _this = this; + + each(seriesModelList, function (seriesModel) { + var markerModel = MarkerModel.getMarkerModelFromSeries(seriesModel, _this.type); + + if (markerModel) { + var data = markerModel.getData(); + data.eachItemGraphicEl(function (el) { + if (el) { + enterBlur(el); + } + }); + } + }); + }; + + MarkerView.type = 'marker'; + return MarkerView; + }(ComponentView); + + function updateMarkerLayout(mpData, seriesModel, api) { + var coordSys = seriesModel.coordinateSystem; + mpData.each(function (idx) { + var itemModel = mpData.getItemModel(idx); + var point; + var xPx = parsePercent$1(itemModel.get('x'), api.getWidth()); + var yPx = parsePercent$1(itemModel.get('y'), api.getHeight()); + + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } // Chart like bar may have there own marker positioning logic + else if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition(mpData.getValues(mpData.dimensions, idx)); + } else if (coordSys) { + var x = mpData.get(coordSys.dimensions[0], idx); + var y = mpData.get(coordSys.dimensions[1], idx); + point = coordSys.dataToPoint([x, y]); + } // Use x, y if has any + + + if (!isNaN(xPx)) { + point[0] = xPx; + } + + if (!isNaN(yPx)) { + point[1] = yPx; + } + + mpData.setItemLayout(idx, point); + }); + } + + var MarkPointView = + /** @class */ + function (_super) { + __extends(MarkPointView, _super); + + function MarkPointView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MarkPointView.type; + return _this; + } + + MarkPointView.prototype.updateTransform = function (markPointModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var mpModel = MarkerModel.getMarkerModelFromSeries(seriesModel, 'markPoint'); + + if (mpModel) { + updateMarkerLayout(mpModel.getData(), seriesModel, api); + this.markerGroupMap.get(seriesModel.id).updateLayout(); + } + }, this); + }; + + MarkPointView.prototype.renderSeries = function (seriesModel, mpModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesId = seriesModel.id; + var seriesData = seriesModel.getData(); + var symbolDrawMap = this.markerGroupMap; + var symbolDraw = symbolDrawMap.get(seriesId) || symbolDrawMap.set(seriesId, new SymbolDraw()); + var mpData = createData(coordSys, seriesModel, mpModel); // FIXME + + mpModel.setData(mpData); + updateMarkerLayout(mpModel.getData(), seriesModel, api); + mpData.each(function (idx) { + var itemModel = mpData.getItemModel(idx); + var symbol = itemModel.getShallow('symbol'); + var symbolSize = itemModel.getShallow('symbolSize'); + var symbolRotate = itemModel.getShallow('symbolRotate'); + var symbolOffset = itemModel.getShallow('symbolOffset'); + var symbolKeepAspect = itemModel.getShallow('symbolKeepAspect'); // TODO: refactor needed: single data item should not support callback function + + if (isFunction(symbol) || isFunction(symbolSize) || isFunction(symbolRotate) || isFunction(symbolOffset)) { + var rawIdx = mpModel.getRawValue(idx); + var dataParams = mpModel.getDataParams(idx); + + if (isFunction(symbol)) { + symbol = symbol(rawIdx, dataParams); + } + + if (isFunction(symbolSize)) { + // FIXME 这里不兼容 ECharts 2.x,2.x 貌似参数是整个数据? + symbolSize = symbolSize(rawIdx, dataParams); + } + + if (isFunction(symbolRotate)) { + symbolRotate = symbolRotate(rawIdx, dataParams); + } + + if (isFunction(symbolOffset)) { + symbolOffset = symbolOffset(rawIdx, dataParams); + } + } + + var style = itemModel.getModel('itemStyle').getItemStyle(); + var color = getVisualFromData(seriesData, 'color'); + + if (!style.fill) { + style.fill = color; + } + + mpData.setItemVisual(idx, { + symbol: symbol, + symbolSize: symbolSize, + symbolRotate: symbolRotate, + symbolOffset: symbolOffset, + symbolKeepAspect: symbolKeepAspect, + style: style + }); + }); // TODO Text are wrong + + symbolDraw.updateData(mpData); + this.group.add(symbolDraw.group); // Set host model for tooltip + // FIXME + + mpData.eachItemGraphicEl(function (el) { + el.traverse(function (child) { + getECData(child).dataModel = mpModel; + }); + }); + this.markKeep(symbolDraw); + symbolDraw.group.silent = mpModel.get('silent') || seriesModel.get('silent'); + }; + + MarkPointView.type = 'markPoint'; + return MarkPointView; + }(MarkerView); + + function createData(coordSys, seriesModel, mpModel) { + var coordDimsInfos; + + if (coordSys) { + coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + var info = seriesModel.getData().getDimensionInfo(seriesModel.getData().mapDimension(coordDim)) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys + + return extend(extend({}, info), { + name: coordDim, + // DON'T use ordinalMeta to parse and collect ordinal. + ordinalMeta: null + }); + }); + } else { + coordDimsInfos = [{ + name: 'value', + type: 'float' + }]; + } + + var mpData = new SeriesData(coordDimsInfos, mpModel); + var dataOpt = map(mpModel.get('data'), curry(dataTransform, seriesModel)); + + if (coordSys) { + dataOpt = filter(dataOpt, curry(dataFilter$1, coordSys)); + } + + var dimValueGetter = createMarkerDimValueGetter(!!coordSys, coordDimsInfos); + mpData.initData(dataOpt, null, dimValueGetter); + return mpData; + } + + function install$E(registers) { + registers.registerComponentModel(MarkPointModel); + registers.registerComponentView(MarkPointView); + registers.registerPreprocessor(function (opt) { + if (checkMarkerInSeries(opt.series, 'markPoint')) { + // Make sure markPoint component is enabled + opt.markPoint = opt.markPoint || {}; + } + }); + } + + var MarkLineModel = + /** @class */ + function (_super) { + __extends(MarkLineModel, _super); + + function MarkLineModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MarkLineModel.type; + return _this; + } + + MarkLineModel.prototype.createMarkerModelFromSeries = function (markerOpt, masterMarkerModel, ecModel) { + return new MarkLineModel(markerOpt, masterMarkerModel, ecModel); + }; + + MarkLineModel.type = 'markLine'; + MarkLineModel.defaultOption = { + zlevel: 0, + z: 5, + symbol: ['circle', 'arrow'], + symbolSize: [8, 16], + //symbolRotate: 0, + symbolOffset: 0, + precision: 2, + tooltip: { + trigger: 'item' + }, + label: { + show: true, + position: 'end', + distance: 5 + }, + lineStyle: { + type: 'dashed' + }, + emphasis: { + label: { + show: true + }, + lineStyle: { + width: 3 + } + }, + animationEasing: 'linear' + }; + return MarkLineModel; + }(MarkerModel); + + var inner$i = makeInner(); + + var markLineTransform = function (seriesModel, coordSys, mlModel, item) { + var data = seriesModel.getData(); + var itemArray; + + if (!isArray(item)) { + // Special type markLine like 'min', 'max', 'average', 'median' + var mlType = item.type; + + if (mlType === 'min' || mlType === 'max' || mlType === 'average' || mlType === 'median' // In case + // data: [{ + // yAxis: 10 + // }] + || item.xAxis != null || item.yAxis != null) { + var valueAxis = void 0; + var value = void 0; + + if (item.yAxis != null || item.xAxis != null) { + valueAxis = coordSys.getAxis(item.yAxis != null ? 'y' : 'x'); + value = retrieve(item.yAxis, item.xAxis); + } else { + var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel); + valueAxis = axisInfo.valueAxis; + var valueDataDim = getStackedDimension(data, axisInfo.valueDataDim); + value = numCalculate(data, valueDataDim, mlType); + } + + var valueIndex = valueAxis.dim === 'x' ? 0 : 1; + var baseIndex = 1 - valueIndex; // Normized to 2d data with start and end point + + var mlFrom = clone(item); + var mlTo = { + coord: [] + }; + mlFrom.type = null; + mlFrom.coord = []; + mlFrom.coord[baseIndex] = -Infinity; + mlTo.coord[baseIndex] = Infinity; + var precision = mlModel.get('precision'); + + if (precision >= 0 && typeof value === 'number') { + value = +value.toFixed(Math.min(precision, 20)); + } + + mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value; + itemArray = [mlFrom, mlTo, { + type: mlType, + valueIndex: item.valueIndex, + // Force to use the value of calculated value. + value: value + }]; + } else { + // Invalid data + if ("development" !== 'production') { + logError('Invalid markLine data.'); + } + + itemArray = []; + } + } else { + itemArray = item; + } + + var normalizedItem = [dataTransform(seriesModel, itemArray[0]), dataTransform(seriesModel, itemArray[1]), extend({}, itemArray[2])]; // Avoid line data type is extended by from(to) data type + + normalizedItem[2].type = normalizedItem[2].type || null; // Merge from option and to option into line option + + merge(normalizedItem[2], normalizedItem[0]); + merge(normalizedItem[2], normalizedItem[1]); + return normalizedItem; + }; + + function isInifinity(val) { + return !isNaN(val) && !isFinite(val); + } // If a markLine has one dim + + + function ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) { + var otherDimIndex = 1 - dimIndex; + var dimName = coordSys.dimensions[dimIndex]; + return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex]) && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]); + } + + function markLineFilter(coordSys, item) { + if (coordSys.type === 'cartesian2d') { + var fromCoord = item[0].coord; + var toCoord = item[1].coord; // In case + // { + // markLine: { + // data: [{ yAxis: 2 }] + // } + // } + + if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) { + return true; + } + } + + return dataFilter$1(coordSys, item[0]) && dataFilter$1(coordSys, item[1]); + } + + function updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api) { + var coordSys = seriesModel.coordinateSystem; + var itemModel = data.getItemModel(idx); + var point; + var xPx = parsePercent$1(itemModel.get('x'), api.getWidth()); + var yPx = parsePercent$1(itemModel.get('y'), api.getHeight()); + + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } else { + // Chart like bar may have there own marker positioning logic + if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition(data.getValues(data.dimensions, idx)); + } else { + var dims = coordSys.dimensions; + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + point = coordSys.dataToPoint([x, y]); + } // Expand line to the edge of grid if value on one axis is Inifnity + // In case + // markLine: { + // data: [{ + // yAxis: 2 + // // or + // type: 'average' + // }] + // } + + + if (isCoordinateSystemType(coordSys, 'cartesian2d')) { + // TODO: TYPE ts@4.1 may still infer it as Axis instead of Axis2D. Not sure if it's a bug + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + var dims = coordSys.dimensions; + + if (isInifinity(data.get(dims[0], idx))) { + point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]); + } else if (isInifinity(data.get(dims[1], idx))) { + point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]); + } + } // Use x, y if has any + + + if (!isNaN(xPx)) { + point[0] = xPx; + } + + if (!isNaN(yPx)) { + point[1] = yPx; + } + } + + data.setItemLayout(idx, point); + } + + var MarkLineView = + /** @class */ + function (_super) { + __extends(MarkLineView, _super); + + function MarkLineView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MarkLineView.type; + return _this; + } + + MarkLineView.prototype.updateTransform = function (markLineModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var mlModel = MarkerModel.getMarkerModelFromSeries(seriesModel, 'markLine'); + + if (mlModel) { + var mlData_1 = mlModel.getData(); + var fromData_1 = inner$i(mlModel).from; + var toData_1 = inner$i(mlModel).to; // Update visual and layout of from symbol and to symbol + + fromData_1.each(function (idx) { + updateSingleMarkerEndLayout(fromData_1, idx, true, seriesModel, api); + updateSingleMarkerEndLayout(toData_1, idx, false, seriesModel, api); + }); // Update layout of line + + mlData_1.each(function (idx) { + mlData_1.setItemLayout(idx, [fromData_1.getItemLayout(idx), toData_1.getItemLayout(idx)]); + }); + this.markerGroupMap.get(seriesModel.id).updateLayout(); + } + }, this); + }; + + MarkLineView.prototype.renderSeries = function (seriesModel, mlModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesId = seriesModel.id; + var seriesData = seriesModel.getData(); + var lineDrawMap = this.markerGroupMap; + var lineDraw = lineDrawMap.get(seriesId) || lineDrawMap.set(seriesId, new LineDraw()); + this.group.add(lineDraw.group); + var mlData = createList$1(coordSys, seriesModel, mlModel); + var fromData = mlData.from; + var toData = mlData.to; + var lineData = mlData.line; + inner$i(mlModel).from = fromData; + inner$i(mlModel).to = toData; // Line data for tooltip and formatter + + mlModel.setData(lineData); // TODO + // Functionally, `symbolSize` & `symbolOffset` can also be 2D array now. + // But the related logic and type definition are not finished yet. + // Finish it if required + + var symbolType = mlModel.get('symbol'); + var symbolSize = mlModel.get('symbolSize'); + var symbolRotate = mlModel.get('symbolRotate'); + var symbolOffset = mlModel.get('symbolOffset'); // TODO: support callback function like markPoint + + if (!isArray(symbolType)) { + symbolType = [symbolType, symbolType]; + } + + if (!isArray(symbolSize)) { + symbolSize = [symbolSize, symbolSize]; + } + + if (!isArray(symbolRotate)) { + symbolRotate = [symbolRotate, symbolRotate]; + } + + if (!isArray(symbolOffset)) { + symbolOffset = [symbolOffset, symbolOffset]; + } // Update visual and layout of from symbol and to symbol + + + mlData.from.each(function (idx) { + updateDataVisualAndLayout(fromData, idx, true); + updateDataVisualAndLayout(toData, idx, false); + }); // Update visual and layout of line + + lineData.each(function (idx) { + var lineStyle = lineData.getItemModel(idx).getModel('lineStyle').getLineStyle(); // lineData.setItemVisual(idx, { + // color: lineColor || fromData.getItemVisual(idx, 'color') + // }); + + lineData.setItemLayout(idx, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]); + + if (lineStyle.stroke == null) { + lineStyle.stroke = fromData.getItemVisual(idx, 'style').fill; + } + + lineData.setItemVisual(idx, { + fromSymbolKeepAspect: fromData.getItemVisual(idx, 'symbolKeepAspect'), + fromSymbolOffset: fromData.getItemVisual(idx, 'symbolOffset'), + fromSymbolRotate: fromData.getItemVisual(idx, 'symbolRotate'), + fromSymbolSize: fromData.getItemVisual(idx, 'symbolSize'), + fromSymbol: fromData.getItemVisual(idx, 'symbol'), + toSymbolKeepAspect: toData.getItemVisual(idx, 'symbolKeepAspect'), + toSymbolOffset: toData.getItemVisual(idx, 'symbolOffset'), + toSymbolRotate: toData.getItemVisual(idx, 'symbolRotate'), + toSymbolSize: toData.getItemVisual(idx, 'symbolSize'), + toSymbol: toData.getItemVisual(idx, 'symbol'), + style: lineStyle + }); + }); + lineDraw.updateData(lineData); // Set host model for tooltip + // FIXME + + mlData.line.eachItemGraphicEl(function (el, idx) { + el.traverse(function (child) { + getECData(child).dataModel = mlModel; + }); + }); + + function updateDataVisualAndLayout(data, idx, isFrom) { + var itemModel = data.getItemModel(idx); + updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api); + var style = itemModel.getModel('itemStyle').getItemStyle(); + + if (style.fill == null) { + style.fill = getVisualFromData(seriesData, 'color'); + } + + data.setItemVisual(idx, { + symbolKeepAspect: itemModel.get('symbolKeepAspect'), + // `0` should be considered as a valid value, so use `retrieve2` instead of `||` + symbolOffset: retrieve2(itemModel.get('symbolOffset', true), symbolOffset[isFrom ? 0 : 1]), + symbolRotate: retrieve2(itemModel.get('symbolRotate', true), symbolRotate[isFrom ? 0 : 1]), + // TODO: when 2d array is supported, it should ignore parent + symbolSize: retrieve2(itemModel.get('symbolSize'), symbolSize[isFrom ? 0 : 1]), + symbol: retrieve2(itemModel.get('symbol', true), symbolType[isFrom ? 0 : 1]), + style: style + }); + } + + this.markKeep(lineDraw); + lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent'); + }; + + MarkLineView.type = 'markLine'; + return MarkLineView; + }(MarkerView); + + function createList$1(coordSys, seriesModel, mlModel) { + var coordDimsInfos; + + if (coordSys) { + coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + var info = seriesModel.getData().getDimensionInfo(seriesModel.getData().mapDimension(coordDim)) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys + + return extend(extend({}, info), { + name: coordDim, + // DON'T use ordinalMeta to parse and collect ordinal. + ordinalMeta: null + }); + }); + } else { + coordDimsInfos = [{ + name: 'value', + type: 'float' + }]; + } + + var fromData = new SeriesData(coordDimsInfos, mlModel); + var toData = new SeriesData(coordDimsInfos, mlModel); // No dimensions + + var lineData = new SeriesData([], mlModel); + var optData = map(mlModel.get('data'), curry(markLineTransform, seriesModel, coordSys, mlModel)); + + if (coordSys) { + optData = filter(optData, curry(markLineFilter, coordSys)); + } + + var dimValueGetter = createMarkerDimValueGetter(!!coordSys, coordDimsInfos); + fromData.initData(map(optData, function (item) { + return item[0]; + }), null, dimValueGetter); + toData.initData(map(optData, function (item) { + return item[1]; + }), null, dimValueGetter); + lineData.initData(map(optData, function (item) { + return item[2]; + })); + lineData.hasItemOption = true; + return { + from: fromData, + to: toData, + line: lineData + }; + } + + function install$F(registers) { + registers.registerComponentModel(MarkLineModel); + registers.registerComponentView(MarkLineView); + registers.registerPreprocessor(function (opt) { + if (checkMarkerInSeries(opt.series, 'markLine')) { + // Make sure markLine component is enabled + opt.markLine = opt.markLine || {}; + } + }); + } + + var MarkAreaModel = + /** @class */ + function (_super) { + __extends(MarkAreaModel, _super); + + function MarkAreaModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MarkAreaModel.type; + return _this; + } + + MarkAreaModel.prototype.createMarkerModelFromSeries = function (markerOpt, masterMarkerModel, ecModel) { + return new MarkAreaModel(markerOpt, masterMarkerModel, ecModel); + }; + + MarkAreaModel.type = 'markArea'; + MarkAreaModel.defaultOption = { + zlevel: 0, + // PENDING + z: 1, + tooltip: { + trigger: 'item' + }, + // markArea should fixed on the coordinate system + animation: false, + label: { + show: true, + position: 'top' + }, + itemStyle: { + // color and borderColor default to use color from series + // color: 'auto' + // borderColor: 'auto' + borderWidth: 0 + }, + emphasis: { + label: { + show: true, + position: 'top' + } + } + }; + return MarkAreaModel; + }(MarkerModel); + + var inner$j = makeInner(); + + var markAreaTransform = function (seriesModel, coordSys, maModel, item) { + var lt = dataTransform(seriesModel, item[0]); + var rb = dataTransform(seriesModel, item[1]); // FIXME make sure lt is less than rb + + var ltCoord = lt.coord; + var rbCoord = rb.coord; + ltCoord[0] = retrieve(ltCoord[0], -Infinity); + ltCoord[1] = retrieve(ltCoord[1], -Infinity); + rbCoord[0] = retrieve(rbCoord[0], Infinity); + rbCoord[1] = retrieve(rbCoord[1], Infinity); // Merge option into one + + var result = mergeAll([{}, lt, rb]); + result.coord = [lt.coord, rb.coord]; + result.x0 = lt.x; + result.y0 = lt.y; + result.x1 = rb.x; + result.y1 = rb.y; + return result; + }; + + function isInifinity$1(val) { + return !isNaN(val) && !isFinite(val); + } // If a markArea has one dim + + + function ifMarkAreaHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) { + var otherDimIndex = 1 - dimIndex; + return isInifinity$1(fromCoord[otherDimIndex]) && isInifinity$1(toCoord[otherDimIndex]); + } + + function markAreaFilter(coordSys, item) { + var fromCoord = item.coord[0]; + var toCoord = item.coord[1]; + + if (isCoordinateSystemType(coordSys, 'cartesian2d')) { + // In case + // { + // markArea: { + // data: [{ yAxis: 2 }] + // } + // } + if (fromCoord && toCoord && (ifMarkAreaHasOnlyDim(1, fromCoord, toCoord) || ifMarkAreaHasOnlyDim(0, fromCoord, toCoord))) { + return true; + } + } + + return dataFilter$1(coordSys, { + coord: fromCoord, + x: item.x0, + y: item.y0 + }) || dataFilter$1(coordSys, { + coord: toCoord, + x: item.x1, + y: item.y1 + }); + } // dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0'] + + + function getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) { + var coordSys = seriesModel.coordinateSystem; + var itemModel = data.getItemModel(idx); + var point; + var xPx = parsePercent$1(itemModel.get(dims[0]), api.getWidth()); + var yPx = parsePercent$1(itemModel.get(dims[1]), api.getHeight()); + + if (!isNaN(xPx) && !isNaN(yPx)) { + point = [xPx, yPx]; + } else { + // Chart like bar may have there own marker positioning logic + if (seriesModel.getMarkerPosition) { + // Use the getMarkerPoisition + point = seriesModel.getMarkerPosition(data.getValues(dims, idx)); + } else { + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + var pt = [x, y]; + coordSys.clampData && coordSys.clampData(pt, pt); + point = coordSys.dataToPoint(pt, true); + } + + if (isCoordinateSystemType(coordSys, 'cartesian2d')) { + // TODO: TYPE ts@4.1 may still infer it as Axis instead of Axis2D. Not sure if it's a bug + var xAxis = coordSys.getAxis('x'); + var yAxis = coordSys.getAxis('y'); + var x = data.get(dims[0], idx); + var y = data.get(dims[1], idx); + + if (isInifinity$1(x)) { + point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]); + } else if (isInifinity$1(y)) { + point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]); + } + } // Use x, y if has any + + + if (!isNaN(xPx)) { + point[0] = xPx; + } + + if (!isNaN(yPx)) { + point[1] = yPx; + } + } + + return point; + } + + var dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']]; + + var MarkAreaView = + /** @class */ + function (_super) { + __extends(MarkAreaView, _super); + + function MarkAreaView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = MarkAreaView.type; + return _this; + } + + MarkAreaView.prototype.updateTransform = function (markAreaModel, ecModel, api) { + ecModel.eachSeries(function (seriesModel) { + var maModel = MarkerModel.getMarkerModelFromSeries(seriesModel, 'markArea'); + + if (maModel) { + var areaData_1 = maModel.getData(); + areaData_1.each(function (idx) { + var points = map(dimPermutations, function (dim) { + return getSingleMarkerEndPoint(areaData_1, idx, dim, seriesModel, api); + }); // Layout + + areaData_1.setItemLayout(idx, points); + var el = areaData_1.getItemGraphicEl(idx); + el.setShape('points', points); + }); + } + }, this); + }; + + MarkAreaView.prototype.renderSeries = function (seriesModel, maModel, ecModel, api) { + var coordSys = seriesModel.coordinateSystem; + var seriesId = seriesModel.id; + var seriesData = seriesModel.getData(); + var areaGroupMap = this.markerGroupMap; + var polygonGroup = areaGroupMap.get(seriesId) || areaGroupMap.set(seriesId, { + group: new Group() + }); + this.group.add(polygonGroup.group); + this.markKeep(polygonGroup); + var areaData = createList$2(coordSys, seriesModel, maModel); // Line data for tooltip and formatter + + maModel.setData(areaData); // Update visual and layout of line + + areaData.each(function (idx) { + // Layout + var points = map(dimPermutations, function (dim) { + return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api); + }); + var xAxisScale = coordSys.getAxis('x').scale; + var yAxisScale = coordSys.getAxis('y').scale; + var xAxisExtent = xAxisScale.getExtent(); + var yAxisExtent = yAxisScale.getExtent(); + var xPointExtent = [xAxisScale.parse(areaData.get('x0', idx)), xAxisScale.parse(areaData.get('x1', idx))]; + var yPointExtent = [yAxisScale.parse(areaData.get('y0', idx)), yAxisScale.parse(areaData.get('y1', idx))]; + asc(xPointExtent); + asc(yPointExtent); + var overlapped = !(xAxisExtent[0] > xPointExtent[1] || xAxisExtent[1] < xPointExtent[0] || yAxisExtent[0] > yPointExtent[1] || yAxisExtent[1] < yPointExtent[0]); // If none of the area is inside coordSys, allClipped is set to be true + // in layout so that label will not be displayed. See #12591 + + var allClipped = !overlapped; + areaData.setItemLayout(idx, { + points: points, + allClipped: allClipped + }); + var style = areaData.getItemModel(idx).getModel('itemStyle').getItemStyle(); + var color$1 = getVisualFromData(seriesData, 'color'); + + if (!style.fill) { + style.fill = color$1; + + if (typeof style.fill === 'string') { + style.fill = modifyAlpha(style.fill, 0.4); + } + } + + if (!style.stroke) { + style.stroke = color$1; + } // Visual + + + areaData.setItemVisual(idx, 'style', style); + }); + areaData.diff(inner$j(polygonGroup).data).add(function (idx) { + var layout = areaData.getItemLayout(idx); + + if (!layout.allClipped) { + var polygon = new Polygon({ + shape: { + points: layout.points + } + }); + areaData.setItemGraphicEl(idx, polygon); + polygonGroup.group.add(polygon); + } + }).update(function (newIdx, oldIdx) { + var polygon = inner$j(polygonGroup).data.getItemGraphicEl(oldIdx); + var layout = areaData.getItemLayout(newIdx); + + if (!layout.allClipped) { + if (polygon) { + updateProps(polygon, { + shape: { + points: layout.points + } + }, maModel, newIdx); + } else { + polygon = new Polygon({ + shape: { + points: layout.points + } + }); + } + + areaData.setItemGraphicEl(newIdx, polygon); + polygonGroup.group.add(polygon); + } else if (polygon) { + polygonGroup.group.remove(polygon); + } + }).remove(function (idx) { + var polygon = inner$j(polygonGroup).data.getItemGraphicEl(idx); + polygonGroup.group.remove(polygon); + }).execute(); + areaData.eachItemGraphicEl(function (polygon, idx) { + var itemModel = areaData.getItemModel(idx); + var style = areaData.getItemVisual(idx, 'style'); + polygon.useStyle(areaData.getItemVisual(idx, 'style')); + setLabelStyle(polygon, getLabelStatesModels(itemModel), { + labelFetcher: maModel, + labelDataIndex: idx, + defaultText: areaData.getName(idx) || '', + inheritColor: typeof style.fill === 'string' ? modifyAlpha(style.fill, 1) : '#000' + }); + setStatesStylesFromModel(polygon, itemModel); + enableHoverEmphasis(polygon); + getECData(polygon).dataModel = maModel; + }); + inner$j(polygonGroup).data = areaData; + polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent'); + }; + + MarkAreaView.type = 'markArea'; + return MarkAreaView; + }(MarkerView); + + function createList$2(coordSys, seriesModel, maModel) { + var areaData; + var dataDims; + var dims = ['x0', 'y0', 'x1', 'y1']; + + if (coordSys) { + var coordDimsInfos_1 = map(coordSys && coordSys.dimensions, function (coordDim) { + var data = seriesModel.getData(); + var info = data.getDimensionInfo(data.mapDimension(coordDim)) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys + + return extend(extend({}, info), { + name: coordDim, + // DON'T use ordinalMeta to parse and collect ordinal. + ordinalMeta: null + }); + }); + dataDims = map(dims, function (dim, idx) { + return { + name: dim, + type: coordDimsInfos_1[idx % 2].type + }; + }); + areaData = new SeriesData(dataDims, maModel); + } else { + dataDims = [{ + name: 'value', + type: 'float' + }]; + areaData = new SeriesData(dataDims, maModel); + } + + var optData = map(maModel.get('data'), curry(markAreaTransform, seriesModel, coordSys, maModel)); + + if (coordSys) { + optData = filter(optData, curry(markAreaFilter, coordSys)); + } + + var dimValueGetter = coordSys ? function (item, dimName, dataIndex, dimIndex) { + // TODO should convert to ParsedValue? + var rawVal = item.coord[Math.floor(dimIndex / 2)][dimIndex % 2]; + return parseDataValue(rawVal, dataDims[dimIndex]); + } : function (item, dimName, dataIndex, dimIndex) { + return parseDataValue(item.value, dataDims[dimIndex]); + }; + areaData.initData(optData, null, dimValueGetter); + areaData.hasItemOption = true; + return areaData; + } + + function install$G(registers) { + registers.registerComponentModel(MarkAreaModel); + registers.registerComponentView(MarkAreaView); + registers.registerPreprocessor(function (opt) { + if (checkMarkerInSeries(opt.series, 'markArea')) { + // Make sure markArea component is enabled + opt.markArea = opt.markArea || {}; + } + }); + } + + var getDefaultSelectorOptions = function (ecModel, type) { + if (type === 'all') { + return { + type: 'all', + title: ecModel.getLocaleModel().get(['legend', 'selector', 'all']) + }; + } else if (type === 'inverse') { + return { + type: 'inverse', + title: ecModel.getLocaleModel().get(['legend', 'selector', 'inverse']) + }; + } + }; + + var LegendModel = + /** @class */ + function (_super) { + __extends(LegendModel, _super); + + function LegendModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = LegendModel.type; + _this.layoutMode = { + type: 'box', + // legend.width/height are maxWidth/maxHeight actually, + // whereas realy width/height is calculated by its content. + // (Setting {left: 10, right: 10} does not make sense). + // So consider the case: + // `setOption({legend: {left: 10});` + // then `setOption({legend: {right: 10});` + // The previous `left` should be cleared by setting `ignoreSize`. + ignoreSize: true + }; + return _this; + } + + LegendModel.prototype.init = function (option, parentModel, ecModel) { + this.mergeDefaultAndTheme(option, ecModel); + option.selected = option.selected || {}; + + this._updateSelector(option); + }; + + LegendModel.prototype.mergeOption = function (option, ecModel) { + _super.prototype.mergeOption.call(this, option, ecModel); + + this._updateSelector(option); + }; + + LegendModel.prototype._updateSelector = function (option) { + var selector = option.selector; + var ecModel = this.ecModel; + + if (selector === true) { + selector = option.selector = ['all', 'inverse']; + } + + if (isArray(selector)) { + each(selector, function (item, index) { + isString(item) && (item = { + type: item + }); + selector[index] = merge(item, getDefaultSelectorOptions(ecModel, item.type)); + }); + } + }; + + LegendModel.prototype.optionUpdated = function () { + this._updateData(this.ecModel); + + var legendData = this._data; // If selectedMode is single, try to select one + + if (legendData[0] && this.get('selectedMode') === 'single') { + var hasSelected = false; // If has any selected in option.selected + + for (var i = 0; i < legendData.length; i++) { + var name_1 = legendData[i].get('name'); + + if (this.isSelected(name_1)) { + // Force to unselect others + this.select(name_1); + hasSelected = true; + break; + } + } // Try select the first if selectedMode is single + + + !hasSelected && this.select(legendData[0].get('name')); + } + }; + + LegendModel.prototype._updateData = function (ecModel) { + var potentialData = []; + var availableNames = []; + ecModel.eachRawSeries(function (seriesModel) { + var seriesName = seriesModel.name; + availableNames.push(seriesName); + var isPotential; + + if (seriesModel.legendVisualProvider) { + var provider = seriesModel.legendVisualProvider; + var names = provider.getAllNames(); + + if (!ecModel.isSeriesFiltered(seriesModel)) { + availableNames = availableNames.concat(names); + } + + if (names.length) { + potentialData = potentialData.concat(names); + } else { + isPotential = true; + } + } else { + isPotential = true; + } + + if (isPotential && isNameSpecified(seriesModel)) { + potentialData.push(seriesModel.name); + } + }); + /** + * @type {Array.} + * @private + */ + + this._availableNames = availableNames; // If legend.data not specified in option, use availableNames as data, + // which is convinient for user preparing option. + + var rawData = this.get('data') || potentialData; + var legendData = map(rawData, function (dataItem) { + // Can be string or number + if (typeof dataItem === 'string' || typeof dataItem === 'number') { + dataItem = { + name: dataItem + }; + } + + return new Model(dataItem, this, this.ecModel); + }, this); + /** + * @type {Array.} + * @private + */ + + this._data = legendData; + }; + + LegendModel.prototype.getData = function () { + return this._data; + }; + + LegendModel.prototype.select = function (name) { + var selected = this.option.selected; + var selectedMode = this.get('selectedMode'); + + if (selectedMode === 'single') { + var data = this._data; + each(data, function (dataItem) { + selected[dataItem.get('name')] = false; + }); + } + + selected[name] = true; + }; + + LegendModel.prototype.unSelect = function (name) { + if (this.get('selectedMode') !== 'single') { + this.option.selected[name] = false; + } + }; + + LegendModel.prototype.toggleSelected = function (name) { + var selected = this.option.selected; // Default is true + + if (!selected.hasOwnProperty(name)) { + selected[name] = true; + } + + this[selected[name] ? 'unSelect' : 'select'](name); + }; + + LegendModel.prototype.allSelect = function () { + var data = this._data; + var selected = this.option.selected; + each(data, function (dataItem) { + selected[dataItem.get('name', true)] = true; + }); + }; + + LegendModel.prototype.inverseSelect = function () { + var data = this._data; + var selected = this.option.selected; + each(data, function (dataItem) { + var name = dataItem.get('name', true); // Initially, default value is true + + if (!selected.hasOwnProperty(name)) { + selected[name] = true; + } + + selected[name] = !selected[name]; + }); + }; + + LegendModel.prototype.isSelected = function (name) { + var selected = this.option.selected; + return !(selected.hasOwnProperty(name) && !selected[name]) && indexOf(this._availableNames, name) >= 0; + }; + + LegendModel.prototype.getOrient = function () { + return this.get('orient') === 'vertical' ? { + index: 1, + name: 'vertical' + } : { + index: 0, + name: 'horizontal' + }; + }; + + LegendModel.type = 'legend.plain'; + LegendModel.dependencies = ['series']; + LegendModel.defaultOption = { + zlevel: 0, + z: 4, + show: true, + orient: 'horizontal', + left: 'center', + // right: 'center', + top: 0, + // bottom: null, + align: 'auto', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderRadius: 0, + borderWidth: 0, + padding: 5, + itemGap: 10, + itemWidth: 25, + itemHeight: 14, + symbolRotate: 'inherit', + symbolKeepAspect: true, + inactiveColor: '#ccc', + inactiveBorderColor: '#ccc', + inactiveBorderWidth: 'auto', + itemStyle: { + color: 'inherit', + opacity: 'inherit', + borderColor: 'inherit', + borderWidth: 'auto', + borderCap: 'inherit', + borderJoin: 'inherit', + borderDashOffset: 'inherit', + borderMiterLimit: 'inherit' + }, + lineStyle: { + width: 'auto', + color: 'inherit', + inactiveColor: '#ccc', + inactiveWidth: 2, + opacity: 'inherit', + type: 'inherit', + cap: 'inherit', + join: 'inherit', + dashOffset: 'inherit', + miterLimit: 'inherit' + }, + textStyle: { + color: '#333' + }, + selectedMode: true, + selector: false, + selectorLabel: { + show: true, + borderRadius: 10, + padding: [3, 5, 3, 5], + fontSize: 12, + fontFamily: 'sans-serif', + color: '#666', + borderWidth: 1, + borderColor: '#666' + }, + emphasis: { + selectorLabel: { + show: true, + color: '#eee', + backgroundColor: '#666' + } + }, + selectorPosition: 'auto', + selectorItemGap: 7, + selectorButtonGap: 10, + tooltip: { + show: false + } + }; + return LegendModel; + }(ComponentModel); + + var curry$1 = curry; + var each$d = each; + var Group$2 = Group; + + var LegendView = + /** @class */ + function (_super) { + __extends(LegendView, _super); + + function LegendView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = LegendView.type; + _this.newlineDisabled = false; + return _this; + } + + LegendView.prototype.init = function () { + this.group.add(this._contentGroup = new Group$2()); + this.group.add(this._selectorGroup = new Group$2()); + this._isFirstRender = true; + }; + /** + * @protected + */ + + + LegendView.prototype.getContentGroup = function () { + return this._contentGroup; + }; + /** + * @protected + */ + + + LegendView.prototype.getSelectorGroup = function () { + return this._selectorGroup; + }; + /** + * @override + */ + + + LegendView.prototype.render = function (legendModel, ecModel, api) { + var isFirstRender = this._isFirstRender; + this._isFirstRender = false; + this.resetInner(); + + if (!legendModel.get('show', true)) { + return; + } + + var itemAlign = legendModel.get('align'); + var orient = legendModel.get('orient'); + + if (!itemAlign || itemAlign === 'auto') { + itemAlign = legendModel.get('left') === 'right' && orient === 'vertical' ? 'right' : 'left'; + } // selector has been normalized to an array in model + + + var selector = legendModel.get('selector', true); + var selectorPosition = legendModel.get('selectorPosition', true); + + if (selector && (!selectorPosition || selectorPosition === 'auto')) { + selectorPosition = orient === 'horizontal' ? 'end' : 'start'; + } + + this.renderInner(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition); // Perform layout. + + var positionInfo = legendModel.getBoxLayoutParams(); + var viewportSize = { + width: api.getWidth(), + height: api.getHeight() + }; + var padding = legendModel.get('padding'); + var maxSize = getLayoutRect(positionInfo, viewportSize, padding); + var mainRect = this.layoutInner(legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition); // Place mainGroup, based on the calculated `mainRect`. + + var layoutRect = getLayoutRect(defaults({ + width: mainRect.width, + height: mainRect.height + }, positionInfo), viewportSize, padding); + this.group.x = layoutRect.x - mainRect.x; + this.group.y = layoutRect.y - mainRect.y; + this.group.markRedraw(); // Render background after group is layout. + + this.group.add(this._backgroundEl = makeBackground(mainRect, legendModel)); + }; + + LegendView.prototype.resetInner = function () { + this.getContentGroup().removeAll(); + this._backgroundEl && this.group.remove(this._backgroundEl); + this.getSelectorGroup().removeAll(); + }; + + LegendView.prototype.renderInner = function (itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition) { + var contentGroup = this.getContentGroup(); + var legendDrawnMap = createHashMap(); + var selectMode = legendModel.get('selectedMode'); + var excludeSeriesId = []; + ecModel.eachRawSeries(function (seriesModel) { + !seriesModel.get('legendHoverLink') && excludeSeriesId.push(seriesModel.id); + }); + each$d(legendModel.getData(), function (legendItemModel, dataIndex) { + var name = legendItemModel.get('name'); // Use empty string or \n as a newline string + + if (!this.newlineDisabled && (name === '' || name === '\n')) { + var g = new Group$2(); // @ts-ignore + + g.newline = true; + contentGroup.add(g); + return; + } // Representitive series. + + + var seriesModel = ecModel.getSeriesByName(name)[0]; + + if (legendDrawnMap.get(name)) { + // Have been drawed + return; + } // Legend to control series. + + + if (seriesModel) { + var data = seriesModel.getData(); + var lineVisualStyle = data.getVisual('legendLineStyle') || {}; + var legendIcon = data.getVisual('legendIcon'); + /** + * `data.getVisual('style')` may be the color from the register + * in series. For example, for line series, + */ + + var style = data.getVisual('style'); + + var itemGroup = this._createItem(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, lineVisualStyle, style, legendIcon, selectMode); + + itemGroup.on('click', curry$1(dispatchSelectAction, name, null, api, excludeSeriesId)).on('mouseover', curry$1(dispatchHighlightAction, seriesModel.name, null, api, excludeSeriesId)).on('mouseout', curry$1(dispatchDownplayAction, seriesModel.name, null, api, excludeSeriesId)); + legendDrawnMap.set(name, true); + } else { + // Legend to control data. In pie and funnel. + ecModel.eachRawSeries(function (seriesModel) { + // In case multiple series has same data name + if (legendDrawnMap.get(name)) { + return; + } + + if (seriesModel.legendVisualProvider) { + var provider = seriesModel.legendVisualProvider; + + if (!provider.containName(name)) { + return; + } + + var idx = provider.indexOfName(name); + var style = provider.getItemVisual(idx, 'style'); + var legendIcon = provider.getItemVisual(idx, 'legendIcon'); + var colorArr = parse(style.fill); // Color may be set to transparent in visualMap when data is out of range. + // Do not show nothing. + + if (colorArr && colorArr[3] === 0) { + colorArr[3] = 0.2; // TODO color is set to 0, 0, 0, 0. Should show correct RGBA + + style.fill = stringify(colorArr, 'rgba'); + } + + var itemGroup = this._createItem(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, {}, style, legendIcon, selectMode); // FIXME: consider different series has items with the same name. + + + itemGroup.on('click', curry$1(dispatchSelectAction, null, name, api, excludeSeriesId)) // Should not specify the series name, consider legend controls + // more than one pie series. + .on('mouseover', curry$1(dispatchHighlightAction, null, name, api, excludeSeriesId)).on('mouseout', curry$1(dispatchDownplayAction, null, name, api, excludeSeriesId)); + legendDrawnMap.set(name, true); + } + }, this); + } + + if ("development" !== 'production') { + if (!legendDrawnMap.get(name)) { + console.warn(name + ' series not exists. Legend data should be same with series name or data name.'); + } + } + }, this); + + if (selector) { + this._createSelector(selector, legendModel, api, orient, selectorPosition); + } + }; + + LegendView.prototype._createSelector = function (selector, legendModel, api, orient, selectorPosition) { + var selectorGroup = this.getSelectorGroup(); + each$d(selector, function createSelectorButton(selectorItem) { + var type = selectorItem.type; + var labelText = new ZRText({ + style: { + x: 0, + y: 0, + align: 'center', + verticalAlign: 'middle' + }, + onclick: function () { + api.dispatchAction({ + type: type === 'all' ? 'legendAllSelect' : 'legendInverseSelect' + }); + } + }); + selectorGroup.add(labelText); + var labelModel = legendModel.getModel('selectorLabel'); + var emphasisLabelModel = legendModel.getModel(['emphasis', 'selectorLabel']); + setLabelStyle(labelText, { + normal: labelModel, + emphasis: emphasisLabelModel + }, { + defaultText: selectorItem.title + }); + enableHoverEmphasis(labelText); + }); + }; + + LegendView.prototype._createItem = function (seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, lineVisualStyle, itemVisualStyle, legendIcon, selectMode) { + var drawType = seriesModel.visualDrawType; + var itemWidth = legendModel.get('itemWidth'); + var itemHeight = legendModel.get('itemHeight'); + var isSelected = legendModel.isSelected(name); + var iconRotate = legendItemModel.get('symbolRotate'); + var symbolKeepAspect = legendItemModel.get('symbolKeepAspect'); + var legendIconType = legendItemModel.get('icon'); + legendIcon = legendIconType || legendIcon || 'roundRect'; + var style = getLegendStyle(legendIcon, legendItemModel, lineVisualStyle, itemVisualStyle, drawType, isSelected); + var itemGroup = new Group$2(); + var textStyleModel = legendItemModel.getModel('textStyle'); + + if (typeof seriesModel.getLegendIcon === 'function' && (!legendIconType || legendIconType === 'inherit')) { + // Series has specific way to define legend icon + itemGroup.add(seriesModel.getLegendIcon({ + itemWidth: itemWidth, + itemHeight: itemHeight, + icon: legendIcon, + iconRotate: iconRotate, + itemStyle: style.itemStyle, + lineStyle: style.lineStyle, + symbolKeepAspect: symbolKeepAspect + })); + } else { + // Use default legend icon policy for most series + var rotate = legendIconType === 'inherit' && seriesModel.getData().getVisual('symbol') ? iconRotate === 'inherit' ? seriesModel.getData().getVisual('symbolRotate') : iconRotate : 0; // No rotation for no icon + + itemGroup.add(getDefaultLegendIcon({ + itemWidth: itemWidth, + itemHeight: itemHeight, + icon: legendIcon, + iconRotate: rotate, + itemStyle: style.itemStyle, + lineStyle: style.lineStyle, + symbolKeepAspect: symbolKeepAspect + })); + } + + var textX = itemAlign === 'left' ? itemWidth + 5 : -5; + var textAlign = itemAlign; + var formatter = legendModel.get('formatter'); + var content = name; + + if (typeof formatter === 'string' && formatter) { + content = formatter.replace('{name}', name != null ? name : ''); + } else if (typeof formatter === 'function') { + content = formatter(name); + } + + var inactiveColor = legendItemModel.get('inactiveColor'); + itemGroup.add(new ZRText({ + style: createTextStyle(textStyleModel, { + text: content, + x: textX, + y: itemHeight / 2, + fill: isSelected ? textStyleModel.getTextColor() : inactiveColor, + align: textAlign, + verticalAlign: 'middle' + }) + })); // Add a invisible rect to increase the area of mouse hover + + var hitRect = new Rect({ + shape: itemGroup.getBoundingRect(), + invisible: true + }); + var tooltipModel = legendItemModel.getModel('tooltip'); + + if (tooltipModel.get('show')) { + setTooltipConfig({ + el: hitRect, + componentModel: legendModel, + itemName: name, + itemTooltipOption: tooltipModel.option + }); + } + + itemGroup.add(hitRect); + itemGroup.eachChild(function (child) { + child.silent = true; + }); + hitRect.silent = !selectMode; + this.getContentGroup().add(itemGroup); + enableHoverEmphasis(itemGroup); // @ts-ignore + + itemGroup.__legendDataIndex = dataIndex; + return itemGroup; + }; + + LegendView.prototype.layoutInner = function (legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition) { + var contentGroup = this.getContentGroup(); + var selectorGroup = this.getSelectorGroup(); // Place items in contentGroup. + + box(legendModel.get('orient'), contentGroup, legendModel.get('itemGap'), maxSize.width, maxSize.height); + var contentRect = contentGroup.getBoundingRect(); + var contentPos = [-contentRect.x, -contentRect.y]; + selectorGroup.markRedraw(); + contentGroup.markRedraw(); + + if (selector) { + // Place buttons in selectorGroup + box( // Buttons in selectorGroup always layout horizontally + 'horizontal', selectorGroup, legendModel.get('selectorItemGap', true)); + var selectorRect = selectorGroup.getBoundingRect(); + var selectorPos = [-selectorRect.x, -selectorRect.y]; + var selectorButtonGap = legendModel.get('selectorButtonGap', true); + var orientIdx = legendModel.getOrient().index; + var wh = orientIdx === 0 ? 'width' : 'height'; + var hw = orientIdx === 0 ? 'height' : 'width'; + var yx = orientIdx === 0 ? 'y' : 'x'; + + if (selectorPosition === 'end') { + selectorPos[orientIdx] += contentRect[wh] + selectorButtonGap; + } else { + contentPos[orientIdx] += selectorRect[wh] + selectorButtonGap; + } //Always align selector to content as 'middle' + + + selectorPos[1 - orientIdx] += contentRect[hw] / 2 - selectorRect[hw] / 2; + selectorGroup.x = selectorPos[0]; + selectorGroup.y = selectorPos[1]; + contentGroup.x = contentPos[0]; + contentGroup.y = contentPos[1]; + var mainRect = { + x: 0, + y: 0 + }; + mainRect[wh] = contentRect[wh] + selectorButtonGap + selectorRect[wh]; + mainRect[hw] = Math.max(contentRect[hw], selectorRect[hw]); + mainRect[yx] = Math.min(0, selectorRect[yx] + selectorPos[1 - orientIdx]); + return mainRect; + } else { + contentGroup.x = contentPos[0]; + contentGroup.y = contentPos[1]; + return this.group.getBoundingRect(); + } + }; + /** + * @protected + */ + + + LegendView.prototype.remove = function () { + this.getContentGroup().removeAll(); + this._isFirstRender = true; + }; + + LegendView.type = 'legend.plain'; + return LegendView; + }(ComponentView); + + function getLegendStyle(iconType, legendModel, lineVisualStyle, itemVisualStyle, drawType, isSelected) { + /** + * Use series style if is inherit; + * elsewise, use legend style + */ + function handleCommonProps(style, visualStyle) { + // If lineStyle.width is 'auto', it is set to be 2 if series has border + if (style.lineWidth === 'auto') { + style.lineWidth = visualStyle.lineWidth > 0 ? 2 : 0; + } + + each$d(style, function (propVal, propName) { + style[propName] === 'inherit' && (style[propName] = visualStyle[propName]); + }); + } // itemStyle + + + var legendItemModel = legendModel.getModel('itemStyle'); + var itemStyle = legendItemModel.getItemStyle(); + var iconBrushType = iconType.lastIndexOf('empty', 0) === 0 ? 'fill' : 'stroke'; + itemStyle.decal = itemVisualStyle.decal; + + if (itemStyle.fill === 'inherit') { + /** + * Series with visualDrawType as 'stroke' should have + * series stroke as legend fill + */ + itemStyle.fill = itemVisualStyle[drawType]; + } + + if (itemStyle.stroke === 'inherit') { + /** + * icon type with "emptyXXX" should use fill color + * in visual style + */ + itemStyle.stroke = itemVisualStyle[iconBrushType]; + } + + if (itemStyle.opacity === 'inherit') { + /** + * Use lineStyle.opacity if drawType is stroke + */ + itemStyle.opacity = (drawType === 'fill' ? itemVisualStyle : lineVisualStyle).opacity; + } + + handleCommonProps(itemStyle, itemVisualStyle); // lineStyle + + var legendLineModel = legendModel.getModel('lineStyle'); + var lineStyle = legendLineModel.getLineStyle(); + handleCommonProps(lineStyle, lineVisualStyle); // Fix auto color to real color + + itemStyle.fill === 'auto' && (itemStyle.fill = itemVisualStyle.fill); + itemStyle.stroke === 'auto' && (itemStyle.stroke = itemVisualStyle.fill); + lineStyle.stroke === 'auto' && (lineStyle.stroke = itemVisualStyle.fill); + + if (!isSelected) { + var borderWidth = legendModel.get('inactiveBorderWidth'); + /** + * Since stroke is set to be inactiveBorderColor, it may occur that + * there is no border in series but border in legend, so we need to + * use border only when series has border if is set to be auto + */ + + var visualHasBorder = itemStyle[iconBrushType]; + itemStyle.lineWidth = borderWidth === 'auto' ? itemVisualStyle.lineWidth > 0 && visualHasBorder ? 2 : 0 : itemStyle.lineWidth; + itemStyle.fill = legendModel.get('inactiveColor'); + itemStyle.stroke = legendModel.get('inactiveBorderColor'); + lineStyle.stroke = legendLineModel.get('inactiveColor'); + lineStyle.lineWidth = legendLineModel.get('inactiveWidth'); + } + + return { + itemStyle: itemStyle, + lineStyle: lineStyle + }; + } + + function getDefaultLegendIcon(opt) { + var symboType = opt.icon || 'roundRect'; + var icon = createSymbol(symboType, 0, 0, opt.itemWidth, opt.itemHeight, opt.itemStyle.fill, opt.symbolKeepAspect); + icon.setStyle(opt.itemStyle); + icon.rotation = (opt.iconRotate || 0) * Math.PI / 180; + icon.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]); + + if (symboType.indexOf('empty') > -1) { + icon.style.stroke = icon.style.fill; + icon.style.fill = '#fff'; + icon.style.lineWidth = 2; + } + + return icon; + } + + function dispatchSelectAction(seriesName, dataName, api, excludeSeriesId) { + // downplay before unselect + dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId); + api.dispatchAction({ + type: 'legendToggleSelect', + name: seriesName != null ? seriesName : dataName + }); // highlight after select + // TODO higlight immediately may cause animation loss. + + dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId); + } + + function isUseHoverLayer(api) { + var list = api.getZr().storage.getDisplayList(); + var emphasisState; + var i = 0; + var len = list.length; + + while (i < len && !(emphasisState = list[i].states.emphasis)) { + i++; + } + + return emphasisState && emphasisState.hoverLayer; + } + + function dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId) { + // If element hover will move to a hoverLayer. + if (!isUseHoverLayer(api)) { + api.dispatchAction({ + type: 'highlight', + seriesName: seriesName, + name: dataName, + excludeSeriesId: excludeSeriesId + }); + } + } + + function dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId) { + // If element hover will move to a hoverLayer. + if (!isUseHoverLayer(api)) { + api.dispatchAction({ + type: 'downplay', + seriesName: seriesName, + name: dataName, + excludeSeriesId: excludeSeriesId + }); + } + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function legendFilter(ecModel) { + var legendModels = ecModel.findComponents({ + mainType: 'legend' + }); + + if (legendModels && legendModels.length) { + ecModel.filterSeries(function (series) { + // If in any legend component the status is not selected. + // Because in legend series is assumed selected when it is not in the legend data. + for (var i = 0; i < legendModels.length; i++) { + if (!legendModels[i].isSelected(series.name)) { + return false; + } + } + + return true; + }); + } + } + + function legendSelectActionHandler(methodName, payload, ecModel) { + var selectedMap = {}; + var isToggleSelect = methodName === 'toggleSelected'; + var isSelected; // Update all legend components + + ecModel.eachComponent('legend', function (legendModel) { + if (isToggleSelect && isSelected != null) { + // Force other legend has same selected status + // Or the first is toggled to true and other are toggled to false + // In the case one legend has some item unSelected in option. And if other legend + // doesn't has the item, they will assume it is selected. + legendModel[isSelected ? 'select' : 'unSelect'](payload.name); + } else if (methodName === 'allSelect' || methodName === 'inverseSelect') { + legendModel[methodName](); + } else { + legendModel[methodName](payload.name); + isSelected = legendModel.isSelected(payload.name); + } + + var legendData = legendModel.getData(); + each(legendData, function (model) { + var name = model.get('name'); // Wrap element + + if (name === '\n' || name === '') { + return; + } + + var isItemSelected = legendModel.isSelected(name); + + if (selectedMap.hasOwnProperty(name)) { + // Unselected if any legend is unselected + selectedMap[name] = selectedMap[name] && isItemSelected; + } else { + selectedMap[name] = isItemSelected; + } + }); + }); // Return the event explicitly + + return methodName === 'allSelect' || methodName === 'inverseSelect' ? { + selected: selectedMap + } : { + name: payload.name, + selected: selectedMap + }; + } + + function installLegendAction(registers) { + /** + * @event legendToggleSelect + * @type {Object} + * @property {string} type 'legendToggleSelect' + * @property {string} [from] + * @property {string} name Series name or data item name + */ + registers.registerAction('legendToggleSelect', 'legendselectchanged', curry(legendSelectActionHandler, 'toggleSelected')); + registers.registerAction('legendAllSelect', 'legendselectall', curry(legendSelectActionHandler, 'allSelect')); + registers.registerAction('legendInverseSelect', 'legendinverseselect', curry(legendSelectActionHandler, 'inverseSelect')); + /** + * @event legendSelect + * @type {Object} + * @property {string} type 'legendSelect' + * @property {string} name Series name or data item name + */ + + registers.registerAction('legendSelect', 'legendselected', curry(legendSelectActionHandler, 'select')); + /** + * @event legendUnSelect + * @type {Object} + * @property {string} type 'legendUnSelect' + * @property {string} name Series name or data item name + */ + + registers.registerAction('legendUnSelect', 'legendunselected', curry(legendSelectActionHandler, 'unSelect')); + } + + function install$H(registers) { + registers.registerComponentModel(LegendModel); + registers.registerComponentView(LegendView); + registers.registerProcessor(registers.PRIORITY.PROCESSOR.SERIES_FILTER, legendFilter); + registers.registerSubTypeDefaulter('legend', function () { + return 'plain'; + }); + installLegendAction(registers); + } + + var ScrollableLegendModel = + /** @class */ + function (_super) { + __extends(ScrollableLegendModel, _super); + + function ScrollableLegendModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ScrollableLegendModel.type; + return _this; + } + /** + * @param {number} scrollDataIndex + */ + + + ScrollableLegendModel.prototype.setScrollDataIndex = function (scrollDataIndex) { + this.option.scrollDataIndex = scrollDataIndex; + }; + + ScrollableLegendModel.prototype.init = function (option, parentModel, ecModel) { + var inputPositionParams = getLayoutParams(option); + + _super.prototype.init.call(this, option, parentModel, ecModel); + + mergeAndNormalizeLayoutParams$1(this, option, inputPositionParams); + }; + /** + * @override + */ + + + ScrollableLegendModel.prototype.mergeOption = function (option, ecModel) { + _super.prototype.mergeOption.call(this, option, ecModel); + + mergeAndNormalizeLayoutParams$1(this, this.option, option); + }; + + ScrollableLegendModel.type = 'legend.scroll'; + ScrollableLegendModel.defaultOption = inheritDefaultOption(LegendModel.defaultOption, { + scrollDataIndex: 0, + pageButtonItemGap: 5, + pageButtonGap: null, + pageButtonPosition: 'end', + pageFormatter: '{current}/{total}', + pageIcons: { + horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'], + vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z'] + }, + pageIconColor: '#2f4554', + pageIconInactiveColor: '#aaa', + pageIconSize: 15, + pageTextStyle: { + color: '#333' + }, + animationDurationUpdate: 800 + }); + return ScrollableLegendModel; + }(LegendModel); + + function mergeAndNormalizeLayoutParams$1(legendModel, target, raw) { + var orient = legendModel.getOrient(); + var ignoreSize = [1, 1]; + ignoreSize[orient.index] = 0; + mergeLayoutParam(target, raw, { + type: 'box', + ignoreSize: !!ignoreSize + }); + } + + var Group$3 = Group; + var WH$1 = ['width', 'height']; + var XY$1 = ['x', 'y']; + + var ScrollableLegendView = + /** @class */ + function (_super) { + __extends(ScrollableLegendView, _super); + + function ScrollableLegendView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ScrollableLegendView.type; + _this.newlineDisabled = true; + _this._currentIndex = 0; + return _this; + } + + ScrollableLegendView.prototype.init = function () { + _super.prototype.init.call(this); + + this.group.add(this._containerGroup = new Group$3()); + + this._containerGroup.add(this.getContentGroup()); + + this.group.add(this._controllerGroup = new Group$3()); + }; + /** + * @override + */ + + + ScrollableLegendView.prototype.resetInner = function () { + _super.prototype.resetInner.call(this); + + this._controllerGroup.removeAll(); + + this._containerGroup.removeClipPath(); + + this._containerGroup.__rectSize = null; + }; + /** + * @override + */ + + + ScrollableLegendView.prototype.renderInner = function (itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition) { + var self = this; // Render content items. + + _super.prototype.renderInner.call(this, itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition); + + var controllerGroup = this._controllerGroup; // FIXME: support be 'auto' adapt to size number text length, + // e.g., '3/12345' should not overlap with the control arrow button. + + var pageIconSize = legendModel.get('pageIconSize', true); + var pageIconSizeArr = isArray(pageIconSize) ? pageIconSize : [pageIconSize, pageIconSize]; + createPageButton('pagePrev', 0); + var pageTextStyleModel = legendModel.getModel('pageTextStyle'); + controllerGroup.add(new ZRText({ + name: 'pageText', + style: { + // Placeholder to calculate a proper layout. + text: 'xx/xx', + fill: pageTextStyleModel.getTextColor(), + font: pageTextStyleModel.getFont(), + verticalAlign: 'middle', + align: 'center' + }, + silent: true + })); + createPageButton('pageNext', 1); + + function createPageButton(name, iconIdx) { + var pageDataIndexName = name + 'DataIndex'; + var icon = createIcon(legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx], { + // Buttons will be created in each render, so we do not need + // to worry about avoiding using legendModel kept in scope. + onclick: bind(self._pageGo, self, pageDataIndexName, legendModel, api) + }, { + x: -pageIconSizeArr[0] / 2, + y: -pageIconSizeArr[1] / 2, + width: pageIconSizeArr[0], + height: pageIconSizeArr[1] + }); + icon.name = name; + controllerGroup.add(icon); + } + }; + /** + * @override + */ + + + ScrollableLegendView.prototype.layoutInner = function (legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition) { + var selectorGroup = this.getSelectorGroup(); + var orientIdx = legendModel.getOrient().index; + var wh = WH$1[orientIdx]; + var xy = XY$1[orientIdx]; + var hw = WH$1[1 - orientIdx]; + var yx = XY$1[1 - orientIdx]; + selector && box( // Buttons in selectorGroup always layout horizontally + 'horizontal', selectorGroup, legendModel.get('selectorItemGap', true)); + var selectorButtonGap = legendModel.get('selectorButtonGap', true); + var selectorRect = selectorGroup.getBoundingRect(); + var selectorPos = [-selectorRect.x, -selectorRect.y]; + var processMaxSize = clone(maxSize); + selector && (processMaxSize[wh] = maxSize[wh] - selectorRect[wh] - selectorButtonGap); + + var mainRect = this._layoutContentAndController(legendModel, isFirstRender, processMaxSize, orientIdx, wh, hw, yx, xy); + + if (selector) { + if (selectorPosition === 'end') { + selectorPos[orientIdx] += mainRect[wh] + selectorButtonGap; + } else { + var offset = selectorRect[wh] + selectorButtonGap; + selectorPos[orientIdx] -= offset; + mainRect[xy] -= offset; + } + + mainRect[wh] += selectorRect[wh] + selectorButtonGap; + selectorPos[1 - orientIdx] += mainRect[yx] + mainRect[hw] / 2 - selectorRect[hw] / 2; + mainRect[hw] = Math.max(mainRect[hw], selectorRect[hw]); + mainRect[yx] = Math.min(mainRect[yx], selectorRect[yx] + selectorPos[1 - orientIdx]); + selectorGroup.x = selectorPos[0]; + selectorGroup.y = selectorPos[1]; + selectorGroup.markRedraw(); + } + + return mainRect; + }; + + ScrollableLegendView.prototype._layoutContentAndController = function (legendModel, isFirstRender, maxSize, orientIdx, wh, hw, yx, xy) { + var contentGroup = this.getContentGroup(); + var containerGroup = this._containerGroup; + var controllerGroup = this._controllerGroup; // Place items in contentGroup. + + box(legendModel.get('orient'), contentGroup, legendModel.get('itemGap'), !orientIdx ? null : maxSize.width, orientIdx ? null : maxSize.height); + box( // Buttons in controller are layout always horizontally. + 'horizontal', controllerGroup, legendModel.get('pageButtonItemGap', true)); + var contentRect = contentGroup.getBoundingRect(); + var controllerRect = controllerGroup.getBoundingRect(); + var showController = this._showController = contentRect[wh] > maxSize[wh]; // In case that the inner elements of contentGroup layout do not based on [0, 0] + + var contentPos = [-contentRect.x, -contentRect.y]; // Remain contentPos when scroll animation perfroming. + // If first rendering, `contentGroup.position` is [0, 0], which + // does not make sense and may cause unexepcted animation if adopted. + + if (!isFirstRender) { + contentPos[orientIdx] = contentGroup[xy]; + } // Layout container group based on 0. + + + var containerPos = [0, 0]; + var controllerPos = [-controllerRect.x, -controllerRect.y]; + var pageButtonGap = retrieve2(legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true)); // Place containerGroup and controllerGroup and contentGroup. + + if (showController) { + var pageButtonPosition = legendModel.get('pageButtonPosition', true); // controller is on the right / bottom. + + if (pageButtonPosition === 'end') { + controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh]; + } // controller is on the left / top. + else { + containerPos[orientIdx] += controllerRect[wh] + pageButtonGap; + } + } // Always align controller to content as 'middle'. + + + controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2; + contentGroup.setPosition(contentPos); + containerGroup.setPosition(containerPos); + controllerGroup.setPosition(controllerPos); // Calculate `mainRect` and set `clipPath`. + // mainRect should not be calculated by `this.group.getBoundingRect()` + // for sake of the overflow. + + var mainRect = { + x: 0, + y: 0 + }; // Consider content may be overflow (should be clipped). + + mainRect[wh] = showController ? maxSize[wh] : contentRect[wh]; + mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]); // `containerRect[yx] + containerPos[1 - orientIdx]` is 0. + + mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]); + containerGroup.__rectSize = maxSize[wh]; + + if (showController) { + var clipShape = { + x: 0, + y: 0 + }; + clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0); + clipShape[hw] = mainRect[hw]; + containerGroup.setClipPath(new Rect({ + shape: clipShape + })); // Consider content may be larger than container, container rect + // can not be obtained from `containerGroup.getBoundingRect()`. + + containerGroup.__rectSize = clipShape[wh]; + } else { + // Do not remove or ignore controller. Keep them set as placeholders. + controllerGroup.eachChild(function (child) { + child.attr({ + invisible: true, + silent: true + }); + }); + } // Content translate animation. + + + var pageInfo = this._getPageInfo(legendModel); + + pageInfo.pageIndex != null && updateProps(contentGroup, { + x: pageInfo.contentPosition[0], + y: pageInfo.contentPosition[1] + }, // When switch from "show controller" to "not show controller", view should be + // updated immediately without animation, otherwise causes weird effect. + showController ? legendModel : null); + + this._updatePageInfoView(legendModel, pageInfo); + + return mainRect; + }; + + ScrollableLegendView.prototype._pageGo = function (to, legendModel, api) { + var scrollDataIndex = this._getPageInfo(legendModel)[to]; + + scrollDataIndex != null && api.dispatchAction({ + type: 'legendScroll', + scrollDataIndex: scrollDataIndex, + legendId: legendModel.id + }); + }; + + ScrollableLegendView.prototype._updatePageInfoView = function (legendModel, pageInfo) { + var controllerGroup = this._controllerGroup; + each(['pagePrev', 'pageNext'], function (name) { + var key = name + 'DataIndex'; + var canJump = pageInfo[key] != null; + var icon = controllerGroup.childOfName(name); + + if (icon) { + icon.setStyle('fill', canJump ? legendModel.get('pageIconColor', true) : legendModel.get('pageIconInactiveColor', true)); + icon.cursor = canJump ? 'pointer' : 'default'; + } + }); + var pageText = controllerGroup.childOfName('pageText'); + var pageFormatter = legendModel.get('pageFormatter'); + var pageIndex = pageInfo.pageIndex; + var current = pageIndex != null ? pageIndex + 1 : 0; + var total = pageInfo.pageCount; + pageText && pageFormatter && pageText.setStyle('text', isString(pageFormatter) ? pageFormatter.replace('{current}', current == null ? '' : current + '').replace('{total}', total == null ? '' : total + '') : pageFormatter({ + current: current, + total: total + })); + }; + /** + * contentPosition: Array., null when data item not found. + * pageIndex: number, null when data item not found. + * pageCount: number, always be a number, can be 0. + * pagePrevDataIndex: number, null when no previous page. + * pageNextDataIndex: number, null when no next page. + * } + */ + + + ScrollableLegendView.prototype._getPageInfo = function (legendModel) { + var scrollDataIndex = legendModel.get('scrollDataIndex', true); + var contentGroup = this.getContentGroup(); + var containerRectSize = this._containerGroup.__rectSize; + var orientIdx = legendModel.getOrient().index; + var wh = WH$1[orientIdx]; + var xy = XY$1[orientIdx]; + + var targetItemIndex = this._findTargetItemIndex(scrollDataIndex); + + var children = contentGroup.children(); + var targetItem = children[targetItemIndex]; + var itemCount = children.length; + var pCount = !itemCount ? 0 : 1; + var result = { + contentPosition: [contentGroup.x, contentGroup.y], + pageCount: pCount, + pageIndex: pCount - 1, + pagePrevDataIndex: null, + pageNextDataIndex: null + }; + + if (!targetItem) { + return result; + } + + var targetItemInfo = getItemInfo(targetItem); + result.contentPosition[orientIdx] = -targetItemInfo.s; // Strategy: + // (1) Always align based on the left/top most item. + // (2) It is user-friendly that the last item shown in the + // current window is shown at the begining of next window. + // Otherwise if half of the last item is cut by the window, + // it will have no chance to display entirely. + // (3) Consider that item size probably be different, we + // have calculate pageIndex by size rather than item index, + // and we can not get page index directly by division. + // (4) The window is to narrow to contain more than + // one item, we should make sure that the page can be fliped. + + for (var i = targetItemIndex + 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i <= itemCount; ++i) { + currItemInfo = getItemInfo(children[i]); + + if ( // Half of the last item is out of the window. + !currItemInfo && winEndItemInfo.e > winStartItemInfo.s + containerRectSize || // If the current item does not intersect with the window, the new page + // can be started at the current item or the last item. + currItemInfo && !intersect(currItemInfo, winStartItemInfo.s)) { + if (winEndItemInfo.i > winStartItemInfo.i) { + winStartItemInfo = winEndItemInfo; + } else { + // e.g., when page size is smaller than item size. + winStartItemInfo = currItemInfo; + } + + if (winStartItemInfo) { + if (result.pageNextDataIndex == null) { + result.pageNextDataIndex = winStartItemInfo.i; + } + + ++result.pageCount; + } + } + + winEndItemInfo = currItemInfo; + } + + for (var i = targetItemIndex - 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i >= -1; --i) { + currItemInfo = getItemInfo(children[i]); + + if ( // If the the end item does not intersect with the window started + // from the current item, a page can be settled. + (!currItemInfo || !intersect(winEndItemInfo, currItemInfo.s)) && // e.g., when page size is smaller than item size. + winStartItemInfo.i < winEndItemInfo.i) { + winEndItemInfo = winStartItemInfo; + + if (result.pagePrevDataIndex == null) { + result.pagePrevDataIndex = winStartItemInfo.i; + } + + ++result.pageCount; + ++result.pageIndex; + } + + winStartItemInfo = currItemInfo; + } + + return result; + + function getItemInfo(el) { + if (el) { + var itemRect = el.getBoundingRect(); + var start = itemRect[xy] + el[xy]; + return { + s: start, + e: start + itemRect[wh], + i: el.__legendDataIndex + }; + } + } + + function intersect(itemInfo, winStart) { + return itemInfo.e >= winStart && itemInfo.s <= winStart + containerRectSize; + } + }; + + ScrollableLegendView.prototype._findTargetItemIndex = function (targetDataIndex) { + if (!this._showController) { + return 0; + } + + var index; + var contentGroup = this.getContentGroup(); + var defaultIndex; + contentGroup.eachChild(function (child, idx) { + var legendDataIdx = child.__legendDataIndex; // FIXME + // If the given targetDataIndex (from model) is illegal, + // we use defaultIndex. But the index on the legend model and + // action payload is still illegal. That case will not be + // changed until some scenario requires. + + if (defaultIndex == null && legendDataIdx != null) { + defaultIndex = idx; + } + + if (legendDataIdx === targetDataIndex) { + index = idx; + } + }); + return index != null ? index : defaultIndex; + }; + + ScrollableLegendView.type = 'legend.scroll'; + return ScrollableLegendView; + }(LegendView); + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + function installScrollableLegendAction(registers) { + /** + * @event legendScroll + * @type {Object} + * @property {string} type 'legendScroll' + * @property {string} scrollDataIndex + */ + registers.registerAction('legendScroll', 'legendscroll', function (payload, ecModel) { + var scrollDataIndex = payload.scrollDataIndex; + scrollDataIndex != null && ecModel.eachComponent({ + mainType: 'legend', + subType: 'scroll', + query: payload + }, function (legendModel) { + legendModel.setScrollDataIndex(scrollDataIndex); + }); + }); + } + + function install$I(registers) { + use(install$H); + registers.registerComponentModel(ScrollableLegendModel); + registers.registerComponentView(ScrollableLegendView); + installScrollableLegendAction(registers); + } + + function install$J(registers) { + use(install$H); + use(install$I); + } + + var InsideZoomModel = + /** @class */ + function (_super) { + __extends(InsideZoomModel, _super); + + function InsideZoomModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = InsideZoomModel.type; + return _this; + } + + InsideZoomModel.type = 'dataZoom.inside'; + InsideZoomModel.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, { + disabled: false, + zoomLock: false, + zoomOnMouseWheel: true, + moveOnMouseMove: true, + moveOnMouseWheel: false, + preventDefaultMouseMove: true + }); + return InsideZoomModel; + }(DataZoomModel); + + var inner$k = makeInner(); + function setViewInfoToCoordSysRecord(api, dataZoomModel, getRange) { + inner$k(api).coordSysRecordMap.each(function (coordSysRecord) { + var dzInfo = coordSysRecord.dataZoomInfoMap.get(dataZoomModel.uid); + + if (dzInfo) { + dzInfo.getRange = getRange; + } + }); + } + function disposeCoordSysRecordIfNeeded(api, dataZoomModel) { + var coordSysRecordMap = inner$k(api).coordSysRecordMap; + var coordSysKeyArr = coordSysRecordMap.keys(); + + for (var i = 0; i < coordSysKeyArr.length; i++) { + var coordSysKey = coordSysKeyArr[i]; + var coordSysRecord = coordSysRecordMap.get(coordSysKey); + var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap; + + if (dataZoomInfoMap) { + var dzUid = dataZoomModel.uid; + var dzInfo = dataZoomInfoMap.get(dzUid); + + if (dzInfo) { + dataZoomInfoMap.removeKey(dzUid); + + if (!dataZoomInfoMap.keys().length) { + disposeCoordSysRecord(coordSysRecordMap, coordSysRecord); + } + } + } + } + } + + function disposeCoordSysRecord(coordSysRecordMap, coordSysRecord) { + if (coordSysRecord) { + coordSysRecordMap.removeKey(coordSysRecord.model.uid); + var controller = coordSysRecord.controller; + controller && controller.dispose(); + } + } + + function createCoordSysRecord(api, coordSysModel) { + // These init props will never change after record created. + var coordSysRecord = { + model: coordSysModel, + containsPoint: curry(containsPoint, coordSysModel), + dispatchAction: curry(dispatchAction$1, api), + dataZoomInfoMap: null, + controller: null + }; // Must not do anything depends on coordSysRecord outside the event handler here, + // because coordSysRecord not completed yet. + + var controller = coordSysRecord.controller = new RoamController(api.getZr()); + each(['pan', 'zoom', 'scrollMove'], function (eventName) { + controller.on(eventName, function (event) { + var batch = []; + coordSysRecord.dataZoomInfoMap.each(function (dzInfo) { + // Check whether the behaviors (zoomOnMouseWheel, moveOnMouseMove, + // moveOnMouseWheel, ...) enabled. + if (!event.isAvailableBehavior(dzInfo.model.option)) { + return; + } + + var method = (dzInfo.getRange || {})[eventName]; + var range = method && method(dzInfo.dzReferCoordSysInfo, coordSysRecord.model.mainType, coordSysRecord.controller, event); + !dzInfo.model.get('disabled', true) && range && batch.push({ + dataZoomId: dzInfo.model.id, + start: range[0], + end: range[1] + }); + }); + batch.length && coordSysRecord.dispatchAction(batch); + }); + }); + return coordSysRecord; + } + /** + * This action will be throttled. + */ + + + function dispatchAction$1(api, batch) { + api.dispatchAction({ + type: 'dataZoom', + animation: { + easing: 'cubicOut', + duration: 100 + }, + batch: batch + }); + } + + function containsPoint(coordSysModel, e, x, y) { + return coordSysModel.coordinateSystem.containPoint([x, y]); + } + /** + * Merge roamController settings when multiple dataZooms share one roamController. + */ + + + function mergeControllerParams(dataZoomInfoMap) { + var controlType; // DO NOT use reserved word (true, false, undefined) as key literally. Even if encapsulated + // as string, it is probably revert to reserved word by compress tool. See #7411. + + var prefix = 'type_'; + var typePriority = { + 'type_true': 2, + 'type_move': 1, + 'type_false': 0, + 'type_undefined': -1 + }; + var preventDefaultMouseMove = true; + dataZoomInfoMap.each(function (dataZoomInfo) { + var dataZoomModel = dataZoomInfo.model; + var oneType = dataZoomModel.get('disabled', true) ? false : dataZoomModel.get('zoomLock', true) ? 'move' : true; + + if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) { + controlType = oneType; + } // Prevent default move event by default. If one false, do not prevent. Otherwise + // users may be confused why it does not work when multiple insideZooms exist. + + + preventDefaultMouseMove = preventDefaultMouseMove && dataZoomModel.get('preventDefaultMouseMove', true); + }); + return { + controlType: controlType, + opt: { + // RoamController will enable all of these functionalities, + // and the final behavior is determined by its event listener + // provided by each inside zoom. + zoomOnMouseWheel: true, + moveOnMouseMove: true, + moveOnMouseWheel: true, + preventDefaultMouseMove: !!preventDefaultMouseMove + } + }; + } + + function installDataZoomRoamProcessor(registers) { + registers.registerProcessor(registers.PRIORITY.PROCESSOR.FILTER, function (ecModel, api) { + var apiInner = inner$k(api); + var coordSysRecordMap = apiInner.coordSysRecordMap || (apiInner.coordSysRecordMap = createHashMap()); + coordSysRecordMap.each(function (coordSysRecord) { + // `coordSysRecordMap` always exists (becuase it hold the `roam controller`, which should + // better not re-create each time), but clear `dataZoomInfoMap` each round of the workflow. + coordSysRecord.dataZoomInfoMap = null; + }); + ecModel.eachComponent({ + mainType: 'dataZoom', + subType: 'inside' + }, function (dataZoomModel) { + var dzReferCoordSysWrap = collectReferCoordSysModelInfo(dataZoomModel); + each(dzReferCoordSysWrap.infoList, function (dzCoordSysInfo) { + var coordSysUid = dzCoordSysInfo.model.uid; + var coordSysRecord = coordSysRecordMap.get(coordSysUid) || coordSysRecordMap.set(coordSysUid, createCoordSysRecord(api, dzCoordSysInfo.model)); + var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap || (coordSysRecord.dataZoomInfoMap = createHashMap()); // Notice these props might be changed each time for a single dataZoomModel. + + dataZoomInfoMap.set(dataZoomModel.uid, { + dzReferCoordSysInfo: dzCoordSysInfo, + model: dataZoomModel, + getRange: null + }); + }); + }); // (1) Merge dataZoom settings for each coord sys and set to the roam controller. + // (2) Clear coord sys if not refered by any dataZoom. + + coordSysRecordMap.each(function (coordSysRecord) { + var controller = coordSysRecord.controller; + var firstDzInfo; + var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap; + + if (dataZoomInfoMap) { + var firstDzKey = dataZoomInfoMap.keys()[0]; + + if (firstDzKey != null) { + firstDzInfo = dataZoomInfoMap.get(firstDzKey); + } + } + + if (!firstDzInfo) { + disposeCoordSysRecord(coordSysRecordMap, coordSysRecord); + return; + } + + var controllerParams = mergeControllerParams(dataZoomInfoMap); + controller.enable(controllerParams.controlType, controllerParams.opt); + controller.setPointerChecker(coordSysRecord.containsPoint); + createOrUpdate(coordSysRecord, 'dispatchAction', firstDzInfo.model.get('throttle', true), 'fixRate'); + }); + }); + } + + var InsideZoomView = + /** @class */ + function (_super) { + __extends(InsideZoomView, _super); + + function InsideZoomView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = 'dataZoom.inside'; + return _this; + } + + InsideZoomView.prototype.render = function (dataZoomModel, ecModel, api) { + _super.prototype.render.apply(this, arguments); + + if (dataZoomModel.noTarget()) { + this._clear(); + + return; + } // Hence the `throttle` util ensures to preserve command order, + // here simply updating range all the time will not cause missing + // any of the the roam change. + + + this.range = dataZoomModel.getPercentRange(); // Reset controllers. + + setViewInfoToCoordSysRecord(api, dataZoomModel, { + pan: bind(getRangeHandlers.pan, this), + zoom: bind(getRangeHandlers.zoom, this), + scrollMove: bind(getRangeHandlers.scrollMove, this) + }); + }; + + InsideZoomView.prototype.dispose = function () { + this._clear(); + + _super.prototype.dispose.apply(this, arguments); + }; + + InsideZoomView.prototype._clear = function () { + disposeCoordSysRecordIfNeeded(this.api, this.dataZoomModel); + this.range = null; + }; + + InsideZoomView.type = 'dataZoom.inside'; + return InsideZoomView; + }(DataZoomView); + + var getRangeHandlers = { + zoom: function (coordSysInfo, coordSysMainType, controller, e) { + var lastRange = this.range; + var range = lastRange.slice(); // Calculate transform by the first axis. + + var axisModel = coordSysInfo.axisModels[0]; + + if (!axisModel) { + return; + } + + var directionInfo = getDirectionInfo[coordSysMainType](null, [e.originX, e.originY], axisModel, controller, coordSysInfo); + var percentPoint = (directionInfo.signal > 0 ? directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel : directionInfo.pixel - directionInfo.pixelStart) / directionInfo.pixelLength * (range[1] - range[0]) + range[0]; + var scale = Math.max(1 / e.scale, 0); + range[0] = (range[0] - percentPoint) * scale + percentPoint; + range[1] = (range[1] - percentPoint) * scale + percentPoint; // Restrict range. + + var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); + sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan); + this.range = range; + + if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) { + return range; + } + }, + pan: makeMover(function (range, axisModel, coordSysInfo, coordSysMainType, controller, e) { + var directionInfo = getDirectionInfo[coordSysMainType]([e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordSysInfo); + return directionInfo.signal * (range[1] - range[0]) * directionInfo.pixel / directionInfo.pixelLength; + }), + scrollMove: makeMover(function (range, axisModel, coordSysInfo, coordSysMainType, controller, e) { + var directionInfo = getDirectionInfo[coordSysMainType]([0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordSysInfo); + return directionInfo.signal * (range[1] - range[0]) * e.scrollDelta; + }) + }; + + function makeMover(getPercentDelta) { + return function (coordSysInfo, coordSysMainType, controller, e) { + var lastRange = this.range; + var range = lastRange.slice(); // Calculate transform by the first axis. + + var axisModel = coordSysInfo.axisModels[0]; + + if (!axisModel) { + return; + } + + var percentDelta = getPercentDelta(range, axisModel, coordSysInfo, coordSysMainType, controller, e); + sliderMove(percentDelta, range, [0, 100], 'all'); + this.range = range; + + if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) { + return range; + } + }; + } + + var getDirectionInfo = { + grid: function (oldPoint, newPoint, axisModel, controller, coordSysInfo) { + var axis = axisModel.axis; + var ret = {}; + var rect = coordSysInfo.model.coordinateSystem.getRect(); + oldPoint = oldPoint || [0, 0]; + + if (axis.dim === 'x') { + ret.pixel = newPoint[0] - oldPoint[0]; + ret.pixelLength = rect.width; + ret.pixelStart = rect.x; + ret.signal = axis.inverse ? 1 : -1; + } else { + // axis.dim === 'y' + ret.pixel = newPoint[1] - oldPoint[1]; + ret.pixelLength = rect.height; + ret.pixelStart = rect.y; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + }, + polar: function (oldPoint, newPoint, axisModel, controller, coordSysInfo) { + var axis = axisModel.axis; + var ret = {}; + var polar = coordSysInfo.model.coordinateSystem; + var radiusExtent = polar.getRadiusAxis().getExtent(); + var angleExtent = polar.getAngleAxis().getExtent(); + oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0]; + newPoint = polar.pointToCoord(newPoint); + + if (axisModel.mainType === 'radiusAxis') { + ret.pixel = newPoint[0] - oldPoint[0]; // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]); + // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]); + + ret.pixelLength = radiusExtent[1] - radiusExtent[0]; + ret.pixelStart = radiusExtent[0]; + ret.signal = axis.inverse ? 1 : -1; + } else { + // 'angleAxis' + ret.pixel = newPoint[1] - oldPoint[1]; // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]); + // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]); + + ret.pixelLength = angleExtent[1] - angleExtent[0]; + ret.pixelStart = angleExtent[0]; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + }, + singleAxis: function (oldPoint, newPoint, axisModel, controller, coordSysInfo) { + var axis = axisModel.axis; + var rect = coordSysInfo.model.coordinateSystem.getRect(); + var ret = {}; + oldPoint = oldPoint || [0, 0]; + + if (axis.orient === 'horizontal') { + ret.pixel = newPoint[0] - oldPoint[0]; + ret.pixelLength = rect.width; + ret.pixelStart = rect.x; + ret.signal = axis.inverse ? 1 : -1; + } else { + // 'vertical' + ret.pixel = newPoint[1] - oldPoint[1]; + ret.pixelLength = rect.height; + ret.pixelStart = rect.y; + ret.signal = axis.inverse ? -1 : 1; + } + + return ret; + } + }; + + function install$K(registers) { + installCommon(registers); + registers.registerComponentModel(InsideZoomModel); + registers.registerComponentView(InsideZoomView); + installDataZoomRoamProcessor(registers); + } + + var SliderZoomModel = + /** @class */ + function (_super) { + __extends(SliderZoomModel, _super); + + function SliderZoomModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SliderZoomModel.type; + return _this; + } + + SliderZoomModel.type = 'dataZoom.slider'; + SliderZoomModel.layoutMode = 'box'; + SliderZoomModel.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, { + show: true, + // deault value can only be drived in view stage. + right: 'ph', + top: 'ph', + width: 'ph', + height: 'ph', + left: null, + bottom: null, + borderColor: '#d2dbee', + borderRadius: 3, + backgroundColor: 'rgba(47,69,84,0)', + // dataBackgroundColor: '#ddd', + dataBackground: { + lineStyle: { + color: '#d2dbee', + width: 0.5 + }, + areaStyle: { + color: '#d2dbee', + opacity: 0.2 + } + }, + selectedDataBackground: { + lineStyle: { + color: '#8fb0f7', + width: 0.5 + }, + areaStyle: { + color: '#8fb0f7', + opacity: 0.2 + } + }, + // Color of selected window. + fillerColor: 'rgba(135,175,274,0.2)', + handleIcon: 'path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z', + // Percent of the slider height + handleSize: '100%', + handleStyle: { + color: '#fff', + borderColor: '#ACB8D1' + }, + moveHandleSize: 7, + moveHandleIcon: 'path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z', + moveHandleStyle: { + color: '#D2DBEE', + opacity: 0.7 + }, + showDetail: true, + showDataShadow: 'auto', + realtime: true, + zoomLock: false, + textStyle: { + color: '#6E7079' + }, + brushSelect: true, + brushStyle: { + color: 'rgba(135,175,274,0.15)' + }, + emphasis: { + handleStyle: { + borderColor: '#8FB0F7' + }, + moveHandleStyle: { + color: '#8FB0F7' + } + } + }); + return SliderZoomModel; + }(DataZoomModel); + + var Rect$2 = Rect; // Constants + + var DEFAULT_LOCATION_EDGE_GAP = 7; + var DEFAULT_FRAME_BORDER_WIDTH = 1; + var DEFAULT_FILLER_SIZE = 30; + var DEFAULT_MOVE_HANDLE_SIZE = 7; + var HORIZONTAL = 'horizontal'; + var VERTICAL = 'vertical'; + var LABEL_GAP = 5; + var SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter']; + var REALTIME_ANIMATION_CONFIG = { + easing: 'cubicOut', + duration: 100, + delay: 0 + }; + + var SliderZoomView = + /** @class */ + function (_super) { + __extends(SliderZoomView, _super); + + function SliderZoomView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = SliderZoomView.type; + _this._displayables = {}; + return _this; + } + + SliderZoomView.prototype.init = function (ecModel, api) { + this.api = api; // A unique handler for each dataZoom component + + this._onBrush = bind(this._onBrush, this); + this._onBrushEnd = bind(this._onBrushEnd, this); + }; + + SliderZoomView.prototype.render = function (dataZoomModel, ecModel, api, payload) { + _super.prototype.render.apply(this, arguments); + + createOrUpdate(this, '_dispatchZoomAction', dataZoomModel.get('throttle'), 'fixRate'); + this._orient = dataZoomModel.getOrient(); + + if (dataZoomModel.get('show') === false) { + this.group.removeAll(); + return; + } + + if (dataZoomModel.noTarget()) { + this._clear(); + + this.group.removeAll(); + return; + } // Notice: this._resetInterval() should not be executed when payload.type + // is 'dataZoom', origin this._range should be maintained, otherwise 'pan' + // or 'zoom' info will be missed because of 'throttle' of this.dispatchAction, + + + if (!payload || payload.type !== 'dataZoom' || payload.from !== this.uid) { + this._buildView(); + } + + this._updateView(); + }; + + SliderZoomView.prototype.dispose = function () { + this._clear(); + + _super.prototype.dispose.apply(this, arguments); + }; + + SliderZoomView.prototype._clear = function () { + clear(this, '_dispatchZoomAction'); + var zr = this.api.getZr(); + zr.off('mousemove', this._onBrush); + zr.off('mouseup', this._onBrushEnd); + }; + + SliderZoomView.prototype._buildView = function () { + var thisGroup = this.group; + thisGroup.removeAll(); + this._brushing = false; + this._displayables.brushRect = null; + + this._resetLocation(); + + this._resetInterval(); + + var barGroup = this._displayables.sliderGroup = new Group(); + + this._renderBackground(); + + this._renderHandle(); + + this._renderDataShadow(); + + thisGroup.add(barGroup); + + this._positionGroup(); + }; + + SliderZoomView.prototype._resetLocation = function () { + var dataZoomModel = this.dataZoomModel; + var api = this.api; + var showMoveHandle = dataZoomModel.get('brushSelect'); + var moveHandleSize = showMoveHandle ? DEFAULT_MOVE_HANDLE_SIZE : 0; // If some of x/y/width/height are not specified, + // auto-adapt according to target grid. + + var coordRect = this._findCoordRect(); + + var ecSize = { + width: api.getWidth(), + height: api.getHeight() + }; // Default align by coordinate system rect. + + var positionInfo = this._orient === HORIZONTAL ? { + // Why using 'right', because right should be used in vertical, + // and it is better to be consistent for dealing with position param merge. + right: ecSize.width - coordRect.x - coordRect.width, + top: ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP - moveHandleSize, + width: coordRect.width, + height: DEFAULT_FILLER_SIZE + } : { + right: DEFAULT_LOCATION_EDGE_GAP, + top: coordRect.y, + width: DEFAULT_FILLER_SIZE, + height: coordRect.height + }; // Do not write back to option and replace value 'ph', because + // the 'ph' value should be recalculated when resize. + + var layoutParams = getLayoutParams(dataZoomModel.option); // Replace the placeholder value. + + each(['right', 'top', 'width', 'height'], function (name) { + if (layoutParams[name] === 'ph') { + layoutParams[name] = positionInfo[name]; + } + }); + var layoutRect = getLayoutRect(layoutParams, ecSize); + this._location = { + x: layoutRect.x, + y: layoutRect.y + }; + this._size = [layoutRect.width, layoutRect.height]; + this._orient === VERTICAL && this._size.reverse(); + }; + + SliderZoomView.prototype._positionGroup = function () { + var thisGroup = this.group; + var location = this._location; + var orient = this._orient; // Just use the first axis to determine mapping. + + var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel(); + var inverse = targetAxisModel && targetAxisModel.get('inverse'); + var sliderGroup = this._displayables.sliderGroup; + var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse; // Transform barGroup. + + sliderGroup.attr(orient === HORIZONTAL && !inverse ? { + scaleY: otherAxisInverse ? 1 : -1, + scaleX: 1 + } : orient === HORIZONTAL && inverse ? { + scaleY: otherAxisInverse ? 1 : -1, + scaleX: -1 + } : orient === VERTICAL && !inverse ? { + scaleY: otherAxisInverse ? -1 : 1, + scaleX: 1, + rotation: Math.PI / 2 + } // Dont use Math.PI, considering shadow direction. + : { + scaleY: otherAxisInverse ? -1 : 1, + scaleX: -1, + rotation: Math.PI / 2 + }); // Position barGroup + + var rect = thisGroup.getBoundingRect([sliderGroup]); + thisGroup.x = location.x - rect.x; + thisGroup.y = location.y - rect.y; + thisGroup.markRedraw(); + }; + + SliderZoomView.prototype._getViewExtent = function () { + return [0, this._size[0]]; + }; + + SliderZoomView.prototype._renderBackground = function () { + var dataZoomModel = this.dataZoomModel; + var size = this._size; + var barGroup = this._displayables.sliderGroup; + var brushSelect = dataZoomModel.get('brushSelect'); + barGroup.add(new Rect$2({ + silent: true, + shape: { + x: 0, + y: 0, + width: size[0], + height: size[1] + }, + style: { + fill: dataZoomModel.get('backgroundColor') + }, + z2: -40 + })); // Click panel, over shadow, below handles. + + var clickPanel = new Rect$2({ + shape: { + x: 0, + y: 0, + width: size[0], + height: size[1] + }, + style: { + fill: 'transparent' + }, + z2: 0, + onclick: bind(this._onClickPanel, this) + }); + var zr = this.api.getZr(); + + if (brushSelect) { + clickPanel.on('mousedown', this._onBrushStart, this); + clickPanel.cursor = 'crosshair'; + zr.on('mousemove', this._onBrush); + zr.on('mouseup', this._onBrushEnd); + } else { + zr.off('mousemove', this._onBrush); + zr.off('mouseup', this._onBrushEnd); + } + + barGroup.add(clickPanel); + }; + + SliderZoomView.prototype._renderDataShadow = function () { + var info = this._dataShadowInfo = this._prepareDataShadowInfo(); + + this._displayables.dataShadowSegs = []; + + if (!info) { + return; + } + + var size = this._size; + var seriesModel = info.series; + var data = seriesModel.getRawData(); + var otherDim = seriesModel.getShadowDim ? seriesModel.getShadowDim() // @see candlestick + : info.otherDim; + + if (otherDim == null) { + return; + } + + var otherDataExtent = data.getDataExtent(otherDim); // Nice extent. + + var otherOffset = (otherDataExtent[1] - otherDataExtent[0]) * 0.3; + otherDataExtent = [otherDataExtent[0] - otherOffset, otherDataExtent[1] + otherOffset]; + var otherShadowExtent = [0, size[1]]; + var thisShadowExtent = [0, size[0]]; + var areaPoints = [[size[0], 0], [0, 0]]; + var linePoints = []; + var step = thisShadowExtent[1] / (data.count() - 1); + var thisCoord = 0; // Optimize for large data shadow + + var stride = Math.round(data.count() / size[0]); + var lastIsEmpty; + data.each([otherDim], function (value, index) { + if (stride > 0 && index % stride) { + thisCoord += step; + return; + } // FIXME + // Should consider axis.min/axis.max when drawing dataShadow. + // FIXME + // 应该使用统一的空判断?还是在list里进行空判断? + + + var isEmpty = value == null || isNaN(value) || value === ''; // See #4235. + + var otherCoord = isEmpty ? 0 : linearMap(value, otherDataExtent, otherShadowExtent, true); // Attempt to draw data shadow precisely when there are empty value. + + if (isEmpty && !lastIsEmpty && index) { + areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]); + linePoints.push([linePoints[linePoints.length - 1][0], 0]); + } else if (!isEmpty && lastIsEmpty) { + areaPoints.push([thisCoord, 0]); + linePoints.push([thisCoord, 0]); + } + + areaPoints.push([thisCoord, otherCoord]); + linePoints.push([thisCoord, otherCoord]); + thisCoord += step; + lastIsEmpty = isEmpty; + }); + var dataZoomModel = this.dataZoomModel; + + function createDataShadowGroup(isSelectedArea) { + var model = dataZoomModel.getModel(isSelectedArea ? 'selectedDataBackground' : 'dataBackground'); + var group = new Group(); + var polygon = new Polygon({ + shape: { + points: areaPoints + }, + segmentIgnoreThreshold: 1, + style: model.getModel('areaStyle').getAreaStyle(), + silent: true, + z2: -20 + }); + var polyline = new Polyline({ + shape: { + points: linePoints + }, + segmentIgnoreThreshold: 1, + style: model.getModel('lineStyle').getLineStyle(), + silent: true, + z2: -19 + }); + group.add(polygon); + group.add(polyline); + return group; + } // let dataBackgroundModel = dataZoomModel.getModel('dataBackground'); + + + for (var i = 0; i < 3; i++) { + var group = createDataShadowGroup(i === 1); + + this._displayables.sliderGroup.add(group); + + this._displayables.dataShadowSegs.push(group); + } + }; + + SliderZoomView.prototype._prepareDataShadowInfo = function () { + var dataZoomModel = this.dataZoomModel; + var showDataShadow = dataZoomModel.get('showDataShadow'); + + if (showDataShadow === false) { + return; + } // Find a representative series. + + + var result; + var ecModel = this.ecModel; + dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) { + var seriesModels = dataZoomModel.getAxisProxy(axisDim, axisIndex).getTargetSeriesModels(); + each(seriesModels, function (seriesModel) { + if (result) { + return; + } + + if (showDataShadow !== true && indexOf(SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type')) < 0) { + return; + } + + var thisAxis = ecModel.getComponent(getAxisMainType(axisDim), axisIndex).axis; + var otherDim = getOtherDim(axisDim); + var otherAxisInverse; + var coordSys = seriesModel.coordinateSystem; + + if (otherDim != null && coordSys.getOtherAxis) { + otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse; + } + + otherDim = seriesModel.getData().mapDimension(otherDim); + result = { + thisAxis: thisAxis, + series: seriesModel, + thisDim: axisDim, + otherDim: otherDim, + otherAxisInverse: otherAxisInverse + }; + }, this); + }, this); + return result; + }; + + SliderZoomView.prototype._renderHandle = function () { + var thisGroup = this.group; + var displayables = this._displayables; + var handles = displayables.handles = [null, null]; + var handleLabels = displayables.handleLabels = [null, null]; + var sliderGroup = this._displayables.sliderGroup; + var size = this._size; + var dataZoomModel = this.dataZoomModel; + var api = this.api; + var borderRadius = dataZoomModel.get('borderRadius') || 0; + var brushSelect = dataZoomModel.get('brushSelect'); + var filler = displayables.filler = new Rect$2({ + silent: brushSelect, + style: { + fill: dataZoomModel.get('fillerColor') + }, + textConfig: { + position: 'inside' + } + }); + sliderGroup.add(filler); // Frame border. + + sliderGroup.add(new Rect$2({ + silent: true, + subPixelOptimize: true, + shape: { + x: 0, + y: 0, + width: size[0], + height: size[1], + r: borderRadius + }, + style: { + stroke: dataZoomModel.get('dataBackgroundColor') // deprecated option + || dataZoomModel.get('borderColor'), + lineWidth: DEFAULT_FRAME_BORDER_WIDTH, + fill: 'rgba(0,0,0,0)' + } + })); // Left and right handle to resize + + each([0, 1], function (handleIndex) { + var iconStr = dataZoomModel.get('handleIcon'); + + if (!symbolBuildProxies[iconStr] && iconStr.indexOf('path://') < 0 && iconStr.indexOf('image://') < 0) { + // Compatitable with the old icon parsers. Which can use a path string without path:// + iconStr = 'path://' + iconStr; + + if ("development" !== 'production') { + deprecateLog('handleIcon now needs \'path://\' prefix when using a path string'); + } + } + + var path = createSymbol(iconStr, -1, 0, 2, 2, null, true); + path.attr({ + cursor: getCursor(this._orient), + draggable: true, + drift: bind(this._onDragMove, this, handleIndex), + ondragend: bind(this._onDragEnd, this), + onmouseover: bind(this._showDataInfo, this, true), + onmouseout: bind(this._showDataInfo, this, false), + z2: 5 + }); + var bRect = path.getBoundingRect(); + var handleSize = dataZoomModel.get('handleSize'); + this._handleHeight = parsePercent$1(handleSize, this._size[1]); + this._handleWidth = bRect.width / bRect.height * this._handleHeight; + path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle()); + path.style.strokeNoScale = true; + path.rectHover = true; + path.ensureState('emphasis').style = dataZoomModel.getModel(['emphasis', 'handleStyle']).getItemStyle(); + enableHoverEmphasis(path); + var handleColor = dataZoomModel.get('handleColor'); // deprecated option + // Compatitable with previous version + + if (handleColor != null) { + path.style.fill = handleColor; + } + + sliderGroup.add(handles[handleIndex] = path); + var textStyleModel = dataZoomModel.getModel('textStyle'); + thisGroup.add(handleLabels[handleIndex] = new ZRText({ + silent: true, + invisible: true, + style: createTextStyle(textStyleModel, { + x: 0, + y: 0, + text: '', + verticalAlign: 'middle', + align: 'center', + fill: textStyleModel.getTextColor(), + font: textStyleModel.getFont() + }), + z2: 10 + })); + }, this); // Handle to move. Only visible when brushSelect is set true. + + var actualMoveZone = filler; + + if (brushSelect) { + var moveHandleHeight = parsePercent$1(dataZoomModel.get('moveHandleSize'), size[1]); + var moveHandle_1 = displayables.moveHandle = new Rect({ + style: dataZoomModel.getModel('moveHandleStyle').getItemStyle(), + silent: true, + shape: { + r: [0, 0, 2, 2], + y: size[1] - 0.5, + height: moveHandleHeight + } + }); + var iconSize = moveHandleHeight * 0.8; + var moveHandleIcon = displayables.moveHandleIcon = createSymbol(dataZoomModel.get('moveHandleIcon'), -iconSize / 2, -iconSize / 2, iconSize, iconSize, '#fff', true); + moveHandleIcon.silent = true; + moveHandleIcon.y = size[1] + moveHandleHeight / 2 - 0.5; + moveHandle_1.ensureState('emphasis').style = dataZoomModel.getModel(['emphasis', 'moveHandleStyle']).getItemStyle(); + var moveZoneExpandSize = Math.min(size[1] / 2, Math.max(moveHandleHeight, 10)); + actualMoveZone = displayables.moveZone = new Rect({ + invisible: true, + shape: { + y: size[1] - moveZoneExpandSize, + height: moveHandleHeight + moveZoneExpandSize + } + }); + actualMoveZone.on('mouseover', function () { + api.enterEmphasis(moveHandle_1); + }).on('mouseout', function () { + api.leaveEmphasis(moveHandle_1); + }); + sliderGroup.add(moveHandle_1); + sliderGroup.add(moveHandleIcon); + sliderGroup.add(actualMoveZone); + } + + actualMoveZone.attr({ + draggable: true, + cursor: getCursor(this._orient), + drift: bind(this._onDragMove, this, 'all'), + ondragstart: bind(this._showDataInfo, this, true), + ondragend: bind(this._onDragEnd, this), + onmouseover: bind(this._showDataInfo, this, true), + onmouseout: bind(this._showDataInfo, this, false) + }); + }; + + SliderZoomView.prototype._resetInterval = function () { + var range = this._range = this.dataZoomModel.getPercentRange(); + + var viewExtent = this._getViewExtent(); + + this._handleEnds = [linearMap(range[0], [0, 100], viewExtent, true), linearMap(range[1], [0, 100], viewExtent, true)]; + }; + + SliderZoomView.prototype._updateInterval = function (handleIndex, delta) { + var dataZoomModel = this.dataZoomModel; + var handleEnds = this._handleEnds; + + var viewExtend = this._getViewExtent(); + + var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan(); + var percentExtent = [0, 100]; + sliderMove(delta, handleEnds, viewExtend, dataZoomModel.get('zoomLock') ? 'all' : handleIndex, minMaxSpan.minSpan != null ? linearMap(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, minMaxSpan.maxSpan != null ? linearMap(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null); + var lastRange = this._range; + var range = this._range = asc([linearMap(handleEnds[0], viewExtend, percentExtent, true), linearMap(handleEnds[1], viewExtend, percentExtent, true)]); + return !lastRange || lastRange[0] !== range[0] || lastRange[1] !== range[1]; + }; + + SliderZoomView.prototype._updateView = function (nonRealtime) { + var displaybles = this._displayables; + var handleEnds = this._handleEnds; + var handleInterval = asc(handleEnds.slice()); + var size = this._size; + each([0, 1], function (handleIndex) { + // Handles + var handle = displaybles.handles[handleIndex]; + var handleHeight = this._handleHeight; + handle.attr({ + scaleX: handleHeight / 2, + scaleY: handleHeight / 2, + // This is a trick, by adding an extra tiny offset to let the default handle's end point align to the drag window. + // NOTE: It may affect some custom shapes a bit. But we prefer to have better result by default. + x: handleEnds[handleIndex] + (handleIndex ? -1 : 1), + y: size[1] / 2 - handleHeight / 2 + }); + }, this); // Filler + + displaybles.filler.setShape({ + x: handleInterval[0], + y: 0, + width: handleInterval[1] - handleInterval[0], + height: size[1] + }); + var viewExtent = { + x: handleInterval[0], + width: handleInterval[1] - handleInterval[0] + }; // Move handle + + if (displaybles.moveHandle) { + displaybles.moveHandle.setShape(viewExtent); + displaybles.moveZone.setShape(viewExtent); // Force update path on the invisible object + + displaybles.moveZone.getBoundingRect(); + displaybles.moveHandleIcon && displaybles.moveHandleIcon.attr('x', viewExtent.x + viewExtent.width / 2); + } // update clip path of shadow. + + + var dataShadowSegs = displaybles.dataShadowSegs; + var segIntervals = [0, handleInterval[0], handleInterval[1], size[0]]; + + for (var i = 0; i < dataShadowSegs.length; i++) { + var segGroup = dataShadowSegs[i]; + var clipPath = segGroup.getClipPath(); + + if (!clipPath) { + clipPath = new Rect(); + segGroup.setClipPath(clipPath); + } + + clipPath.setShape({ + x: segIntervals[i], + y: 0, + width: segIntervals[i + 1] - segIntervals[i], + height: size[1] + }); + } + + this._updateDataInfo(nonRealtime); + }; + + SliderZoomView.prototype._updateDataInfo = function (nonRealtime) { + var dataZoomModel = this.dataZoomModel; + var displaybles = this._displayables; + var handleLabels = displaybles.handleLabels; + var orient = this._orient; + var labelTexts = ['', '']; // FIXME + // date型,支持formatter,autoformatter(ec2 date.getAutoFormatter) + + if (dataZoomModel.get('showDetail')) { + var axisProxy = dataZoomModel.findRepresentativeAxisProxy(); + + if (axisProxy) { + var axis = axisProxy.getAxisModel().axis; + var range = this._range; + var dataInterval = nonRealtime // See #4434, data and axis are not processed and reset yet in non-realtime mode. + ? axisProxy.calculateDataWindow({ + start: range[0], + end: range[1] + }).valueWindow : axisProxy.getDataValueWindow(); + labelTexts = [this._formatLabel(dataInterval[0], axis), this._formatLabel(dataInterval[1], axis)]; + } + } + + var orderedHandleEnds = asc(this._handleEnds.slice()); + setLabel.call(this, 0); + setLabel.call(this, 1); + + function setLabel(handleIndex) { + // Label + // Text should not transform by barGroup. + // Ignore handlers transform + var barTransform = getTransform(displaybles.handles[handleIndex].parent, this.group); + var direction = transformDirection(handleIndex === 0 ? 'right' : 'left', barTransform); + var offset = this._handleWidth / 2 + LABEL_GAP; + var textPoint = applyTransform$1([orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset), this._size[1] / 2], barTransform); + handleLabels[handleIndex].setStyle({ + x: textPoint[0], + y: textPoint[1], + verticalAlign: orient === HORIZONTAL ? 'middle' : direction, + align: orient === HORIZONTAL ? direction : 'center', + text: labelTexts[handleIndex] + }); + } + }; + + SliderZoomView.prototype._formatLabel = function (value, axis) { + var dataZoomModel = this.dataZoomModel; + var labelFormatter = dataZoomModel.get('labelFormatter'); + var labelPrecision = dataZoomModel.get('labelPrecision'); + + if (labelPrecision == null || labelPrecision === 'auto') { + labelPrecision = axis.getPixelPrecision(); + } + + var valueStr = value == null || isNaN(value) ? '' // FIXME Glue code + : axis.type === 'category' || axis.type === 'time' ? axis.scale.getLabel({ + value: Math.round(value) + }) // param of toFixed should less then 20. + : value.toFixed(Math.min(labelPrecision, 20)); + return isFunction(labelFormatter) ? labelFormatter(value, valueStr) : isString(labelFormatter) ? labelFormatter.replace('{value}', valueStr) : valueStr; + }; + /** + * @param showOrHide true: show, false: hide + */ + + + SliderZoomView.prototype._showDataInfo = function (showOrHide) { + // Always show when drgging. + showOrHide = this._dragging || showOrHide; + var displayables = this._displayables; + var handleLabels = displayables.handleLabels; + handleLabels[0].attr('invisible', !showOrHide); + handleLabels[1].attr('invisible', !showOrHide); // Highlight move handle + + displayables.moveHandle && this.api[showOrHide ? 'enterEmphasis' : 'leaveEmphasis'](displayables.moveHandle, 1); + }; + + SliderZoomView.prototype._onDragMove = function (handleIndex, dx, dy, event) { + this._dragging = true; // For mobile device, prevent screen slider on the button. + + stop(event.event); // Transform dx, dy to bar coordination. + + var barTransform = this._displayables.sliderGroup.getLocalTransform(); + + var vertex = applyTransform$1([dx, dy], barTransform, true); + + var changed = this._updateInterval(handleIndex, vertex[0]); + + var realtime = this.dataZoomModel.get('realtime'); + + this._updateView(!realtime); // Avoid dispatch dataZoom repeatly but range not changed, + // which cause bad visual effect when progressive enabled. + + + changed && realtime && this._dispatchZoomAction(true); + }; + + SliderZoomView.prototype._onDragEnd = function () { + this._dragging = false; + + this._showDataInfo(false); // While in realtime mode and stream mode, dispatch action when + // drag end will cause the whole view rerender, which is unnecessary. + + + var realtime = this.dataZoomModel.get('realtime'); + !realtime && this._dispatchZoomAction(false); + }; + + SliderZoomView.prototype._onClickPanel = function (e) { + var size = this._size; + + var localPoint = this._displayables.sliderGroup.transformCoordToLocal(e.offsetX, e.offsetY); + + if (localPoint[0] < 0 || localPoint[0] > size[0] || localPoint[1] < 0 || localPoint[1] > size[1]) { + return; + } + + var handleEnds = this._handleEnds; + var center = (handleEnds[0] + handleEnds[1]) / 2; + + var changed = this._updateInterval('all', localPoint[0] - center); + + this._updateView(); + + changed && this._dispatchZoomAction(false); + }; + + SliderZoomView.prototype._onBrushStart = function (e) { + var x = e.offsetX; + var y = e.offsetY; + this._brushStart = new Point(x, y); + this._brushing = true; + this._brushStartTime = +new Date(); // this._updateBrushRect(x, y); + }; + + SliderZoomView.prototype._onBrushEnd = function (e) { + if (!this._brushing) { + return; + } + + var brushRect = this._displayables.brushRect; + this._brushing = false; + + if (!brushRect) { + return; + } + + brushRect.attr('ignore', true); + var brushShape = brushRect.shape; + var brushEndTime = +new Date(); // console.log(brushEndTime - this._brushStartTime); + + if (brushEndTime - this._brushStartTime < 200 && Math.abs(brushShape.width) < 5) { + // Will treat it as a click + return; + } + + var viewExtend = this._getViewExtent(); + + var percentExtent = [0, 100]; + this._range = asc([linearMap(brushShape.x, viewExtend, percentExtent, true), linearMap(brushShape.x + brushShape.width, viewExtend, percentExtent, true)]); + this._handleEnds = [brushShape.x, brushShape.x + brushShape.width]; + + this._updateView(); + + this._dispatchZoomAction(false); + }; + + SliderZoomView.prototype._onBrush = function (e) { + if (this._brushing) { + // For mobile device, prevent screen slider on the button. + stop(e.event); + + this._updateBrushRect(e.offsetX, e.offsetY); + } + }; + + SliderZoomView.prototype._updateBrushRect = function (mouseX, mouseY) { + var displayables = this._displayables; + var dataZoomModel = this.dataZoomModel; + var brushRect = displayables.brushRect; + + if (!brushRect) { + brushRect = displayables.brushRect = new Rect$2({ + silent: true, + style: dataZoomModel.getModel('brushStyle').getItemStyle() + }); + displayables.sliderGroup.add(brushRect); + } + + brushRect.attr('ignore', false); + var brushStart = this._brushStart; + var sliderGroup = this._displayables.sliderGroup; + var endPoint = sliderGroup.transformCoordToLocal(mouseX, mouseY); + var startPoint = sliderGroup.transformCoordToLocal(brushStart.x, brushStart.y); + var size = this._size; + endPoint[0] = Math.max(Math.min(size[0], endPoint[0]), 0); + brushRect.setShape({ + x: startPoint[0], + y: 0, + width: endPoint[0] - startPoint[0], + height: size[1] + }); + }; + /** + * This action will be throttled. + */ + + + SliderZoomView.prototype._dispatchZoomAction = function (realtime) { + var range = this._range; + this.api.dispatchAction({ + type: 'dataZoom', + from: this.uid, + dataZoomId: this.dataZoomModel.id, + animation: realtime ? REALTIME_ANIMATION_CONFIG : null, + start: range[0], + end: range[1] + }); + }; + + SliderZoomView.prototype._findCoordRect = function () { + // Find the grid coresponding to the first axis referred by dataZoom. + var rect; + var coordSysInfoList = collectReferCoordSysModelInfo(this.dataZoomModel).infoList; + + if (!rect && coordSysInfoList.length) { + var coordSys = coordSysInfoList[0].model.coordinateSystem; + rect = coordSys.getRect && coordSys.getRect(); + } + + if (!rect) { + var width = this.api.getWidth(); + var height = this.api.getHeight(); + rect = { + x: width * 0.2, + y: height * 0.2, + width: width * 0.6, + height: height * 0.6 + }; + } + + return rect; + }; + + SliderZoomView.type = 'dataZoom.slider'; + return SliderZoomView; + }(DataZoomView); + + function getOtherDim(thisDim) { + // FIXME + // 这个逻辑和getOtherAxis里一致,但是写在这里是否不好 + var map = { + x: 'y', + y: 'x', + radius: 'angle', + angle: 'radius' + }; + return map[thisDim]; + } + + function getCursor(orient) { + return orient === 'vertical' ? 'ns-resize' : 'ew-resize'; + } + + function install$L(registers) { + registers.registerComponentModel(SliderZoomModel); + registers.registerComponentView(SliderZoomView); + installCommon(registers); + } + + function install$M(registers) { + use(install$K); + use(install$L); // Do not install './dataZoomSelect', + // since it only work for toolbox dataZoom. + } + + var visualDefault = { + /** + * @public + */ + get: function (visualType, key, isCategory) { + var value = clone((defaultOption$1[visualType] || {})[key]); + return isCategory ? isArray(value) ? value[value.length - 1] : value : value; + } + }; + var defaultOption$1 = { + color: { + active: ['#006edd', '#e0ffff'], + inactive: ['rgba(0,0,0,0)'] + }, + colorHue: { + active: [0, 360], + inactive: [0, 0] + }, + colorSaturation: { + active: [0.3, 1], + inactive: [0, 0] + }, + colorLightness: { + active: [0.9, 0.5], + inactive: [0, 0] + }, + colorAlpha: { + active: [0.3, 1], + inactive: [0, 0] + }, + opacity: { + active: [0.3, 1], + inactive: [0, 0] + }, + symbol: { + active: ['circle', 'roundRect', 'diamond'], + inactive: ['none'] + }, + symbolSize: { + active: [10, 50], + inactive: [0, 0] + } + }; + + var mapVisual$1 = VisualMapping.mapVisual; + var eachVisual = VisualMapping.eachVisual; + var isArray$1 = isArray; + var each$e = each; + var asc$2 = asc; + var linearMap$1 = linearMap; + + var VisualMapModel = + /** @class */ + function (_super) { + __extends(VisualMapModel, _super); + + function VisualMapModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = VisualMapModel.type; + _this.stateList = ['inRange', 'outOfRange']; + _this.replacableOptionKeys = ['inRange', 'outOfRange', 'target', 'controller', 'color']; + _this.layoutMode = { + type: 'box', + ignoreSize: true + }; + /** + * [lowerBound, upperBound] + */ + + _this.dataBound = [-Infinity, Infinity]; + _this.targetVisuals = {}; + _this.controllerVisuals = {}; + return _this; + } + + VisualMapModel.prototype.init = function (option, parentModel, ecModel) { + this.mergeDefaultAndTheme(option, ecModel); + }; + /** + * @protected + */ + + + VisualMapModel.prototype.optionUpdated = function (newOption, isInit) { + var thisOption = this.option; // FIXME + // necessary? + // Disable realtime view update if canvas is not supported. + + if (!env.canvasSupported) { + thisOption.realtime = false; + } + + !isInit && replaceVisualOption(thisOption, newOption, this.replacableOptionKeys); + this.textStyleModel = this.getModel('textStyle'); + this.resetItemSize(); + this.completeVisualOption(); + }; + /** + * @protected + */ + + + VisualMapModel.prototype.resetVisual = function (supplementVisualOption) { + var stateList = this.stateList; + supplementVisualOption = bind(supplementVisualOption, this); + this.controllerVisuals = createVisualMappings(this.option.controller, stateList, supplementVisualOption); + this.targetVisuals = createVisualMappings(this.option.target, stateList, supplementVisualOption); + }; + /** + * @public + */ + + + VisualMapModel.prototype.getItemSymbol = function () { + return null; + }; + /** + * @protected + * @return {Array.} An array of series indices. + */ + + + VisualMapModel.prototype.getTargetSeriesIndices = function () { + var optionSeriesIndex = this.option.seriesIndex; + var seriesIndices = []; + + if (optionSeriesIndex == null || optionSeriesIndex === 'all') { + this.ecModel.eachSeries(function (seriesModel, index) { + seriesIndices.push(index); + }); + } else { + seriesIndices = normalizeToArray(optionSeriesIndex); + } + + return seriesIndices; + }; + /** + * @public + */ + + + VisualMapModel.prototype.eachTargetSeries = function (callback, context) { + each(this.getTargetSeriesIndices(), function (seriesIndex) { + var seriesModel = this.ecModel.getSeriesByIndex(seriesIndex); + + if (seriesModel) { + callback.call(context, seriesModel); + } + }, this); + }; + /** + * @pubilc + */ + + + VisualMapModel.prototype.isTargetSeries = function (seriesModel) { + var is = false; + this.eachTargetSeries(function (model) { + model === seriesModel && (is = true); + }); + return is; + }; + /** + * @example + * this.formatValueText(someVal); // format single numeric value to text. + * this.formatValueText(someVal, true); // format single category value to text. + * this.formatValueText([min, max]); // format numeric min-max to text. + * this.formatValueText([this.dataBound[0], max]); // using data lower bound. + * this.formatValueText([min, this.dataBound[1]]); // using data upper bound. + * + * @param value Real value, or this.dataBound[0 or 1]. + * @param isCategory Only available when value is number. + * @param edgeSymbols Open-close symbol when value is interval. + * @protected + */ + + + VisualMapModel.prototype.formatValueText = function (value, isCategory, edgeSymbols) { + var option = this.option; + var precision = option.precision; + var dataBound = this.dataBound; + var formatter = option.formatter; + var isMinMax; + edgeSymbols = edgeSymbols || ['<', '>']; + + if (isArray(value)) { + value = value.slice(); + isMinMax = true; + } + + var textValue = isCategory ? value // Value is string when isCategory + : isMinMax ? [toFixed(value[0]), toFixed(value[1])] : toFixed(value); + + if (isString(formatter)) { + return formatter.replace('{value}', isMinMax ? textValue[0] : textValue).replace('{value2}', isMinMax ? textValue[1] : textValue); + } else if (isFunction(formatter)) { + return isMinMax ? formatter(value[0], value[1]) : formatter(value); + } + + if (isMinMax) { + if (value[0] === dataBound[0]) { + return edgeSymbols[0] + ' ' + textValue[1]; + } else if (value[1] === dataBound[1]) { + return edgeSymbols[1] + ' ' + textValue[0]; + } else { + return textValue[0] + ' - ' + textValue[1]; + } + } else { + // Format single value (includes category case). + return textValue; + } + + function toFixed(val) { + return val === dataBound[0] ? 'min' : val === dataBound[1] ? 'max' : (+val).toFixed(Math.min(precision, 20)); + } + }; + /** + * @protected + */ + + + VisualMapModel.prototype.resetExtent = function () { + var thisOption = this.option; // Can not calculate data extent by data here. + // Because series and data may be modified in processing stage. + // So we do not support the feature "auto min/max". + + var extent = asc$2([thisOption.min, thisOption.max]); + this._dataExtent = extent; + }; + /** + * PENDING: + * delete this method if no outer usage. + * + * Return Concrete dimention. If return null/undefined, no dimension used. + */ + // getDataDimension(data: SeriesData) { + // const optDim = this.option.dimension; + // if (optDim != null) { + // return data.getDimension(optDim); + // } + // const dimNames = data.dimensions; + // for (let i = dimNames.length - 1; i >= 0; i--) { + // const dimName = dimNames[i]; + // const dimInfo = data.getDimensionInfo(dimName); + // if (!dimInfo.isCalculationCoord) { + // return dimName; + // } + // } + // } + + + VisualMapModel.prototype.getDataDimensionIndex = function (data) { + var optDim = this.option.dimension; + + if (optDim != null) { + return data.getDimensionIndex(optDim); + } + + var dimNames = data.dimensions; + + for (var i = dimNames.length - 1; i >= 0; i--) { + var dimName = dimNames[i]; + var dimInfo = data.getDimensionInfo(dimName); + + if (!dimInfo.isCalculationCoord) { + return dimInfo.storeDimIndex; + } + } + }; + + VisualMapModel.prototype.getExtent = function () { + return this._dataExtent.slice(); + }; + + VisualMapModel.prototype.completeVisualOption = function () { + var ecModel = this.ecModel; + var thisOption = this.option; + var base = { + inRange: thisOption.inRange, + outOfRange: thisOption.outOfRange + }; + var target = thisOption.target || (thisOption.target = {}); + var controller = thisOption.controller || (thisOption.controller = {}); + merge(target, base); // Do not override + + merge(controller, base); // Do not override + + var isCategory = this.isCategory(); + completeSingle.call(this, target); + completeSingle.call(this, controller); + completeInactive.call(this, target, 'inRange', 'outOfRange'); // completeInactive.call(this, target, 'outOfRange', 'inRange'); + + completeController.call(this, controller); + + function completeSingle(base) { + // Compatible with ec2 dataRange.color. + // The mapping order of dataRange.color is: [high value, ..., low value] + // whereas inRange.color and outOfRange.color is [low value, ..., high value] + // Notice: ec2 has no inverse. + if (isArray$1(thisOption.color) // If there has been inRange: {symbol: ...}, adding color is a mistake. + // So adding color only when no inRange defined. + && !base.inRange) { + base.inRange = { + color: thisOption.color.slice().reverse() + }; + } // Compatible with previous logic, always give a defautl color, otherwise + // simple config with no inRange and outOfRange will not work. + // Originally we use visualMap.color as the default color, but setOption at + // the second time the default color will be erased. So we change to use + // constant DEFAULT_COLOR. + // If user do not want the default color, set inRange: {color: null}. + + + base.inRange = base.inRange || { + color: ecModel.get('gradientColor') + }; + } + + function completeInactive(base, stateExist, stateAbsent) { + var optExist = base[stateExist]; + var optAbsent = base[stateAbsent]; + + if (optExist && !optAbsent) { + optAbsent = base[stateAbsent] = {}; + each$e(optExist, function (visualData, visualType) { + if (!VisualMapping.isValidType(visualType)) { + return; + } + + var defa = visualDefault.get(visualType, 'inactive', isCategory); + + if (defa != null) { + optAbsent[visualType] = defa; // Compatibable with ec2: + // Only inactive color to rgba(0,0,0,0) can not + // make label transparent, so use opacity also. + + if (visualType === 'color' && !optAbsent.hasOwnProperty('opacity') && !optAbsent.hasOwnProperty('colorAlpha')) { + optAbsent.opacity = [0, 0]; + } + } + }); + } + } + + function completeController(controller) { + var symbolExists = (controller.inRange || {}).symbol || (controller.outOfRange || {}).symbol; + var symbolSizeExists = (controller.inRange || {}).symbolSize || (controller.outOfRange || {}).symbolSize; + var inactiveColor = this.get('inactiveColor'); + var itemSymbol = this.getItemSymbol(); + var defaultSymbol = itemSymbol || 'roundRect'; + each$e(this.stateList, function (state) { + var itemSize = this.itemSize; + var visuals = controller[state]; // Set inactive color for controller if no other color + // attr (like colorAlpha) specified. + + if (!visuals) { + visuals = controller[state] = { + color: isCategory ? inactiveColor : [inactiveColor] + }; + } // Consistent symbol and symbolSize if not specified. + + + if (visuals.symbol == null) { + visuals.symbol = symbolExists && clone(symbolExists) || (isCategory ? defaultSymbol : [defaultSymbol]); + } + + if (visuals.symbolSize == null) { + visuals.symbolSize = symbolSizeExists && clone(symbolSizeExists) || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]); + } // Filter none + + + visuals.symbol = mapVisual$1(visuals.symbol, function (symbol) { + return symbol === 'none' ? defaultSymbol : symbol; + }); // Normalize symbolSize + + var symbolSize = visuals.symbolSize; + + if (symbolSize != null) { + var max_1 = -Infinity; // symbolSize can be object when categories defined. + + eachVisual(symbolSize, function (value) { + value > max_1 && (max_1 = value); + }); + visuals.symbolSize = mapVisual$1(symbolSize, function (value) { + return linearMap$1(value, [0, max_1], [0, itemSize[0]], true); + }); + } + }, this); + } + }; + + VisualMapModel.prototype.resetItemSize = function () { + this.itemSize = [parseFloat(this.get('itemWidth')), parseFloat(this.get('itemHeight'))]; + }; + + VisualMapModel.prototype.isCategory = function () { + return !!this.option.categories; + }; + /** + * @public + * @abstract + */ + + + VisualMapModel.prototype.setSelected = function (selected) {}; + + VisualMapModel.prototype.getSelected = function () { + return null; + }; + /** + * @public + * @abstract + */ + + + VisualMapModel.prototype.getValueState = function (value) { + return null; + }; + /** + * FIXME + * Do not publish to thirt-part-dev temporarily + * util the interface is stable. (Should it return + * a function but not visual meta?) + * + * @pubilc + * @abstract + * @param getColorVisual + * params: value, valueState + * return: color + * @return {Object} visualMeta + * should includes {stops, outerColors} + * outerColor means [colorBeyondMinValue, colorBeyondMaxValue] + */ + + + VisualMapModel.prototype.getVisualMeta = function (getColorVisual) { + return null; + }; + + VisualMapModel.type = 'visualMap'; + VisualMapModel.dependencies = ['series']; + VisualMapModel.defaultOption = { + show: true, + zlevel: 0, + z: 4, + seriesIndex: 'all', + min: 0, + max: 200, + left: 0, + right: null, + top: null, + bottom: 0, + itemWidth: null, + itemHeight: null, + inverse: false, + orient: 'vertical', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + contentColor: '#5793f3', + inactiveColor: '#aaa', + borderWidth: 0, + padding: 5, + // 接受数组分别设定上右下左边距,同css + textGap: 10, + precision: 0, + textStyle: { + color: '#333' // 值域文字颜色 + + } + }; + return VisualMapModel; + }(ComponentModel); + + var DEFAULT_BAR_BOUND = [20, 140]; + + var ContinuousModel = + /** @class */ + function (_super) { + __extends(ContinuousModel, _super); + + function ContinuousModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ContinuousModel.type; + return _this; + } + /** + * @override + */ + + + ContinuousModel.prototype.optionUpdated = function (newOption, isInit) { + _super.prototype.optionUpdated.apply(this, arguments); + + this.resetExtent(); + this.resetVisual(function (mappingOption) { + mappingOption.mappingMethod = 'linear'; + mappingOption.dataExtent = this.getExtent(); + }); + + this._resetRange(); + }; + /** + * @protected + * @override + */ + + + ContinuousModel.prototype.resetItemSize = function () { + _super.prototype.resetItemSize.apply(this, arguments); + + var itemSize = this.itemSize; + (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]); + (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]); + }; + /** + * @private + */ + + + ContinuousModel.prototype._resetRange = function () { + var dataExtent = this.getExtent(); + var range = this.option.range; + + if (!range || range.auto) { + // `range` should always be array (so we dont use other + // value like 'auto') for user-friend. (consider getOption). + dataExtent.auto = 1; + this.option.range = dataExtent; + } else if (isArray(range)) { + if (range[0] > range[1]) { + range.reverse(); + } + + range[0] = Math.max(range[0], dataExtent[0]); + range[1] = Math.min(range[1], dataExtent[1]); + } + }; + /** + * @protected + * @override + */ + + + ContinuousModel.prototype.completeVisualOption = function () { + _super.prototype.completeVisualOption.apply(this, arguments); + + each(this.stateList, function (state) { + var symbolSize = this.option.controller[state].symbolSize; + + if (symbolSize && symbolSize[0] !== symbolSize[1]) { + symbolSize[0] = symbolSize[1] / 3; // For good looking. + } + }, this); + }; + /** + * @override + */ + + + ContinuousModel.prototype.setSelected = function (selected) { + this.option.range = selected.slice(); + + this._resetRange(); + }; + /** + * @public + */ + + + ContinuousModel.prototype.getSelected = function () { + var dataExtent = this.getExtent(); + var dataInterval = asc((this.get('range') || []).slice()); // Clamp + + dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]); + dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]); + dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]); + dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]); + return dataInterval; + }; + /** + * @override + */ + + + ContinuousModel.prototype.getValueState = function (value) { + var range = this.option.range; + var dataExtent = this.getExtent(); // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'. + // range[1] is processed likewise. + + return (range[0] <= dataExtent[0] || range[0] <= value) && (range[1] >= dataExtent[1] || value <= range[1]) ? 'inRange' : 'outOfRange'; + }; + + ContinuousModel.prototype.findTargetDataIndices = function (range) { + var result = []; + this.eachTargetSeries(function (seriesModel) { + var dataIndices = []; + var data = seriesModel.getData(); + data.each(this.getDataDimensionIndex(data), function (value, dataIndex) { + range[0] <= value && value <= range[1] && dataIndices.push(dataIndex); + }, this); + result.push({ + seriesId: seriesModel.id, + dataIndex: dataIndices + }); + }, this); + return result; + }; + /** + * @implement + */ + + + ContinuousModel.prototype.getVisualMeta = function (getColorVisual) { + var oVals = getColorStopValues(this, 'outOfRange', this.getExtent()); + var iVals = getColorStopValues(this, 'inRange', this.option.range.slice()); + var stops = []; + + function setStop(value, valueState) { + stops.push({ + value: value, + color: getColorVisual(value, valueState) + }); + } // Format to: outOfRange -- inRange -- outOfRange. + + + var iIdx = 0; + var oIdx = 0; + var iLen = iVals.length; + var oLen = oVals.length; + + for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) { + // If oVal[oIdx] === iVals[iIdx], oVal[oIdx] should be ignored. + if (oVals[oIdx] < iVals[iIdx]) { + setStop(oVals[oIdx], 'outOfRange'); + } + } + + for (var first = 1; iIdx < iLen; iIdx++, first = 0) { + // If range is full, value beyond min, max will be clamped. + // make a singularity + first && stops.length && setStop(iVals[iIdx], 'outOfRange'); + setStop(iVals[iIdx], 'inRange'); + } + + for (var first = 1; oIdx < oLen; oIdx++) { + if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) { + // make a singularity + if (first) { + stops.length && setStop(stops[stops.length - 1].value, 'outOfRange'); + first = 0; + } + + setStop(oVals[oIdx], 'outOfRange'); + } + } + + var stopsLen = stops.length; + return { + stops: stops, + outerColors: [stopsLen ? stops[0].color : 'transparent', stopsLen ? stops[stopsLen - 1].color : 'transparent'] + }; + }; + + ContinuousModel.type = 'visualMap.continuous'; + ContinuousModel.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, { + align: 'auto', + calculable: false, + hoverLink: true, + realtime: true, + handleIcon: 'path://M-11.39,9.77h0a3.5,3.5,0,0,1-3.5,3.5h-22a3.5,3.5,0,0,1-3.5-3.5h0a3.5,3.5,0,0,1,3.5-3.5h22A3.5,3.5,0,0,1-11.39,9.77Z', + handleSize: '120%', + handleStyle: { + borderColor: '#fff', + borderWidth: 1 + }, + indicatorIcon: 'circle', + indicatorSize: '50%', + indicatorStyle: { + borderColor: '#fff', + borderWidth: 2, + shadowBlur: 2, + shadowOffsetX: 1, + shadowOffsetY: 1, + shadowColor: 'rgba(0,0,0,0.2)' + } // emphasis: { + // handleStyle: { + // shadowBlur: 3, + // shadowOffsetX: 1, + // shadowOffsetY: 1, + // shadowColor: 'rgba(0,0,0,0.2)' + // } + // } + + }); + return ContinuousModel; + }(VisualMapModel); + + function getColorStopValues(visualMapModel, valueState, dataExtent) { + if (dataExtent[0] === dataExtent[1]) { + return dataExtent.slice(); + } // When using colorHue mapping, it is not linear color any more. + // Moreover, canvas gradient seems not to be accurate linear. + // FIXME + // Should be arbitrary value 100? or based on pixel size? + + + var count = 200; + var step = (dataExtent[1] - dataExtent[0]) / count; + var value = dataExtent[0]; + var stopValues = []; + + for (var i = 0; i <= count && value < dataExtent[1]; i++) { + stopValues.push(value); + value += step; + } + + stopValues.push(dataExtent[1]); + return stopValues; + } + + var VisualMapView = + /** @class */ + function (_super) { + __extends(VisualMapView, _super); + + function VisualMapView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = VisualMapView.type; + _this.autoPositionValues = { + left: 1, + right: 1, + top: 1, + bottom: 1 + }; + return _this; + } + + VisualMapView.prototype.init = function (ecModel, api) { + this.ecModel = ecModel; + this.api = api; + }; + /** + * @protected + */ + + + VisualMapView.prototype.render = function (visualMapModel, ecModel, api, payload // TODO: TYPE + ) { + this.visualMapModel = visualMapModel; + + if (visualMapModel.get('show') === false) { + this.group.removeAll(); + return; + } + + this.doRender(visualMapModel, ecModel, api, payload); + }; + /** + * @protected + */ + + + VisualMapView.prototype.renderBackground = function (group) { + var visualMapModel = this.visualMapModel; + var padding = normalizeCssArray$1(visualMapModel.get('padding') || 0); + var rect = group.getBoundingRect(); + group.add(new Rect({ + z2: -1, + silent: true, + shape: { + x: rect.x - padding[3], + y: rect.y - padding[0], + width: rect.width + padding[3] + padding[1], + height: rect.height + padding[0] + padding[2] + }, + style: { + fill: visualMapModel.get('backgroundColor'), + stroke: visualMapModel.get('borderColor'), + lineWidth: visualMapModel.get('borderWidth') + } + })); + }; + /** + * @protected + * @param targetValue can be Infinity or -Infinity + * @param visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize' + * @param opts + * @param opts.forceState Specify state, instead of using getValueState method. + * @param opts.convertOpacityToAlpha For color gradient in controller widget. + * @return {*} Visual value. + */ + + + VisualMapView.prototype.getControllerVisual = function (targetValue, visualCluster, opts) { + opts = opts || {}; + var forceState = opts.forceState; + var visualMapModel = this.visualMapModel; + var visualObj = {}; // Default values. + + if (visualCluster === 'color') { + var defaultColor = visualMapModel.get('contentColor'); + visualObj.color = defaultColor; + } + + function getter(key) { + return visualObj[key]; + } + + function setter(key, value) { + visualObj[key] = value; + } + + var mappings = visualMapModel.controllerVisuals[forceState || visualMapModel.getValueState(targetValue)]; + var visualTypes = VisualMapping.prepareVisualTypes(mappings); + each(visualTypes, function (type) { + var visualMapping = mappings[type]; + + if (opts.convertOpacityToAlpha && type === 'opacity') { + type = 'colorAlpha'; + visualMapping = mappings.__alphaForOpacity; + } + + if (VisualMapping.dependsOn(type, visualCluster)) { + visualMapping && visualMapping.applyVisual(targetValue, getter, setter); + } + }); + return visualObj[visualCluster]; + }; + + VisualMapView.prototype.positionGroup = function (group) { + var model = this.visualMapModel; + var api = this.api; + positionElement(group, model.getBoxLayoutParams(), { + width: api.getWidth(), + height: api.getHeight() + }); + }; + + VisualMapView.prototype.doRender = function (visualMapModel, ecModel, api, payload) {}; + + VisualMapView.type = 'visualMap'; + return VisualMapView; + }(ComponentView); + + var paramsSet = [['left', 'right', 'width'], ['top', 'bottom', 'height']]; + /** + * @param visualMapModel + * @param api + * @param itemSize always [short, long] + * @return {string} 'left' or 'right' or 'top' or 'bottom' + */ + + function getItemAlign(visualMapModel, api, itemSize) { + var modelOption = visualMapModel.option; + var itemAlign = modelOption.align; + + if (itemAlign != null && itemAlign !== 'auto') { + return itemAlign; + } // Auto decision align. + + + var ecSize = { + width: api.getWidth(), + height: api.getHeight() + }; + var realIndex = modelOption.orient === 'horizontal' ? 1 : 0; + var reals = paramsSet[realIndex]; + var fakeValue = [0, null, 10]; + var layoutInput = {}; + + for (var i = 0; i < 3; i++) { + layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i]; + layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]]; + } + + var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex]; + var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding); + return reals[(rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5 < ecSize[rParam[1]] * 0.5 ? 0 : 1]; + } + /** + * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and + * dataIndexInside means filtered index. + */ + // TODO: TYPE more specified payload types. + + function makeHighDownBatch(batch, visualMapModel) { + each(batch || [], function (batchItem) { + if (batchItem.dataIndex != null) { + batchItem.dataIndexInside = batchItem.dataIndex; + batchItem.dataIndex = null; + } + + batchItem.highlightKey = 'visualMap' + (visualMapModel ? visualMapModel.componentIndex : ''); + }); + return batch; + } + + var linearMap$2 = linearMap; + var each$f = each; + var mathMin$a = Math.min; + var mathMax$a = Math.max; // Arbitrary value + + var HOVER_LINK_SIZE = 12; + var HOVER_LINK_OUT = 6; // Notice: + // Any "interval" should be by the order of [low, high]. + // "handle0" (handleIndex === 0) maps to + // low data value: this._dataInterval[0] and has low coord. + // "handle1" (handleIndex === 1) maps to + // high data value: this._dataInterval[1] and has high coord. + // The logic of transform is implemented in this._createBarGroup. + + var ContinuousView = + /** @class */ + function (_super) { + __extends(ContinuousView, _super); + + function ContinuousView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = ContinuousView.type; + _this._shapes = {}; + _this._dataInterval = []; + _this._handleEnds = []; + _this._hoverLinkDataIndices = []; + return _this; + } + + ContinuousView.prototype.doRender = function (visualMapModel, ecModel, api, payload) { + this._api = api; + + if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) { + this._buildView(); + } + }; + + ContinuousView.prototype._buildView = function () { + this.group.removeAll(); + var visualMapModel = this.visualMapModel; + var thisGroup = this.group; + this._orient = visualMapModel.get('orient'); + this._useHandle = visualMapModel.get('calculable'); + + this._resetInterval(); + + this._renderBar(thisGroup); + + var dataRangeText = visualMapModel.get('text'); + + this._renderEndsText(thisGroup, dataRangeText, 0); + + this._renderEndsText(thisGroup, dataRangeText, 1); // Do this for background size calculation. + + + this._updateView(true); // After updating view, inner shapes is built completely, + // and then background can be rendered. + + + this.renderBackground(thisGroup); // Real update view + + this._updateView(); + + this._enableHoverLinkToSeries(); + + this._enableHoverLinkFromSeries(); + + this.positionGroup(thisGroup); + }; + + ContinuousView.prototype._renderEndsText = function (group, dataRangeText, endsIndex) { + if (!dataRangeText) { + return; + } // Compatible with ec2, text[0] map to high value, text[1] map low value. + + + var text = dataRangeText[1 - endsIndex]; + text = text != null ? text + '' : ''; + var visualMapModel = this.visualMapModel; + var textGap = visualMapModel.get('textGap'); + var itemSize = visualMapModel.itemSize; + var barGroup = this._shapes.mainGroup; + + var position = this._applyTransform([itemSize[0] / 2, endsIndex === 0 ? -textGap : itemSize[1] + textGap], barGroup); + + var align = this._applyTransform(endsIndex === 0 ? 'bottom' : 'top', barGroup); + + var orient = this._orient; + var textStyleModel = this.visualMapModel.textStyleModel; + this.group.add(new ZRText({ + style: { + x: position[0], + y: position[1], + verticalAlign: orient === 'horizontal' ? 'middle' : align, + align: orient === 'horizontal' ? align : 'center', + text: text, + font: textStyleModel.getFont(), + fill: textStyleModel.getTextColor() + } + })); + }; + + ContinuousView.prototype._renderBar = function (targetGroup) { + var visualMapModel = this.visualMapModel; + var shapes = this._shapes; + var itemSize = visualMapModel.itemSize; + var orient = this._orient; + var useHandle = this._useHandle; + var itemAlign = getItemAlign(visualMapModel, this.api, itemSize); + + var mainGroup = shapes.mainGroup = this._createBarGroup(itemAlign); + + var gradientBarGroup = new Group(); + mainGroup.add(gradientBarGroup); // Bar + + gradientBarGroup.add(shapes.outOfRange = createPolygon()); + gradientBarGroup.add(shapes.inRange = createPolygon(null, useHandle ? getCursor$1(this._orient) : null, bind(this._dragHandle, this, 'all', false), bind(this._dragHandle, this, 'all', true))); // A border radius clip. + + gradientBarGroup.setClipPath(new Rect({ + shape: { + x: 0, + y: 0, + width: itemSize[0], + height: itemSize[1], + r: 3 + } + })); + var textRect = visualMapModel.textStyleModel.getTextRect('国'); + var textSize = mathMax$a(textRect.width, textRect.height); // Handle + + if (useHandle) { + shapes.handleThumbs = []; + shapes.handleLabels = []; + shapes.handleLabelPoints = []; + + this._createHandle(visualMapModel, mainGroup, 0, itemSize, textSize, orient); + + this._createHandle(visualMapModel, mainGroup, 1, itemSize, textSize, orient); + } + + this._createIndicator(visualMapModel, mainGroup, itemSize, textSize, orient); + + targetGroup.add(mainGroup); + }; + + ContinuousView.prototype._createHandle = function (visualMapModel, mainGroup, handleIndex, itemSize, textSize, orient) { + var onDrift = bind(this._dragHandle, this, handleIndex, false); + var onDragEnd = bind(this._dragHandle, this, handleIndex, true); + var handleSize = parsePercent(visualMapModel.get('handleSize'), itemSize[0]); + var handleThumb = createSymbol(visualMapModel.get('handleIcon'), -handleSize / 2, -handleSize / 2, handleSize, handleSize, null, true); + var cursor = getCursor$1(this._orient); + handleThumb.attr({ + cursor: cursor, + draggable: true, + drift: onDrift, + ondragend: onDragEnd, + onmousemove: function (e) { + stop(e.event); + } + }); + handleThumb.x = itemSize[0] / 2; + handleThumb.useStyle(visualMapModel.getModel('handleStyle').getItemStyle()); + handleThumb.setStyle({ + strokeNoScale: true, + strokeFirst: true + }); + handleThumb.style.lineWidth *= 2; + handleThumb.ensureState('emphasis').style = visualMapModel.getModel(['emphasis', 'handleStyle']).getItemStyle(); + setAsHighDownDispatcher(handleThumb, true); + mainGroup.add(handleThumb); // Text is always horizontal layout but should not be effected by + // transform (orient/inverse). So label is built separately but not + // use zrender/graphic/helper/RectText, and is located based on view + // group (according to handleLabelPoint) but not barGroup. + + var textStyleModel = this.visualMapModel.textStyleModel; + var handleLabel = new ZRText({ + cursor: cursor, + draggable: true, + drift: onDrift, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragend: onDragEnd, + style: { + x: 0, + y: 0, + text: '', + font: textStyleModel.getFont(), + fill: textStyleModel.getTextColor() + } + }); + handleLabel.ensureState('blur').style = { + opacity: 0.1 + }; + handleLabel.stateTransition = { + duration: 200 + }; + this.group.add(handleLabel); + var handleLabelPoint = [handleSize, 0]; + var shapes = this._shapes; + shapes.handleThumbs[handleIndex] = handleThumb; + shapes.handleLabelPoints[handleIndex] = handleLabelPoint; + shapes.handleLabels[handleIndex] = handleLabel; + }; + + ContinuousView.prototype._createIndicator = function (visualMapModel, mainGroup, itemSize, textSize, orient) { + var scale = parsePercent(visualMapModel.get('indicatorSize'), itemSize[0]); + var indicator = createSymbol(visualMapModel.get('indicatorIcon'), -scale / 2, -scale / 2, scale, scale, null, true); + indicator.attr({ + cursor: 'move', + invisible: true, + silent: true, + x: itemSize[0] / 2 + }); + var indicatorStyle = visualMapModel.getModel('indicatorStyle').getItemStyle(); + + if (indicator instanceof ZRImage) { + var pathStyle = indicator.style; + indicator.useStyle(extend({ + // TODO other properties like x, y ? + image: pathStyle.image, + x: pathStyle.x, + y: pathStyle.y, + width: pathStyle.width, + height: pathStyle.height + }, indicatorStyle)); + } else { + indicator.useStyle(indicatorStyle); + } + + mainGroup.add(indicator); + var textStyleModel = this.visualMapModel.textStyleModel; + var indicatorLabel = new ZRText({ + silent: true, + invisible: true, + style: { + x: 0, + y: 0, + text: '', + font: textStyleModel.getFont(), + fill: textStyleModel.getTextColor() + } + }); + this.group.add(indicatorLabel); + var indicatorLabelPoint = [(orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT) + itemSize[0] / 2, 0]; + var shapes = this._shapes; + shapes.indicator = indicator; + shapes.indicatorLabel = indicatorLabel; + shapes.indicatorLabelPoint = indicatorLabelPoint; + this._firstShowIndicator = true; + }; + + ContinuousView.prototype._dragHandle = function (handleIndex, isEnd, // dx is event from ondragend if isEnd is true. It's not used + dx, dy) { + if (!this._useHandle) { + return; + } + + this._dragging = !isEnd; + + if (!isEnd) { + // Transform dx, dy to bar coordination. + var vertex = this._applyTransform([dx, dy], this._shapes.mainGroup, true); + + this._updateInterval(handleIndex, vertex[1]); + + this._hideIndicator(); // Considering realtime, update view should be executed + // before dispatch action. + + + this._updateView(); + } // dragEnd do not dispatch action when realtime. + + + if (isEnd === !this.visualMapModel.get('realtime')) { + // jshint ignore:line + this.api.dispatchAction({ + type: 'selectDataRange', + from: this.uid, + visualMapId: this.visualMapModel.id, + selected: this._dataInterval.slice() + }); + } + + if (isEnd) { + !this._hovering && this._clearHoverLinkToSeries(); + } else if (useHoverLinkOnHandle(this.visualMapModel)) { + this._doHoverLinkToSeries(this._handleEnds[handleIndex], false); + } + }; + + ContinuousView.prototype._resetInterval = function () { + var visualMapModel = this.visualMapModel; + var dataInterval = this._dataInterval = visualMapModel.getSelected(); + var dataExtent = visualMapModel.getExtent(); + var sizeExtent = [0, visualMapModel.itemSize[1]]; + this._handleEnds = [linearMap$2(dataInterval[0], dataExtent, sizeExtent, true), linearMap$2(dataInterval[1], dataExtent, sizeExtent, true)]; + }; + /** + * @private + * @param {(number|string)} handleIndex 0 or 1 or 'all' + * @param {number} dx + * @param {number} dy + */ + + + ContinuousView.prototype._updateInterval = function (handleIndex, delta) { + delta = delta || 0; + var visualMapModel = this.visualMapModel; + var handleEnds = this._handleEnds; + var sizeExtent = [0, visualMapModel.itemSize[1]]; + sliderMove(delta, handleEnds, sizeExtent, handleIndex, // cross is forbiden + 0); + var dataExtent = visualMapModel.getExtent(); // Update data interval. + + this._dataInterval = [linearMap$2(handleEnds[0], sizeExtent, dataExtent, true), linearMap$2(handleEnds[1], sizeExtent, dataExtent, true)]; + }; + + ContinuousView.prototype._updateView = function (forSketch) { + var visualMapModel = this.visualMapModel; + var dataExtent = visualMapModel.getExtent(); + var shapes = this._shapes; + var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]]; + var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds; + + var visualInRange = this._createBarVisual(this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange'); + + var visualOutOfRange = this._createBarVisual(dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange'); + + shapes.inRange.setStyle({ + fill: visualInRange.barColor // opacity: visualInRange.opacity + + }).setShape('points', visualInRange.barPoints); + shapes.outOfRange.setStyle({ + fill: visualOutOfRange.barColor // opacity: visualOutOfRange.opacity + + }).setShape('points', visualOutOfRange.barPoints); + + this._updateHandle(inRangeHandleEnds, visualInRange); + }; + + ContinuousView.prototype._createBarVisual = function (dataInterval, dataExtent, handleEnds, forceState) { + var opts = { + forceState: forceState, + convertOpacityToAlpha: true + }; + + var colorStops = this._makeColorGradient(dataInterval, opts); + + var symbolSizes = [this.getControllerVisual(dataInterval[0], 'symbolSize', opts), this.getControllerVisual(dataInterval[1], 'symbolSize', opts)]; + + var barPoints = this._createBarPoints(handleEnds, symbolSizes); + + return { + barColor: new LinearGradient(0, 0, 0, 1, colorStops), + barPoints: barPoints, + handlesColor: [colorStops[0].color, colorStops[colorStops.length - 1].color] + }; + }; + + ContinuousView.prototype._makeColorGradient = function (dataInterval, opts) { + // Considering colorHue, which is not linear, so we have to sample + // to calculate gradient color stops, but not only caculate head + // and tail. + var sampleNumber = 100; // Arbitrary value. + + var colorStops = []; + var step = (dataInterval[1] - dataInterval[0]) / sampleNumber; + colorStops.push({ + color: this.getControllerVisual(dataInterval[0], 'color', opts), + offset: 0 + }); + + for (var i = 1; i < sampleNumber; i++) { + var currValue = dataInterval[0] + step * i; + + if (currValue > dataInterval[1]) { + break; + } + + colorStops.push({ + color: this.getControllerVisual(currValue, 'color', opts), + offset: i / sampleNumber + }); + } + + colorStops.push({ + color: this.getControllerVisual(dataInterval[1], 'color', opts), + offset: 1 + }); + return colorStops; + }; + + ContinuousView.prototype._createBarPoints = function (handleEnds, symbolSizes) { + var itemSize = this.visualMapModel.itemSize; + return [[itemSize[0] - symbolSizes[0], handleEnds[0]], [itemSize[0], handleEnds[0]], [itemSize[0], handleEnds[1]], [itemSize[0] - symbolSizes[1], handleEnds[1]]]; + }; + + ContinuousView.prototype._createBarGroup = function (itemAlign) { + var orient = this._orient; + var inverse = this.visualMapModel.get('inverse'); + return new Group(orient === 'horizontal' && !inverse ? { + scaleX: itemAlign === 'bottom' ? 1 : -1, + rotation: Math.PI / 2 + } : orient === 'horizontal' && inverse ? { + scaleX: itemAlign === 'bottom' ? -1 : 1, + rotation: -Math.PI / 2 + } : orient === 'vertical' && !inverse ? { + scaleX: itemAlign === 'left' ? 1 : -1, + scaleY: -1 + } : { + scaleX: itemAlign === 'left' ? 1 : -1 + }); + }; + + ContinuousView.prototype._updateHandle = function (handleEnds, visualInRange) { + if (!this._useHandle) { + return; + } + + var shapes = this._shapes; + var visualMapModel = this.visualMapModel; + var handleThumbs = shapes.handleThumbs; + var handleLabels = shapes.handleLabels; + var itemSize = visualMapModel.itemSize; + var dataExtent = visualMapModel.getExtent(); + each$f([0, 1], function (handleIndex) { + var handleThumb = handleThumbs[handleIndex]; + handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]); + handleThumb.y = handleEnds[handleIndex]; + var val = linearMap$2(handleEnds[handleIndex], [0, itemSize[1]], dataExtent, true); + var symbolSize = this.getControllerVisual(val, 'symbolSize'); + handleThumb.scaleX = handleThumb.scaleY = symbolSize / itemSize[0]; + handleThumb.x = itemSize[0] - symbolSize / 2; // Update handle label position. + + var textPoint = applyTransform$1(shapes.handleLabelPoints[handleIndex], getTransform(handleThumb, this.group)); + handleLabels[handleIndex].setStyle({ + x: textPoint[0], + y: textPoint[1], + text: visualMapModel.formatValueText(this._dataInterval[handleIndex]), + verticalAlign: 'middle', + align: this._orient === 'vertical' ? this._applyTransform('left', shapes.mainGroup) : 'center' + }); + }, this); + }; + + ContinuousView.prototype._showIndicator = function (cursorValue, textValue, rangeSymbol, halfHoverLinkSize) { + var visualMapModel = this.visualMapModel; + var dataExtent = visualMapModel.getExtent(); + var itemSize = visualMapModel.itemSize; + var sizeExtent = [0, itemSize[1]]; + var shapes = this._shapes; + var indicator = shapes.indicator; + + if (!indicator) { + return; + } + + indicator.attr('invisible', false); + var opts = { + convertOpacityToAlpha: true + }; + var color = this.getControllerVisual(cursorValue, 'color', opts); + var symbolSize = this.getControllerVisual(cursorValue, 'symbolSize'); + var y = linearMap$2(cursorValue, dataExtent, sizeExtent, true); + var x = itemSize[0] - symbolSize / 2; + var oldIndicatorPos = { + x: indicator.x, + y: indicator.y + }; // Update handle label position. + + indicator.y = y; + indicator.x = x; + var textPoint = applyTransform$1(shapes.indicatorLabelPoint, getTransform(indicator, this.group)); + var indicatorLabel = shapes.indicatorLabel; + indicatorLabel.attr('invisible', false); + + var align = this._applyTransform('left', shapes.mainGroup); + + var orient = this._orient; + var isHorizontal = orient === 'horizontal'; + indicatorLabel.setStyle({ + text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue), + verticalAlign: isHorizontal ? align : 'middle', + align: isHorizontal ? 'center' : align + }); + var indicatorNewProps = { + x: x, + y: y, + style: { + fill: color + } + }; + var labelNewProps = { + style: { + x: textPoint[0], + y: textPoint[1] + } + }; + + if (visualMapModel.ecModel.isAnimationEnabled() && !this._firstShowIndicator) { + var animationCfg = { + duration: 100, + easing: 'cubicInOut', + additive: true + }; + indicator.x = oldIndicatorPos.x; + indicator.y = oldIndicatorPos.y; + indicator.animateTo(indicatorNewProps, animationCfg); + indicatorLabel.animateTo(labelNewProps, animationCfg); + } else { + indicator.attr(indicatorNewProps); + indicatorLabel.attr(labelNewProps); + } + + this._firstShowIndicator = false; + var handleLabels = this._shapes.handleLabels; + + if (handleLabels) { + for (var i = 0; i < handleLabels.length; i++) { + // Fade out handle labels. + // NOTE: Must use api enter/leave on emphasis/blur/select state. Or the global states manager will change it. + this._api.enterBlur(handleLabels[i]); + } + } + }; + + ContinuousView.prototype._enableHoverLinkToSeries = function () { + var self = this; + + this._shapes.mainGroup.on('mousemove', function (e) { + self._hovering = true; + + if (!self._dragging) { + var itemSize = self.visualMapModel.itemSize; + + var pos = self._applyTransform([e.offsetX, e.offsetY], self._shapes.mainGroup, true, true); // For hover link show when hover handle, which might be + // below or upper than sizeExtent. + + + pos[1] = mathMin$a(mathMax$a(0, pos[1]), itemSize[1]); + + self._doHoverLinkToSeries(pos[1], 0 <= pos[0] && pos[0] <= itemSize[0]); + } + }).on('mouseout', function () { + // When mouse is out of handle, hoverLink still need + // to be displayed when realtime is set as false. + self._hovering = false; + !self._dragging && self._clearHoverLinkToSeries(); + }); + }; + + ContinuousView.prototype._enableHoverLinkFromSeries = function () { + var zr = this.api.getZr(); + + if (this.visualMapModel.option.hoverLink) { + zr.on('mouseover', this._hoverLinkFromSeriesMouseOver, this); + zr.on('mouseout', this._hideIndicator, this); + } else { + this._clearHoverLinkFromSeries(); + } + }; + + ContinuousView.prototype._doHoverLinkToSeries = function (cursorPos, hoverOnBar) { + var visualMapModel = this.visualMapModel; + var itemSize = visualMapModel.itemSize; + + if (!visualMapModel.option.hoverLink) { + return; + } + + var sizeExtent = [0, itemSize[1]]; + var dataExtent = visualMapModel.getExtent(); // For hover link show when hover handle, which might be below or upper than sizeExtent. + + cursorPos = mathMin$a(mathMax$a(sizeExtent[0], cursorPos), sizeExtent[1]); + var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent); + var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize]; + var cursorValue = linearMap$2(cursorPos, sizeExtent, dataExtent, true); + var valueRange = [linearMap$2(hoverRange[0], sizeExtent, dataExtent, true), linearMap$2(hoverRange[1], sizeExtent, dataExtent, true)]; // Consider data range is out of visualMap range, see test/visualMap-continuous.html, + // where china and india has very large population. + + hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity); + hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity); // Do not show indicator when mouse is over handle, + // otherwise labels overlap, especially when dragging. + + if (hoverOnBar) { + if (valueRange[0] === -Infinity) { + this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize); + } else if (valueRange[1] === Infinity) { + this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize); + } else { + this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize); + } + } // When realtime is set as false, handles, which are in barGroup, + // also trigger hoverLink, which help user to realize where they + // focus on when dragging. (see test/heatmap-large.html) + // When realtime is set as true, highlight will not show when hover + // handle, because the label on handle, which displays a exact value + // but not range, might mislead users. + + + var oldBatch = this._hoverLinkDataIndices; + var newBatch = []; + + if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) { + newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange); + } + + var resultBatches = compressBatches(oldBatch, newBatch); + + this._dispatchHighDown('downplay', makeHighDownBatch(resultBatches[0], visualMapModel)); + + this._dispatchHighDown('highlight', makeHighDownBatch(resultBatches[1], visualMapModel)); + }; + + ContinuousView.prototype._hoverLinkFromSeriesMouseOver = function (e) { + var el = e.target; + var visualMapModel = this.visualMapModel; + + if (!el || getECData(el).dataIndex == null) { + return; + } + + var ecData = getECData(el); + var dataModel = this.ecModel.getSeriesByIndex(ecData.seriesIndex); + + if (!visualMapModel.isTargetSeries(dataModel)) { + return; + } + + var data = dataModel.getData(ecData.dataType); + var value = data.getStore().get(visualMapModel.getDataDimensionIndex(data), ecData.dataIndex); + + if (!isNaN(value)) { + this._showIndicator(value, value); + } + }; + + ContinuousView.prototype._hideIndicator = function () { + var shapes = this._shapes; + shapes.indicator && shapes.indicator.attr('invisible', true); + shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true); + var handleLabels = this._shapes.handleLabels; + + if (handleLabels) { + for (var i = 0; i < handleLabels.length; i++) { + // Fade out handle labels. + // NOTE: Must use api enter/leave on emphasis/blur/select state. Or the global states manager will change it. + this._api.leaveBlur(handleLabels[i]); + } + } + }; + + ContinuousView.prototype._clearHoverLinkToSeries = function () { + this._hideIndicator(); + + var indices = this._hoverLinkDataIndices; + + this._dispatchHighDown('downplay', makeHighDownBatch(indices, this.visualMapModel)); + + indices.length = 0; + }; + + ContinuousView.prototype._clearHoverLinkFromSeries = function () { + this._hideIndicator(); + + var zr = this.api.getZr(); + zr.off('mouseover', this._hoverLinkFromSeriesMouseOver); + zr.off('mouseout', this._hideIndicator); + }; + + ContinuousView.prototype._applyTransform = function (vertex, element, inverse, global) { + var transform = getTransform(element, global ? null : this.group); + return isArray(vertex) ? applyTransform$1(vertex, transform, inverse) : transformDirection(vertex, transform, inverse); + }; // TODO: TYPE more specified payload types. + + + ContinuousView.prototype._dispatchHighDown = function (type, batch) { + batch && batch.length && this.api.dispatchAction({ + type: type, + batch: batch + }); + }; + /** + * @override + */ + + + ContinuousView.prototype.dispose = function () { + this._clearHoverLinkFromSeries(); + + this._clearHoverLinkToSeries(); + }; + /** + * @override + */ + + + ContinuousView.prototype.remove = function () { + this._clearHoverLinkFromSeries(); + + this._clearHoverLinkToSeries(); + }; + + ContinuousView.type = 'visualMap.continuous'; + return ContinuousView; + }(VisualMapView); + + function createPolygon(points, cursor, onDrift, onDragEnd) { + return new Polygon({ + shape: { + points: points + }, + draggable: !!onDrift, + cursor: cursor, + drift: onDrift, + onmousemove: function (e) { + // Fot mobile devicem, prevent screen slider on the button. + stop(e.event); + }, + ondragend: onDragEnd + }); + } + + function getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) { + var halfHoverLinkSize = HOVER_LINK_SIZE / 2; + var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize'); + + if (hoverLinkDataSize) { + halfHoverLinkSize = linearMap$2(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2; + } + + return halfHoverLinkSize; + } + + function useHoverLinkOnHandle(visualMapModel) { + var hoverLinkOnHandle = visualMapModel.get('hoverLinkOnHandle'); + return !!(hoverLinkOnHandle == null ? visualMapModel.get('realtime') : hoverLinkOnHandle); + } + + function getCursor$1(orient) { + return orient === 'vertical' ? 'ns-resize' : 'ew-resize'; + } + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + + /** + * AUTO-GENERATED FILE. DO NOT MODIFY. + */ + + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + var visualMapActionInfo = { + type: 'selectDataRange', + event: 'dataRangeSelected', + // FIXME use updateView appears wrong + update: 'update' + }; + var visualMapActionHander = function (payload, ecModel) { + ecModel.eachComponent({ + mainType: 'visualMap', + query: payload + }, function (model) { + model.setSelected(payload.selected); + }); + }; + + var visualMapEncodingHandlers = [{ + createOnAllSeries: true, + reset: function (seriesModel, ecModel) { + var resetDefines = []; + ecModel.eachComponent('visualMap', function (visualMapModel) { + var pipelineContext = seriesModel.pipelineContext; + + if (!visualMapModel.isTargetSeries(seriesModel) || pipelineContext && pipelineContext.large) { + return; + } + + resetDefines.push(incrementalApplyVisual(visualMapModel.stateList, visualMapModel.targetVisuals, bind(visualMapModel.getValueState, visualMapModel), visualMapModel.getDataDimensionIndex(seriesModel.getData()))); + }); + return resetDefines; + } + }, // Only support color. + { + createOnAllSeries: true, + reset: function (seriesModel, ecModel) { + var data = seriesModel.getData(); + var visualMetaList = []; + ecModel.eachComponent('visualMap', function (visualMapModel) { + if (visualMapModel.isTargetSeries(seriesModel)) { + var visualMeta = visualMapModel.getVisualMeta(bind(getColorVisual, null, seriesModel, visualMapModel)) || { + stops: [], + outerColors: [] + }; + var dimIdx = visualMapModel.getDataDimensionIndex(data); + + if (dimIdx >= 0) { + // visualMeta.dimension should be dimension index, but not concrete dimension. + visualMeta.dimension = dimIdx; + visualMetaList.push(visualMeta); + } + } + }); // console.log(JSON.stringify(visualMetaList.map(a => a.stops))); + + seriesModel.getData().setVisual('visualMeta', visualMetaList); + } + }]; // FIXME + // performance and export for heatmap? + // value can be Infinity or -Infinity + + function getColorVisual(seriesModel, visualMapModel, value, valueState) { + var mappings = visualMapModel.targetVisuals[valueState]; + var visualTypes = VisualMapping.prepareVisualTypes(mappings); + var resultVisual = { + color: getVisualFromData(seriesModel.getData(), 'color') // default color. + + }; + + for (var i = 0, len = visualTypes.length; i < len; i++) { + var type = visualTypes[i]; + var mapping = mappings[type === 'opacity' ? '__alphaForOpacity' : type]; + mapping && mapping.applyVisual(value, getVisual, setVisual); + } + + return resultVisual.color; + + function getVisual(key) { + return resultVisual[key]; + } + + function setVisual(key, value) { + resultVisual[key] = value; + } + } + + var each$g = each; + function visualMapPreprocessor(option) { + var visualMap = option && option.visualMap; + + if (!isArray(visualMap)) { + visualMap = visualMap ? [visualMap] : []; + } + + each$g(visualMap, function (opt) { + if (!opt) { + return; + } // rename splitList to pieces + + + if (has$1(opt, 'splitList') && !has$1(opt, 'pieces')) { + opt.pieces = opt.splitList; + delete opt.splitList; + } + + var pieces = opt.pieces; + + if (pieces && isArray(pieces)) { + each$g(pieces, function (piece) { + if (isObject(piece)) { + if (has$1(piece, 'start') && !has$1(piece, 'min')) { + piece.min = piece.start; + } + + if (has$1(piece, 'end') && !has$1(piece, 'max')) { + piece.max = piece.end; + } + } + }); + } + }); + } + + function has$1(obj, name) { + return obj && obj.hasOwnProperty && obj.hasOwnProperty(name); + } + + var installed$1 = false; + function installCommon$1(registers) { + if (installed$1) { + return; + } + + installed$1 = true; + registers.registerSubTypeDefaulter('visualMap', function (option) { + // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used. + return !option.categories && (!(option.pieces ? option.pieces.length > 0 : option.splitNumber > 0) || option.calculable) ? 'continuous' : 'piecewise'; + }); + registers.registerAction(visualMapActionInfo, visualMapActionHander); + each(visualMapEncodingHandlers, function (handler) { + registers.registerVisual(registers.PRIORITY.VISUAL.COMPONENT, handler); + }); + registers.registerPreprocessor(visualMapPreprocessor); + } + + function install$N(registers) { + registers.registerComponentModel(ContinuousModel); + registers.registerComponentView(ContinuousView); + installCommon$1(registers); + } + + var PiecewiseModel = + /** @class */ + function (_super) { + __extends(PiecewiseModel, _super); + + function PiecewiseModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = PiecewiseModel.type; + /** + * The order is always [low, ..., high]. + * [{text: string, interval: Array.}, ...] + */ + + _this._pieceList = []; + return _this; + } + + PiecewiseModel.prototype.optionUpdated = function (newOption, isInit) { + _super.prototype.optionUpdated.apply(this, arguments); + + this.resetExtent(); + + var mode = this._mode = this._determineMode(); + + this._pieceList = []; + + resetMethods[this._mode].call(this, this._pieceList); + + this._resetSelected(newOption, isInit); + + var categories = this.option.categories; + this.resetVisual(function (mappingOption, state) { + if (mode === 'categories') { + mappingOption.mappingMethod = 'category'; + mappingOption.categories = clone(categories); + } else { + mappingOption.dataExtent = this.getExtent(); + mappingOption.mappingMethod = 'piecewise'; + mappingOption.pieceList = map(this._pieceList, function (piece) { + piece = clone(piece); + + if (state !== 'inRange') { + // FIXME + // outOfRange do not support special visual in pieces. + piece.visual = null; + } + + return piece; + }); + } + }); + }; + /** + * @protected + * @override + */ + + + PiecewiseModel.prototype.completeVisualOption = function () { + // Consider this case: + // visualMap: { + // pieces: [{symbol: 'circle', lt: 0}, {symbol: 'rect', gte: 0}] + // } + // where no inRange/outOfRange set but only pieces. So we should make + // default inRange/outOfRange for this case, otherwise visuals that only + // appear in `pieces` will not be taken into account in visual encoding. + var option = this.option; + var visualTypesInPieces = {}; + var visualTypes = VisualMapping.listVisualTypes(); + var isCategory = this.isCategory(); + each(option.pieces, function (piece) { + each(visualTypes, function (visualType) { + if (piece.hasOwnProperty(visualType)) { + visualTypesInPieces[visualType] = 1; + } + }); + }); + each(visualTypesInPieces, function (v, visualType) { + var exists = false; + each(this.stateList, function (state) { + exists = exists || has(option, state, visualType) || has(option.target, state, visualType); + }, this); + !exists && each(this.stateList, function (state) { + (option[state] || (option[state] = {}))[visualType] = visualDefault.get(visualType, state === 'inRange' ? 'active' : 'inactive', isCategory); + }); + }, this); + + function has(obj, state, visualType) { + return obj && obj[state] && obj[state].hasOwnProperty(visualType); + } + + _super.prototype.completeVisualOption.apply(this, arguments); + }; + + PiecewiseModel.prototype._resetSelected = function (newOption, isInit) { + var thisOption = this.option; + var pieceList = this._pieceList; // Selected do not merge but all override. + + var selected = (isInit ? thisOption : newOption).selected || {}; + thisOption.selected = selected; // Consider 'not specified' means true. + + each(pieceList, function (piece, index) { + var key = this.getSelectedMapKey(piece); + + if (!selected.hasOwnProperty(key)) { + selected[key] = true; + } + }, this); + + if (thisOption.selectedMode === 'single') { + // Ensure there is only one selected. + var hasSel_1 = false; + each(pieceList, function (piece, index) { + var key = this.getSelectedMapKey(piece); + + if (selected[key]) { + hasSel_1 ? selected[key] = false : hasSel_1 = true; + } + }, this); + } // thisOption.selectedMode === 'multiple', default: all selected. + + }; + /** + * @public + */ + + + PiecewiseModel.prototype.getItemSymbol = function () { + return this.get('itemSymbol'); + }; + /** + * @public + */ + + + PiecewiseModel.prototype.getSelectedMapKey = function (piece) { + return this._mode === 'categories' ? piece.value + '' : piece.index + ''; + }; + /** + * @public + */ + + + PiecewiseModel.prototype.getPieceList = function () { + return this._pieceList; + }; + /** + * @return {string} + */ + + + PiecewiseModel.prototype._determineMode = function () { + var option = this.option; + return option.pieces && option.pieces.length > 0 ? 'pieces' : this.option.categories ? 'categories' : 'splitNumber'; + }; + /** + * @override + */ + + + PiecewiseModel.prototype.setSelected = function (selected) { + this.option.selected = clone(selected); + }; + /** + * @override + */ + + + PiecewiseModel.prototype.getValueState = function (value) { + var index = VisualMapping.findPieceIndex(value, this._pieceList); + return index != null ? this.option.selected[this.getSelectedMapKey(this._pieceList[index])] ? 'inRange' : 'outOfRange' : 'outOfRange'; + }; + /** + * @public + * @param pieceIndex piece index in visualMapModel.getPieceList() + */ + + + PiecewiseModel.prototype.findTargetDataIndices = function (pieceIndex) { + var result = []; + var pieceList = this._pieceList; + this.eachTargetSeries(function (seriesModel) { + var dataIndices = []; + var data = seriesModel.getData(); + data.each(this.getDataDimensionIndex(data), function (value, dataIndex) { + // Should always base on model pieceList, because it is order sensitive. + var pIdx = VisualMapping.findPieceIndex(value, pieceList); + pIdx === pieceIndex && dataIndices.push(dataIndex); + }, this); + result.push({ + seriesId: seriesModel.id, + dataIndex: dataIndices + }); + }, this); + return result; + }; + /** + * @private + * @param piece piece.value or piece.interval is required. + * @return Can be Infinity or -Infinity + */ + + + PiecewiseModel.prototype.getRepresentValue = function (piece) { + var representValue; + + if (this.isCategory()) { + representValue = piece.value; + } else { + if (piece.value != null) { + representValue = piece.value; + } else { + var pieceInterval = piece.interval || []; + representValue = pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity ? 0 : (pieceInterval[0] + pieceInterval[1]) / 2; + } + } + + return representValue; + }; + + PiecewiseModel.prototype.getVisualMeta = function (getColorVisual) { + // Do not support category. (category axis is ordinal, numerical) + if (this.isCategory()) { + return; + } + + var stops = []; + var outerColors = ['', '']; + var visualMapModel = this; + + function setStop(interval, valueState) { + var representValue = visualMapModel.getRepresentValue({ + interval: interval + }); // Not category + + if (!valueState) { + valueState = visualMapModel.getValueState(representValue); + } + + var color = getColorVisual(representValue, valueState); + + if (interval[0] === -Infinity) { + outerColors[0] = color; + } else if (interval[1] === Infinity) { + outerColors[1] = color; + } else { + stops.push({ + value: interval[0], + color: color + }, { + value: interval[1], + color: color + }); + } + } // Suplement + + + var pieceList = this._pieceList.slice(); + + if (!pieceList.length) { + pieceList.push({ + interval: [-Infinity, Infinity] + }); + } else { + var edge = pieceList[0].interval[0]; + edge !== -Infinity && pieceList.unshift({ + interval: [-Infinity, edge] + }); + edge = pieceList[pieceList.length - 1].interval[1]; + edge !== Infinity && pieceList.push({ + interval: [edge, Infinity] + }); + } + + var curr = -Infinity; + each(pieceList, function (piece) { + var interval = piece.interval; + + if (interval) { + // Fulfill gap. + interval[0] > curr && setStop([curr, interval[0]], 'outOfRange'); + setStop(interval.slice()); + curr = interval[1]; + } + }, this); + return { + stops: stops, + outerColors: outerColors + }; + }; + + PiecewiseModel.type = 'visualMap.piecewise'; + PiecewiseModel.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, { + selected: null, + minOpen: false, + maxOpen: false, + align: 'auto', + itemWidth: 20, + itemHeight: 14, + itemSymbol: 'roundRect', + pieces: null, + categories: null, + splitNumber: 5, + selectedMode: 'multiple', + itemGap: 10, + hoverLink: true // Enable hover highlight. + + }); + return PiecewiseModel; + }(VisualMapModel); + /** + * Key is this._mode + * @type {Object} + * @this {module:echarts/component/viusalMap/PiecewiseMode} + */ + + var resetMethods = { + splitNumber: function (outPieceList) { + var thisOption = this.option; + var precision = Math.min(thisOption.precision, 20); + var dataExtent = this.getExtent(); + var splitNumber = thisOption.splitNumber; + splitNumber = Math.max(parseInt(splitNumber, 10), 1); + thisOption.splitNumber = splitNumber; + var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber; // Precision auto-adaption + + while (+splitStep.toFixed(precision) !== splitStep && precision < 5) { + precision++; + } + + thisOption.precision = precision; + splitStep = +splitStep.toFixed(precision); + + if (thisOption.minOpen) { + outPieceList.push({ + interval: [-Infinity, dataExtent[0]], + close: [0, 0] + }); + } + + for (var index = 0, curr = dataExtent[0]; index < splitNumber; curr += splitStep, index++) { + var max = index === splitNumber - 1 ? dataExtent[1] : curr + splitStep; + outPieceList.push({ + interval: [curr, max], + close: [1, 1] + }); + } + + if (thisOption.maxOpen) { + outPieceList.push({ + interval: [dataExtent[1], Infinity], + close: [0, 0] + }); + } + + reformIntervals(outPieceList); + each(outPieceList, function (piece, index) { + piece.index = index; + piece.text = this.formatValueText(piece.interval); + }, this); + }, + categories: function (outPieceList) { + var thisOption = this.option; + each(thisOption.categories, function (cate) { + // FIXME category模式也使用pieceList,但在visualMapping中不是使用pieceList。 + // 是否改一致。 + outPieceList.push({ + text: this.formatValueText(cate, true), + value: cate + }); + }, this); // See "Order Rule". + + normalizeReverse(thisOption, outPieceList); + }, + pieces: function (outPieceList) { + var thisOption = this.option; + each(thisOption.pieces, function (pieceListItem, index) { + if (!isObject(pieceListItem)) { + pieceListItem = { + value: pieceListItem + }; + } + + var item = { + text: '', + index: index + }; + + if (pieceListItem.label != null) { + item.text = pieceListItem.label; + } + + if (pieceListItem.hasOwnProperty('value')) { + var value = item.value = pieceListItem.value; + item.interval = [value, value]; + item.close = [1, 1]; + } else { + // `min` `max` is legacy option. + // `lt` `gt` `lte` `gte` is recommanded. + var interval = item.interval = []; + var close_1 = item.close = [0, 0]; + var closeList = [1, 0, 1]; + var infinityList = [-Infinity, Infinity]; + var useMinMax = []; + + for (var lg = 0; lg < 2; lg++) { + var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg]; + + for (var i = 0; i < 3 && interval[lg] == null; i++) { + interval[lg] = pieceListItem[names[i]]; + close_1[lg] = closeList[i]; + useMinMax[lg] = i === 2; + } + + interval[lg] == null && (interval[lg] = infinityList[lg]); + } + + useMinMax[0] && interval[1] === Infinity && (close_1[0] = 0); + useMinMax[1] && interval[0] === -Infinity && (close_1[1] = 0); + + if ("development" !== 'production') { + if (interval[0] > interval[1]) { + console.warn('Piece ' + index + 'is illegal: ' + interval + ' lower bound should not greater then uppper bound.'); + } + } + + if (interval[0] === interval[1] && close_1[0] && close_1[1]) { + // Consider: [{min: 5, max: 5, visual: {...}}, {min: 0, max: 5}], + // we use value to lift the priority when min === max + item.value = interval[0]; + } + } + + item.visual = VisualMapping.retrieveVisuals(pieceListItem); + outPieceList.push(item); + }, this); // See "Order Rule". + + normalizeReverse(thisOption, outPieceList); // Only pieces + + reformIntervals(outPieceList); + each(outPieceList, function (piece) { + var close = piece.close; + var edgeSymbols = [['<', '≤'][close[1]], ['>', '≥'][close[0]]]; + piece.text = piece.text || this.formatValueText(piece.value != null ? piece.value : piece.interval, false, edgeSymbols); + }, this); + } + }; + + function normalizeReverse(thisOption, pieceList) { + var inverse = thisOption.inverse; + + if (thisOption.orient === 'vertical' ? !inverse : inverse) { + pieceList.reverse(); + } + } + + var PiecewiseVisualMapView = + /** @class */ + function (_super) { + __extends(PiecewiseVisualMapView, _super); + + function PiecewiseVisualMapView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = PiecewiseVisualMapView.type; + return _this; + } + + PiecewiseVisualMapView.prototype.doRender = function () { + var thisGroup = this.group; + thisGroup.removeAll(); + var visualMapModel = this.visualMapModel; + var textGap = visualMapModel.get('textGap'); + var textStyleModel = visualMapModel.textStyleModel; + var textFont = textStyleModel.getFont(); + var textFill = textStyleModel.getTextColor(); + + var itemAlign = this._getItemAlign(); + + var itemSize = visualMapModel.itemSize; + + var viewData = this._getViewData(); + + var endsText = viewData.endsText; + var showLabel = retrieve(visualMapModel.get('showLabel', true), !endsText); + endsText && this._renderEndsText(thisGroup, endsText[0], itemSize, showLabel, itemAlign); + each(viewData.viewPieceList, function (item) { + var piece = item.piece; + var itemGroup = new Group(); + itemGroup.onclick = bind(this._onItemClick, this, piece); + + this._enableHoverLink(itemGroup, item.indexInModelPieceList); // TODO Category + + + var representValue = visualMapModel.getRepresentValue(piece); + + this._createItemSymbol(itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]]); + + if (showLabel) { + var visualState = this.visualMapModel.getValueState(representValue); + itemGroup.add(new ZRText({ + style: { + x: itemAlign === 'right' ? -textGap : itemSize[0] + textGap, + y: itemSize[1] / 2, + text: piece.text, + verticalAlign: 'middle', + align: itemAlign, + font: textFont, + fill: textFill, + opacity: visualState === 'outOfRange' ? 0.5 : 1 + } + })); + } + + thisGroup.add(itemGroup); + }, this); + endsText && this._renderEndsText(thisGroup, endsText[1], itemSize, showLabel, itemAlign); + box(visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap')); + this.renderBackground(thisGroup); + this.positionGroup(thisGroup); + }; + + PiecewiseVisualMapView.prototype._enableHoverLink = function (itemGroup, pieceIndex) { + var _this = this; + + itemGroup.on('mouseover', function () { + return onHoverLink('highlight'); + }).on('mouseout', function () { + return onHoverLink('downplay'); + }); + + var onHoverLink = function (method) { + var visualMapModel = _this.visualMapModel; // TODO: TYPE More detailed action types + + visualMapModel.option.hoverLink && _this.api.dispatchAction({ + type: method, + batch: makeHighDownBatch(visualMapModel.findTargetDataIndices(pieceIndex), visualMapModel) + }); + }; + }; + + PiecewiseVisualMapView.prototype._getItemAlign = function () { + var visualMapModel = this.visualMapModel; + var modelOption = visualMapModel.option; + + if (modelOption.orient === 'vertical') { + return getItemAlign(visualMapModel, this.api, visualMapModel.itemSize); + } else { + // horizontal, most case left unless specifying right. + var align = modelOption.align; + + if (!align || align === 'auto') { + align = 'left'; + } + + return align; + } + }; + + PiecewiseVisualMapView.prototype._renderEndsText = function (group, text, itemSize, showLabel, itemAlign) { + if (!text) { + return; + } + + var itemGroup = new Group(); + var textStyleModel = this.visualMapModel.textStyleModel; + itemGroup.add(new ZRText({ + style: { + x: showLabel ? itemAlign === 'right' ? itemSize[0] : 0 : itemSize[0] / 2, + y: itemSize[1] / 2, + verticalAlign: 'middle', + align: showLabel ? itemAlign : 'center', + text: text, + font: textStyleModel.getFont(), + fill: textStyleModel.getTextColor() + } + })); + group.add(itemGroup); + }; + /** + * @private + * @return {Object} {peiceList, endsText} The order is the same as screen pixel order. + */ + + + PiecewiseVisualMapView.prototype._getViewData = function () { + var visualMapModel = this.visualMapModel; + var viewPieceList = map(visualMapModel.getPieceList(), function (piece, index) { + return { + piece: piece, + indexInModelPieceList: index + }; + }); + var endsText = visualMapModel.get('text'); // Consider orient and inverse. + + var orient = visualMapModel.get('orient'); + var inverse = visualMapModel.get('inverse'); // Order of model pieceList is always [low, ..., high] + + if (orient === 'horizontal' ? inverse : !inverse) { + viewPieceList.reverse(); + } // Origin order of endsText is [high, low] + else if (endsText) { + endsText = endsText.slice().reverse(); + } + + return { + viewPieceList: viewPieceList, + endsText: endsText + }; + }; + + PiecewiseVisualMapView.prototype._createItemSymbol = function (group, representValue, shapeParam) { + group.add(createSymbol( // symbol will be string + this.getControllerVisual(representValue, 'symbol'), shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3], // color will be string + this.getControllerVisual(representValue, 'color'))); + }; + + PiecewiseVisualMapView.prototype._onItemClick = function (piece) { + var visualMapModel = this.visualMapModel; + var option = visualMapModel.option; + var selected = clone(option.selected); + var newKey = visualMapModel.getSelectedMapKey(piece); + + if (option.selectedMode === 'single') { + selected[newKey] = true; + each(selected, function (o, key) { + selected[key] = key === newKey; + }); + } else { + selected[newKey] = !selected[newKey]; + } + + this.api.dispatchAction({ + type: 'selectDataRange', + from: this.uid, + visualMapId: this.visualMapModel.id, + selected: selected + }); + }; + + PiecewiseVisualMapView.type = 'visualMap.piecewise'; + return PiecewiseVisualMapView; + }(VisualMapView); + + function install$O(registers) { + registers.registerComponentModel(PiecewiseModel); + registers.registerComponentView(PiecewiseVisualMapView); + installCommon$1(registers); + } + + function install$P(registers) { + use(install$N); + use(install$O); // Do not install './dataZoomSelect', + // since it only work for toolbox dataZoom. + } + + var DEFAULT_OPTION = { + label: { + enabled: true + }, + decal: { + show: false + } + }; + var inner$l = makeInner(); + var decalPaletteScope = {}; + function ariaVisual(ecModel, api) { + var ariaModel = ecModel.getModel('aria'); // See "area enabled" detection code in `GlobalModel.ts`. + + if (!ariaModel.get('enabled')) { + return; + } + + var defaultOption = clone(DEFAULT_OPTION); + merge(defaultOption.label, ecModel.getLocaleModel().get('aria'), false); + merge(ariaModel.option, defaultOption, false); + setDecal(); + setLabel(); + + function setDecal() { + var decalModel = ariaModel.getModel('decal'); + var useDecal = decalModel.get('show'); + + if (useDecal) { + // Each type of series use one scope. + // Pie and funnel are using diferrent scopes + var paletteScopeGroupByType_1 = createHashMap(); + ecModel.eachSeries(function (seriesModel) { + if (seriesModel.isColorBySeries()) { + return; + } + + var decalScope = paletteScopeGroupByType_1.get(seriesModel.type); + + if (!decalScope) { + decalScope = {}; + paletteScopeGroupByType_1.set(seriesModel.type, decalScope); + } + + inner$l(seriesModel).scope = decalScope; + }); + ecModel.eachRawSeries(function (seriesModel) { + if (ecModel.isSeriesFiltered(seriesModel)) { + return; + } + + if (typeof seriesModel.enableAriaDecal === 'function') { + // Let series define how to use decal palette on data + seriesModel.enableAriaDecal(); + return; + } + + var data = seriesModel.getData(); + + if (!seriesModel.isColorBySeries()) { + var dataAll_1 = seriesModel.getRawData(); + var idxMap_1 = {}; + var decalScope_1 = inner$l(seriesModel).scope; + data.each(function (idx) { + var rawIdx = data.getRawIndex(idx); + idxMap_1[rawIdx] = idx; + }); + var dataCount_1 = dataAll_1.count(); + dataAll_1.each(function (rawIdx) { + var idx = idxMap_1[rawIdx]; + var name = dataAll_1.getName(rawIdx) || rawIdx + ''; + var paletteDecal = getDecalFromPalette(seriesModel.ecModel, name, decalScope_1, dataCount_1); + var specifiedDecal = data.getItemVisual(idx, 'decal'); + data.setItemVisual(idx, 'decal', mergeDecal(specifiedDecal, paletteDecal)); + }); + } else { + var paletteDecal = getDecalFromPalette(seriesModel.ecModel, seriesModel.name, decalPaletteScope, ecModel.getSeriesCount()); + var specifiedDecal = data.getVisual('decal'); + data.setVisual('decal', mergeDecal(specifiedDecal, paletteDecal)); + } + + function mergeDecal(specifiedDecal, paletteDecal) { + // Merge decal from palette to decal from itemStyle. + // User do not need to specify all of the decal props. + var resultDecal = specifiedDecal ? extend(extend({}, paletteDecal), specifiedDecal) : paletteDecal; + resultDecal.dirty = true; + return resultDecal; + } + }); + } + } + + function setLabel() { + var labelLocale = ecModel.getLocaleModel().get('aria'); + var labelModel = ariaModel.getModel('label'); + labelModel.option = defaults(labelModel.option, labelLocale); + + if (!labelModel.get('enabled')) { + return; + } + + var dom = api.getZr().dom; + + if (labelModel.get('description')) { + dom.setAttribute('aria-label', labelModel.get('description')); + return; + } + + var seriesCnt = ecModel.getSeriesCount(); + var maxDataCnt = labelModel.get(['data', 'maxCount']) || 10; + var maxSeriesCnt = labelModel.get(['series', 'maxCount']) || 10; + var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt); + var ariaLabel; + + if (seriesCnt < 1) { + // No series, no aria label + return; + } else { + var title = getTitle(); + + if (title) { + var withTitle = labelModel.get(['general', 'withTitle']); + ariaLabel = replace(withTitle, { + title: title + }); + } else { + ariaLabel = labelModel.get(['general', 'withoutTitle']); + } + + var seriesLabels_1 = []; + var prefix = seriesCnt > 1 ? labelModel.get(['series', 'multiple', 'prefix']) : labelModel.get(['series', 'single', 'prefix']); + ariaLabel += replace(prefix, { + seriesCount: seriesCnt + }); + ecModel.eachSeries(function (seriesModel, idx) { + if (idx < displaySeriesCnt) { + var seriesLabel = void 0; + var seriesName = seriesModel.get('name'); + var withName = seriesName ? 'withName' : 'withoutName'; + seriesLabel = seriesCnt > 1 ? labelModel.get(['series', 'multiple', withName]) : labelModel.get(['series', 'single', withName]); + seriesLabel = replace(seriesLabel, { + seriesId: seriesModel.seriesIndex, + seriesName: seriesModel.get('name'), + seriesType: getSeriesTypeName(seriesModel.subType) + }); + var data = seriesModel.getData(); + + if (data.count() > maxDataCnt) { + // Show part of data + var partialLabel = labelModel.get(['data', 'partialData']); + seriesLabel += replace(partialLabel, { + displayCnt: maxDataCnt + }); + } else { + seriesLabel += labelModel.get(['data', 'allData']); + } + + var middleSeparator_1 = labelModel.get(['data', 'separator', 'middle']); + var endSeparator_1 = labelModel.get(['data', 'separator', 'end']); + var dataLabels = []; + + for (var i = 0; i < data.count(); i++) { + if (i < maxDataCnt) { + var name_1 = data.getName(i); + var value = data.getValues(i); + var dataLabel = labelModel.get(['data', name_1 ? 'withName' : 'withoutName']); + dataLabels.push(replace(dataLabel, { + name: name_1, + value: value.join(middleSeparator_1) + })); + } + } + + seriesLabel += dataLabels.join(middleSeparator_1) + endSeparator_1; + seriesLabels_1.push(seriesLabel); + } + }); + var separatorModel = labelModel.getModel(['series', 'multiple', 'separator']); + var middleSeparator = separatorModel.get('middle'); + var endSeparator = separatorModel.get('end'); + ariaLabel += seriesLabels_1.join(middleSeparator) + endSeparator; + dom.setAttribute('aria-label', ariaLabel); + } + } + + function replace(str, keyValues) { + if (typeof str !== 'string') { + return str; + } + + var result = str; + each(keyValues, function (value, key) { + result = result.replace(new RegExp('\\{\\s*' + key + '\\s*\\}', 'g'), value); + }); + return result; + } + + function getTitle() { + var title = ecModel.get('title'); + + if (title && title.length) { + title = title[0]; + } + + return title && title.text; + } + + function getSeriesTypeName(type) { + return ecModel.getLocaleModel().get(['series', 'typeNames'])[type] || '自定义图'; + } + } + + function ariaPreprocessor(option) { + if (!option || !option.aria) { + return; + } + + var aria = option.aria; // aria.show is deprecated and should use aria.enabled instead + + if (aria.show != null) { + aria.enabled = aria.show; + } + + aria.label = aria.label || {}; // move description, general, series, data to be under aria.label + + each(['description', 'general', 'series', 'data'], function (name) { + if (aria[name] != null) { + aria.label[name] = aria[name]; + } + }); + } + + function install$Q(registers) { + registers.registerPreprocessor(ariaPreprocessor); + registers.registerVisual(registers.PRIORITY.VISUAL.ARIA, ariaVisual); + } + + var RELATIONAL_EXPRESSION_OP_ALIAS_MAP = { + value: 'eq', + // PENDING: not good for literal semantic? + '<': 'lt', + '<=': 'lte', + '>': 'gt', + '>=': 'gte', + '=': 'eq', + '!=': 'ne', + '<>': 'ne' // Might mileading for sake of the different between '==' and '===', + // So dont support them. + // '==': 'eq', + // '===': 'seq', + // '!==': 'sne' + // PENDING: Whether support some common alias "ge", "le", "neq"? + // ge: 'gte', + // le: 'lte', + // neq: 'ne', + + }; // type RelationalExpressionOpEvaluate = (tarVal: unknown, condVal: unknown) => boolean; + + var RegExpEvaluator = + /** @class */ + function () { + function RegExpEvaluator(rVal) { + // Support condVal: RegExp | string + var condValue = this._condVal = isString(rVal) ? new RegExp(rVal) : isRegExp(rVal) ? rVal : null; + + if (condValue == null) { + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = makePrintable('Illegal regexp', rVal, 'in'); + } + + throwError(errMsg); + } + } + + RegExpEvaluator.prototype.evaluate = function (lVal) { + var type = typeof lVal; + return type === 'string' ? this._condVal.test(lVal) : type === 'number' ? this._condVal.test(lVal + '') : false; + }; + + return RegExpEvaluator; + }(); + + var ConstConditionInternal = + /** @class */ + function () { + function ConstConditionInternal() {} + + ConstConditionInternal.prototype.evaluate = function () { + return this.value; + }; + + return ConstConditionInternal; + }(); + + var AndConditionInternal = + /** @class */ + function () { + function AndConditionInternal() {} + + AndConditionInternal.prototype.evaluate = function () { + var children = this.children; + + for (var i = 0; i < children.length; i++) { + if (!children[i].evaluate()) { + return false; + } + } + + return true; + }; + + return AndConditionInternal; + }(); + + var OrConditionInternal = + /** @class */ + function () { + function OrConditionInternal() {} + + OrConditionInternal.prototype.evaluate = function () { + var children = this.children; + + for (var i = 0; i < children.length; i++) { + if (children[i].evaluate()) { + return true; + } + } + + return false; + }; + + return OrConditionInternal; + }(); + + var NotConditionInternal = + /** @class */ + function () { + function NotConditionInternal() {} + + NotConditionInternal.prototype.evaluate = function () { + return !this.child.evaluate(); + }; + + return NotConditionInternal; + }(); + + var RelationalConditionInternal = + /** @class */ + function () { + function RelationalConditionInternal() {} + + RelationalConditionInternal.prototype.evaluate = function () { + var needParse = !!this.valueParser; // Call getValue with no `this`. + + var getValue = this.getValue; + var tarValRaw = getValue(this.valueGetterParam); + var tarValParsed = needParse ? this.valueParser(tarValRaw) : null; // Relational cond follow "and" logic internally. + + for (var i = 0; i < this.subCondList.length; i++) { + if (!this.subCondList[i].evaluate(needParse ? tarValParsed : tarValRaw)) { + return false; + } + } + + return true; + }; + + return RelationalConditionInternal; + }(); + + function parseOption(exprOption, getters) { + if (exprOption === true || exprOption === false) { + var cond = new ConstConditionInternal(); + cond.value = exprOption; + return cond; + } + + var errMsg = ''; + + if (!isObjectNotArray(exprOption)) { + if ("development" !== 'production') { + errMsg = makePrintable('Illegal config. Expect a plain object but actually', exprOption); + } + + throwError(errMsg); + } + + if (exprOption.and) { + return parseAndOrOption('and', exprOption, getters); + } else if (exprOption.or) { + return parseAndOrOption('or', exprOption, getters); + } else if (exprOption.not) { + return parseNotOption(exprOption, getters); + } + + return parseRelationalOption(exprOption, getters); + } + + function parseAndOrOption(op, exprOption, getters) { + var subOptionArr = exprOption[op]; + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = makePrintable('"and"/"or" condition should only be `' + op + ': [...]` and must not be empty array.', 'Illegal condition:', exprOption); + } + + if (!isArray(subOptionArr)) { + throwError(errMsg); + } + + if (!subOptionArr.length) { + throwError(errMsg); + } + + var cond = op === 'and' ? new AndConditionInternal() : new OrConditionInternal(); + cond.children = map(subOptionArr, function (subOption) { + return parseOption(subOption, getters); + }); + + if (!cond.children.length) { + throwError(errMsg); + } + + return cond; + } + + function parseNotOption(exprOption, getters) { + var subOption = exprOption.not; + var errMsg = ''; + + if ("development" !== 'production') { + errMsg = makePrintable('"not" condition should only be `not: {}`.', 'Illegal condition:', exprOption); + } + + if (!isObjectNotArray(subOption)) { + throwError(errMsg); + } + + var cond = new NotConditionInternal(); + cond.child = parseOption(subOption, getters); + + if (!cond.child) { + throwError(errMsg); + } + + return cond; + } + + function parseRelationalOption(exprOption, getters) { + var errMsg = ''; + var valueGetterParam = getters.prepareGetValue(exprOption); + var subCondList = []; + var exprKeys = keys(exprOption); + var parserName = exprOption.parser; + var valueParser = parserName ? getRawValueParser(parserName) : null; + + for (var i = 0; i < exprKeys.length; i++) { + var keyRaw = exprKeys[i]; + + if (keyRaw === 'parser' || getters.valueGetterAttrMap.get(keyRaw)) { + continue; + } + + var op = hasOwn(RELATIONAL_EXPRESSION_OP_ALIAS_MAP, keyRaw) ? RELATIONAL_EXPRESSION_OP_ALIAS_MAP[keyRaw] : keyRaw; + var condValueRaw = exprOption[keyRaw]; + var condValueParsed = valueParser ? valueParser(condValueRaw) : condValueRaw; + var evaluator = createFilterComparator(op, condValueParsed) || op === 'reg' && new RegExpEvaluator(condValueParsed); + + if (!evaluator) { + if ("development" !== 'production') { + errMsg = makePrintable('Illegal relational operation: "' + keyRaw + '" in condition:', exprOption); + } + + throwError(errMsg); + } + + subCondList.push(evaluator); + } + + if (!subCondList.length) { + if ("development" !== 'production') { + errMsg = makePrintable('Relational condition must have at least one operator.', 'Illegal condition:', exprOption); + } // No relational operator always disabled in case of dangers result. + + + throwError(errMsg); + } + + var cond = new RelationalConditionInternal(); + cond.valueGetterParam = valueGetterParam; + cond.valueParser = valueParser; + cond.getValue = getters.getValue; + cond.subCondList = subCondList; + return cond; + } + + function isObjectNotArray(val) { + return isObject(val) && !isArrayLike(val); + } + + var ConditionalExpressionParsed = + /** @class */ + function () { + function ConditionalExpressionParsed(exprOption, getters) { + this._cond = parseOption(exprOption, getters); + } + + ConditionalExpressionParsed.prototype.evaluate = function () { + return this._cond.evaluate(); + }; + + return ConditionalExpressionParsed; + }(); + function parseConditionalExpression(exprOption, getters) { + return new ConditionalExpressionParsed(exprOption, getters); + } + + var filterTransform = { + type: 'echarts:filter', + // PEDING: enhance to filter by index rather than create new data + transform: function (params) { + // [Caveat] Fail-Fast: + // Do not return the whole dataset unless user config indicate it explicitly. + // For example, if no condition specified by mistake, return an empty result + // is better than return the entire raw soruce for user to find the mistake. + var upstream = params.upstream; + var rawItem; + var condition = parseConditionalExpression(params.config, { + valueGetterAttrMap: createHashMap({ + dimension: true + }), + prepareGetValue: function (exprOption) { + var errMsg = ''; + var dimLoose = exprOption.dimension; + + if (!hasOwn(exprOption, 'dimension')) { + if ("development" !== 'production') { + errMsg = makePrintable('Relation condition must has prop "dimension" specified.', 'Illegal condition:', exprOption); + } + + throwError(errMsg); + } + + var dimInfo = upstream.getDimensionInfo(dimLoose); + + if (!dimInfo) { + if ("development" !== 'production') { + errMsg = makePrintable('Can not find dimension info via: ' + dimLoose + '.\n', 'Existing dimensions: ', upstream.cloneAllDimensionInfo(), '.\n', 'Illegal condition:', exprOption, '.\n'); + } + + throwError(errMsg); + } + + return { + dimIdx: dimInfo.index + }; + }, + getValue: function (param) { + return upstream.retrieveValueFromItem(rawItem, param.dimIdx); + } + }); + var resultData = []; + + for (var i = 0, len = upstream.count(); i < len; i++) { + rawItem = upstream.getRawDataItem(i); + + if (condition.evaluate()) { + resultData.push(rawItem); + } + } + + return { + data: resultData + }; + } + }; + + var sampleLog = ''; + + if ("development" !== 'production') { + sampleLog = ['Valid config is like:', '{ dimension: "age", order: "asc" }', 'or [{ dimension: "age", order: "asc"], { dimension: "date", order: "desc" }]'].join(' '); + } + + var sortTransform = { + type: 'echarts:sort', + transform: function (params) { + var upstream = params.upstream; + var config = params.config; + var errMsg = ''; // Normalize + // const orderExprList: OrderExpression[] = isArray(config[0]) + // ? config as OrderExpression[] + // : [config as OrderExpression]; + + var orderExprList = normalizeToArray(config); + + if (!orderExprList.length) { + if ("development" !== 'production') { + errMsg = 'Empty `config` in sort transform.'; + } + + throwError(errMsg); + } + + var orderDefList = []; + each(orderExprList, function (orderExpr) { + var dimLoose = orderExpr.dimension; + var order = orderExpr.order; + var parserName = orderExpr.parser; + var incomparable = orderExpr.incomparable; + + if (dimLoose == null) { + if ("development" !== 'production') { + errMsg = 'Sort transform config must has "dimension" specified.' + sampleLog; + } + + throwError(errMsg); + } + + if (order !== 'asc' && order !== 'desc') { + if ("development" !== 'production') { + errMsg = 'Sort transform config must has "order" specified.' + sampleLog; + } + + throwError(errMsg); + } + + if (incomparable && incomparable !== 'min' && incomparable !== 'max') { + var errMsg_1 = ''; + + if ("development" !== 'production') { + errMsg_1 = 'incomparable must be "min" or "max" rather than "' + incomparable + '".'; + } + + throwError(errMsg_1); + } + + if (order !== 'asc' && order !== 'desc') { + var errMsg_2 = ''; + + if ("development" !== 'production') { + errMsg_2 = 'order must be "asc" or "desc" rather than "' + order + '".'; + } + + throwError(errMsg_2); + } + + var dimInfo = upstream.getDimensionInfo(dimLoose); + + if (!dimInfo) { + if ("development" !== 'production') { + errMsg = makePrintable('Can not find dimension info via: ' + dimLoose + '.\n', 'Existing dimensions: ', upstream.cloneAllDimensionInfo(), '.\n', 'Illegal config:', orderExpr, '.\n'); + } + + throwError(errMsg); + } + + var parser = parserName ? getRawValueParser(parserName) : null; + + if (parserName && !parser) { + if ("development" !== 'production') { + errMsg = makePrintable('Invalid parser name ' + parserName + '.\n', 'Illegal config:', orderExpr, '.\n'); + } + + throwError(errMsg); + } + + orderDefList.push({ + dimIdx: dimInfo.index, + parser: parser, + comparator: new SortOrderComparator(order, incomparable) + }); + }); // TODO: support it? + + var sourceFormat = upstream.sourceFormat; + + if (sourceFormat !== SOURCE_FORMAT_ARRAY_ROWS && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS) { + if ("development" !== 'production') { + errMsg = 'sourceFormat "' + sourceFormat + '" is not supported yet'; + } + + throwError(errMsg); + } // Other upstream format are all array. + + + var resultData = []; + + for (var i = 0, len = upstream.count(); i < len; i++) { + resultData.push(upstream.getRawDataItem(i)); + } + + resultData.sort(function (item0, item1) { + for (var i = 0; i < orderDefList.length; i++) { + var orderDef = orderDefList[i]; + var val0 = upstream.retrieveValueFromItem(item0, orderDef.dimIdx); + var val1 = upstream.retrieveValueFromItem(item1, orderDef.dimIdx); + + if (orderDef.parser) { + val0 = orderDef.parser(val0); + val1 = orderDef.parser(val1); + } + + var result = orderDef.comparator.evaluate(val0, val1); + + if (result !== 0) { + return result; + } + } + + return 0; + }); + return { + data: resultData + }; + } + }; + + function install$R(registers) { + registers.registerTransform(filterTransform); + registers.registerTransform(sortTransform); + } + + var DatasetModel = + /** @class */ + function (_super) { + __extends(DatasetModel, _super); + + function DatasetModel() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = 'dataset'; + return _this; + } + + DatasetModel.prototype.init = function (option, parentModel, ecModel) { + _super.prototype.init.call(this, option, parentModel, ecModel); + + this._sourceManager = new SourceManager(this); + disableTransformOptionMerge(this); + }; + + DatasetModel.prototype.mergeOption = function (newOption, ecModel) { + _super.prototype.mergeOption.call(this, newOption, ecModel); + + disableTransformOptionMerge(this); + }; + + DatasetModel.prototype.optionUpdated = function () { + this._sourceManager.dirty(); + }; + + DatasetModel.prototype.getSourceManager = function () { + return this._sourceManager; + }; + + DatasetModel.type = 'dataset'; + DatasetModel.defaultOption = { + seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN + }; + return DatasetModel; + }(ComponentModel); + + var DatasetView = + /** @class */ + function (_super) { + __extends(DatasetView, _super); + + function DatasetView() { + var _this = _super !== null && _super.apply(this, arguments) || this; + + _this.type = 'dataset'; + return _this; + } + + DatasetView.type = 'dataset'; + return DatasetView; + }(ComponentView); + + function install$S(registers) { + registers.registerComponentModel(DatasetModel); + registers.registerComponentView(DatasetView); + } + + var CMD$4 = PathProxy.CMD; + function aroundEqual(a, b) { + return Math.abs(a - b) < 1e-5; + } + function pathToBezierCurves(path) { + var data = path.data; + var len = path.len(); + var bezierArrayGroups = []; + var currentSubpath; + var xi = 0; + var yi = 0; + var x0 = 0; + var y0 = 0; + function createNewSubpath(x, y) { + if (currentSubpath && currentSubpath.length > 2) { + bezierArrayGroups.push(currentSubpath); + } + currentSubpath = [x, y]; + } + function addLine(x0, y0, x1, y1) { + if (!(aroundEqual(x0, x1) && aroundEqual(y0, y1))) { + currentSubpath.push(x0, y0, x1, y1, x1, y1); + } + } + function addArc(startAngle, endAngle, cx, cy, rx, ry) { + var delta = Math.abs(endAngle - startAngle); + var len = Math.tan(delta / 4) * 4 / 3; + var dir = endAngle < startAngle ? -1 : 1; + var c1 = Math.cos(startAngle); + var s1 = Math.sin(startAngle); + var c2 = Math.cos(endAngle); + var s2 = Math.sin(endAngle); + var x1 = c1 * rx + cx; + var y1 = s1 * ry + cy; + var x4 = c2 * rx + cx; + var y4 = s2 * ry + cy; + var hx = rx * len * dir; + var hy = ry * len * dir; + currentSubpath.push(x1 - hx * s1, y1 + hy * c1, x4 + hx * s2, y4 - hy * c2, x4, y4); + } + var x1; + var y1; + var x2; + var y2; + for (var i = 0; i < len;) { + var cmd = data[i++]; + var isFirst = i === 1; + if (isFirst) { + xi = data[i]; + yi = data[i + 1]; + x0 = xi; + y0 = yi; + if (cmd === CMD$4.L || cmd === CMD$4.C || cmd === CMD$4.Q) { + currentSubpath = [x0, y0]; + } + } + switch (cmd) { + case CMD$4.M: + xi = x0 = data[i++]; + yi = y0 = data[i++]; + createNewSubpath(x0, y0); + break; + case CMD$4.L: + x1 = data[i++]; + y1 = data[i++]; + addLine(xi, yi, x1, y1); + xi = x1; + yi = y1; + break; + case CMD$4.C: + currentSubpath.push(data[i++], data[i++], data[i++], data[i++], xi = data[i++], yi = data[i++]); + break; + case CMD$4.Q: + x1 = data[i++]; + y1 = data[i++]; + x2 = data[i++]; + y2 = data[i++]; + currentSubpath.push(xi + 2 / 3 * (x1 - xi), yi + 2 / 3 * (y1 - yi), x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2), x2, y2); + xi = x2; + yi = y2; + break; + case CMD$4.A: + var cx = data[i++]; + var cy = data[i++]; + var rx = data[i++]; + var ry = data[i++]; + var startAngle = data[i++]; + var endAngle = data[i++] + startAngle; + i += 1; + var anticlockwise = !data[i++]; + x1 = Math.cos(startAngle) * rx + cx; + y1 = Math.sin(startAngle) * ry + cy; + if (isFirst) { + x0 = x1; + y0 = y1; + createNewSubpath(x0, y0); + } + else { + addLine(xi, yi, x1, y1); + } + xi = Math.cos(endAngle) * rx + cx; + yi = Math.sin(endAngle) * ry + cy; + var step = (anticlockwise ? -1 : 1) * Math.PI / 2; + for (var angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) { + var nextAngle = anticlockwise ? Math.max(angle + step, endAngle) + : Math.min(angle + step, endAngle); + addArc(angle, nextAngle, cx, cy, rx, ry); + } + break; + case CMD$4.R: + x0 = xi = data[i++]; + y0 = yi = data[i++]; + x1 = x0 + data[i++]; + y1 = y0 + data[i++]; + createNewSubpath(x1, y0); + addLine(x1, y0, x1, y1); + addLine(x1, y1, x0, y1); + addLine(x0, y1, x0, y0); + addLine(x0, y0, x1, y0); + break; + case CMD$4.Z: + currentSubpath && addLine(xi, yi, x0, y0); + xi = x0; + yi = y0; + break; + } + } + if (currentSubpath && currentSubpath.length > 2) { + bezierArrayGroups.push(currentSubpath); + } + return bezierArrayGroups; + } + function adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, out, scale) { + if (aroundEqual(x0, x1) && aroundEqual(y0, y1) && aroundEqual(x2, x3) && aroundEqual(y2, y3)) { + out.push(x3, y3); + return; + } + var PIXEL_DISTANCE = 2 / scale; + var PIXEL_DISTANCE_SQR = PIXEL_DISTANCE * PIXEL_DISTANCE; + var dx = x3 - x0; + var dy = y3 - y0; + var d = Math.sqrt(dx * dx + dy * dy); + dx /= d; + dy /= d; + var dx1 = x1 - x0; + var dy1 = y1 - y0; + var dx2 = x2 - x3; + var dy2 = y2 - y3; + var cp1LenSqr = dx1 * dx1 + dy1 * dy1; + var cp2LenSqr = dx2 * dx2 + dy2 * dy2; + if (cp1LenSqr < PIXEL_DISTANCE_SQR && cp2LenSqr < PIXEL_DISTANCE_SQR) { + out.push(x3, y3); + return; + } + var projLen1 = dx * dx1 + dy * dy1; + var projLen2 = -dx * dx2 - dy * dy2; + var d1Sqr = cp1LenSqr - projLen1 * projLen1; + var d2Sqr = cp2LenSqr - projLen2 * projLen2; + if (d1Sqr < PIXEL_DISTANCE_SQR && projLen1 >= 0 + && d2Sqr < PIXEL_DISTANCE_SQR && projLen2 >= 0) { + out.push(x3, y3); + return; + } + var tmpSegX = []; + var tmpSegY = []; + cubicSubdivide(x0, x1, x2, x3, 0.5, tmpSegX); + cubicSubdivide(y0, y1, y2, y3, 0.5, tmpSegY); + adpativeBezier(tmpSegX[0], tmpSegY[0], tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], tmpSegX[3], tmpSegY[3], out, scale); + adpativeBezier(tmpSegX[4], tmpSegY[4], tmpSegX[5], tmpSegY[5], tmpSegX[6], tmpSegY[6], tmpSegX[7], tmpSegY[7], out, scale); + } + function pathToPolygons(path, scale) { + var bezierArrayGroups = pathToBezierCurves(path); + var polygons = []; + scale = scale || 1; + for (var i = 0; i < bezierArrayGroups.length; i++) { + var beziers = bezierArrayGroups[i]; + var polygon = []; + var x0 = beziers[0]; + var y0 = beziers[1]; + polygon.push(x0, y0); + for (var k = 2; k < beziers.length;) { + var x1 = beziers[k++]; + var y1 = beziers[k++]; + var x2 = beziers[k++]; + var y2 = beziers[k++]; + var x3 = beziers[k++]; + var y3 = beziers[k++]; + adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, polygon, scale); + x0 = x3; + y0 = y3; + } + polygons.push(polygon); + } + return polygons; + } + + function getDividingGrids(dimSize, rowDim, count) { + var rowSize = dimSize[rowDim]; + var columnSize = dimSize[1 - rowDim]; + var ratio = Math.abs(rowSize / columnSize); + var rowCount = Math.ceil(Math.sqrt(ratio * count)); + var columnCount = Math.floor(count / rowCount); + if (columnCount === 0) { + columnCount = 1; + rowCount = count; + } + var grids = []; + for (var i = 0; i < rowCount; i++) { + grids.push(columnCount); + } + var currentCount = rowCount * columnCount; + var remained = count - currentCount; + if (remained > 0) { + for (var i = 0; i < remained; i++) { + grids[i % rowCount] += 1; + } + } + return grids; + } + function divideSector(sectorShape, count, outShapes) { + var r0 = sectorShape.r0; + var r = sectorShape.r; + var startAngle = sectorShape.startAngle; + var endAngle = sectorShape.endAngle; + var angle = Math.abs(endAngle - startAngle); + var arcLen = angle * r; + var deltaR = r - r0; + var isAngleRow = arcLen > Math.abs(deltaR); + var grids = getDividingGrids([arcLen, deltaR], isAngleRow ? 0 : 1, count); + var rowSize = (isAngleRow ? angle : deltaR) / grids.length; + for (var row = 0; row < grids.length; row++) { + var columnSize = (isAngleRow ? deltaR : angle) / grids[row]; + for (var column = 0; column < grids[row]; column++) { + var newShape = {}; + if (isAngleRow) { + newShape.startAngle = startAngle + rowSize * row; + newShape.endAngle = startAngle + rowSize * (row + 1); + newShape.r0 = r0 + columnSize * column; + newShape.r = r0 + columnSize * (column + 1); + } + else { + newShape.startAngle = startAngle + columnSize * column; + newShape.endAngle = startAngle + columnSize * (column + 1); + newShape.r0 = r0 + rowSize * row; + newShape.r = r0 + rowSize * (row + 1); + } + newShape.clockwise = sectorShape.clockwise; + newShape.cx = sectorShape.cx; + newShape.cy = sectorShape.cy; + outShapes.push(newShape); + } + } + } + function divideRect(rectShape, count, outShapes) { + var width = rectShape.width; + var height = rectShape.height; + var isHorizontalRow = width > height; + var grids = getDividingGrids([width, height], isHorizontalRow ? 0 : 1, count); + var rowSizeDim = isHorizontalRow ? 'width' : 'height'; + var columnSizeDim = isHorizontalRow ? 'height' : 'width'; + var rowDim = isHorizontalRow ? 'x' : 'y'; + var columnDim = isHorizontalRow ? 'y' : 'x'; + var rowSize = rectShape[rowSizeDim] / grids.length; + for (var row = 0; row < grids.length; row++) { + var columnSize = rectShape[columnSizeDim] / grids[row]; + for (var column = 0; column < grids[row]; column++) { + var newShape = {}; + newShape[rowDim] = row * rowSize; + newShape[columnDim] = column * columnSize; + newShape[rowSizeDim] = rowSize; + newShape[columnSizeDim] = columnSize; + newShape.x += rectShape.x; + newShape.y += rectShape.y; + outShapes.push(newShape); + } + } + } + function crossProduct2d$1(x1, y1, x2, y2) { + return x1 * y2 - x2 * y1; + } + function lineLineIntersect$1(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { + var mx = a2x - a1x; + var my = a2y - a1y; + var nx = b2x - b1x; + var ny = b2y - b1y; + var nmCrossProduct = crossProduct2d$1(nx, ny, mx, my); + if (Math.abs(nmCrossProduct) < 1e-6) { + return null; + } + var b1a1x = a1x - b1x; + var b1a1y = a1y - b1y; + var p = crossProduct2d$1(b1a1x, b1a1y, nx, ny) / nmCrossProduct; + if (p < 0 || p > 1) { + return null; + } + return new Point(p * mx + a1x, p * my + a1y); + } + function projPtOnLine(pt, lineA, lineB) { + var dir = new Point(); + Point.sub(dir, lineB, lineA); + dir.normalize(); + var dir2 = new Point(); + Point.sub(dir2, pt, lineA); + var len = dir2.dot(dir); + return len; + } + function addToPoly(poly, pt) { + var last = poly[poly.length - 1]; + if (last && last[0] === pt[0] && last[1] === pt[1]) { + return; + } + poly.push(pt); + } + function splitPolygonByLine(points, lineA, lineB) { + var len = points.length; + var intersections = []; + for (var i = 0; i < len; i++) { + var p0 = points[i]; + var p1 = points[(i + 1) % len]; + var intersectionPt = lineLineIntersect$1(p0[0], p0[1], p1[0], p1[1], lineA.x, lineA.y, lineB.x, lineB.y); + if (intersectionPt) { + intersections.push({ + projPt: projPtOnLine(intersectionPt, lineA, lineB), + pt: intersectionPt, + idx: i + }); + } + } + if (intersections.length < 2) { + return [{ points: points }, { points: points }]; + } + intersections.sort(function (a, b) { + return a.projPt - b.projPt; + }); + var splitPt0 = intersections[0]; + var splitPt1 = intersections[intersections.length - 1]; + if (splitPt1.idx < splitPt0.idx) { + var tmp = splitPt0; + splitPt0 = splitPt1; + splitPt1 = tmp; + } + var splitPt0Arr = [splitPt0.pt.x, splitPt0.pt.y]; + var splitPt1Arr = [splitPt1.pt.x, splitPt1.pt.y]; + var newPolyA = [splitPt0Arr]; + var newPolyB = [splitPt1Arr]; + for (var i = splitPt0.idx + 1; i <= splitPt1.idx; i++) { + addToPoly(newPolyA, points[i].slice()); + } + addToPoly(newPolyA, splitPt1Arr); + addToPoly(newPolyA, splitPt0Arr); + for (var i = splitPt1.idx + 1; i <= splitPt0.idx + len; i++) { + addToPoly(newPolyB, points[i % len].slice()); + } + addToPoly(newPolyB, splitPt0Arr); + addToPoly(newPolyB, splitPt1Arr); + return [{ + points: newPolyA + }, { + points: newPolyB + }]; + } + function binaryDividePolygon(polygonShape) { + var points = polygonShape.points; + var min = []; + var max = []; + fromPoints(points, min, max); + var boundingRect = new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]); + var width = boundingRect.width; + var height = boundingRect.height; + var x = boundingRect.x; + var y = boundingRect.y; + var pt0 = new Point(); + var pt1 = new Point(); + if (width > height) { + pt0.x = pt1.x = x + width / 2; + pt0.y = y; + pt1.y = y + height; + } + else { + pt0.y = pt1.y = y + height / 2; + pt0.x = x; + pt1.x = x + width; + } + return splitPolygonByLine(points, pt0, pt1); + } + function binaryDivideRecursive(divider, shape, count, out) { + if (count === 1) { + out.push(shape); + } + else { + var mid = Math.floor(count / 2); + var sub = divider(shape); + binaryDivideRecursive(divider, sub[0], mid, out); + binaryDivideRecursive(divider, sub[1], count - mid, out); + } + return out; + } + function clone$4(path, count) { + var paths = []; + for (var i = 0; i < count; i++) { + paths.push(clonePath(path)); + } + return paths; + } + function copyPathProps(source, target) { + target.setStyle(source.style); + target.z = source.z; + target.z2 = source.z2; + target.zlevel = source.zlevel; + } + function polygonConvert(points) { + var out = []; + for (var i = 0; i < points.length;) { + out.push([points[i++], points[i++]]); + } + return out; + } + function split(path, count) { + var outShapes = []; + var shape = path.shape; + var OutShapeCtor; + switch (path.type) { + case 'rect': + divideRect(shape, count, outShapes); + OutShapeCtor = Rect; + break; + case 'sector': + divideSector(shape, count, outShapes); + OutShapeCtor = Sector; + break; + case 'circle': + divideSector({ + r0: 0, r: shape.r, startAngle: 0, endAngle: Math.PI * 2, + cx: shape.cx, cy: shape.cy + }, count, outShapes); + OutShapeCtor = Sector; + break; + default: + var m = path.getComputedTransform(); + var scale = m ? Math.sqrt(Math.max(m[0] * m[0] + m[1] * m[1], m[2] * m[2] + m[3] * m[3])) : 1; + var polygons = map(pathToPolygons(path.getUpdatedPathProxy(), scale), function (poly) { return polygonConvert(poly); }); + var polygonCount = polygons.length; + if (polygonCount === 0) { + binaryDivideRecursive(binaryDividePolygon, { + points: polygons[0] + }, count, outShapes); + } + else if (polygonCount === count) { + for (var i = 0; i < polygonCount; i++) { + outShapes.push({ + points: polygons[i] + }); + } + } + else { + var totalArea_1 = 0; + var items = map(polygons, function (poly) { + var min = []; + var max = []; + fromPoints(poly, min, max); + var area = (max[1] - min[1]) * (max[0] - min[0]); + totalArea_1 += area; + return { poly: poly, area: area }; + }); + items.sort(function (a, b) { return b.area - a.area; }); + var left = count; + for (var i = 0; i < polygonCount; i++) { + var item = items[i]; + if (left <= 0) { + break; + } + var selfCount = i === polygonCount - 1 + ? left + : Math.ceil(item.area / totalArea_1 * count); + if (selfCount < 0) { + continue; + } + binaryDivideRecursive(binaryDividePolygon, { + points: item.poly + }, selfCount, outShapes); + left -= selfCount; + } + } + OutShapeCtor = Polygon; + break; + } + if (!OutShapeCtor) { + return clone$4(path, count); + } + var out = []; + for (var i = 0; i < outShapes.length; i++) { + var subPath = new OutShapeCtor(); + subPath.setShape(outShapes[i]); + copyPathProps(path, subPath); + out.push(subPath); + } + return out; + } + + function alignSubpath(subpath1, subpath2) { + var len1 = subpath1.length; + var len2 = subpath2.length; + if (len1 === len2) { + return [subpath1, subpath2]; + } + var tmpSegX = []; + var tmpSegY = []; + var shorterPath = len1 < len2 ? subpath1 : subpath2; + var shorterLen = Math.min(len1, len2); + var diff = Math.abs(len2 - len1) / 6; + var shorterBezierCount = (shorterLen - 2) / 6; + var eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount) + 1; + var newSubpath = [shorterPath[0], shorterPath[1]]; + var remained = diff; + for (var i = 2; i < shorterLen;) { + var x0 = shorterPath[i - 2]; + var y0 = shorterPath[i - 1]; + var x1 = shorterPath[i++]; + var y1 = shorterPath[i++]; + var x2 = shorterPath[i++]; + var y2 = shorterPath[i++]; + var x3 = shorterPath[i++]; + var y3 = shorterPath[i++]; + if (remained <= 0) { + newSubpath.push(x1, y1, x2, y2, x3, y3); + continue; + } + var actualSubDivCount = Math.min(remained, eachCurveSubDivCount - 1) + 1; + for (var k = 1; k <= actualSubDivCount; k++) { + var p = k / actualSubDivCount; + cubicSubdivide(x0, x1, x2, x3, p, tmpSegX); + cubicSubdivide(y0, y1, y2, y3, p, tmpSegY); + x0 = tmpSegX[3]; + y0 = tmpSegY[3]; + newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0); + x1 = tmpSegX[5]; + y1 = tmpSegY[5]; + x2 = tmpSegX[6]; + y2 = tmpSegY[6]; + } + remained -= actualSubDivCount - 1; + } + return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath]; + } + function createSubpath(lastSubpathSubpath, otherSubpath) { + var len = lastSubpathSubpath.length; + var lastX = lastSubpathSubpath[len - 2]; + var lastY = lastSubpathSubpath[len - 1]; + var newSubpath = []; + for (var i = 0; i < otherSubpath.length;) { + newSubpath[i++] = lastX; + newSubpath[i++] = lastY; + } + return newSubpath; + } + function alignBezierCurves(array1, array2) { + var _a; + var lastSubpath1; + var lastSubpath2; + var newArray1 = []; + var newArray2 = []; + for (var i = 0; i < Math.max(array1.length, array2.length); i++) { + var subpath1 = array1[i]; + var subpath2 = array2[i]; + var newSubpath1 = void 0; + var newSubpath2 = void 0; + if (!subpath1) { + newSubpath1 = createSubpath(lastSubpath1 || subpath2, subpath2); + newSubpath2 = subpath2; + } + else if (!subpath2) { + newSubpath2 = createSubpath(lastSubpath2 || subpath1, subpath1); + newSubpath1 = subpath1; + } + else { + _a = alignSubpath(subpath1, subpath2), newSubpath1 = _a[0], newSubpath2 = _a[1]; + lastSubpath1 = newSubpath1; + lastSubpath2 = newSubpath2; + } + newArray1.push(newSubpath1); + newArray2.push(newSubpath2); + } + return [newArray1, newArray2]; + } + function centroid(array) { + var signedArea = 0; + var cx = 0; + var cy = 0; + var len = array.length; + for (var i = 0, j = len - 2; i < len; j = i, i += 2) { + var x0 = array[j]; + var y0 = array[j + 1]; + var x1 = array[i]; + var y1 = array[i + 1]; + var a = x0 * y1 - x1 * y0; + signedArea += a; + cx += (x0 + x1) * a; + cy += (y0 + y1) * a; + } + if (signedArea === 0) { + return [array[0] || 0, array[1] || 0]; + } + return [cx / signedArea / 3, cy / signedArea / 3, signedArea]; + } + function findBestRingOffset(fromSubBeziers, toSubBeziers, fromCp, toCp) { + var bezierCount = (fromSubBeziers.length - 2) / 6; + var bestScore = Infinity; + var bestOffset = 0; + var len = fromSubBeziers.length; + var len2 = len - 2; + for (var offset = 0; offset < bezierCount; offset++) { + var cursorOffset = offset * 6; + var score = 0; + for (var k = 0; k < len; k += 2) { + var idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2 + 2); + var x0 = fromSubBeziers[idx] - fromCp[0]; + var y0 = fromSubBeziers[idx + 1] - fromCp[1]; + var x1 = toSubBeziers[k] - toCp[0]; + var y1 = toSubBeziers[k + 1] - toCp[1]; + var dx = x1 - x0; + var dy = y1 - y0; + score += dx * dx + dy * dy; + } + if (score < bestScore) { + bestScore = score; + bestOffset = offset; + } + } + return bestOffset; + } + function reverse(array) { + var newArr = []; + var len = array.length; + for (var i = 0; i < len; i += 2) { + newArr[i] = array[len - i - 2]; + newArr[i + 1] = array[len - i - 1]; + } + return newArr; + } + function findBestMorphingRotation(fromArr, toArr, searchAngleIteration, searchAngleRange) { + var result = []; + var fromNeedsReverse; + for (var i = 0; i < fromArr.length; i++) { + var fromSubpathBezier = fromArr[i]; + var toSubpathBezier = toArr[i]; + var fromCp = centroid(fromSubpathBezier); + var toCp = centroid(toSubpathBezier); + if (fromNeedsReverse == null) { + fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0; + } + var newFromSubpathBezier = []; + var newToSubpathBezier = []; + var bestAngle = 0; + var bestScore = Infinity; + var tmpArr = []; + var len = fromSubpathBezier.length; + if (fromNeedsReverse) { + fromSubpathBezier = reverse(fromSubpathBezier); + } + var offset = findBestRingOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6; + var len2 = len - 2; + for (var k = 0; k < len2; k += 2) { + var idx = (offset + k) % len2 + 2; + newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0]; + newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1]; + } + newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0]; + newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1]; + if (searchAngleIteration > 0) { + var step = searchAngleRange / searchAngleIteration; + for (var angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) { + var sa = Math.sin(angle); + var ca = Math.cos(angle); + var score = 0; + for (var k = 0; k < fromSubpathBezier.length; k += 2) { + var x0 = newFromSubpathBezier[k]; + var y0 = newFromSubpathBezier[k + 1]; + var x1 = toSubpathBezier[k] - toCp[0]; + var y1 = toSubpathBezier[k + 1] - toCp[1]; + var newX1 = x1 * ca - y1 * sa; + var newY1 = x1 * sa + y1 * ca; + tmpArr[k] = newX1; + tmpArr[k + 1] = newY1; + var dx = newX1 - x0; + var dy = newY1 - y0; + score += dx * dx + dy * dy; + } + if (score < bestScore) { + bestScore = score; + bestAngle = angle; + for (var m = 0; m < tmpArr.length; m++) { + newToSubpathBezier[m] = tmpArr[m]; + } + } + } + } + else { + for (var i_1 = 0; i_1 < len; i_1 += 2) { + newToSubpathBezier[i_1] = toSubpathBezier[i_1] - toCp[0]; + newToSubpathBezier[i_1 + 1] = toSubpathBezier[i_1 + 1] - toCp[1]; + } + } + result.push({ + from: newFromSubpathBezier, + to: newToSubpathBezier, + fromCp: fromCp, + toCp: toCp, + rotation: -bestAngle + }); + } + return result; + } + function isCombineMorphing(path) { + return path.__isCombineMorphing; + } + var SAVED_METHOD_PREFIX = '__mOriginal_'; + function saveAndModifyMethod(obj, methodName, modifiers) { + var savedMethodName = SAVED_METHOD_PREFIX + methodName; + var originalMethod = obj[savedMethodName] || obj[methodName]; + if (!obj[savedMethodName]) { + obj[savedMethodName] = obj[methodName]; + } + var replace = modifiers.replace; + var after = modifiers.after; + var before = modifiers.before; + obj[methodName] = function () { + var args = arguments; + var res; + before && before.apply(this, args); + if (replace) { + res = replace.apply(this, args); + } + else { + res = originalMethod.apply(this, args); + } + after && after.apply(this, args); + return res; + }; + } + function restoreMethod(obj, methodName) { + var savedMethodName = SAVED_METHOD_PREFIX + methodName; + if (obj[savedMethodName]) { + obj[methodName] = obj[savedMethodName]; + obj[savedMethodName] = null; + } + } + function applyTransformOnBeziers(bezierCurves, mm) { + for (var i = 0; i < bezierCurves.length; i++) { + var subBeziers = bezierCurves[i]; + for (var k = 0; k < subBeziers.length;) { + var x = subBeziers[k]; + var y = subBeziers[k + 1]; + subBeziers[k++] = mm[0] * x + mm[2] * y + mm[4]; + subBeziers[k++] = mm[1] * x + mm[3] * y + mm[5]; + } + } + } + function prepareMorphPath(fromPath, toPath) { + var fromPathProxy = fromPath.getUpdatedPathProxy(); + var toPathProxy = toPath.getUpdatedPathProxy(); + var _a = alignBezierCurves(pathToBezierCurves(fromPathProxy), pathToBezierCurves(toPathProxy)), fromBezierCurves = _a[0], toBezierCurves = _a[1]; + var fromPathTransform = fromPath.getComputedTransform(); + var toPathTransform = toPath.getComputedTransform(); + function updateIdentityTransform() { + this.transform = null; + } + fromPathTransform && applyTransformOnBeziers(fromBezierCurves, fromPathTransform); + toPathTransform && applyTransformOnBeziers(toBezierCurves, toPathTransform); + saveAndModifyMethod(toPath, 'updateTransform', { replace: updateIdentityTransform }); + toPath.transform = null; + var morphingData = findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI); + var tmpArr = []; + saveAndModifyMethod(toPath, 'buildPath', { replace: function (path) { + var t = toPath.__morphT; + var onet = 1 - t; + var newCp = []; + for (var i = 0; i < morphingData.length; i++) { + var item = morphingData[i]; + var from = item.from; + var to = item.to; + var angle = item.rotation * t; + var fromCp = item.fromCp; + var toCp = item.toCp; + var sa = Math.sin(angle); + var ca = Math.cos(angle); + lerp(newCp, fromCp, toCp, t); + for (var m = 0; m < from.length; m += 2) { + var x0_1 = from[m]; + var y0_1 = from[m + 1]; + var x1 = to[m]; + var y1 = to[m + 1]; + var x = x0_1 * onet + x1 * t; + var y = y0_1 * onet + y1 * t; + tmpArr[m] = (x * ca - y * sa) + newCp[0]; + tmpArr[m + 1] = (x * sa + y * ca) + newCp[1]; + } + var x0 = tmpArr[0]; + var y0 = tmpArr[1]; + path.moveTo(x0, y0); + for (var m = 2; m < from.length;) { + var x1 = tmpArr[m++]; + var y1 = tmpArr[m++]; + var x2 = tmpArr[m++]; + var y2 = tmpArr[m++]; + var x3 = tmpArr[m++]; + var y3 = tmpArr[m++]; + if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) { + path.lineTo(x3, y3); + } + else { + path.bezierCurveTo(x1, y1, x2, y2, x3, y3); + } + x0 = x3; + y0 = y3; + } + } + } }); + } + function morphPath(fromPath, toPath, animationOpts) { + if (!fromPath || !toPath) { + return toPath; + } + var oldDone = animationOpts.done; + var oldDuring = animationOpts.during; + prepareMorphPath(fromPath, toPath); + toPath.__morphT = 0; + function restoreToPath() { + restoreMethod(toPath, 'buildPath'); + restoreMethod(toPath, 'updateTransform'); + toPath.__morphT = -1; + toPath.createPathProxy(); + toPath.dirtyShape(); + } + toPath.animateTo({ + __morphT: 1 + }, defaults({ + during: function (p) { + toPath.dirtyShape(); + oldDuring && oldDuring(p); + }, + done: function () { + restoreToPath(); + oldDone && oldDone(); + } + }, animationOpts)); + return toPath; + } + function hilbert(x, y, minX, minY, maxX, maxY) { + var bits = 16; + x = (maxX === minX) ? 0 : Math.round(32767 * (x - minX) / (maxX - minX)); + y = (maxY === minY) ? 0 : Math.round(32767 * (y - minY) / (maxY - minY)); + var d = 0; + var tmp; + for (var s = (1 << bits) / 2; s > 0; s /= 2) { + var rx = 0; + var ry = 0; + if ((x & s) > 0) { + rx = 1; + } + if ((y & s) > 0) { + ry = 1; + } + d += s * s * ((3 * rx) ^ ry); + if (ry === 0) { + if (rx === 1) { + x = s - 1 - x; + y = s - 1 - y; + } + tmp = x; + x = y; + y = tmp; + } + } + return d; + } + function sortPaths(pathList) { + var xMin = Infinity; + var yMin = Infinity; + var xMax = -Infinity; + var yMax = -Infinity; + var cps = map(pathList, function (path) { + var rect = path.getBoundingRect(); + var m = path.getComputedTransform(); + var x = rect.x + rect.width / 2 + (m ? m[4] : 0); + var y = rect.y + rect.height / 2 + (m ? m[5] : 0); + xMin = Math.min(x, xMin); + yMin = Math.min(y, yMin); + xMax = Math.max(x, xMax); + yMax = Math.max(y, yMax); + return [x, y]; + }); + var items = map(cps, function (cp, idx) { + return { + cp: cp, + z: hilbert(cp[0], cp[1], xMin, yMin, xMax, yMax), + path: pathList[idx] + }; + }); + return items.sort(function (a, b) { return a.z - b.z; }).map(function (item) { return item.path; }); + } + function defaultDividePath(param) { + return split(param.path, param.count); + } + function createEmptyReturn() { + return { + fromIndividuals: [], + toIndividuals: [], + count: 0 + }; + } + function combineMorph(fromList, toPath, animationOpts) { + var fromPathList = []; + function addFromPath(fromList) { + for (var i = 0; i < fromList.length; i++) { + var from = fromList[i]; + if (isCombineMorphing(from)) { + addFromPath(from.childrenRef()); + } + else if (from instanceof Path) { + fromPathList.push(from); + } + } + } + addFromPath(fromList); + var separateCount = fromPathList.length; + if (!separateCount) { + return createEmptyReturn(); + } + var dividePath = animationOpts.dividePath || defaultDividePath; + var toSubPathList = dividePath({ + path: toPath, count: separateCount + }); + if (toSubPathList.length !== separateCount) { + console.error('Invalid morphing: unmatched splitted path'); + return createEmptyReturn(); + } + fromPathList = sortPaths(fromPathList); + toSubPathList = sortPaths(toSubPathList); + var oldDone = animationOpts.done; + var oldDuring = animationOpts.during; + var individualDelay = animationOpts.individualDelay; + var identityTransform = new Transformable(); + for (var i = 0; i < separateCount; i++) { + var from = fromPathList[i]; + var to = toSubPathList[i]; + to.parent = toPath; + to.copyTransform(identityTransform); + if (!individualDelay) { + prepareMorphPath(from, to); + } + } + toPath.__isCombineMorphing = true; + toPath.childrenRef = function () { + return toSubPathList; + }; + function addToSubPathListToZr(zr) { + for (var i = 0; i < toSubPathList.length; i++) { + toSubPathList[i].addSelfToZr(zr); + } + } + saveAndModifyMethod(toPath, 'addSelfToZr', { + after: function (zr) { + addToSubPathListToZr(zr); + } + }); + saveAndModifyMethod(toPath, 'removeSelfFromZr', { + after: function (zr) { + for (var i = 0; i < toSubPathList.length; i++) { + toSubPathList[i].removeSelfFromZr(zr); + } + } + }); + function restoreToPath() { + toPath.__isCombineMorphing = false; + toPath.__morphT = -1; + toPath.childrenRef = null; + restoreMethod(toPath, 'addSelfToZr'); + restoreMethod(toPath, 'removeSelfFromZr'); + } + var toLen = toSubPathList.length; + if (individualDelay) { + var animating_1 = toLen; + var eachDone = function () { + animating_1--; + if (animating_1 === 0) { + restoreToPath(); + oldDone && oldDone(); + } + }; + for (var i = 0; i < toLen; i++) { + var indivdualAnimationOpts = individualDelay ? defaults({ + delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toSubPathList[i]), + done: eachDone + }, animationOpts) : animationOpts; + morphPath(fromPathList[i], toSubPathList[i], indivdualAnimationOpts); + } + } + else { + toPath.__morphT = 0; + toPath.animateTo({ + __morphT: 1 + }, defaults({ + during: function (p) { + for (var i = 0; i < toLen; i++) { + var child = toSubPathList[i]; + child.__morphT = toPath.__morphT; + child.dirtyShape(); + } + oldDuring && oldDuring(p); + }, + done: function () { + restoreToPath(); + for (var i = 0; i < fromList.length; i++) { + restoreMethod(fromList[i], 'updateTransform'); + } + oldDone && oldDone(); + } + }, animationOpts)); + } + if (toPath.__zr) { + addToSubPathListToZr(toPath.__zr); + } + return { + fromIndividuals: fromPathList, + toIndividuals: toSubPathList, + count: toLen + }; + } + function separateMorph(fromPath, toPathList, animationOpts) { + var toLen = toPathList.length; + var fromPathList = []; + var dividePath = animationOpts.dividePath || defaultDividePath; + function addFromPath(fromList) { + for (var i = 0; i < fromList.length; i++) { + var from = fromList[i]; + if (isCombineMorphing(from)) { + addFromPath(from.childrenRef()); + } + else if (from instanceof Path) { + fromPathList.push(from); + } + } + } + if (isCombineMorphing(fromPath)) { + addFromPath(fromPath.childrenRef()); + var fromLen = fromPathList.length; + if (fromLen < toLen) { + var k = 0; + for (var i = fromLen; i < toLen; i++) { + fromPathList.push(clonePath(fromPathList[k++ % fromLen])); + } + } + fromPathList.length = toLen; + } + else { + fromPathList = dividePath({ path: fromPath, count: toLen }); + var fromPathTransform = fromPath.getComputedTransform(); + for (var i = 0; i < fromPathList.length; i++) { + fromPathList[i].setLocalTransform(fromPathTransform); + } + if (fromPathList.length !== toLen) { + console.error('Invalid morphing: unmatched splitted path'); + return createEmptyReturn(); + } + } + fromPathList = sortPaths(fromPathList); + toPathList = sortPaths(toPathList); + var individualDelay = animationOpts.individualDelay; + for (var i = 0; i < toLen; i++) { + var indivdualAnimationOpts = individualDelay ? defaults({ + delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toPathList[i]) + }, animationOpts) : animationOpts; + morphPath(fromPathList[i], toPathList[i], indivdualAnimationOpts); + } + return { + fromIndividuals: fromPathList, + toIndividuals: toPathList, + count: toPathList.length + }; + } + + function isMultiple(elements) { + return isArray(elements[0]); + } + + function prepareMorphBatches(one, many) { + var batches = []; + var batchCount = one.length; + + for (var i = 0; i < batchCount; i++) { + batches.push({ + one: one[i], + many: [] + }); + } + + for (var i = 0; i < many.length; i++) { + var len = many[i].length; + var k = void 0; + + for (k = 0; k < len; k++) { + batches[k % batchCount].many.push(many[i][k]); + } + } + + var off = 0; // If one has more paths than each one of many. average them. + + for (var i = batchCount - 1; i >= 0; i--) { + if (!batches[i].many.length) { + var moveFrom = batches[off].many; + + if (moveFrom.length <= 1) { + // Not enough + // Start from the first one. + if (off) { + off = 0; + } else { + return batches; + } + } + + var len = moveFrom.length; + var mid = Math.ceil(len / 2); + batches[i].many = moveFrom.slice(mid, len); + batches[off].many = moveFrom.slice(0, mid); + off++; + } + } + + return batches; + } + + var pathDividers = { + clone: function (params) { + var ret = []; // Fitting the alpha + + var approxOpacity = 1 - Math.pow(1 - params.path.style.opacity, 1 / params.count); + + for (var i = 0; i < params.count; i++) { + var cloned = clonePath(params.path); + cloned.setStyle('opacity', approxOpacity); + ret.push(cloned); + } + + return ret; + }, + // Use the default divider + split: null + }; + function applyMorphAnimation(from, to, divideShape, seriesModel, dataIndex, animateOtherProps) { + if (!from.length || !to.length) { + return; + } + + var updateAnimationCfg = getAnimationConfig('update', seriesModel, dataIndex); + + if (!(updateAnimationCfg && updateAnimationCfg.duration > 0)) { + return; + } + + var animationDelay = seriesModel.getModel('universalTransition').get('delay'); + var animationCfg = Object.assign({ + // Need to setToFinal so the further calculation based on the style can be correct. + // Like emphasis color. + setToFinal: true + }, updateAnimationCfg); + var many; + var one; + + if (isMultiple(from)) { + // manyToOne + many = from; + one = to; + } + + if (isMultiple(to)) { + // oneToMany + many = to; + one = from; + } + + function morphOneBatch(batch, fromIsMany, animateIndex, animateCount, forceManyOne) { + var batchMany = batch.many; + var batchOne = batch.one; + + if (batchMany.length === 1 && !forceManyOne) { + // Is one to one + var batchFrom = fromIsMany ? batchMany[0] : batchOne; + var batchTo = fromIsMany ? batchOne : batchMany[0]; + + if (isCombineMorphing(batchFrom)) { + // Keep doing combine animation. + morphOneBatch({ + many: [batchFrom], + one: batchTo + }, true, animateIndex, animateCount, true); + } else { + var individualAnimationCfg = animationDelay ? defaults({ + delay: animationDelay(animateIndex, animateCount) + }, animationCfg) : animationCfg; + morphPath(batchFrom, batchTo, individualAnimationCfg); + animateOtherProps(batchFrom, batchTo, batchFrom, batchTo, individualAnimationCfg); + } + } else { + var separateAnimationCfg = defaults({ + dividePath: pathDividers[divideShape], + individualDelay: animationDelay && function (idx, count, fromPath, toPath) { + return animationDelay(idx + animateIndex, animateCount); + } + }, animationCfg); + + var _a = fromIsMany ? combineMorph(batchMany, batchOne, separateAnimationCfg) : separateMorph(batchOne, batchMany, separateAnimationCfg), + fromIndividuals = _a.fromIndividuals, + toIndividuals = _a.toIndividuals; + + var count = fromIndividuals.length; + + for (var k = 0; k < count; k++) { + var individualAnimationCfg = animationDelay ? defaults({ + delay: animationDelay(k, count) + }, animationCfg) : animationCfg; + animateOtherProps(fromIndividuals[k], toIndividuals[k], fromIsMany ? batchMany[k] : batch.one, fromIsMany ? batch.one : batchMany[k], individualAnimationCfg); + } + } + } + + var fromIsMany = many ? many === from // Is one to one. If the path number not match. also needs do merge and separate morphing. + : from.length > to.length; + var morphBatches = many ? prepareMorphBatches(one, many) : prepareMorphBatches(fromIsMany ? to : from, [fromIsMany ? from : to]); + var animateCount = 0; + + for (var i = 0; i < morphBatches.length; i++) { + animateCount += morphBatches[i].many.length; + } + + var animateIndex = 0; + + for (var i = 0; i < morphBatches.length; i++) { + morphOneBatch(morphBatches[i], fromIsMany, animateIndex, animateCount); + animateIndex += morphBatches[i].many.length; + } + } + function getPathList(elements) { + if (!elements) { + return []; + } + + if (isArray(elements)) { + var pathList_1 = []; + + for (var i = 0; i < elements.length; i++) { + pathList_1.push(getPathList(elements[i])); + } + + return pathList_1; + } + + var pathList = []; + elements.traverse(function (el) { + if (el instanceof Path && !el.disableMorphing && !el.invisible && !el.ignore) { + pathList.push(el); + } + }); + return pathList; + } + + var DATA_COUNT_THRESHOLD = 1e4; + var getUniversalTransitionGlobalStore = makeInner(); + + function getGroupIdDimension(data) { + var dimensions = data.dimensions; + + for (var i = 0; i < dimensions.length; i++) { + var dimInfo = data.getDimensionInfo(dimensions[i]); + + if (dimInfo && dimInfo.otherDims.itemGroupId === 0) { + return dimensions[i]; + } + } + } + + function flattenDataDiffItems(list) { + var items = []; + each(list, function (seriesInfo) { + var data = seriesInfo.data; + + if (data.count() > DATA_COUNT_THRESHOLD) { + if ("development" !== 'production') { + warn('Universal transition is disabled on large data > 10k.'); + } + + return; + } + + var indices = data.getIndices(); + var groupDim = getGroupIdDimension(data); + + for (var dataIndex = 0; dataIndex < indices.length; dataIndex++) { + items.push({ + data: data, + dim: seriesInfo.dim || groupDim, + divide: seriesInfo.divide, + dataIndex: dataIndex + }); + } + }); + return items; + } + + function fadeInElement(newEl, newSeries, newIndex) { + newEl.traverse(function (el) { + if (el instanceof Path) { + // TODO use fade in animation for target element. + initProps(el, { + style: { + opacity: 0 + } + }, newSeries, { + dataIndex: newIndex, + isFrom: true + }); + } + }); + } + + function removeEl$1(el) { + if (el.parent) { + // Bake parent transform to element. + // So it can still have proper transform to transition after it's removed. + var computedTransform = el.getComputedTransform(); + el.setLocalTransform(computedTransform); + el.parent.remove(el); + } + } + + function stopAnimation(el) { + el.stopAnimation(); + + if (el.isGroup) { + el.traverse(function (child) { + child.stopAnimation(); + }); + } + } + + function animateElementStyles(el, dataIndex, seriesModel) { + var animationConfig = getAnimationConfig('update', seriesModel, dataIndex); + animationConfig && el.traverse(function (child) { + if (child instanceof Displayable) { + var oldStyle = getOldStyle(child); + + if (oldStyle) { + child.animateFrom({ + style: oldStyle + }, animationConfig); + } + } + }); + } + + function isAllIdSame(oldDiffItems, newDiffItems) { + var len = oldDiffItems.length; + + if (len !== newDiffItems.length) { + return false; + } + + for (var i = 0; i < len; i++) { + var oldItem = oldDiffItems[i]; + var newItem = newDiffItems[i]; + + if (oldItem.data.getId(oldItem.dataIndex) !== newItem.data.getId(newItem.dataIndex)) { + return false; + } + } + + return true; + } + + function transitionBetween(oldList, newList, api) { + var oldDiffItems = flattenDataDiffItems(oldList); + var newDiffItems = flattenDataDiffItems(newList); + + function updateMorphingPathProps(from, to, rawFrom, rawTo, animationCfg) { + if (rawFrom || from) { + to.animateFrom({ + style: (rawFrom || from).style + }, animationCfg); + } + } + + function findKeyDim(items) { + for (var i = 0; i < items.length; i++) { + if (items[i].dim) { + return items[i].dim; + } + } + } + + var oldKeyDim = findKeyDim(oldDiffItems); + var newKeyDim = findKeyDim(newDiffItems); + var hasMorphAnimation = false; + + function createKeyGetter(isOld, onlyGetId) { + return function (diffItem) { + var data = diffItem.data; + var dataIndex = diffItem.dataIndex; // TODO if specified dim + + if (onlyGetId) { + return data.getId(dataIndex); + } // Use group id as transition key by default. + // So we can achieve multiple to multiple animation like drilldown / up naturally. + // If group id not exits. Use id instead. If so, only one to one transition will be applied. + + + var dataGroupId = data.hostModel && data.hostModel.get('dataGroupId'); // If specified key dimension(itemGroupId by default). Use this same dimension from other data. + // PENDING: If only use key dimension of newData. + + var keyDim = isOld ? oldKeyDim || newKeyDim : newKeyDim || oldKeyDim; + var dimInfo = keyDim && data.getDimensionInfo(keyDim); + var dimOrdinalMeta = dimInfo && dimInfo.ordinalMeta; + + if (dimInfo) { + // Get from encode.itemGroupId. + var key = data.get(dimInfo.name, dataIndex); + + if (dimOrdinalMeta) { + return dimOrdinalMeta.categories[key] || key + ''; + } + + return key + ''; + } // Get groupId from raw item. { groupId: '' } + + + var itemVal = data.getRawDataItem(dataIndex); + + if (itemVal && itemVal.groupId) { + return itemVal.groupId + ''; + } + + return dataGroupId || data.getId(dataIndex); + }; + } // Use id if it's very likely to be an one to one animation + // It's more robust than groupId + // TODO Check if key dimension is specified. + + + var useId = isAllIdSame(oldDiffItems, newDiffItems); + var isElementStillInChart = {}; + + if (!useId) { + // We may have different diff strategy with basicTransition if we use other dimension as key. + // If so, we can't simply check if oldEl is same with newEl. We need a map to check if oldEl is still being used in the new chart. + // We can't use the elements that already being morphed. Let it keep it's original basic transition. + for (var i = 0; i < newDiffItems.length; i++) { + var newItem = newDiffItems[i]; + var el = newItem.data.getItemGraphicEl(newItem.dataIndex); + + if (el) { + isElementStillInChart[el.id] = true; + } + } + } + + function updateOneToOne(newIndex, oldIndex) { + var oldItem = oldDiffItems[oldIndex]; + var newItem = newDiffItems[newIndex]; + var newSeries = newItem.data.hostModel; // TODO Mark this elements is morphed and don't morph them anymore + + var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex); + var newEl = newItem.data.getItemGraphicEl(newItem.dataIndex); // Can't handle same elements. + + if (oldEl === newEl) { + newEl && animateElementStyles(newEl, newItem.dataIndex, newSeries); + return; + } + + if ( // We can't use the elements that already being morphed + oldEl && isElementStillInChart[oldEl.id]) { + return; + } + + if (newEl) { + // TODO: If keep animating the group in case + // some of the elements don't want to be morphed. + // TODO Label? + stopAnimation(newEl); + + if (oldEl) { + stopAnimation(oldEl); // If old element is doing leaving animation. stop it and remove it immediately. + + removeEl$1(oldEl); + hasMorphAnimation = true; + applyMorphAnimation(getPathList(oldEl), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps); + } else { + fadeInElement(newEl, newSeries, newIndex); + } + } // else keep oldEl leaving animation. + + } + + new DataDiffer(oldDiffItems, newDiffItems, createKeyGetter(true, useId), createKeyGetter(false, useId), null, 'multiple').update(updateOneToOne).updateManyToOne(function (newIndex, oldIndices) { + var newItem = newDiffItems[newIndex]; + var newData = newItem.data; + var newSeries = newData.hostModel; + var newEl = newData.getItemGraphicEl(newItem.dataIndex); + var oldElsList = filter(map(oldIndices, function (idx) { + return oldDiffItems[idx].data.getItemGraphicEl(oldDiffItems[idx].dataIndex); + }), function (oldEl) { + return oldEl && oldEl !== newEl && !isElementStillInChart[oldEl.id]; + }); + + if (newEl) { + stopAnimation(newEl); + + if (oldElsList.length) { + // If old element is doing leaving animation. stop it and remove it immediately. + each(oldElsList, function (oldEl) { + stopAnimation(oldEl); + removeEl$1(oldEl); + }); + hasMorphAnimation = true; + applyMorphAnimation(getPathList(oldElsList), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps); + } else { + fadeInElement(newEl, newSeries, newItem.dataIndex); + } + } // else keep oldEl leaving animation. + + }).updateOneToMany(function (newIndices, oldIndex) { + var oldItem = oldDiffItems[oldIndex]; + var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex); // We can't use the elements that already being morphed + + if (oldEl && isElementStillInChart[oldEl.id]) { + return; + } + + var newElsList = filter(map(newIndices, function (idx) { + return newDiffItems[idx].data.getItemGraphicEl(newDiffItems[idx].dataIndex); + }), function (el) { + return el && el !== oldEl; + }); + var newSeris = newDiffItems[newIndices[0]].data.hostModel; + + if (newElsList.length) { + each(newElsList, function (newEl) { + return stopAnimation(newEl); + }); + + if (oldEl) { + stopAnimation(oldEl); // If old element is doing leaving animation. stop it and remove it immediately. + + removeEl$1(oldEl); + hasMorphAnimation = true; + applyMorphAnimation(getPathList(oldEl), getPathList(newElsList), oldItem.divide, // Use divide on old. + newSeris, newIndices[0], updateMorphingPathProps); + } else { + each(newElsList, function (newEl) { + return fadeInElement(newEl, newSeris, newIndices[0]); + }); + } + } // else keep oldEl leaving animation. + + }).updateManyToMany(function (newIndices, oldIndices) { + // If two data are same and both have groupId. + // Normally they should be diff by id. + new DataDiffer(oldIndices, newIndices, function (rawIdx) { + return oldDiffItems[rawIdx].data.getId(oldDiffItems[rawIdx].dataIndex); + }, function (rawIdx) { + return newDiffItems[rawIdx].data.getId(newDiffItems[rawIdx].dataIndex); + }).update(function (newIndex, oldIndex) { + // Use the original index + updateOneToOne(newIndices[newIndex], oldIndices[oldIndex]); + }).execute(); + }).execute(); + + if (hasMorphAnimation) { + each(newList, function (_a) { + var data = _a.data; + var seriesModel = data.hostModel; + var view = seriesModel && api.getViewOfSeriesModel(seriesModel); + var animationCfg = getAnimationConfig('update', seriesModel, 0); // use 0 index. + + if (view && seriesModel.isAnimationEnabled() && animationCfg && animationCfg.duration > 0) { + view.group.traverse(function (el) { + if (el instanceof Path && !el.animators.length) { + // We can't accept there still exists element that has no animation + // if universalTransition is enabled + el.animateFrom({ + style: { + opacity: 0 + } + }, animationCfg); + } + }); + } + }); + } + } + + function getSeriesTransitionKey(series) { + var seriesKey = series.getModel('universalTransition').get('seriesKey'); + + if (!seriesKey) { + // Use series id by default. + return series.id; + } + + return seriesKey; + } + + function convertArraySeriesKeyToString(seriesKey) { + if (isArray(seriesKey)) { + // Order independent. + return seriesKey.sort().join(','); + } + + return seriesKey; + } + + function getDivideShapeFromData(data) { + if (data.hostModel) { + return data.hostModel.getModel('universalTransition').get('divideShape'); + } + } + + function findTransitionSeriesBatches(globalStore, params) { + var updateBatches = createHashMap(); + var oldDataMap = createHashMap(); // Map that only store key in array seriesKey. + // Which is used to query the old data when transition from one to multiple series. + + var oldDataMapForSplit = createHashMap(); + each(globalStore.oldSeries, function (series, idx) { + var oldData = globalStore.oldData[idx]; + var transitionKey = getSeriesTransitionKey(series); + var transitionKeyStr = convertArraySeriesKeyToString(transitionKey); + oldDataMap.set(transitionKeyStr, oldData); + + if (isArray(transitionKey)) { + // Same key can't in different array seriesKey. + each(transitionKey, function (key) { + oldDataMapForSplit.set(key, { + data: oldData, + key: transitionKeyStr + }); + }); + } + }); + + function checkTransitionSeriesKeyDuplicated(transitionKeyStr) { + if (updateBatches.get(transitionKeyStr)) { + warn("Duplicated seriesKey in universalTransition " + transitionKeyStr); + } + } + + each(params.updatedSeries, function (series) { + if (series.isUniversalTransitionEnabled() && series.isAnimationEnabled()) { + var newData = series.getData(); + var transitionKey = getSeriesTransitionKey(series); + var transitionKeyStr = convertArraySeriesKeyToString(transitionKey); // Only transition between series with same id. + + var oldData = oldDataMap.get(transitionKeyStr); // string transition key is the best match. + + if (oldData) { + if ("development" !== 'production') { + checkTransitionSeriesKeyDuplicated(transitionKeyStr); + } // TODO check if data is same? + + + updateBatches.set(transitionKeyStr, { + oldSeries: [{ + divide: getDivideShapeFromData(oldData), + data: oldData + }], + newSeries: [{ + divide: getDivideShapeFromData(newData), + data: newData + }] + }); + } else { + // Transition from multiple series. + if (isArray(transitionKey)) { + if ("development" !== 'production') { + checkTransitionSeriesKeyDuplicated(transitionKeyStr); + } + + var oldSeries_1 = []; + each(transitionKey, function (key) { + var oldData = oldDataMap.get(key); + + if (oldData) { + oldSeries_1.push({ + divide: getDivideShapeFromData(oldData), + data: oldData + }); + } + }); + + if (oldSeries_1.length) { + updateBatches.set(transitionKeyStr, { + oldSeries: oldSeries_1, + newSeries: [{ + data: newData, + divide: getDivideShapeFromData(newData) + }] + }); + } + } else { + // Try transition to multiple series. + var oldData_1 = oldDataMapForSplit.get(transitionKey); + + if (oldData_1) { + var batch = updateBatches.get(oldData_1.key); + + if (!batch) { + batch = { + oldSeries: [{ + data: oldData_1.data, + divide: getDivideShapeFromData(oldData_1.data) + }], + newSeries: [] + }; + updateBatches.set(oldData_1.key, batch); + } + + batch.newSeries.push({ + data: newData, + divide: getDivideShapeFromData(newData) + }); + } + } + } + } + }); + return updateBatches; + } + + function querySeries(series, finder) { + for (var i = 0; i < series.length; i++) { + var found = finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id; + + if (found) { + return i; + } + } + } + + function transitionSeriesFromOpt(transitionOpt, globalStore, params, api) { + var from = []; + var to = []; + each(normalizeToArray(transitionOpt.from), function (finder) { + var idx = querySeries(globalStore.oldSeries, finder); + + if (idx >= 0) { + from.push({ + data: globalStore.oldData[idx], + // TODO can specify divideShape in transition. + divide: getDivideShapeFromData(globalStore.oldData[idx]), + dim: finder.dimension + }); + } + }); + each(normalizeToArray(transitionOpt.to), function (finder) { + var idx = querySeries(params.updatedSeries, finder); + + if (idx >= 0) { + var data = params.updatedSeries[idx].getData(); + to.push({ + data: data, + divide: getDivideShapeFromData(data), + dim: finder.dimension + }); + } + }); + + if (from.length > 0 && to.length > 0) { + transitionBetween(from, to, api); + } + } + + function installUniversalTransition(registers) { + registers.registerUpdateLifecycle('series:beforeupdate', function (ecMOdel, api, params) { + each(normalizeToArray(params.seriesTransition), function (transOpt) { + each(normalizeToArray(transOpt.to), function (finder) { + var series = params.updatedSeries; + + for (var i = 0; i < series.length; i++) { + if (finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id) { + series[i][SERIES_UNIVERSAL_TRANSITION_PROP] = true; + } + } + }); + }); + }); + registers.registerUpdateLifecycle('series:transition', function (ecModel, api, params) { + // TODO api provide an namespace that can save stuff per instance + var globalStore = getUniversalTransitionGlobalStore(api); // TODO multiple to multiple series. + + if (globalStore.oldSeries && params.updatedSeries && params.optionChanged) { + // Use give transition config if its' give; + var transitionOpt = params.seriesTransition; + + if (transitionOpt) { + each(normalizeToArray(transitionOpt), function (opt) { + transitionSeriesFromOpt(opt, globalStore, params, api); + }); + } else { + // Else guess from series based on transition series key. + var updateBatches_1 = findTransitionSeriesBatches(globalStore, params); + each(updateBatches_1.keys(), function (key) { + var batch = updateBatches_1.get(key); + transitionBetween(batch.oldSeries, batch.newSeries, api); + }); + } // Reset + + + each(params.updatedSeries, function (series) { + // Reset; + if (series[SERIES_UNIVERSAL_TRANSITION_PROP]) { + series[SERIES_UNIVERSAL_TRANSITION_PROP] = false; + } + }); + } // Save all series of current update. Not only the updated one. + + + var allSeries = ecModel.getSeries(); + var savedSeries = globalStore.oldSeries = []; + var savedData = globalStore.oldData = []; + + for (var i = 0; i < allSeries.length; i++) { + var data = allSeries[i].getData(); // Only save the data that can have transition. + // Avoid large data costing too much extra memory + + if (data.count() < DATA_COUNT_THRESHOLD) { + savedSeries.push(allSeries[i]); + savedData.push(data); + } + } + }); + } + + // Render engines + // ----------------- + // Render via Canvas. + // echarts.init(dom, null, { renderer: 'canvas' }) + + use([install$1]); // Render via SVG. + // echarts.init(dom, null, { renderer: 'svg' }) + + use([install]); // ---------------- + // Charts (series) + // ---------------- + // All of the series types, for example: + // chart.setOption({ + // series: [{ + // type: 'line' // or 'bar', 'pie', ... + // }] + // }); + + use([install$2, install$3, install$4, install$6, install$8, install$a, install$b, install$c, install$d, install$e, install$f, install$h, install$i, install$j, install$k, install$l, install$m, install$n, install$o, install$p, install$q, install$r]); // ------------------- + // Coordinate systems + // ------------------- + // All of the axis modules have been included in the + // coordinate system module below, do not need to + // make extra import. + // `cartesian` coordinate system. For some historical + // reasons, it is named as grid, for example: + // chart.setOption({ + // grid: {...}, + // xAxis: {...}, + // yAxis: {...}, + // series: [{...}] + // }); + + use(install$t); // `polar` coordinate system, for example: + // chart.setOption({ + // polar: {...}, + // radiusAxis: {...}, + // angleAxis: {...}, + // series: [{ + // coordinateSystem: 'polar' + // }] + // }); + + use(install$u); // `geo` coordinate system, for example: + // chart.setOption({ + // geo: {...}, + // series: [{ + // coordinateSystem: 'geo' + // }] + // }); + + use(install$9); // `singleAxis` coordinate system (notice, it is a coordinate system + // with only one axis, work for chart like theme river), for example: + // chart.setOption({ + // singleAxis: {...} + // series: [{type: 'themeRiver', ...}] + // }); + + use(install$v); // `parallel` coordinate system, only work for parallel series, for example: + // chart.setOption({ + // parallel: {...}, + // parallelAxis: [{...}, ...], + // series: [{ + // type: 'parallel' + // }] + // }); + + use(install$g); // `calendar` coordinate system. for example, + // chart.setOptionp({ + // calendar: {...}, + // series: [{ + // coordinateSystem: 'calendar' + // }] + // ); + + use(install$w); // ------------------ + // Other components + // ------------------ + // `graphic` component, for example: + // chart.setOption({ + // graphic: {...} + // }); + + use(install$x); // `toolbox` component, for example: + // chart.setOption({ + // toolbox: {...} + // }); + + use(install$z); // `tooltip` component, for example: + // chart.setOption({ + // tooltip: {...} + // }); + + use(install$A); // `axisPointer` component, for example: + // chart.setOption({ + // tooltip: {axisPointer: {...}, ...} + // }); + // Or + // chart.setOption({ + // axisPointer: {...} + // }); + + use(install$s); // `brush` component, for example: + // chart.setOption({ + // brush: {...} + // }); + // Or + // chart.setOption({ + // tooltip: {feature: {brush: {...}} + // }) + + use(install$B); // `title` component, for example: + // chart.setOption({ + // title: {...} + // }); + + use(install$C); // `timeline` component, for example: + // chart.setOption({ + // timeline: {...} + // }); + + use(install$D); // `markPoint` component, for example: + // chart.setOption({ + // series: [{markPoint: {...}}] + // }); + + use(install$E); // `markLine` component, for example: + // chart.setOption({ + // series: [{markLine: {...}}] + // }); + + use(install$F); // `markArea` component, for example: + // chart.setOption({ + // series: [{markArea: {...}}] + // }); + + use(install$G); // `legend` component not scrollable. for example: + // chart.setOption({ + // legend: {...} + // }); + + use(install$J); // `dataZoom` component including both `dataZoomInside` and `dataZoomSlider`. + + use(install$M); // `dataZoom` component providing drag, pinch, wheel behaviors + // inside coodinate system, for example: + // chart.setOption({ + // dataZoom: {type: 'inside'} + // }); + + use(install$K); // `dataZoom` component providing a slider bar, for example: + // chart.setOption({ + // dataZoom: {type: 'slider'} + // }); + + use(install$L); // `visualMap` component including both `visualMapContinuous` and `visualMapPiecewise`. + + use(install$P); // `visualMap` component providing continuous bar, for example: + // chart.setOption({ + // visualMap: {type: 'continuous'} + // }); + + use(install$N); // `visualMap` component providing pieces bar, for example: + // chart.setOption({ + // visualMap: {type: 'piecewise'} + // }); + + use(install$O); // `aria` component providing aria, for example: + // chart.setOption({ + // aria: {...} + // }); + + use(install$Q); // dataset transform + // chart.setOption({ + // dataset: { + // transform: [] + // } + // }); + + use(install$R); + use(install$S); // universal transition + // chart.setOption({ + // series: { + // universalTransition: { enabled: true } + // } + // }) + + use(installUniversalTransition); // label layout + // chart.setOption({ + // series: { + // labelLayout: { hideOverlap: true } + // } + // }) + + use(installLabelLayout); + + exports.Axis = Axis; + exports.ChartView = ChartView; + exports.ComponentModel = ComponentModel; + exports.ComponentView = ComponentView; + exports.List = SeriesData; + exports.Model = Model; + exports.PRIORITY = PRIORITY; + exports.SeriesModel = SeriesModel; + exports.color = color; + exports.connect = connect; + exports.dataTool = dataTool; + exports.dependencies = dependencies; + exports.disConnect = disConnect; + exports.disconnect = disconnect; + exports.dispose = dispose$1; + exports.env = env; + exports.extendChartView = extendChartView; + exports.extendComponentModel = extendComponentModel; + exports.extendComponentView = extendComponentView; + exports.extendSeriesModel = extendSeriesModel; + exports.format = format$1; + exports.getCoordinateSystemDimensions = getCoordinateSystemDimensions; + exports.getInstanceByDom = getInstanceByDom; + exports.getInstanceById = getInstanceById; + exports.getMap = getMap; + exports.graphic = graphic$1; + exports.helper = helper; + exports.init = init$1; + exports.innerDrawElementOnCanvas = brushSingle; + exports.matrix = matrix; + exports.number = number; + exports.parseGeoJSON = parseGeoJSON; + exports.parseGeoJson = parseGeoJSON; + exports.registerAction = registerAction; + exports.registerCoordinateSystem = registerCoordinateSystem; + exports.registerLayout = registerLayout; + exports.registerLoading = registerLoading; + exports.registerLocale = registerLocale; + exports.registerMap = registerMap; + exports.registerPostInit = registerPostInit; + exports.registerPostUpdate = registerPostUpdate; + exports.registerPreprocessor = registerPreprocessor; + exports.registerProcessor = registerProcessor; + exports.registerTheme = registerTheme; + exports.registerTransform = registerTransform; + exports.registerUpdateLifecycle = registerUpdateLifecycle; + exports.registerVisual = registerVisual; + exports.setCanvasCreator = setCanvasCreator; + exports.throttle = throttle; + exports.time = time; + exports.use = use; + exports.util = util$1; + exports.vector = vector; + exports.version = version$1; + exports.zrUtil = util; + exports.zrender = zrender; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); +//# sourceMappingURL=echarts.js.map diff --git a/src/main/webapp/js/index.css b/src/main/webapp/js/index.css new file mode 100644 index 0000000..087a736 --- /dev/null +++ b/src/main/webapp/js/index.css @@ -0,0 +1,57 @@ +@charset "UTF-8"; +/* CSS Document */ +body, h1, h2, h3, h4, h5, h6, hr, p, +blockquote, /* structural elements 结构元素 */ +dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ +pre, /* text formatting elements 文本格式元素 */ +form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */ +th, td, /* table elements 表格元素 */ +body{ +background: #F5F5F5; +} +form{ + margin-top: 0px; +} +img{border:medium none;margin:0;padding:0;}/* img elements 图片元素 */ +/** 设置默认字体 **/ +body,button, input, select, textarea { font-size:12px; font: 12px/1.5 ’宋体’,Arial,tahoma, Srial, helvetica, sans-serif;} +h1,h2,h3,h4,h5,h6 { font-size:100%;} +em{font-style:normal;} +/** 重置列表元素 **/ +ul, ol { list-style:none; } +/** 重置超链接元素 **/ +a { text-decoration:none; color:#4f4f4f;} +a:hover { text-decoration:underline; color:#F40; } +/** 重置图片元素 **/ +img{ border:0px; margin-bottom: -7px;} +table {border: 1px solid #B1CDE3; padding:0; margin:0 auto; margin-left:10px;margin-right:10px; width:98%; border-collapse: collapse; } +td,th {text-align:center; border: 1px solid #B1CDE3;background: #fff;font-size:14px;padding: 3px 3px 3px 8px;color: #4f6b72;height: 22px;} +input[type="text"]{ +border: 1px solid; border-color: #CCC #EEE #EEE #CCC; +background: #F5F5F5; +height: 18px; +width: 160px; +} +input[type="password"]{ +border: 1px solid; border-color: #CCC #EEE #EEE #CCC; +color: #000; background: #F5F5F5; +width: 160px; +} +input[type="submit"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; font-weight: bold; background: #F5F5F5; +} +input[type="button"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; font-weight: bold; background: #F5F5F5; +} +input[type="reset"]{ +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; background: #F5F5F5; +} +textarea { +border: 1px solid; border-color: #EEE #CCC #CCC #EEE; +color: #000; background: #F5F5F5; +width:600px;height: 150px; +} +p{margin-left:10px; margin-top:2px; margin-bottom:5px; width:100%; border-collapse: collapse;font-size:14px;} diff --git a/src/main/webapp/js/index2.css b/src/main/webapp/js/index2.css new file mode 100644 index 0000000..c46a236 --- /dev/null +++ b/src/main/webapp/js/index2.css @@ -0,0 +1,186 @@ + +form { + margin: 0px; +} + +img { + border: medium none; + margin: 0; + padding: 0; +} /* img elements ͼƬԪ */ +/** Ĭ **/ +body,button,input,select,textarea { + font-size: 12px; + font: 12px/1.5 塯, Arial, tahoma, Srial, helvetica, sans-serif; +} + +h1,h2,h3,h4,h5,h6 { + font-size: 100%; +} + +em { + font-style: normal; +} +/** бԪ **/ +ul,ol { + list-style: none; +} +/** óԪ **/ +a { + text-decoration: none; + color: #4f4f4f; +} + +a:hover { + text-decoration: underline; + color: #F40; +} +/** ͼƬԪ **/ +img { + border: 0px; + margin-bottom: -7px; +} + +body { + width: 80%; + margin: 40px auto; + font-family: 'trebuchet MS', 'Lucida sans', Arial; + font-size: 14px; + color: #444; + background: url(../css/img/body1.jpg); + background-repeat: no-repeat; + background-size: 100% auto; + /* background: #F5F5F5; */ +} + +table { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + /* -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; */ + -webkit-box-shadow: 0px 2px 1px 5px rgba(242, 242, 242, 0.1); + box-shadow: 5px 20px 30px 30px rgba(242, 242, 242, 0.1); + width: 100%; +} + +table thead th { + background:url(../css/img/zebratable.png); + background-repeat:no-repeat; + background-position: 0px center; +} + +table tr { + background: #D5EAF0; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; +} + +table tr:nth-child(even) { + background: #D7E1C5; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; +} + + + +table td,table th { + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + padding: 10px; + text-align: center; +} + +table th { + background-color: #66a9bd; + background-image: -moz-linear-gradient(top, #dce9f9, #66a9bd); + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + box-shadow: 0 1px 0 rgba(255, 255, 255, .8) inset; + border-top: none; + text-shadow: 0 1px 0 rgba(255, 255, 255, .5); +} + +table td:first-child,table th:first-child { + border-left: none; +} + +table th:first-child { + -webkit-border-radius: 6px 0 0 0; + border-radius: 6px 0 0 0; +} + +table th:last-child { + -webkit-border-radius: 0 6px 0 0; + border-radius: 0 6px 0 0; +} + +table th:only-child { + -webkit-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +table tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 6px; + border-radius: 0 0 0 6px; +} + +table tr:last-child td:last-child { + -webkit-border-radius: 0 0 6px 0; + border-radius: 0 0 6px 0; +} + +input[type="button"],input[type="submit"],input[type="reset"] { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; + background: #B0CC7F; + margin: 0 2px 0; +} + +input[type="text"],input[type="password"] { + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} +select { + width:200px; + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} +option { + width:180px; + border: solid #ccc 2px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + background: #efefef; + margin: 0 2px 0; + text-indent: 5px; +} + +input[name="page.now"] { + border: solid #ccc 1px; + -webkit-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 1px #ccc; + box-shadow: 0px 0px 0px #CEB754; + background: #D5EAF0; + margin: 0px 10px 0px 0px; + padding-bottom: 0px; + padding-top: 5px; + width: 24px; + line-height:10px; + height: 12xp; +} \ No newline at end of file diff --git a/src/main/webapp/js/jquery-1.8.2.min.js b/src/main/webapp/js/jquery-1.8.2.min.js new file mode 100644 index 0000000..12c7797 --- /dev/null +++ b/src/main/webapp/js/jquery-1.8.2.min.js @@ -0,0 +1,9440 @@ +/*! + * jQuery JavaScript Library v1.8.2 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: Thu Sep 20 2012 21:13:05 GMT-0400 (Eastern Daylight Time) + */ +(function( window, undefined ) { +var + // A central reference to the root jQuery(document) + rootjQuery, + + // The deferred used on DOM ready + readyList, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + navigator = window.navigator, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Save a reference to some core methods + core_push = Array.prototype.push, + core_slice = Array.prototype.slice, + core_indexOf = Array.prototype.indexOf, + core_toString = Object.prototype.toString, + core_hasOwn = Object.prototype.hasOwnProperty, + core_trim = String.prototype.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, + + // Used for detecting and trimming whitespace + core_rnotwhite = /\S/, + core_rspace = /\s+/, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // The ready event handler and self cleanup method + DOMContentLoaded = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + } else if ( document.readyState === "complete" ) { + // we're here because readyState === "complete" in oldIE + // which is good enough for us to call the dom ready! + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context && context.nodeType ? context.ownerDocument || context : document ); + + // scripts is true for back-compat + selector = jQuery.parseHTML( match[1], doc, true ); + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + this.attr.call( selector, context, true ); + } + + return jQuery.merge( this, selector ); + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.8.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ), + "slice", core_slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ core_toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // scripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, scripts ) { + var parsed; + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + scripts = context; + context = 0; + } + context = context || document; + + // Single tag + if ( (parsed = rsingleTag.exec( data )) ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); + return jQuery.merge( [], + (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); + }, + + parseJSON: function( data ) { + if ( !data || typeof data !== "string") { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && core_rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var name, + i = 0, + length = obj.length, + isObj = length === undefined || jQuery.isFunction( obj ); + + if ( args ) { + if ( isObj ) { + for ( name in obj ) { + if ( callback.apply( obj[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( obj[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in obj ) { + if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var type, + ret = results || []; + + if ( arr != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + type = jQuery.type( arr ); + + if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { + core_push.call( ret, arr ); + } else { + jQuery.merge( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, + ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready, 1 ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.split( core_rspace ), function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) { + list.push( arg ); + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + return jQuery.inArray( fn, list ) > -1; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? + function() { + var returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + } : + newDefer[ action ] + ); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] = list.fire + deferred[ tuple[0] ] = list.fire; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + eventName, + i, + isSupported, + clickFn, + div = document.createElement("div"); + + // Preliminary tests + div.setAttribute( "className", "t" ); + div.innerHTML = "
a"; + + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + a.style.cssText = "top:1px;float:left;opacity:.5"; + + // Can't get basic test support + if ( !all || !all.length ) { + return {}; + } + + // First batch of supports tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: ( document.compatMode === "CSS1Compat" ), + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", clickFn = function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent("onclick"); + div.detachEvent( "onclick", clickFn ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + input.setAttribute( "checked", "checked" ); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: true, + change: true, + focusin: true + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + // Run tests that need a body at doc ready + jQuery(function() { + var container, div, tds, marginDiv, + divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // NOTE: To any future maintainer, we've window.getComputedStyle + // because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = document.createElement("div"); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + container.style.zoom = 1; + } + + // Null elements to avoid leaks in IE + body.removeChild( container ); + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + fragment.removeChild( div ); + all = a = select = opt = input = fragment = div = null; + + return support; +})(); +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + deletedIds: [], + + // Remove at next major release (1.9/2.0) + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery.removeData( elem, type + "queue", true ); + jQuery.removeData( elem, key, true ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, fixSpecified, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea|)$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var removes, className, elem, c, cl, i, l; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + if ( (value && typeof value === "string") || value === undefined ) { + removes = ( value || "" ).split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + if ( elem.nodeType === 1 && elem.className ) { + + className = (" " + elem.className + " ").replace( rclass, " " ); + + // loop over each item in the removal list + for ( c = 0, cl = removes.length; c < cl; c++ ) { + // Remove until there is nothing to remove, + while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) { + className = className.replace( " " + removes[ c ] + " " , " " ); + } + } + elem.className = value ? jQuery.trim( className ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( core_rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 + attrFn: {}, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + + attrNames = value.split( core_rspace ); + + for ( ; i < attrNames.length; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.value = value + "" ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, + rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var t, tns, type, origType, namespaces, origCount, + j, events, special, eventType, handleObj, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, "events", true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, + type = event.type || event, + namespaces = []; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + for ( old = elem; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old === (elem.ownerDocument || document) ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, + handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = core_slice.call( arguments ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = []; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + selMatch = {}; + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) + event.metaKey = !!event.metaKey; + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 – + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "_submit_attached" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "_submit_attached", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "_change_attached", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var cachedruns, + assertGetIdNotName, + Expr, + getText, + isXML, + contains, + compile, + sortOrder, + hasDuplicate, + outermostContext, + + baseHasDuplicate = true, + strundefined = "undefined", + + expando = ( "sizcache" + Math.random() ).replace( ".", "" ), + + Token = String, + document = window.document, + docElem = document.documentElement, + dirruns = 0, + done = 0, + pop = [].pop, + push = [].push, + slice = [].slice, + // Use a stripped-down indexOf if a native one is unavailable + indexOf = [].indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + // Augment a function for special use by Sizzle + markFunction = function( fn, value ) { + fn[ expando ] = value == null || value; + return fn; + }, + + createCache = function() { + var cache = {}, + keys = []; + + return markFunction(function( key, value ) { + // Only keep the most recent entries + if ( keys.push( key ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + + return (cache[ key ] = value); + }, cache ); + }, + + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // Regex + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments not in parens/brackets, + // then attribute selectors and non-pseudos (denoted by :), + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", + + // For matchExpr.POS and matchExpr.needsContext + pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + + rnot = /^:not/, + rsibling = /[\x20\t\r\n\f]*[+~]/, + rendsWithNot = /:not\($/, + + rheader = /h\d/i, + rinputs = /input|select|textarea|button/i, + + rbackslash = /\\(?!\\)/g, + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "POS": new RegExp( pos, "i" ), + "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) + }, + + // Support + + // Used for testing something on an element + assert = function( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } + }, + + // Check if getElementsByTagName("*") returns only elements + assertTagNameNoComments = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }), + + // Check if getAttribute returns normalized href attributes + assertHrefNotNormalized = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }), + + // Check if attributes should be retrieved by attribute nodes + assertAttributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }), + + // Check if getElementsByClassName can be trusted + assertUsableClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }), + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + assertUsableName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "
"; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = document.getElementsByName && + // buggy browsers will return fewer than the correct 2 + document.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + document.getElementsByName( expando + 0 ).length; + assertGetIdNotName = !document.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + +// If slice is not available, provide a backup +try { + slice.call( docElem.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + for ( ; (elem = this[i]); i++ ) { + results.push( elem ); + } + return results; + }; +} + +function Sizzle( selector, context, results, seed ) { + results = results || []; + context = context || document; + var match, elem, xml, m, + nodeType = context.nodeType; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( nodeType !== 1 && nodeType !== 9 ) { + return []; + } + + xml = isXML( context ); + + if ( !xml && !seed ) { + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed, xml ); +} + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + return Sizzle( expr, null, null, [ elem ] ).length > 0; +}; + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + } else { + + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } + return ret; +}; + +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Element contains another +contains = Sizzle.contains = docElem.contains ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); + } : + docElem.compareDocumentPosition ? + function( a, b ) { + return b && !!( a.compareDocumentPosition( b ) & 16 ); + } : + function( a, b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + return false; + }; + +Sizzle.attr = function( elem, name ) { + var val, + xml = isXML( elem ); + + if ( !xml ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( xml || assertAttributes ) { + return elem.getAttribute( name ); + } + val = elem.getAttributeNode( name ); + return val ? + typeof elem[ name ] === "boolean" ? + elem[ name ] ? name : null : + val.specified ? val.value : null : + null; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + // IE6/7 return a modified href + attrHandle: assertHrefNotNormalized ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }, + + find: { + "ID": assertGetIdNotName ? + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + } : + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }, + + "TAG": assertTagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + var elem, + tmp = [], + i = 0; + + for ( ; (elem = results[i]); i++ ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }, + + "NAME": assertUsableName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }, + + "CLASS": assertUsableClassName && function( className, context, xml ) { + if ( typeof context.getElementsByClassName !== strundefined && !xml ) { + return context.getElementsByClassName( className ); + } + } + }, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( rbackslash, "" ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 3 xn-component of xn+y argument ([+-]?\d*n|) + 4 sign of xn-component + 5 x of xn-component + 6 sign of y-component + 7 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1] === "nth" ) { + // nth-child requires argument + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); + match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); + + // other types prohibit arguments + } else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var unquoted, excess; + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] ) { + match[2] = match[3]; + } else if ( (unquoted = match[4]) ) { + // Only check arguments that contain a pseudo + if ( rpseudo.test(unquoted) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + unquoted = unquoted.slice( 0, excess ); + match[0] = match[0].slice( 0, excess ); + } + match[2] = unquoted; + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + "ID": assertGetIdNotName ? + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + return elem.getAttribute("id") === id; + }; + } : + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === id; + }; + }, + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); + + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ expando ][ className ]; + if ( !pattern ) { + pattern = classCache( className, new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)") ); + } + return function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }; + }, + + "ATTR": function( name, operator, check ) { + return function( elem, context ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.substr( result.length - check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, argument, first, last ) { + + if ( type === "nth" ) { + return function( elem ) { + var node, diff, + parent = elem.parentNode; + + if ( first === 1 && last === 0 ) { + return true; + } + + if ( parent ) { + diff = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + diff++; + if ( elem === node ) { + break; + } + } + } + } + + // Incorporate the offset (or cast to NaN), then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + }; + } + + return function( elem ) { + var node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + var nodeType; + elem = elem.firstChild; + while ( elem ) { + if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { + return false; + } + elem = elem.nextSibling; + } + return true; + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "text": function( elem ) { + var type, attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + (type = elem.type) === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); + }, + + // Input types + "radio": createInputPseudo("radio"), + "checkbox": createInputPseudo("checkbox"), + "file": createInputPseudo("file"), + "password": createInputPseudo("password"), + "image": createInputPseudo("image"), + + "submit": createButtonPseudo("submit"), + "reset": createButtonPseudo("reset"), + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "focus": function( elem ) { + var doc = elem.ownerDocument; + return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href); + }, + + "active": function( elem ) { + return elem === elem.ownerDocument.activeElement; + }, + + // Positional types + "first": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = 0; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = 1; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +function siblingCheck( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; +} + +sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? + a.compareDocumentPosition : + a.compareDocumentPosition(b) & 4 + ) ? -1 : 1; + } : + function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + +// Always assume the presence of duplicates if sort doesn't +// pass them to our comparison function (as in Google Chrome). +[0, 0].sort( sortOrder ); +baseHasDuplicate = !hasDuplicate; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + i = 1; + + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + + return results; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, soFar, groups, preFilters, + cached = tokenCache[ expando ][ selector ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + soFar = soFar.slice( match[0].length ); + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + + // Cast descendant combinators to space + matched.type = match[0].replace( rtrim, " " ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + // The last two arguments here are (context, xml) for backCompat + (match = preFilters[ type ]( match, document, true ))) ) { + + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + matched.type = type; + matched.matches = match; + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && combinator.dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( !xml ) { + var cache, + dirkey = dirruns + " " + doneName + " ", + cachedkey = dirkey + cachedruns; + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( (cache = elem[ expando ]) === cachedkey ) { + return elem.sizset; + } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { + if ( elem.sizset ) { + return elem; + } + } else { + elem[ expando ] = cachedkey; + if ( matcher( elem, context, xml ) ) { + elem.sizset = true; + return elem; + } + elem.sizset = false; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( matcher( elem, context, xml ) ) { + return elem; + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + // Positional selectors apply to seed elements, so it is invalid to follow them with relative ones + if ( seed && postFinder ) { + return; + } + + var i, elem, postFilterIn, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [], seed ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + postFilterIn = condense( matcherOut, postMap ); + postFilter( postFilterIn, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = postFilterIn.length; + while ( i-- ) { + if ( (elem = postFilterIn[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + // Keep seed and results synchronized + if ( seed ) { + // Ignore postFinder because it can't coexist with seed + i = preFilter && matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + seed[ preMap[i] ] = !(results[ preMap[i] ] = elem); + } + } + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + // The concatenated values are (context, xml) for backCompat + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && tokens.join("") + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Nested matchers should use non-integer dirruns + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = superMatcher.el; + } + + // Add elements passing elementMatchers directly to results + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + for ( j = 0; (matcher = elementMatchers[j]); j++ ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++superMatcher.el; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + for ( j = 0; (matcher = setMatchers[j]); j++ ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + superMatcher.el = 0; + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ expando ][ selector ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results, seed ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results, seed ); + } + return results; +} + +function select( selector, context, results, seed, xml ) { + var i, tokens, token, type, find, + match = tokenize( selector ), + j = match.length; + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !xml && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().length ); + } + + // Fetch a seed set for right-to-left matching + for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( rbackslash, "" ), + rsibling.test( tokens[0].type ) && context.parentNode || context, + xml + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && tokens.join(""); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + xml, + results, + rsibling.test( selector ) + ); + return results; +} + +if ( document.querySelectorAll ) { + (function() { + var disconnectedMatch, + oldSelect = select, + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // qSa(:focus) reports false when true (Chrome 21), + // A support test would require too much code (would include document ready) + rbuggyQSA = [":focus"], + + // matchesSelector(:focus) reports false when true (Chrome 21), + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + // A support test would require too much code (would include document ready) + // just skip matchesSelector for :active + rbuggyMatches = [ ":active", ":focus" ], + matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector; + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here (do not put tests after this one) + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE9 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = "

"; + if ( div.querySelectorAll("[test^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here (do not put tests after this one) + div.innerHTML = ""; + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push(":enabled", ":disabled"); + } + }); + + // rbuggyQSA always contains :focus, so no need for a length check + rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") ); + + select = function( selector, context, results, seed, xml ) { + // Only use querySelectorAll when not filtering, + // when this is not xml, + // and when no QSA bugs apply + if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + var groups, i, + old = true, + nid = expando, + newContext = context, + newSelector = context.nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + groups[i].join(""); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + + return oldSelect( selector, context, results, seed, xml ); + }; + + if ( matches ) { + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + try { + matches.call( div, "[test!='']:sizzle" ); + rbuggyMatches.push( "!=", pseudos ); + } catch ( e ) {} + }); + + // rbuggyMatches always contains :active and :focus, so no need for a length check + rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); + + Sizzle.matchesSelector = function( elem, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyMatches always contains :active, so no need for an existence check + if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && (!rbuggyQSA || !rbuggyQSA.test( expr )) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, null, null, [ elem ] ).length > 0; + }; + } + })(); +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Back-compat +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, l, length, n, r, ret, + self = this; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + ret = this.pushStack( "", "find", selector ); + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + rcheckableType = /^(?:checkbox|radio)$/, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*\s*$/g, + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, +// unless wrapped in a div with non-breaking characters in front of it. +if ( !jQuery.support.htmlSerialize ) { + wrapMap._default = [ 1, "X
", "
" ]; +} + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); + } + }, + + after: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); + } + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + jQuery.cleanData( [ elem ] ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + if ( !isDisconnected( this[0] ) ) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this), old = self.html(); + self.replaceWith( value.call( this, i, old ) ); + }); + } + + if ( typeof value !== "string" ) { + value = jQuery( value ).detach(); + } + + return this.each(function() { + var next = this.nextSibling, + parent = this.parentNode; + + jQuery( this ).remove(); + + if ( next ) { + jQuery(next).before( value ); + } else { + jQuery(parent).append( value ); + } + }); + } + + return this.length ? + this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : + this; + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = [].concat.apply( [], args ); + + var results, first, fragment, iNoClone, + i = 0, + value = args[0], + scripts = [], + l = this.length; + + // We can't cloneNode fragments that contain checked, in WebKit + if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { + return this.each(function() { + jQuery(this).domManip( args, table, callback ); + }); + } + + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + args[0] = value.call( this, i, table ? self.html() : undefined ); + self.domManip( args, table, callback ); + }); + } + + if ( this[0] ) { + results = jQuery.buildFragment( args, this, scripts ); + fragment = results.fragment; + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + // Fragments from the fragment cache must always be cloned and never used in place. + for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + i === iNoClone ? + fragment : + jQuery.clone( fragment, true, true ) + ); + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + + if ( scripts.length ) { + jQuery.each( scripts, function( i, elem ) { + if ( elem.src ) { + if ( jQuery.ajax ) { + jQuery.ajax({ + url: elem.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.error("no ajax"); + } + } else { + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + }); + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function cloneFixAttributes( src, dest ) { + var nodeName; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + // clearAttributes removes the attributes, which we don't want, + // but also removes the attachEvent events, which we *do* want + if ( dest.clearAttributes ) { + dest.clearAttributes(); + } + + // mergeAttributes, in contrast, only merges back on the + // original attributes, not the events + if ( dest.mergeAttributes ) { + dest.mergeAttributes( src ); + } + + nodeName = dest.nodeName.toLowerCase(); + + if ( nodeName === "object" ) { + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; + } + + // Event data gets referenced instead of copied if the expando + // gets copied too + dest.removeAttribute( jQuery.expando ); +} + +jQuery.buildFragment = function( args, context, scripts ) { + var fragment, cacheable, cachehit, + first = args[ 0 ]; + + // Set context from what may come in as undefined or a jQuery collection or a node + // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & + // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception + context = context || document; + context = !context.nodeType && context[0] || context; + context = context.ownerDocument || context; + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put or elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && + first.charAt(0) === "<" && !rnocache.test( first ) && + (jQuery.support.checkClone || !rchecked.test( first )) && + (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { + + // Mark cacheable and look for a hit + cacheable = true; + fragment = jQuery.fragments[ first ]; + cachehit = fragment !== undefined; + } + + if ( !fragment ) { + fragment = context.createDocumentFragment(); + jQuery.clean( args, context, fragment, scripts ); + + // Update the cache, but only store false + // unless this is a second parsing of the same content + if ( cacheable ) { + jQuery.fragments[ first ] = cachehit && fragment; + } + } + + return { fragment: fragment, cacheable: cacheable }; +}; + +jQuery.fragments = {}; + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + l = insert.length, + parent = this.length === 1 && this[0].parentNode; + + if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { + insert[ original ]( this[0] ); + return this; + } else { + for ( ; i < l; i++ ) { + elems = ( i > 0 ? this.clone(true) : this ).get(); + jQuery( insert[i] )[ original ]( elems ); + ret = ret.concat( elems ); + } + + return this.pushStack( ret, name, insert.selector ); + } + }; +}); + +function getAll( elem ) { + if ( typeof elem.getElementsByTagName !== "undefined" ) { + return elem.getElementsByTagName( "*" ); + + } else if ( typeof elem.querySelectorAll !== "undefined" ) { + return elem.querySelectorAll( "*" ); + + } else { + return []; + } +} + +// Used in clean, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var srcElements, + destElements, + i, + clone; + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes( elem, clone ); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll( elem ); + destElements = getAll( clone ); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for ( i = 0; srcElements[i]; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + cloneCopyEvent( elem, clone ); + + if ( deepDataAndEvents ) { + srcElements = getAll( elem ); + destElements = getAll( clone ); + + for ( i = 0; srcElements[i]; ++i ) { + cloneCopyEvent( srcElements[i], destElements[i] ); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }, + + clean: function( elems, context, fragment, scripts ) { + var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, + safe = context === document && safeFragment, + ret = []; + + // Ensure that context is a document + if ( !context || typeof context.createDocumentFragment === "undefined" ) { + context = document; + } + + // Use the already-created safe fragment if context permits + for ( i = 0; (elem = elems[i]) != null; i++ ) { + if ( typeof elem === "number" ) { + elem += ""; + } + + if ( !elem ) { + continue; + } + + // Convert html string into DOM nodes + if ( typeof elem === "string" ) { + if ( !rhtml.test( elem ) ) { + elem = context.createTextNode( elem ); + } else { + // Ensure a safe container in which to render the html + safe = safe || createSafeFragment( context ); + div = context.createElement("div"); + safe.appendChild( div ); + + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); + + // Go to html and back, then peel off extra wrappers + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + depth = wrap[0]; + div.innerHTML = wrap[1] + elem + wrap[2]; + + // Move to the right depth + while ( depth-- ) { + div = div.lastChild; + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + hasBody = rtbody.test(elem); + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare or + wrap[1] === "
" && !hasBody ? + div.childNodes : + []; + + for ( j = tbody.length - 1; j >= 0 ; --j ) { + if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { + tbody[ j ].parentNode.removeChild( tbody[ j ] ); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + } + + elem = div.childNodes; + + // Take out of fragment container (we need a fresh div each time) + div.parentNode.removeChild( div ); + } + } + + if ( elem.nodeType ) { + ret.push( elem ); + } else { + jQuery.merge( ret, elem ); + } + } + + // Fix #11356: Clear elements from safeFragment + if ( div ) { + elem = div = safe = null; + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + for ( i = 0; (elem = ret[i]) != null; i++ ) { + if ( jQuery.nodeName( elem, "input" ) ) { + fixDefaultChecked( elem ); + } else if ( typeof elem.getElementsByTagName !== "undefined" ) { + jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); + } + } + } + + // Append elements to a provided document fragment + if ( fragment ) { + // Special handling of each script element + handleScript = function( elem ) { + // Check if we consider it executable + if ( !elem.type || rscriptType.test( elem.type ) ) { + // Detach the script and store it in the scripts array (if provided) or the fragment + // Return truthy to indicate that it has been handled + return scripts ? + scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : + fragment.appendChild( elem ); + } + }; + + for ( i = 0; (elem = ret[i]) != null; i++ ) { + // Check if we're done after handling an executable script + if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { + // Append to fragment and handle embedded scripts + fragment.appendChild( elem ); + if ( typeof elem.getElementsByTagName !== "undefined" ) { + // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration + jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); + + // Splice the scripts into ret after their former ancestor and advance our index beyond them + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); + i += jsTags.length; + } + } + } + } + + return ret; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var data, id, elem, type, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + jQuery.deletedIds.push( id ); + } + } + } + } + } +}); +// Limit scope pollution from any deprecated API +(function() { + +var matched, browser; + +// Use of jQuery.browser is frowned upon. +// More details: http://api.jquery.com/jQuery.browser +// jQuery.uaMatch maintained for back-compat +jQuery.uaMatch = function( ua ) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; +}; + +matched = jQuery.uaMatch( navigator.userAgent ); +browser = {}; + +if ( matched.browser ) { + browser[ matched.browser ] = true; + browser.version = matched.version; +} + +// Chrome is Webkit, but Webkit is also Safari. +if ( browser.chrome ) { + browser.webkit = true; +} else if ( browser.webkit ) { + browser.safari = true; +} + +jQuery.browser = browser; + +jQuery.sub = function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; +}; + +})(); +var curCSS, iframe, iframeDoc, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity=([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), + elemdisplay = {}, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + + eventsToggle = jQuery.fn.toggle; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var elem, display, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + values[ index ] = jQuery._data( elem, "olddisplay" ); + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && elem.style.display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + display = curCSS( elem, "display" ); + + if ( !values[ index ] && display !== "none" ) { + jQuery._data( elem, "olddisplay", display ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state, fn2 ) { + var bool = typeof state === "boolean"; + + if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { + return eventsToggle.apply( this, arguments ); + } + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, numeric, extra ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( numeric || extra !== undefined ) { + num = parseFloat( val ); + return numeric || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: To any future maintainer, we've window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + curCSS = function( elem, name ) { + var ret, width, minWidth, maxWidth, + computed = window.getComputedStyle( elem, null ), + style = elem.style; + + if ( computed ) { + + ret = computed[ name ]; + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + curCSS = function( elem, name ) { + var left, rsLeft, + ret = elem.currentStyle && elem.currentStyle[ name ], + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + elem.runtimeStyle.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + elem.runtimeStyle.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + // we use jQuery.css instead of curCSS here + // because of the reliableMarginRight CSS hook! + val += jQuery.css( elem, extra + cssExpand[ i ], true ); + } + + // From this point on we use curCSS for maximum performance (relevant in animations) + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } else { + // at this point, extra isn't content, so add padding + val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + valueIsBorderBox = true, + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox + ) + ) + "px"; +} + + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + if ( elemdisplay[ nodeName ] ) { + return elemdisplay[ nodeName ]; + } + + var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), + display = elem.css("display"); + elem.remove(); + + // If the simple way fails, + // get element's real default display by attaching it to a temp iframe + if ( display === "none" || display === "" ) { + // Use the already-created iframe if possible + iframe = document.body.appendChild( + iframe || jQuery.extend( document.createElement("iframe"), { + frameBorder: 0, + width: 0, + height: 0 + }) + ); + + // Create a cacheable copy of the iframe document on first call. + // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML + // document to it; WebKit & Firefox won't allow reusing the iframe document. + if ( !iframeDoc || !iframe.createElement ) { + iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; + iframeDoc.write(""); + iframeDoc.close(); + } + + elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); + + display = curCSS( elem, "display" ); + document.body.removeChild( iframe ); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + + return display; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } else { + return getWidthOrHeight( elem, name, extra ); + } + } + }, + + set: function( elem, value, extra ) { + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" + ) : 0 + ); + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && + style.removeAttribute ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; +} + +// These hooks cannot be added until DOM ready because the support test +// for it is not run until after DOM ready +jQuery(function() { + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "marginRight" ); + } + }); + } + }; + } + + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // getComputedStyle returns percent when specified for top/left/bottom/right + // rather than make the css module depend on the offset module, we just check for it here + if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = { + get: function( elem, computed ) { + if ( computed ) { + var ret = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; + } + } + }; + }); + } + +}); + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.hidden = function( elem ) { + return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); + }; + + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; + + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rselectTextarea = /^(?:select|textarea)/i; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function(){ + return this.elements ? jQuery.makeArray( this.elements ) : this; + }) + .filter(function(){ + return this.name && !this.disabled && + ( this.checked || rselectTextarea.test( this.nodeName ) || + rinput.test( this.type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val, i ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + +//Serialize an array of form elements or a set of +//key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // If array item is non-scalar (array or object), encode its + // numeric index to resolve deserialization ambiguity issues. + // Note that rack (as of 1.0.0) can't currently deserialize + // nested arrays properly, and attempting to do so may cause + // a server error. Possible fixes are to modify rack's + // deserialization algorithm or to provide an option or flag + // to force array serialization to be shallow. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} +var + // Document location + ajaxLocParts, + ajaxLocation, + + rhash = /#.*$/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rquery = /\?/, + rscript = /)<[^<]*)*<\/script>/gi, + rts = /([?&])_=[^&]*/, + rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + + // Keep a copy of the old load method + _load = jQuery.fn.load, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, list, placeBefore, + dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), + i = 0, + length = dataTypes.length; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + for ( ; i < length; i++ ) { + dataType = dataTypes[ i ]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test( dataType ); + if ( placeBefore ) { + dataType = dataType.substr( 1 ) || "*"; + } + list = structure[ dataType ] = structure[ dataType ] || []; + // then we add to the structure accordingly + list[ placeBefore ? "unshift" : "push" ]( func ); + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, + dataType /* internal */, inspected /* internal */ ) { + + dataType = dataType || options.dataTypes[ 0 ]; + inspected = inspected || {}; + + inspected[ dataType ] = true; + + var selection, + list = structure[ dataType ], + i = 0, + length = list ? list.length : 0, + executeOnly = ( structure === prefilters ); + + for ( ; i < length && ( executeOnly || !selection ); i++ ) { + selection = list[ i ]( options, originalOptions, jqXHR ); + // If we got redirected to another dataType + // we try there if executing only and not done already + if ( typeof selection === "string" ) { + if ( !executeOnly || inspected[ selection ] ) { + selection = undefined; + } else { + options.dataTypes.unshift( selection ); + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, selection, inspected ); + } + } + } + // If we're only executing or nothing was selected + // we try the catchall dataType if not done already + if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, "*", inspected ); + } + // unnecessary when only executing (prefilters) + // but it'll be ignored by the caller in that case + return selection; +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } +} + +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + // Don't do a request if no elements are being requested + if ( !this.length ) { + return this; + } + + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // Request the remote document + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params, + complete: function( jqXHR, status ) { + if ( callback ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + } + } + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + // See if a selector was specified + self.html( selector ? + + // Create a dummy div to hold the results + jQuery("
") + + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append( responseText.replace( rscript, "" ) ) + + // Locate the specified elements + .find( selector ) : + + // If not, just inject the full result + responseText ); + + }); + + return this; +}; + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ + jQuery.fn[ o ] = function( f ){ + return this.on( o, f ); + }; +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; +}); + +jQuery.extend({ + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend( target, settings ); + return target; + }, + + ajaxSettings: { + url: ajaxLocation, + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + type: "GET", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + processData: true, + async: true, + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + xml: "application/xml, text/xml", + html: "text/html", + text: "text/plain", + json: "application/json, text/javascript", + "*": allTypes + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText" + }, + + // List of data converters + // 1) key format is "source_type destination_type" (a single space in-between) + // 2) the catchall symbol "*" can be used for source_type + converters: { + + // Convert anything to text + "* text": window.String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true + } + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // ifModified key + ifModifiedKey, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? + jQuery( callbackContext ) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( !state ) { + var lname = name.toLowerCase(); + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + statusText = statusText || strAbort; + if ( transport ) { + transport.abort( statusText ); + } + done( 0, statusText ); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // If successful, handle type chaining + if ( status >= 200 && status < 300 || status === 304 ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ ifModifiedKey ] = modified; + } + modified = jqXHR.getResponseHeader("Etag"); + if ( modified ) { + jQuery.etag[ ifModifiedKey ] = modified; + } + } + + // If not modified + if ( status === 304 ) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + isSuccess = ajaxConvert( s, response ); + statusText = isSuccess.state; + success = isSuccess.data; + error = isSuccess.error; + isSuccess = !error; + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( !statusText || status ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + // Attach deferreds + deferred.promise( jqXHR ); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function( map ) { + if ( map ) { + var tmp; + if ( state < 2 ) { + for ( tmp in map ) { + statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; + } + } else { + tmp = map[ jqXHR.status ]; + jqXHR.always( tmp ); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ) || false; + s.crossDomain = parts && ( parts.join(":") + ( parts[ 3 ] ? "" : parts[ 1 ] === "http:" ? 80 : 443 ) ) !== + ( ajaxLocParts.join(":") + ( ajaxLocParts[ 3 ] ? "" : ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if ( s.cache === false ) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace( rts, "$1_=" + ts ); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + ifModifiedKey = ifModifiedKey || s.url; + if ( jQuery.lastModified[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); + } + if ( jQuery.etag[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout( function(){ + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch (e) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }, + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {} + +}); + +/* Handles responses to an ajax request: + * - sets all responseXXX fields accordingly + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes, + responseFields = s.responseFields; + + // Fill responseXXX fields + for ( type in responseFields ) { + if ( type in responses ) { + jqXHR[ responseFields[type] ] = responses[ type ]; + } + } + + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +// Chain conversions given the request and the original response +function ajaxConvert( s, response ) { + + var conv, conv2, current, tmp, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(), + prev = dataTypes[ 0 ], + converters = {}, + i = 0; + + // Apply the dataFilter if provided + if ( s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + // Convert to each sequential dataType, tolerating list modification + for ( ; (current = dataTypes[++i]); ) { + + // There's only work to do if current dataType is non-auto + if ( current !== "*" ) { + + // Convert response if prev dataType is non-auto and differs from current + if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split(" "); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.splice( i--, 0, current ); + } + + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s["throws"] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + + // Update prev for next iteration + prev = current; + } + } + + return { state: "success", data: response }; +} +var oldCallbacks = [], + rquestion = /\?/, + rjsonp = /(=)\?(?=&|$)|\?\?/, + nonce = jQuery.now(); + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + data = s.data, + url = s.url, + hasCallback = s.jsonp !== false, + replaceInUrl = hasCallback && rjsonp.test( url ), + replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && + !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && + rjsonp.test( data ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + overwritten = window[ callbackName ]; + + // Insert callback into url or form data + if ( replaceInUrl ) { + s.url = url.replace( rjsonp, "$1" + callbackName ); + } else if ( replaceInData ) { + s.data = data.replace( rjsonp, "$1" + callbackName ); + } else if ( hasCallback ) { + s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and global +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + + var script, + head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; + + return { + + send: function( _, callback ) { + + script = document.createElement( "script" ); + + script.async = "async"; + + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } + + script.src = s.url; + + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + + // Remove the script + if ( head && script.parentNode ) { + head.removeChild( script ); + } + + // Dereference the script + script = undefined; + + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709 and #4378). + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( 0, 1 ); + } + } + }; + } +}); +var xhrCallbacks, + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { + // Abort all pending requests + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ]( 0, 1 ); + } + } : false, + xhrId = 0; + +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} + +function createActiveXHR() { + try { + return new window.ActiveXObject( "Microsoft.XMLHTTP" ); + } catch( e ) {} +} + +// Create the request object +// (This is still attached to ajaxSettings for backward compatibility) +jQuery.ajaxSettings.xhr = window.ActiveXObject ? + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; + +// Determine support properties +(function( xhr ) { + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) + }); +})( jQuery.ajaxSettings.xhr() ); + +// Create transport if the browser can provide an xhr +if ( jQuery.support.ajax ) { + + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { + + var callback; + + return { + send: function( headers, complete ) { + + // Get a new xhr + var handle, i, + xhr = s.xhr(); + + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } + + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( _ ) {} + + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); + + // Listener + callback = function( _, isAbort ) { + + var status, + statusText, + responseHeaders, + responses, + xml; + + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occurred + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { + + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + + // Only called once + callback = undefined; + + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } + + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + responses = {}; + xml = xhr.responseXML; + + // Construct response list + if ( xml && xml.documentElement /* #4958 */ ) { + responses.xml = xml; + } + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( _ ) { + } + + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } + + // Filter status for non standard behaviors + + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } + + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; + + if ( !s.async ) { + // if we're in sync mode we fire the callback + callback(); + } else if ( xhr.readyState === 4 ) { + // (IE6 & IE7) if it's in cache and has been + // retrieved directly we need to fire the callback + setTimeout( callback, 0 ); + } else { + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; + } + }, + + abort: function() { + if ( callback ) { + callback(0,1); + } + } + }; + } + }); +} +var fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var end, unit, + tween = this.createTween( prop, value ), + parts = rfxnum.exec( value ), + target = tween.cur(), + start = +target || 0, + scale = 1, + maxIterations = 20; + + if ( parts ) { + end = +parts[2]; + unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + + // We need to compute starting value + if ( unit !== "px" && start ) { + // Iteratively approximate from a nonzero starting point + // Prefer the current property, because this process will be trivial if it uses the same units + // Fallback to end or a simple constant + start = jQuery.css( tween.elem, prop, true ) || end || 1; + + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + tween.unit = unit; + tween.start = start; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; + } + return tween; + }] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }, 0 ); + return ( fxNow = jQuery.now() ); +} + +function createTweens( animation, props ) { + jQuery.each( props, function( prop, value ) { + var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( collection[ index ].call( animation, prop, value ) ) { + + // we're done with this property + return; + } + } + }); +} + +function Animation( elem, properties, options ) { + var result, + index = 0, + tweenerIndex = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + percent = 1 - ( remaining / animation.duration || 0 ), + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end, easing ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // if we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // resolve when we played the last frame + // otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + createTweens( animation, props ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + anim: animation, + queue: animation.opts.queue, + elem: elem + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'index' from above because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +function defaultPrefilter( elem, props, opts ) { + var index, prop, value, length, dataShow, tween, hooks, oldfire, + anim = this, + style = elem.style, + orig = {}, + handled = [], + hidden = elem.nodeType && isHidden( elem ); + + // handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( elem, "display" ) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { + style.display = "inline-block"; + + } else { + style.zoom = 1; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + if ( !jQuery.support.shrinkWrapBlocks ) { + anim.done(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + } + + + // show/hide pass + for ( index in props ) { + value = props[ index ]; + if ( rfxtypes.exec( value ) ) { + delete props[ index ]; + if ( value === ( hidden ? "hide" : "show" ) ) { + continue; + } + handled.push( index ); + } + } + + length = handled.length; + if ( length ) { + dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + jQuery.removeData( elem, "fxshow", true ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( index = 0 ; index < length ; index++ ) { + prop = handled[ index ]; + tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); + orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + } +} + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // passing any value as a 4th parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails + // so, simple values such as "10px" are parsed to Float. + // complex values such as "rotate(1rad)" are returned as is. + result = jQuery.css( tween.elem, tween.prop, false, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // use step hook for back compat - use cssHook if its there - use .style if its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Remove in 2.0 - this supports IE8's panic based approach +// to setting things on disconnected nodes + +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" || + // special check for .toggle( handler, handler, ... ) + ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations resolve immediately + if ( empty ) { + anim.stop( true ); + } + }; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + } +}); + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + attrs = { height: type }, + i = 0; + + // if we include width, step value is 1 to do all cssExpand values, + // if we don't include width, step value is 2 to skip over Left and Right + includeWidth = includeWidth? 1 : 0; + for( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p*Math.PI ) / 2; + } +}; + +jQuery.timers = []; +jQuery.fx = Tween.prototype.init; +jQuery.fx.tick = function() { + var timer, + timers = jQuery.timers, + i = 0; + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } +}; + +jQuery.fx.timer = function( timer ) { + if ( timer() && jQuery.timers.push( timer ) && !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; +} +var rroot = /^(?:body|html)$/i; + +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, + box = { top: 0, left: 0 }, + elem = this[ 0 ], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + if ( (body = doc.body) === elem ) { + return jQuery.offset.bodyOffset( elem ); + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof elem.getBoundingClientRect !== "undefined" ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + clientTop = docElem.clientTop || body.clientTop || 0; + clientLeft = docElem.clientLeft || body.clientLeft || 0; + scrollTop = win.pageYOffset || docElem.scrollTop; + scrollLeft = win.pageXOffset || docElem.scrollLeft; + return { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; +}; + +jQuery.offset = { + + bodyOffset: function( body ) { + var top = body.offsetTop, + left = body.offsetLeft; + + if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { + top += parseFloat( jQuery.css(body, "marginTop") ) || 0; + left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; + } + + return { top: top, left: left }; + }, + + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + + // set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + var curElem = jQuery( elem ), + curOffset = curElem.offset(), + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + } +}; + + +jQuery.fn.extend({ + + position: function() { + if ( !this[0] ) { + return; + } + + var elem = this[0], + + // Get *real* offsetParent + offsetParent = this.offsetParent(), + + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; + offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; + + // Add offsetParent borders + parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; + parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || document.body; + while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || document.body; + }); + } +}); + + +// Create scrollLeft and scrollTop methods +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); + + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + win.document.documentElement[ method ] : + elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; +} +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return jQuery.access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, value, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); +// Expose jQuery to the global object +window.jQuery = window.$ = jQuery; + +// Expose jQuery as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +// Do this after creating the global so that if an AMD module wants to call +// noConflict to hide this version of jQuery, it will work. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + +})( window ); diff --git a/src/main/webapp/js/jquery-1.8.3.js b/src/main/webapp/js/jquery-1.8.3.js new file mode 100644 index 0000000..8c24ffc --- /dev/null +++ b/src/main/webapp/js/jquery-1.8.3.js @@ -0,0 +1,9472 @@ +/*! + * jQuery JavaScript Library v1.8.3 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time) + */ +(function( window, undefined ) { +var + // A central reference to the root jQuery(document) + rootjQuery, + + // The deferred used on DOM ready + readyList, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + navigator = window.navigator, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // Save a reference to some core methods + core_push = Array.prototype.push, + core_slice = Array.prototype.slice, + core_indexOf = Array.prototype.indexOf, + core_toString = Object.prototype.toString, + core_hasOwn = Object.prototype.hasOwnProperty, + core_trim = String.prototype.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, + + // Used for detecting and trimming whitespace + core_rnotwhite = /\S/, + core_rspace = /\s+/, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // The ready event handler and self cleanup method + DOMContentLoaded = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + } else if ( document.readyState === "complete" ) { + // we're here because readyState === "complete" in oldIE + // which is good enough for us to call the dom ready! + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context && context.nodeType ? context.ownerDocument || context : document ); + + // scripts is true for back-compat + selector = jQuery.parseHTML( match[1], doc, true ); + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + this.attr.call( selector, context, true ); + } + + return jQuery.merge( this, selector ); + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.8.3", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ), + "slice", core_slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ core_toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // scripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, scripts ) { + var parsed; + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + scripts = context; + context = 0; + } + context = context || document; + + // Single tag + if ( (parsed = rsingleTag.exec( data )) ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] ); + return jQuery.merge( [], + (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes ); + }, + + parseJSON: function( data ) { + if ( !data || typeof data !== "string") { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && core_rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var name, + i = 0, + length = obj.length, + isObj = length === undefined || jQuery.isFunction( obj ); + + if ( args ) { + if ( isObj ) { + for ( name in obj ) { + if ( callback.apply( obj[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( obj[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in obj ) { + if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var type, + ret = results || []; + + if ( arr != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + type = jQuery.type( arr ); + + if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) { + core_push.call( ret, arr ); + } else { + jQuery.merge( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, + ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready, 1 ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.split( core_rspace ), function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + return jQuery.inArray( fn, list ) > -1; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ]( jQuery.isFunction( fn ) ? + function() { + var returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + } : + newDefer[ action ] + ); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] = list.fire + deferred[ tuple[0] ] = list.fire; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + eventName, + i, + isSupported, + clickFn, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
a"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: ( document.compatMode === "CSS1Compat" ), + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", clickFn = function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent("onclick"); + div.detachEvent( "onclick", clickFn ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + input.setAttribute( "checked", "checked" ); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: true, + change: true, + focusin: true + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + // Run tests that need a body at doc ready + jQuery(function() { + var container, div, tds, marginDiv, + divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // NOTE: To any future maintainer, we've window.getComputedStyle + // because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = document.createElement("div"); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
"; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + container.style.zoom = 1; + } + + // Null elements to avoid leaks in IE + body.removeChild( container ); + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + fragment.removeChild( div ); + all = a = select = opt = input = fragment = div = null; + + return support; +})(); +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + deletedIds: [], + + // Remove at next major release (1.9/2.0) + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery.removeData( elem, type + "queue", true ); + jQuery.removeData( elem, key, true ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, fixSpecified, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea|)$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var removes, className, elem, c, cl, i, l; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + if ( (value && typeof value === "string") || value === undefined ) { + removes = ( value || "" ).split( core_rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + if ( elem.nodeType === 1 && elem.className ) { + + className = (" " + elem.className + " ").replace( rclass, " " ); + + // loop over each item in the removal list + for ( c = 0, cl = removes.length; c < cl; c++ ) { + // Remove until there is nothing to remove, + while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) { + className = className.replace( " " + removes[ c ] + " " , " " ); + } + } + elem.className = value ? jQuery.trim( className ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( core_rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9 + attrFn: {}, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + + attrNames = value.split( core_rspace ); + + for ( ; i < attrNames.length; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.value = value + "" ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, + rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var t, tns, type, origType, namespaces, origCount, + j, events, special, eventType, handleObj, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, "events", true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, + type = event.type || event, + namespaces = []; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + for ( old = elem; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old === (elem.ownerDocument || document) ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, + handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = core_slice.call( arguments ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = []; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.disabled !== true || event.type !== "click" ) { + selMatch = {}; + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8) + event.metaKey = !!event.metaKey; + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "_submit_attached" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "_submit_attached", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "_change_attached", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var cachedruns, + assertGetIdNotName, + Expr, + getText, + isXML, + contains, + compile, + sortOrder, + hasDuplicate, + outermostContext, + + baseHasDuplicate = true, + strundefined = "undefined", + + expando = ( "sizcache" + Math.random() ).replace( ".", "" ), + + Token = String, + document = window.document, + docElem = document.documentElement, + dirruns = 0, + done = 0, + pop = [].pop, + push = [].push, + slice = [].slice, + // Use a stripped-down indexOf if a native one is unavailable + indexOf = [].indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + // Augment a function for special use by Sizzle + markFunction = function( fn, value ) { + fn[ expando ] = value == null || value; + return fn; + }, + + createCache = function() { + var cache = {}, + keys = []; + + return markFunction(function( key, value ) { + // Only keep the most recent entries + if ( keys.push( key ) > Expr.cacheLength ) { + delete cache[ keys.shift() ]; + } + + // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157) + return (cache[ key + " " ] = value); + }, cache ); + }, + + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // Regex + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors) + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments not in parens/brackets, + // then attribute selectors and non-pseudos (denoted by :), + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)", + + // For matchExpr.POS and matchExpr.needsContext + pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + + rnot = /^:not/, + rsibling = /[\x20\t\r\n\f]*[+~]/, + rendsWithNot = /:not\($/, + + rheader = /h\d/i, + rinputs = /input|select|textarea|button/i, + + rbackslash = /\\(?!\\)/g, + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "POS": new RegExp( pos, "i" ), + "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" ) + }, + + // Support + + // Used for testing something on an element + assert = function( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } + }, + + // Check if getElementsByTagName("*") returns only elements + assertTagNameNoComments = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }), + + // Check if getAttribute returns normalized href attributes + assertHrefNotNormalized = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }), + + // Check if attributes should be retrieved by attribute nodes + assertAttributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }), + + // Check if getElementsByClassName can be trusted + assertUsableClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }), + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + assertUsableName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "
"; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = document.getElementsByName && + // buggy browsers will return fewer than the correct 2 + document.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + document.getElementsByName( expando + 0 ).length; + assertGetIdNotName = !document.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + +// If slice is not available, provide a backup +try { + slice.call( docElem.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + for ( ; (elem = this[i]); i++ ) { + results.push( elem ); + } + return results; + }; +} + +function Sizzle( selector, context, results, seed ) { + results = results || []; + context = context || document; + var match, elem, xml, m, + nodeType = context.nodeType; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( nodeType !== 1 && nodeType !== 9 ) { + return []; + } + + xml = isXML( context ); + + if ( !xml && !seed ) { + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed, xml ); +} + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + return Sizzle( expr, null, null, [ elem ] ).length > 0; +}; + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + } else { + + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } + return ret; +}; + +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +// Element contains another +contains = Sizzle.contains = docElem.contains ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) ); + } : + docElem.compareDocumentPosition ? + function( a, b ) { + return b && !!( a.compareDocumentPosition( b ) & 16 ); + } : + function( a, b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + return false; + }; + +Sizzle.attr = function( elem, name ) { + var val, + xml = isXML( elem ); + + if ( !xml ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( xml || assertAttributes ) { + return elem.getAttribute( name ); + } + val = elem.getAttributeNode( name ); + return val ? + typeof elem[ name ] === "boolean" ? + elem[ name ] ? name : null : + val.specified ? val.value : null : + null; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + // IE6/7 return a modified href + attrHandle: assertHrefNotNormalized ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }, + + find: { + "ID": assertGetIdNotName ? + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + } : + function( id, context, xml ) { + if ( typeof context.getElementById !== strundefined && !xml ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }, + + "TAG": assertTagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + var elem, + tmp = [], + i = 0; + + for ( ; (elem = results[i]); i++ ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }, + + "NAME": assertUsableName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }, + + "CLASS": assertUsableClassName && function( className, context, xml ) { + if ( typeof context.getElementsByClassName !== strundefined && !xml ) { + return context.getElementsByClassName( className ); + } + } + }, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( rbackslash, "" ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 3 xn-component of xn+y argument ([+-]?\d*n|) + 4 sign of xn-component + 5 x of xn-component + 6 sign of y-component + 7 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1] === "nth" ) { + // nth-child requires argument + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) ); + match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" ); + + // other types prohibit arguments + } else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var unquoted, excess; + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + if ( match[3] ) { + match[2] = match[3]; + } else if ( (unquoted = match[4]) ) { + // Only check arguments that contain a pseudo + if ( rpseudo.test(unquoted) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + unquoted = unquoted.slice( 0, excess ); + match[0] = match[0].slice( 0, excess ); + } + match[2] = unquoted; + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + "ID": assertGetIdNotName ? + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + return elem.getAttribute("id") === id; + }; + } : + function( id ) { + id = id.replace( rbackslash, "" ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === id; + }; + }, + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + nodeName = nodeName.replace( rbackslash, "" ).toLowerCase(); + + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ expando ][ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem, context ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.substr( result.length - check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, argument, first, last ) { + + if ( type === "nth" ) { + return function( elem ) { + var node, diff, + parent = elem.parentNode; + + if ( first === 1 && last === 0 ) { + return true; + } + + if ( parent ) { + diff = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + diff++; + if ( elem === node ) { + break; + } + } + } + } + + // Incorporate the offset (or cast to NaN), then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + }; + } + + return function( elem ) { + var node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + var nodeType; + elem = elem.firstChild; + while ( elem ) { + if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) { + return false; + } + elem = elem.nextSibling; + } + return true; + }, + + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "text": function( elem ) { + var type, attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + (type = elem.type) === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type ); + }, + + // Input types + "radio": createInputPseudo("radio"), + "checkbox": createInputPseudo("checkbox"), + "file": createInputPseudo("file"), + "password": createInputPseudo("password"), + "image": createInputPseudo("image"), + + "submit": createButtonPseudo("submit"), + "reset": createButtonPseudo("reset"), + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "focus": function( elem ) { + var doc = elem.ownerDocument; + return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + "active": function( elem ) { + return elem === elem.ownerDocument.activeElement; + }, + + // Positional types + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + for ( var i = 0; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + for ( var i = 1; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +function siblingCheck( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; +} + +sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + return ( !a.compareDocumentPosition || !b.compareDocumentPosition ? + a.compareDocumentPosition : + a.compareDocumentPosition(b) & 4 + ) ? -1 : 1; + } : + function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + +// Always assume the presence of duplicates if sort doesn't +// pass them to our comparison function (as in Google Chrome). +[0, 0].sort( sortOrder ); +baseHasDuplicate = !hasDuplicate; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + i = 1, + j = 0; + + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ expando ][ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + + // Cast descendant combinators to space + matched.type = match[0].replace( rtrim, " " ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + + tokens.push( matched = new Token( match.shift() ) ); + soFar = soFar.slice( matched.length ); + matched.type = type; + matched.matches = match; + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && combinator.dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( !xml ) { + var cache, + dirkey = dirruns + " " + doneName + " ", + cachedkey = dirkey + cachedruns; + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( (cache = elem[ expando ]) === cachedkey ) { + return elem.sizset; + } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) { + if ( elem.sizset ) { + return elem; + } + } else { + elem[ expando ] = cachedkey; + if ( matcher( elem, context, xml ) ) { + elem.sizset = true; + return elem; + } + elem.sizset = false; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( checkNonElements || elem.nodeType === 1 ) { + if ( matcher( elem, context, xml ) ) { + return elem; + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && tokens.join("") + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Nested matchers should use non-integer dirruns + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = superMatcher.el; + } + + // Add elements passing elementMatchers directly to results + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + for ( j = 0; (matcher = elementMatchers[j]); j++ ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++superMatcher.el; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + for ( j = 0; (matcher = setMatchers[j]); j++ ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + superMatcher.el = 0; + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ expando ][ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed, xml ) { + var i, tokens, token, type, find, + match = tokenize( selector ), + j = match.length; + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !xml && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().length ); + } + + // Fetch a seed set for right-to-left matching + for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( rbackslash, "" ), + rsibling.test( tokens[0].type ) && context.parentNode || context, + xml + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && tokens.join(""); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + xml, + results, + rsibling.test( selector ) + ); + return results; +} + +if ( document.querySelectorAll ) { + (function() { + var disconnectedMatch, + oldSelect = select, + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ], + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + // A support test would require too much code (would include document ready) + // just skip matchesSelector for :active + rbuggyMatches = [ ":active" ], + matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector; + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here (do not put tests after this one) + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE9 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = "

"; + if ( div.querySelectorAll("[test^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here (do not put tests after this one) + div.innerHTML = ""; + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push(":enabled", ":disabled"); + } + }); + + // rbuggyQSA always contains :focus, so no need for a length check + rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") ); + + select = function( selector, context, results, seed, xml ) { + // Only use querySelectorAll when not filtering, + // when this is not xml, + // and when no QSA bugs apply + if ( !seed && !xml && !rbuggyQSA.test( selector ) ) { + var groups, i, + old = true, + nid = expando, + newContext = context, + newSelector = context.nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + groups[i].join(""); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + + return oldSelect( selector, context, results, seed, xml ); + }; + + if ( matches ) { + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + try { + matches.call( div, "[test!='']:sizzle" ); + rbuggyMatches.push( "!=", pseudos ); + } catch ( e ) {} + }); + + // rbuggyMatches always contains :active and :focus, so no need for a length check + rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") ); + + Sizzle.matchesSelector = function( elem, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyMatches always contains :active, so no need for an existence check + if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, null, null, [ elem ] ).length > 0; + }; + } + })(); +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Back-compat +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, l, length, n, r, ret, + self = this; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + ret = this.pushStack( "", "find", selector ); + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, core_slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + rcheckableType = /^(?:checkbox|radio)$/, + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*\s*$/g, + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, +// unless wrapped in a div with non-breaking characters in front of it. +if ( !jQuery.support.htmlSerialize ) { + wrapMap._default = [ 1, "X
", "
" ]; +} + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( set, this ), "before", this.selector ); + } + }, + + after: function() { + if ( !isDisconnected( this[0] ) ) { + return this.domManip(arguments, false, function( elem ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + }); + } + + if ( arguments.length ) { + var set = jQuery.clean( arguments ); + return this.pushStack( jQuery.merge( this, set ), "after", this.selector ); + } + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + jQuery.cleanData( [ elem ] ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName("*") ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( elem.getElementsByTagName( "*" ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + if ( !isDisconnected( this[0] ) ) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( jQuery.isFunction( value ) ) { + return this.each(function(i) { + var self = jQuery(this), old = self.html(); + self.replaceWith( value.call( this, i, old ) ); + }); + } + + if ( typeof value !== "string" ) { + value = jQuery( value ).detach(); + } + + return this.each(function() { + var next = this.nextSibling, + parent = this.parentNode; + + jQuery( this ).remove(); + + if ( next ) { + jQuery(next).before( value ); + } else { + jQuery(parent).append( value ); + } + }); + } + + return this.length ? + this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) : + this; + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = [].concat.apply( [], args ); + + var results, first, fragment, iNoClone, + i = 0, + value = args[0], + scripts = [], + l = this.length; + + // We can't cloneNode fragments that contain checked, in WebKit + if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) { + return this.each(function() { + jQuery(this).domManip( args, table, callback ); + }); + } + + if ( jQuery.isFunction(value) ) { + return this.each(function(i) { + var self = jQuery(this); + args[0] = value.call( this, i, table ? self.html() : undefined ); + self.domManip( args, table, callback ); + }); + } + + if ( this[0] ) { + results = jQuery.buildFragment( args, this, scripts ); + fragment = results.fragment; + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + // Fragments from the fragment cache must always be cloned and never used in place. + for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) { + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + i === iNoClone ? + fragment : + jQuery.clone( fragment, true, true ) + ); + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + + if ( scripts.length ) { + jQuery.each( scripts, function( i, elem ) { + if ( elem.src ) { + if ( jQuery.ajax ) { + jQuery.ajax({ + url: elem.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.error("no ajax"); + } + } else { + jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } + }); + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function cloneFixAttributes( src, dest ) { + var nodeName; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + // clearAttributes removes the attributes, which we don't want, + // but also removes the attachEvent events, which we *do* want + if ( dest.clearAttributes ) { + dest.clearAttributes(); + } + + // mergeAttributes, in contrast, only merges back on the + // original attributes, not the events + if ( dest.mergeAttributes ) { + dest.mergeAttributes( src ); + } + + nodeName = dest.nodeName.toLowerCase(); + + if ( nodeName === "object" ) { + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + + // IE blanks contents when cloning scripts + } else if ( nodeName === "script" && dest.text !== src.text ) { + dest.text = src.text; + } + + // Event data gets referenced instead of copied if the expando + // gets copied too + dest.removeAttribute( jQuery.expando ); +} + +jQuery.buildFragment = function( args, context, scripts ) { + var fragment, cacheable, cachehit, + first = args[ 0 ]; + + // Set context from what may come in as undefined or a jQuery collection or a node + // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 & + // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception + context = context || document; + context = !context.nodeType && context[0] || context; + context = context.ownerDocument || context; + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put or elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document && + first.charAt(0) === "<" && !rnocache.test( first ) && + (jQuery.support.checkClone || !rchecked.test( first )) && + (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) { + + // Mark cacheable and look for a hit + cacheable = true; + fragment = jQuery.fragments[ first ]; + cachehit = fragment !== undefined; + } + + if ( !fragment ) { + fragment = context.createDocumentFragment(); + jQuery.clean( args, context, fragment, scripts ); + + // Update the cache, but only store false + // unless this is a second parsing of the same content + if ( cacheable ) { + jQuery.fragments[ first ] = cachehit && fragment; + } + } + + return { fragment: fragment, cacheable: cacheable }; +}; + +jQuery.fragments = {}; + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + l = insert.length, + parent = this.length === 1 && this[0].parentNode; + + if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) { + insert[ original ]( this[0] ); + return this; + } else { + for ( ; i < l; i++ ) { + elems = ( i > 0 ? this.clone(true) : this ).get(); + jQuery( insert[i] )[ original ]( elems ); + ret = ret.concat( elems ); + } + + return this.pushStack( ret, name, insert.selector ); + } + }; +}); + +function getAll( elem ) { + if ( typeof elem.getElementsByTagName !== "undefined" ) { + return elem.getElementsByTagName( "*" ); + + } else if ( typeof elem.querySelectorAll !== "undefined" ) { + return elem.querySelectorAll( "*" ); + + } else { + return []; + } +} + +// Used in clean, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var srcElements, + destElements, + i, + clone; + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes( elem, clone ); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll( elem ); + destElements = getAll( clone ); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for ( i = 0; srcElements[i]; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + cloneCopyEvent( elem, clone ); + + if ( deepDataAndEvents ) { + srcElements = getAll( elem ); + destElements = getAll( clone ); + + for ( i = 0; srcElements[i]; ++i ) { + cloneCopyEvent( srcElements[i], destElements[i] ); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }, + + clean: function( elems, context, fragment, scripts ) { + var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, + safe = context === document && safeFragment, + ret = []; + + // Ensure that context is a document + if ( !context || typeof context.createDocumentFragment === "undefined" ) { + context = document; + } + + // Use the already-created safe fragment if context permits + for ( i = 0; (elem = elems[i]) != null; i++ ) { + if ( typeof elem === "number" ) { + elem += ""; + } + + if ( !elem ) { + continue; + } + + // Convert html string into DOM nodes + if ( typeof elem === "string" ) { + if ( !rhtml.test( elem ) ) { + elem = context.createTextNode( elem ); + } else { + // Ensure a safe container in which to render the html + safe = safe || createSafeFragment( context ); + div = context.createElement("div"); + safe.appendChild( div ); + + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); + + // Go to html and back, then peel off extra wrappers + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + depth = wrap[0]; + div.innerHTML = wrap[1] + elem + wrap[2]; + + // Move to the right depth + while ( depth-- ) { + div = div.lastChild; + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + hasBody = rtbody.test(elem); + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare or + wrap[1] === "
" && !hasBody ? + div.childNodes : + []; + + for ( j = tbody.length - 1; j >= 0 ; --j ) { + if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) { + tbody[ j ].parentNode.removeChild( tbody[ j ] ); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild ); + } + + elem = div.childNodes; + + // Take out of fragment container (we need a fresh div each time) + div.parentNode.removeChild( div ); + } + } + + if ( elem.nodeType ) { + ret.push( elem ); + } else { + jQuery.merge( ret, elem ); + } + } + + // Fix #11356: Clear elements from safeFragment + if ( div ) { + elem = div = safe = null; + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + for ( i = 0; (elem = ret[i]) != null; i++ ) { + if ( jQuery.nodeName( elem, "input" ) ) { + fixDefaultChecked( elem ); + } else if ( typeof elem.getElementsByTagName !== "undefined" ) { + jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked ); + } + } + } + + // Append elements to a provided document fragment + if ( fragment ) { + // Special handling of each script element + handleScript = function( elem ) { + // Check if we consider it executable + if ( !elem.type || rscriptType.test( elem.type ) ) { + // Detach the script and store it in the scripts array (if provided) or the fragment + // Return truthy to indicate that it has been handled + return scripts ? + scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : + fragment.appendChild( elem ); + } + }; + + for ( i = 0; (elem = ret[i]) != null; i++ ) { + // Check if we're done after handling an executable script + if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { + // Append to fragment and handle embedded scripts + fragment.appendChild( elem ); + if ( typeof elem.getElementsByTagName !== "undefined" ) { + // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration + jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); + + // Splice the scripts into ret after their former ancestor and advance our index beyond them + ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); + i += jsTags.length; + } + } + } + } + + return ret; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var data, id, elem, type, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + jQuery.deletedIds.push( id ); + } + } + } + } + } +}); +// Limit scope pollution from any deprecated API +(function() { + +var matched, browser; + +// Use of jQuery.browser is frowned upon. +// More details: http://api.jquery.com/jQuery.browser +// jQuery.uaMatch maintained for back-compat +jQuery.uaMatch = function( ua ) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || + /(webkit)[ \/]([\w.]+)/.exec( ua ) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || + /(msie) ([\w.]+)/.exec( ua ) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; +}; + +matched = jQuery.uaMatch( navigator.userAgent ); +browser = {}; + +if ( matched.browser ) { + browser[ matched.browser ] = true; + browser.version = matched.version; +} + +// Chrome is Webkit, but Webkit is also Safari. +if ( browser.chrome ) { + browser.webkit = true; +} else if ( browser.webkit ) { + browser.safari = true; +} + +jQuery.browser = browser; + +jQuery.sub = function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; +}; + +})(); +var curCSS, iframe, iframeDoc, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity=([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ], + + eventsToggle = jQuery.fn.toggle; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var elem, display, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + values[ index ] = jQuery._data( elem, "olddisplay" ); + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && elem.style.display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + display = curCSS( elem, "display" ); + + if ( !values[ index ] && display !== "none" ) { + jQuery._data( elem, "olddisplay", display ); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state, fn2 ) { + var bool = typeof state === "boolean"; + + if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) { + return eventsToggle.apply( this, arguments ); + } + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, numeric, extra ) { + var val, num, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( numeric || extra !== undefined ) { + num = parseFloat( val ); + return numeric || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: To any future maintainer, we've window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + curCSS = function( elem, name ) { + var ret, width, minWidth, maxWidth, + computed = window.getComputedStyle( elem, null ), + style = elem.style; + + if ( computed ) { + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + curCSS = function( elem, name ) { + var left, rsLeft, + ret = elem.currentStyle && elem.currentStyle[ name ], + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rsLeft = elem.runtimeStyle && elem.runtimeStyle.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + elem.runtimeStyle.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + elem.runtimeStyle.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + // we use jQuery.css instead of curCSS here + // because of the reliableMarginRight CSS hook! + val += jQuery.css( elem, extra + cssExpand[ i ], true ); + } + + // From this point on we use curCSS for maximum performance (relevant in animations) + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } else { + // at this point, extra isn't content, so add padding + val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0; + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0; + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + valueIsBorderBox = true, + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox + ) + ) + "px"; +} + + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + if ( elemdisplay[ nodeName ] ) { + return elemdisplay[ nodeName ]; + } + + var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ), + display = elem.css("display"); + elem.remove(); + + // If the simple way fails, + // get element's real default display by attaching it to a temp iframe + if ( display === "none" || display === "" ) { + // Use the already-created iframe if possible + iframe = document.body.appendChild( + iframe || jQuery.extend( document.createElement("iframe"), { + frameBorder: 0, + width: 0, + height: 0 + }) + ); + + // Create a cacheable copy of the iframe document on first call. + // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML + // document to it; WebKit & Firefox won't allow reusing the iframe document. + if ( !iframeDoc || !iframe.createElement ) { + iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; + iframeDoc.write(""); + iframeDoc.close(); + } + + elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) ); + + display = curCSS( elem, "display" ); + document.body.removeChild( iframe ); + } + + // Store the correct default display + elemdisplay[ nodeName ] = display; + + return display; +} + +jQuery.each([ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + // certain elements can have dimension info if we invisibly show them + // however, it must have a current display style that would benefit from this + if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) { + return jQuery.swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + }); + } else { + return getWidthOrHeight( elem, name, extra ); + } + } + }, + + set: function( elem, value, extra ) { + return setPositiveNumber( elem, value, extra ? + augmentWidthOrHeight( + elem, + name, + extra, + jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box" + ) : 0 + ); + } + }; +}); + +if ( !jQuery.support.opacity ) { + jQuery.cssHooks.opacity = { + get: function( elem, computed ) { + // IE uses filters for opacity + return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ? + ( 0.01 * parseFloat( RegExp.$1 ) ) + "" : + computed ? "1" : ""; + }, + + set: function( elem, value ) { + var style = elem.style, + currentStyle = elem.currentStyle, + opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "", + filter = currentStyle && currentStyle.filter || style.filter || ""; + + // IE has trouble with opacity if it does not have layout + // Force it by setting the zoom level + style.zoom = 1; + + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" && + style.removeAttribute ) { + + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values + style.filter = ralpha.test( filter ) ? + filter.replace( ralpha, opacity ) : + filter + " " + opacity; + } + }; +} + +// These hooks cannot be added until DOM ready because the support test +// for it is not run until after DOM ready +jQuery(function() { + if ( !jQuery.support.reliableMarginRight ) { + jQuery.cssHooks.marginRight = { + get: function( elem, computed ) { + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + // Work around by temporarily setting element display to inline-block + return jQuery.swap( elem, { "display": "inline-block" }, function() { + if ( computed ) { + return curCSS( elem, "marginRight" ); + } + }); + } + }; + } + + // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 + // getComputedStyle returns percent when specified for top/left/bottom/right + // rather than make the css module depend on the offset module, we just check for it here + if ( !jQuery.support.pixelPosition && jQuery.fn.position ) { + jQuery.each( [ "top", "left" ], function( i, prop ) { + jQuery.cssHooks[ prop ] = { + get: function( elem, computed ) { + if ( computed ) { + var ret = curCSS( elem, prop ); + // if curCSS returns percentage, fallback to offset + return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret; + } + } + }; + }); + } + +}); + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.hidden = function( elem ) { + return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none"); + }; + + jQuery.expr.filters.visible = function( elem ) { + return !jQuery.expr.filters.hidden( elem ); + }; +} + +// These hooks are used by animate to expand properties +jQuery.each({ + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i, + + // assumes a single number if not a string + parts = typeof value === "string" ? value.split(" ") : [ value ], + expanded = {}; + + for ( i = 0; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +}); +var r20 = /%20/g, + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rselectTextarea = /^(?:select|textarea)/i; + +jQuery.fn.extend({ + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map(function(){ + return this.elements ? jQuery.makeArray( this.elements ) : this; + }) + .filter(function(){ + return this.name && !this.disabled && + ( this.checked || rselectTextarea.test( this.nodeName ) || + rinput.test( this.type ) ); + }) + .map(function( i, elem ){ + var val = jQuery( this ).val(); + + return val == null ? + null : + jQuery.isArray( val ) ? + jQuery.map( val, function( val, i ){ + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }) : + { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + }).get(); + } +}); + +//Serialize an array of form elements or a set of +//key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, value ) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); + s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if ( traditional === undefined ) { + traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ).replace( r20, "+" ); +}; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( jQuery.isArray( obj ) ) { + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + // If array item is non-scalar (array or object), encode its + // numeric index to resolve deserialization ambiguity issues. + // Note that rack (as of 1.0.0) can't currently deserialize + // nested arrays properly, and attempting to do so may cause + // a server error. Possible fixes are to modify rack's + // deserialization algorithm or to provide an option or flag + // to force array serialization to be shallow. + buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); + } + }); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + // Serialize scalar item. + add( prefix, obj ); + } +} +var + // Document location + ajaxLocParts, + ajaxLocation, + + rhash = /#.*$/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + rquery = /\?/, + rscript = /)<[^<]*)*<\/script>/gi, + rts = /([?&])_=[^&]*/, + rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + + // Keep a copy of the old load method + _load = jQuery.fn.load, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; + +// #8138, IE may throw an exception when accessing +// a field from window.location if document.domain has been set +try { + ajaxLocation = location.href; +} catch( e ) { + // Use the href attribute of an A element + // since IE will modify it given document.location + ajaxLocation = document.createElement( "a" ); + ajaxLocation.href = ""; + ajaxLocation = ajaxLocation.href; +} + +// Segment location into parts +ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, list, placeBefore, + dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ), + i = 0, + length = dataTypes.length; + + if ( jQuery.isFunction( func ) ) { + // For each dataType in the dataTypeExpression + for ( ; i < length; i++ ) { + dataType = dataTypes[ i ]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test( dataType ); + if ( placeBefore ) { + dataType = dataType.substr( 1 ) || "*"; + } + list = structure[ dataType ] = structure[ dataType ] || []; + // then we add to the structure accordingly + list[ placeBefore ? "unshift" : "push" ]( func ); + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR, + dataType /* internal */, inspected /* internal */ ) { + + dataType = dataType || options.dataTypes[ 0 ]; + inspected = inspected || {}; + + inspected[ dataType ] = true; + + var selection, + list = structure[ dataType ], + i = 0, + length = list ? list.length : 0, + executeOnly = ( structure === prefilters ); + + for ( ; i < length && ( executeOnly || !selection ); i++ ) { + selection = list[ i ]( options, originalOptions, jqXHR ); + // If we got redirected to another dataType + // we try there if executing only and not done already + if ( typeof selection === "string" ) { + if ( !executeOnly || inspected[ selection ] ) { + selection = undefined; + } else { + options.dataTypes.unshift( selection ); + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, selection, inspected ); + } + } + } + // If we're only executing or nothing was selected + // we try the catchall dataType if not done already + if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) { + selection = inspectPrefiltersOrTransports( + structure, options, originalOptions, jqXHR, "*", inspected ); + } + // unnecessary when only executing (prefilters) + // but it'll be ignored by the caller in that case + return selection; +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } +} + +jQuery.fn.load = function( url, params, callback ) { + if ( typeof url !== "string" && _load ) { + return _load.apply( this, arguments ); + } + + // Don't do a request if no elements are being requested + if ( !this.length ) { + return this; + } + + var selector, type, response, + self = this, + off = url.indexOf(" "); + + if ( off >= 0 ) { + selector = url.slice( off, url.length ); + url = url.slice( 0, off ); + } + + // If it's a function + if ( jQuery.isFunction( params ) ) { + + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if ( params && typeof params === "object" ) { + type = "POST"; + } + + // Request the remote document + jQuery.ajax({ + url: url, + + // if "type" variable is undefined, then "GET" method will be used + type: type, + dataType: "html", + data: params, + complete: function( jqXHR, status ) { + if ( callback ) { + self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); + } + } + }).done(function( responseText ) { + + // Save response for use in complete callback + response = arguments; + + // See if a selector was specified + self.html( selector ? + + // Create a dummy div to hold the results + jQuery("
") + + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append( responseText.replace( rscript, "" ) ) + + // Locate the specified elements + .find( selector ) : + + // If not, just inject the full result + responseText ); + + }); + + return this; +}; + +// Attach a bunch of functions for handling common AJAX events +jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){ + jQuery.fn[ o ] = function( f ){ + return this.on( o, f ); + }; +}); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + // shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; +}); + +jQuery.extend({ + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend( target, settings ); + return target; + }, + + ajaxSettings: { + url: ajaxLocation, + isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), + global: true, + type: "GET", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + processData: true, + async: true, + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + xml: "application/xml, text/xml", + html: "text/html", + text: "text/plain", + json: "application/json, text/javascript", + "*": allTypes + }, + + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText" + }, + + // List of data converters + // 1) key format is "source_type destination_type" (a single space in-between) + // 2) the catchall symbol "*" can be used for source_type + converters: { + + // Convert anything to text + "* text": window.String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": jQuery.parseJSON, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true + } + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // ifModified key + ifModifiedKey, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + ( callbackContext.nodeType || callbackContext instanceof jQuery ) ? + jQuery( callbackContext ) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // The jqXHR state + state = 0, + // Default abort message + strAbort = "canceled", + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( !state ) { + var lname = name.toLowerCase(); + name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function() { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( state === 2 ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( !state ) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + statusText = statusText || strAbort; + if ( transport ) { + transport.abort( statusText ); + } + done( 0, statusText ); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Called once + if ( state === 2 ) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if ( timeoutTimer ) { + clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // If successful, handle type chaining + if ( status >= 200 && status < 300 || status === 304 ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + + modified = jqXHR.getResponseHeader("Last-Modified"); + if ( modified ) { + jQuery.lastModified[ ifModifiedKey ] = modified; + } + modified = jqXHR.getResponseHeader("Etag"); + if ( modified ) { + jQuery.etag[ ifModifiedKey ] = modified; + } + } + + // If not modified + if ( status === 304 ) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + isSuccess = ajaxConvert( s, response ); + statusText = isSuccess.state; + success = isSuccess.data; + error = isSuccess.error; + isSuccess = !error; + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if ( !statusText || status ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ), + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + // Attach deferreds + deferred.promise( jqXHR ); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function( map ) { + if ( map ) { + var tmp; + if ( state < 2 ) { + for ( tmp in map ) { + statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; + } + } else { + tmp = map[ jqXHR.status ]; + jqXHR.always( tmp ); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); + + // Extract dataTypes list + s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace ); + + // A cross-domain request is in order when we have a protocol:host:port mismatch + if ( s.crossDomain == null ) { + parts = rurl.exec( s.url.toLowerCase() ); + s.crossDomain = !!( parts && + ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || + ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) != + ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ) + ); + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( state === 2 ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // If data is available, append data to url + if ( s.data ) { + s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if ( s.cache === false ) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace( rts, "$1_=" + ts ); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + ifModifiedKey = ifModifiedKey || s.url; + if ( jQuery.lastModified[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] ); + } + if ( jQuery.etag[ ifModifiedKey ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] ); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { + // Abort if not done already and return + return jqXHR.abort(); + + } + + // aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + for ( i in { success: 1, error: 1, complete: 1 } ) { + jqXHR[ i ]( s[ i ] ); + } + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = setTimeout( function(){ + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + state = 1; + transport.send( requestHeaders, done ); + } catch (e) { + // Propagate exception as error if not done + if ( state < 2 ) { + done( -1, e ); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }, + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {} + +}); + +/* Handles responses to an ajax request: + * - sets all responseXXX fields accordingly + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes, + responseFields = s.responseFields; + + // Fill responseXXX fields + for ( type in responseFields ) { + if ( type in responses ) { + jqXHR[ responseFields[type] ] = responses[ type ]; + } + } + + // Remove auto dataType and get content-type in the process + while( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "content-type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +// Chain conversions given the request and the original response +function ajaxConvert( s, response ) { + + var conv, conv2, current, tmp, + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(), + prev = dataTypes[ 0 ], + converters = {}, + i = 0; + + // Apply the dataFilter if provided + if ( s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + // Convert to each sequential dataType, tolerating list modification + for ( ; (current = dataTypes[++i]); ) { + + // There's only work to do if current dataType is non-auto + if ( current !== "*" ) { + + // Convert response if prev dataType is non-auto and differs from current + if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split(" "); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.splice( i--, 0, current ); + } + + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s["throws"] ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; + } + } + } + } + + // Update prev for next iteration + prev = current; + } + } + + return { state: "success", data: response }; +} +var oldCallbacks = [], + rquestion = /\?/, + rjsonp = /(=)\?(?=&|$)|\?\?/, + nonce = jQuery.now(); + +// Default jsonp settings +jQuery.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + this[ callback ] = true; + return callback; + } +}); + +// Detect, normalize options and install callbacks for jsonp requests +jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { + + var callbackName, overwritten, responseContainer, + data = s.data, + url = s.url, + hasCallback = s.jsonp !== false, + replaceInUrl = hasCallback && rjsonp.test( url ), + replaceInData = hasCallback && !replaceInUrl && typeof data === "string" && + !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && + rjsonp.test( data ); + + // Handle iff the expected data type is "jsonp" or we have a parameter to set + if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) { + + // Get callback name, remembering preexisting value associated with it + callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? + s.jsonpCallback() : + s.jsonpCallback; + overwritten = window[ callbackName ]; + + // Insert callback into url or form data + if ( replaceInUrl ) { + s.url = url.replace( rjsonp, "$1" + callbackName ); + } else if ( replaceInData ) { + s.data = data.replace( rjsonp, "$1" + callbackName ); + } else if ( hasCallback ) { + s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; + } + + // Use data converter to retrieve json after script execution + s.converters["script json"] = function() { + if ( !responseContainer ) { + jQuery.error( callbackName + " was not called" ); + } + return responseContainer[ 0 ]; + }; + + // force json dataType + s.dataTypes[ 0 ] = "json"; + + // Install callback + window[ callbackName ] = function() { + responseContainer = arguments; + }; + + // Clean-up function (fires after converters) + jqXHR.always(function() { + // Restore preexisting value + window[ callbackName ] = overwritten; + + // Save back as free + if ( s[ callbackName ] ) { + // make sure that re-using the options doesn't screw things around + s.jsonpCallback = originalSettings.jsonpCallback; + + // save the callback name for future use + oldCallbacks.push( callbackName ); + } + + // Call if it was a function and we have a response + if ( responseContainer && jQuery.isFunction( overwritten ) ) { + overwritten( responseContainer[ 0 ] ); + } + + responseContainer = overwritten = undefined; + }); + + // Delegate to script + return "script"; + } +}); +// Install script dataType +jQuery.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +}); + +// Handle cache's special case and global +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + s.global = false; + } +}); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function(s) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + + var script, + head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement; + + return { + + send: function( _, callback ) { + + script = document.createElement( "script" ); + + script.async = "async"; + + if ( s.scriptCharset ) { + script.charset = s.scriptCharset; + } + + script.src = s.url; + + // Attach handlers for all browsers + script.onload = script.onreadystatechange = function( _, isAbort ) { + + if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) { + + // Handle memory leak in IE + script.onload = script.onreadystatechange = null; + + // Remove the script + if ( head && script.parentNode ) { + head.removeChild( script ); + } + + // Dereference the script + script = undefined; + + // Callback if not abort + if ( !isAbort ) { + callback( 200, "success" ); + } + } + }; + // Use insertBefore instead of appendChild to circumvent an IE6 bug. + // This arises when a base node is used (#2709 and #4378). + head.insertBefore( script, head.firstChild ); + }, + + abort: function() { + if ( script ) { + script.onload( 0, 1 ); + } + } + }; + } +}); +var xhrCallbacks, + // #5280: Internet Explorer will keep connections alive if we don't abort on unload + xhrOnUnloadAbort = window.ActiveXObject ? function() { + // Abort all pending requests + for ( var key in xhrCallbacks ) { + xhrCallbacks[ key ]( 0, 1 ); + } + } : false, + xhrId = 0; + +// Functions to create xhrs +function createStandardXHR() { + try { + return new window.XMLHttpRequest(); + } catch( e ) {} +} + +function createActiveXHR() { + try { + return new window.ActiveXObject( "Microsoft.XMLHTTP" ); + } catch( e ) {} +} + +// Create the request object +// (This is still attached to ajaxSettings for backward compatibility) +jQuery.ajaxSettings.xhr = window.ActiveXObject ? + /* Microsoft failed to properly + * implement the XMLHttpRequest in IE7 (can't request local files), + * so we use the ActiveXObject when it is available + * Additionally XMLHttpRequest can be disabled in IE7/IE8 so + * we need a fallback. + */ + function() { + return !this.isLocal && createStandardXHR() || createActiveXHR(); + } : + // For all other browsers, use the standard XMLHttpRequest object + createStandardXHR; + +// Determine support properties +(function( xhr ) { + jQuery.extend( jQuery.support, { + ajax: !!xhr, + cors: !!xhr && ( "withCredentials" in xhr ) + }); +})( jQuery.ajaxSettings.xhr() ); + +// Create transport if the browser can provide an xhr +if ( jQuery.support.ajax ) { + + jQuery.ajaxTransport(function( s ) { + // Cross domain only allowed if supported through XMLHttpRequest + if ( !s.crossDomain || jQuery.support.cors ) { + + var callback; + + return { + send: function( headers, complete ) { + + // Get a new xhr + var handle, i, + xhr = s.xhr(); + + // Open the socket + // Passing null username, generates a login popup on Opera (#2865) + if ( s.username ) { + xhr.open( s.type, s.url, s.async, s.username, s.password ); + } else { + xhr.open( s.type, s.url, s.async ); + } + + // Apply custom fields if provided + if ( s.xhrFields ) { + for ( i in s.xhrFields ) { + xhr[ i ] = s.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( s.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( s.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !s.crossDomain && !headers["X-Requested-With"] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Need an extra try/catch for cross domain requests in Firefox 3 + try { + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + } catch( _ ) {} + + // Do send the request + // This may raise an exception which is actually + // handled in jQuery.ajax (so no try/catch here) + xhr.send( ( s.hasContent && s.data ) || null ); + + // Listener + callback = function( _, isAbort ) { + + var status, + statusText, + responseHeaders, + responses, + xml; + + // Firefox throws exceptions when accessing properties + // of an xhr when a network error occurred + // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) + try { + + // Was never called and is aborted or complete + if ( callback && ( isAbort || xhr.readyState === 4 ) ) { + + // Only called once + callback = undefined; + + // Do not keep as active anymore + if ( handle ) { + xhr.onreadystatechange = jQuery.noop; + if ( xhrOnUnloadAbort ) { + delete xhrCallbacks[ handle ]; + } + } + + // If it's an abort + if ( isAbort ) { + // Abort it manually if needed + if ( xhr.readyState !== 4 ) { + xhr.abort(); + } + } else { + status = xhr.status; + responseHeaders = xhr.getAllResponseHeaders(); + responses = {}; + xml = xhr.responseXML; + + // Construct response list + if ( xml && xml.documentElement /* #4958 */ ) { + responses.xml = xml; + } + + // When requesting binary data, IE6-9 will throw an exception + // on any attempt to access responseText (#11426) + try { + responses.text = xhr.responseText; + } catch( e ) { + } + + // Firefox throws an exception when accessing + // statusText for faulty cross-domain requests + try { + statusText = xhr.statusText; + } catch( e ) { + // We normalize with Webkit giving an empty statusText + statusText = ""; + } + + // Filter status for non standard behaviors + + // If the request is local and we have data: assume a success + // (success with no data won't get notified, that's the best we + // can do given current implementations) + if ( !status && s.isLocal && !s.crossDomain ) { + status = responses.text ? 200 : 404; + // IE - #1450: sometimes returns 1223 when it should be 204 + } else if ( status === 1223 ) { + status = 204; + } + } + } + } catch( firefoxAccessException ) { + if ( !isAbort ) { + complete( -1, firefoxAccessException ); + } + } + + // Call complete if needed + if ( responses ) { + complete( status, statusText, responses, responseHeaders ); + } + }; + + if ( !s.async ) { + // if we're in sync mode we fire the callback + callback(); + } else if ( xhr.readyState === 4 ) { + // (IE6 & IE7) if it's in cache and has been + // retrieved directly we need to fire the callback + setTimeout( callback, 0 ); + } else { + handle = ++xhrId; + if ( xhrOnUnloadAbort ) { + // Create the active xhrs callbacks list if needed + // and attach the unload handler + if ( !xhrCallbacks ) { + xhrCallbacks = {}; + jQuery( window ).unload( xhrOnUnloadAbort ); + } + // Add to list of active xhrs callbacks + xhrCallbacks[ handle ] = callback; + } + xhr.onreadystatechange = callback; + } + }, + + abort: function() { + if ( callback ) { + callback(0,1); + } + } + }; + } + }); +} +var fxNow, timerId, + rfxtypes = /^(?:toggle|show|hide)$/, + rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ), + rrun = /queueHooks$/, + animationPrefilters = [ defaultPrefilter ], + tweeners = { + "*": [function( prop, value ) { + var end, unit, + tween = this.createTween( prop, value ), + parts = rfxnum.exec( value ), + target = tween.cur(), + start = +target || 0, + scale = 1, + maxIterations = 20; + + if ( parts ) { + end = +parts[2]; + unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + + // We need to compute starting value + if ( unit !== "px" && start ) { + // Iteratively approximate from a nonzero starting point + // Prefer the current property, because this process will be trivial if it uses the same units + // Fallback to end or a simple constant + start = jQuery.css( tween.elem, prop, true ) || end || 1; + + do { + // If previous iteration zeroed out, double until we get *something* + // Use a string for doubling factor so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + start = start / scale; + jQuery.style( tween.elem, prop, start + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // And breaking the loop if scale is unchanged or perfect, or if we've just had enough + } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); + } + + tween.unit = unit; + tween.start = start; + // If a +=/-= token was provided, we're doing a relative animation + tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end; + } + return tween; + }] + }; + +// Animations created synchronously will run synchronously +function createFxNow() { + setTimeout(function() { + fxNow = undefined; + }, 0 ); + return ( fxNow = jQuery.now() ); +} + +function createTweens( animation, props ) { + jQuery.each( props, function( prop, value ) { + var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( collection[ index ].call( animation, prop, value ) ) { + + // we're done with this property + return; + } + } + }); +} + +function Animation( elem, properties, options ) { + var result, + index = 0, + tweenerIndex = 0, + length = animationPrefilters.length, + deferred = jQuery.Deferred().always( function() { + // don't match elem in the :animated selector + delete tick.elem; + }), + tick = function() { + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ]); + + if ( percent < 1 && length ) { + return remaining; + } else { + deferred.resolveWith( elem, [ animation ] ); + return false; + } + }, + animation = deferred.promise({ + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { specialEasing: {} }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end, easing ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + // if we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + + for ( ; index < length ; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // resolve when we played the last frame + // otherwise, reject + if ( gotoEnd ) { + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + }), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length ; index++ ) { + result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + return result; + } + } + + createTweens( animation, props ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + jQuery.fx.timer( + jQuery.extend( tick, { + anim: animation, + queue: animation.opts.queue, + elem: elem + }) + ); + + // attach callbacks from options + return animation.progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( jQuery.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'index' from above because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.split(" "); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length ; index++ ) { + prop = props[ index ]; + tweeners[ prop ] = tweeners[ prop ] || []; + tweeners[ prop ].unshift( callback ); + } + }, + + prefilter: function( callback, prepend ) { + if ( prepend ) { + animationPrefilters.unshift( callback ); + } else { + animationPrefilters.push( callback ); + } + } +}); + +function defaultPrefilter( elem, props, opts ) { + var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire, + anim = this, + style = elem.style, + orig = {}, + handled = [], + hidden = elem.nodeType && isHidden( elem ); + + // handle queue: false promises + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always(function() { + // doing this makes sure that the complete handler will be called + // before this completes + anim.always(function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + }); + }); + } + + // height/width overflow pass + if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if ( jQuery.css( elem, "display" ) === "inline" && + jQuery.css( elem, "float" ) === "none" ) { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) { + style.display = "inline-block"; + + } else { + style.zoom = 1; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + if ( !jQuery.support.shrinkWrapBlocks ) { + anim.done(function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + }); + } + } + + + // show/hide pass + for ( index in props ) { + value = props[ index ]; + if ( rfxtypes.exec( value ) ) { + delete props[ index ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + continue; + } + handled.push( index ); + } + } + + length = handled.length; + if ( length ) { + dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} ); + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + + // store state if its toggle - enables .stop().toggle() to "reverse" + if ( toggle ) { + dataShow.hidden = !hidden; + } + if ( hidden ) { + jQuery( elem ).show(); + } else { + anim.done(function() { + jQuery( elem ).hide(); + }); + } + anim.done(function() { + var prop; + jQuery.removeData( elem, "fxshow", true ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + }); + for ( index = 0 ; index < length ; index++ ) { + prop = handled[ index ]; + tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 ); + orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop ); + + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = tween.start; + if ( hidden ) { + tween.end = tween.start; + tween.start = prop === "width" || prop === "height" ? 1 : 0; + } + } + } + } +} + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || "swing"; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + if ( tween.elem[ tween.prop ] != null && + (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { + return tween.elem[ tween.prop ]; + } + + // passing any value as a 4th parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails + // so, simple values such as "10px" are parsed to Float. + // complex values such as "rotate(1rad)" are returned as is. + result = jQuery.css( tween.elem, tween.prop, false, "" ); + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + // use step hook for back compat - use cssHook if its there - use .style if its + // available and use plain properties where available + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Remove in 2.0 - this supports IE8's panic based approach +// to setting things on disconnected nodes + +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" || + // special check for .toggle( handler, handler, ... ) + ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +}); + +jQuery.fn.extend({ + fadeTo: function( speed, to, easing, callback ) { + + // show any hidden elements after setting opacity to 0 + return this.filter( isHidden ).css( "opacity", 0 ).show() + + // animate to the value specified + .end().animate({ opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations resolve immediately + if ( empty ) { + anim.stop( true ); + } + }; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each(function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = jQuery._data( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + }); + } +}); + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + attrs = { height: type }, + i = 0; + + // if we include width, step value is 1 to do all cssExpand values, + // if we don't include width, step value is 2 to skip over Left and Right + includeWidth = includeWidth? 1 : 0; + for( ; i < 4 ; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +// Generate shortcuts for custom animations +jQuery.each({ + slideDown: genFx("show"), + slideUp: genFx("hide"), + slideToggle: genFx("toggle"), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +}); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p*Math.PI ) / 2; + } +}; + +jQuery.timers = []; +jQuery.fx = Tween.prototype.init; +jQuery.fx.tick = function() { + var timer, + timers = jQuery.timers, + i = 0; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + // Checks the timer has not already been removed + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + if ( timer() && jQuery.timers.push( timer ) && !timerId ) { + timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); + } +}; + +jQuery.fx.interval = 13; + +jQuery.fx.stop = function() { + clearInterval( timerId ); + timerId = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + // Default speed + _default: 400 +}; + +// Back Compat <1.8 extension point +jQuery.fx.step = {}; + +if ( jQuery.expr && jQuery.expr.filters ) { + jQuery.expr.filters.animated = function( elem ) { + return jQuery.grep(jQuery.timers, function( fn ) { + return elem === fn.elem; + }).length; + }; +} +var rroot = /^(?:body|html)$/i; + +jQuery.fn.offset = function( options ) { + if ( arguments.length ) { + return options === undefined ? + this : + this.each(function( i ) { + jQuery.offset.setOffset( this, options, i ); + }); + } + + var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, + box = { top: 0, left: 0 }, + elem = this[ 0 ], + doc = elem && elem.ownerDocument; + + if ( !doc ) { + return; + } + + if ( (body = doc.body) === elem ) { + return jQuery.offset.bodyOffset( elem ); + } + + docElem = doc.documentElement; + + // Make sure it's not a disconnected DOM node + if ( !jQuery.contains( docElem, elem ) ) { + return box; + } + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof elem.getBoundingClientRect !== "undefined" ) { + box = elem.getBoundingClientRect(); + } + win = getWindow( doc ); + clientTop = docElem.clientTop || body.clientTop || 0; + clientLeft = docElem.clientLeft || body.clientLeft || 0; + scrollTop = win.pageYOffset || docElem.scrollTop; + scrollLeft = win.pageXOffset || docElem.scrollLeft; + return { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; +}; + +jQuery.offset = { + + bodyOffset: function( body ) { + var top = body.offsetTop, + left = body.offsetLeft; + + if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) { + top += parseFloat( jQuery.css(body, "marginTop") ) || 0; + left += parseFloat( jQuery.css(body, "marginLeft") ) || 0; + } + + return { top: top, left: left }; + }, + + setOffset: function( elem, options, i ) { + var position = jQuery.css( elem, "position" ); + + // set position first, in-case top/left are set even on static elem + if ( position === "static" ) { + elem.style.position = "relative"; + } + + var curElem = jQuery( elem ), + curOffset = curElem.offset(), + curCSSTop = jQuery.css( elem, "top" ), + curCSSLeft = jQuery.css( elem, "left" ), + calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1, + props = {}, curPosition = {}, curTop, curLeft; + + // need to be able to calculate position if either top or left is auto and position is either absolute or fixed + if ( calculatePosition ) { + curPosition = curElem.position(); + curTop = curPosition.top; + curLeft = curPosition.left; + } else { + curTop = parseFloat( curCSSTop ) || 0; + curLeft = parseFloat( curCSSLeft ) || 0; + } + + if ( jQuery.isFunction( options ) ) { + options = options.call( elem, i, curOffset ); + } + + if ( options.top != null ) { + props.top = ( options.top - curOffset.top ) + curTop; + } + if ( options.left != null ) { + props.left = ( options.left - curOffset.left ) + curLeft; + } + + if ( "using" in options ) { + options.using.call( elem, props ); + } else { + curElem.css( props ); + } + } +}; + + +jQuery.fn.extend({ + + position: function() { + if ( !this[0] ) { + return; + } + + var elem = this[0], + + // Get *real* offsetParent + offsetParent = this.offsetParent(), + + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0; + offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0; + + // Add offsetParent borders + parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0; + parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0; + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }, + + offsetParent: function() { + return this.map(function() { + var offsetParent = this.offsetParent || document.body; + while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent || document.body; + }); + } +}); + + +// Create scrollLeft and scrollTop methods +jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) { + var top = /Y/.test( prop ); + + jQuery.fn[ method ] = function( val ) { + return jQuery.access( this, function( elem, method, val ) { + var win = getWindow( elem ); + + if ( val === undefined ) { + return win ? (prop in win) ? win[ prop ] : + win.document.documentElement[ method ] : + elem[ method ]; + } + + if ( win ) { + win.scrollTo( + !top ? val : jQuery( win ).scrollLeft(), + top ? val : jQuery( win ).scrollTop() + ); + + } else { + elem[ method ] = val; + } + }, method, val, arguments.length, null ); + }; +}); + +function getWindow( elem ) { + return jQuery.isWindow( elem ) ? + elem : + elem.nodeType === 9 ? + elem.defaultView || elem.parentWindow : + false; +} +// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods +jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { + jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { + // margin is only for outerHeight, outerWidth + jQuery.fn[ funcName ] = function( margin, value ) { + var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), + extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); + + return jQuery.access( this, function( elem, type, value ) { + var doc; + + if ( jQuery.isWindow( elem ) ) { + // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there + // isn't a whole lot we can do. See pull request at this URL for discussion: + // https://github.com/jquery/jquery/pull/764 + return elem.document.documentElement[ "client" + name ]; + } + + // Get document width or height + if ( elem.nodeType === 9 ) { + doc = elem.documentElement; + + // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest + // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it. + return Math.max( + elem.body[ "scroll" + name ], doc[ "scroll" + name ], + elem.body[ "offset" + name ], doc[ "offset" + name ], + doc[ "client" + name ] + ); + } + + return value === undefined ? + // Get width or height on the element, requesting but not forcing parseFloat + jQuery.css( elem, type, value, extra ) : + + // Set width or height on the element + jQuery.style( elem, type, value, extra ); + }, type, chainable ? margin : undefined, chainable, null ); + }; + }); +}); +// Expose jQuery to the global object +window.jQuery = window.$ = jQuery; + +// Expose jQuery as an AMD module, but only for AMD loaders that +// understand the issues with loading multiple versions of jQuery +// in a page that all might call define(). The loader will indicate +// they have special allowances for multiple jQuery versions by +// specifying define.amd.jQuery = true. Register as a named module, +// since jQuery can be concatenated with other files that may use define, +// but not use a proper concatenation script that understands anonymous +// AMD modules. A named AMD is safest and most robust way to register. +// Lowercase jquery is used because AMD module names are derived from +// file names, and jQuery is normally delivered in a lowercase file name. +// Do this after creating the global so that if an AMD module wants to call +// noConflict to hide this version of jQuery, it will work. +if ( typeof define === "function" && define.amd && define.amd.jQuery ) { + define( "jquery", [], function () { return jQuery; } ); +} + +})( window ); diff --git a/src/main/webapp/js/jquery.validate.js b/src/main/webapp/js/jquery.validate.js new file mode 100644 index 0000000..da1c8f8 --- /dev/null +++ b/src/main/webapp/js/jquery.validate.js @@ -0,0 +1,1114 @@ +/* + * jQuery validation plug-in 1.5.2 + * + * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ + * http://docs.jquery.com/Plugins/Validation + * + * Copyright (c) 2006 - 2008 Jörn Zaefferer + * + * $Id: jquery.validate.js 6243 2009-02-19 11:40:49Z joern.zaefferer $ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +(function($) { + +$.extend($.fn, { + // http://docs.jquery.com/Plugins/Validation/validate + validate: function( options ) { + + // if nothing is selected, return nothing; can't chain anyway + if (!this.length) { + options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" ); + return; + } + + // check if a validator for this form was already created + var validator = $.data(this[0], 'validator'); + if ( validator ) { + return validator; + } + + validator = new $.validator( options, this[0] ); + $.data(this[0], 'validator', validator); + + if ( validator.settings.onsubmit ) { + + // allow suppresing validation by adding a cancel class to the submit button + this.find("input, button").filter(".cancel").click(function() { + validator.cancelSubmit = true; + }); + + // validate the form on submit + this.submit( function( event ) { + if ( validator.settings.debug ) + // prevent form submit to be able to see console output + event.preventDefault(); + + function handle() { + if ( validator.settings.submitHandler ) { + validator.settings.submitHandler.call( validator, validator.currentForm ); + return false; + } + return true; + } + + // prevent submit for invalid forms or custom submit handlers + if ( validator.cancelSubmit ) { + validator.cancelSubmit = false; + return handle(); + } + if ( validator.form() ) { + if ( validator.pendingRequest ) { + validator.formSubmitted = true; + return false; + } + return handle(); + } else { + validator.focusInvalid(); + return false; + } + }); + } + + return validator; + }, + // http://docs.jquery.com/Plugins/Validation/valid + valid: function() { + if ( $(this[0]).is('form')) { + return this.validate().form(); + } else { + var valid = false; + var validator = $(this[0].form).validate(); + this.each(function() { + valid |= validator.element(this); + }); + return valid; + } + }, + // attributes: space seperated list of attributes to retrieve and remove + removeAttrs: function(attributes) { + var result = {}, + $element = this; + $.each(attributes.split(/\s/), function(index, value) { + result[value] = $element.attr(value); + $element.removeAttr(value); + }); + return result; + }, + // http://docs.jquery.com/Plugins/Validation/rules + rules: function(command, argument) { + var element = this[0]; + + if (command) { + var settings = $.data(element.form, 'validator').settings; + var staticRules = settings.rules; + var existingRules = $.validator.staticRules(element); + switch(command) { + case "add": + $.extend(existingRules, $.validator.normalizeRule(argument)); + staticRules[element.name] = existingRules; + if (argument.messages) + settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages ); + break; + case "remove": + if (!argument) { + delete staticRules[element.name]; + return existingRules; + } + var filtered = {}; + $.each(argument.split(/\s/), function(index, method) { + filtered[method] = existingRules[method]; + delete existingRules[method]; + }); + return filtered; + } + } + + var data = $.validator.normalizeRules( + $.extend( + {}, + $.validator.metadataRules(element), + $.validator.classRules(element), + $.validator.attributeRules(element), + $.validator.staticRules(element) + ), element); + + // make sure required is at front + if (data.required) { + var param = data.required; + delete data.required; + data = $.extend({required: param}, data); + } + + return data; + } +}); + +// Custom selectors +$.extend($.expr[":"], { + // http://docs.jquery.com/Plugins/Validation/blank + blank: function(a) {return !$.trim(a.value);}, + // http://docs.jquery.com/Plugins/Validation/filled + filled: function(a) {return !!$.trim(a.value);}, + // http://docs.jquery.com/Plugins/Validation/unchecked + unchecked: function(a) {return !a.checked;} +}); + + +$.format = function(source, params) { + if ( arguments.length == 1 ) + return function() { + var args = $.makeArray(arguments); + args.unshift(source); + return $.format.apply( this, args ); + }; + if ( arguments.length > 2 && params.constructor != Array ) { + params = $.makeArray(arguments).slice(1); + } + if ( params.constructor != Array ) { + params = [ params ]; + } + $.each(params, function(i, n) { + source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n); + }); + return source; +}; + +// constructor for validator +$.validator = function( options, form ) { + this.settings = $.extend( {}, $.validator.defaults, options ); + this.currentForm = form; + this.init(); +}; + +$.extend($.validator, { + + defaults: { + messages: {}, + groups: {}, + rules: {}, + errorClass: "error", + errorElement: "label", + focusInvalid: true, + errorContainer: $( [] ), + errorLabelContainer: $( [] ), + onsubmit: true, + ignore: [], + ignoreTitle: false, + onfocusin: function(element) { + this.lastActive = element; + + // hide error label and remove error class on focus if enabled + if ( this.settings.focusCleanup && !this.blockFocusCleanup ) { + this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass ); + this.errorsFor(element).hide(); + } + }, + onfocusout: function(element) { + if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) { + this.element(element); + } + }, + onkeyup: function(element) { + if ( element.name in this.submitted || element == this.lastElement ) { + this.element(element); + } + }, + onclick: function(element) { + if ( element.name in this.submitted ) + this.element(element); + }, + highlight: function( element, errorClass ) { + $( element ).addClass( errorClass ); + }, + unhighlight: function( element, errorClass ) { + $( element ).removeClass( errorClass ); + } + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults + setDefaults: function(settings) { + $.extend( $.validator.defaults, settings ); + }, + + messages: { + required: "This field is required.", + remote: "Please fix this field.", + email: "Please enter a valid email address.", + url: "Please enter a valid URL.", + date: "Please enter a valid date.", + dateISO: "Please enter a valid date (ISO).", + dateDE: "Bitte geben Sie ein gültiges Datum ein.", + number: "Please enter a valid number.", + numberDE: "Bitte geben Sie eine Nummer ein.", + digits: "Please enter only digits", + creditcard: "Please enter a valid credit card number.", + equalTo: "Please enter the same value again.", + accept: "Please enter a value with a valid extension.", + maxlength: $.format("Please enter no more than {0} characters."), + minlength: $.format("Please enter at least {0} characters."), + rangelength: $.format("Please enter a value between {0} and {1} characters long."), + range: $.format("Please enter a value between {0} and {1}."), + max: $.format("Please enter a value less than or equal to {0}."), + min: $.format("Please enter a value greater than or equal to {0}.") + }, + + autoCreateRanges: false, + + prototype: { + + init: function() { + this.labelContainer = $(this.settings.errorLabelContainer); + this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm); + this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer ); + this.submitted = {}; + this.valueCache = {}; + this.pendingRequest = 0; + this.pending = {}; + this.invalid = {}; + this.reset(); + + var groups = (this.groups = {}); + $.each(this.settings.groups, function(key, value) { + $.each(value.split(/\s/), function(index, name) { + groups[name] = key; + }); + }); + var rules = this.settings.rules; + $.each(rules, function(key, value) { + rules[key] = $.validator.normalizeRule(value); + }); + + function delegate(event) { + var validator = $.data(this[0].form, "validator"); + validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] ); + } + $(this.currentForm) + .delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate) + .delegate("click", ":radio, :checkbox", delegate); + + if (this.settings.invalidHandler) + $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler); + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/form + form: function() { + this.checkForm(); + $.extend(this.submitted, this.errorMap); + this.invalid = $.extend({}, this.errorMap); + if (!this.valid()) + $(this.currentForm).triggerHandler("invalid-form", [this]); + this.showErrors(); + return this.valid(); + }, + + checkForm: function() { + this.prepareForm(); + for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) { + this.check( elements[i] ); + } + return this.valid(); + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/element + element: function( element ) { + element = this.clean( element ); + this.lastElement = element; + this.prepareElement( element ); + this.currentElements = $(element); + var result = this.check( element ); + if ( result ) { + delete this.invalid[element.name]; + } else { + this.invalid[element.name] = true; + } + if ( !this.numberOfInvalids() ) { + // Hide error containers on last error + this.toHide = this.toHide.add( this.containers ); + } + this.showErrors(); + return result; + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/showErrors + showErrors: function(errors) { + if(errors) { + // add items to error list and map + $.extend( this.errorMap, errors ); + this.errorList = []; + for ( var name in errors ) { + this.errorList.push({ + message: errors[name], + element: this.findByName(name)[0] + }); + } + // remove items from success list + this.successList = $.grep( this.successList, function(element) { + return !(element.name in errors); + }); + } + this.settings.showErrors + ? this.settings.showErrors.call( this, this.errorMap, this.errorList ) + : this.defaultShowErrors(); + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/resetForm + resetForm: function() { + if ( $.fn.resetForm ) + $( this.currentForm ).resetForm(); + this.submitted = {}; + this.prepareForm(); + this.hideErrors(); + this.elements().removeClass( this.settings.errorClass ); + }, + + numberOfInvalids: function() { + return this.objectLength(this.invalid); + }, + + objectLength: function( obj ) { + var count = 0; + for ( var i in obj ) + count++; + return count; + }, + + hideErrors: function() { + this.addWrapper( this.toHide ).hide(); + }, + + valid: function() { + return this.size() == 0; + }, + + size: function() { + return this.errorList.length; + }, + + focusInvalid: function() { + if( this.settings.focusInvalid ) { + try { + $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus(); + } catch(e) { + // ignore IE throwing errors when focusing hidden elements + } + } + }, + + findLastActive: function() { + var lastActive = this.lastActive; + return lastActive && $.grep(this.errorList, function(n) { + return n.element.name == lastActive.name; + }).length == 1 && lastActive; + }, + + elements: function() { + var validator = this, + rulesCache = {}; + + // select all valid inputs inside the form (no submit or reset buttons) + // workaround $Query([]).add until http://dev.jquery.com/ticket/2114 is solved + return $([]).add(this.currentForm.elements) + .filter(":input") + .not(":submit, :reset, :image, [disabled]") + .not( this.settings.ignore ) + .filter(function() { + !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this); + + // select only the first element for each name, and only those with rules specified + if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) + return false; + + rulesCache[this.name] = true; + return true; + }); + }, + + clean: function( selector ) { + return $( selector )[0]; + }, + + errors: function() { + return $( this.settings.errorElement + "." + this.settings.errorClass, this.errorContext ); + }, + + reset: function() { + this.successList = []; + this.errorList = []; + this.errorMap = {}; + this.toShow = $([]); + this.toHide = $([]); + this.formSubmitted = false; + this.currentElements = $([]); + }, + + prepareForm: function() { + this.reset(); + this.toHide = this.errors().add( this.containers ); + }, + + prepareElement: function( element ) { + this.reset(); + this.toHide = this.errorsFor(element); + }, + + check: function( element ) { + element = this.clean( element ); + + // if radio/checkbox, validate first element in group instead + if (this.checkable(element)) { + element = this.findByName( element.name )[0]; + } + + var rules = $(element).rules(); + var dependencyMismatch = false; + for( method in rules ) { + var rule = { method: method, parameters: rules[method] }; + try { + var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters ); + + // if a method indicates that the field is optional and therefore valid, + // don't mark it as valid when there are no other rules + if ( result == "dependency-mismatch" ) { + dependencyMismatch = true; + continue; + } + dependencyMismatch = false; + + if ( result == "pending" ) { + this.toHide = this.toHide.not( this.errorsFor(element) ); + return; + } + + if( !result ) { + this.formatAndAdd( element, rule ); + return false; + } + } catch(e) { + this.settings.debug && window.console && console.log("exception occured when checking element " + element.id + + ", check the '" + rule.method + "' method"); + throw e; + } + } + if (dependencyMismatch) + return; + if ( this.objectLength(rules) ) + this.successList.push(element); + return true; + }, + + // return the custom message for the given element and validation method + // specified in the element's "messages" metadata + customMetaMessage: function(element, method) { + if (!$.metadata) + return; + + var meta = this.settings.meta + ? $(element).metadata()[this.settings.meta] + : $(element).metadata(); + + return meta && meta.messages && meta.messages[method]; + }, + + // return the custom message for the given element name and validation method + customMessage: function( name, method ) { + var m = this.settings.messages[name]; + return m && (m.constructor == String + ? m + : m[method]); + }, + + // return the first defined argument, allowing empty strings + findDefined: function() { + for(var i = 0; i < arguments.length; i++) { + if (arguments[i] !== undefined) + return arguments[i]; + } + return undefined; + }, + + defaultMessage: function( element, method) { + return this.findDefined( + this.customMessage( element.name, method ), + this.customMetaMessage( element, method ), + // title is never undefined, so handle empty string as undefined + !this.settings.ignoreTitle && element.title || undefined, + $.validator.messages[method], + "Warning: No message defined for " + element.name + "" + ); + }, + + formatAndAdd: function( element, rule ) { + var message = this.defaultMessage( element, rule.method ); + if ( typeof message == "function" ) + message = message.call(this, rule.parameters, element); + this.errorList.push({ + message: message, + element: element + }); + this.errorMap[element.name] = message; + this.submitted[element.name] = message; + }, + + addWrapper: function(toToggle) { + if ( this.settings.wrapper ) + toToggle = toToggle.add( toToggle.parents( this.settings.wrapper ) ); + return toToggle; + }, + + defaultShowErrors: function() { + for ( var i = 0; this.errorList[i]; i++ ) { + var error = this.errorList[i]; + this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass ); + this.showLabel( error.element, error.message ); + } + if( this.errorList.length ) { + this.toShow = this.toShow.add( this.containers ); + } + if (this.settings.success) { + for ( var i = 0; this.successList[i]; i++ ) { + this.showLabel( this.successList[i] ); + } + } + if (this.settings.unhighlight) { + for ( var i = 0, elements = this.validElements(); elements[i]; i++ ) { + this.settings.unhighlight.call( this, elements[i], this.settings.errorClass ); + } + } + this.toHide = this.toHide.not( this.toShow ); + this.hideErrors(); + this.addWrapper( this.toShow ).show(); + }, + + validElements: function() { + return this.currentElements.not(this.invalidElements()); + }, + + invalidElements: function() { + return $(this.errorList).map(function() { + return this.element; + }); + }, + + showLabel: function(element, message) { + var label = this.errorsFor( element ); + if ( label.length ) { + // refresh error/success class + label.removeClass().addClass( this.settings.errorClass ); + + // check if we have a generated label, replace the message then + label.attr("generated") && label.html(message); + } else { + // create label + label = $("<" + this.settings.errorElement + "/>") + .attr({"for": this.idOrName(element), generated: true}) + .addClass(this.settings.errorClass) + .html(message || ""); + if ( this.settings.wrapper ) { + // make sure the element is visible, even in IE + // actually showing the wrapped element is handled elsewhere + label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent(); + } + if ( !this.labelContainer.append(label).length ) + this.settings.errorPlacement + ? this.settings.errorPlacement(label, $(element) ) + : label.insertAfter(element); + } + if ( !message && this.settings.success ) { + label.text(""); + typeof this.settings.success == "string" + ? label.addClass( this.settings.success ) + : this.settings.success( label ); + } + this.toShow = this.toShow.add(label); + }, + + errorsFor: function(element) { + return this.errors().filter("[for='" + this.idOrName(element) + "']"); + }, + + idOrName: function(element) { + return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name); + }, + + checkable: function( element ) { + return /radio|checkbox/i.test(element.type); + }, + + findByName: function( name ) { + // select by name and filter by form for performance over form.find("[name=...]") + var form = this.currentForm; + return $(document.getElementsByName(name)).map(function(index, element) { + return element.form == form && element.name == name && element || null; + }); + }, + + getLength: function(value, element) { + switch( element.nodeName.toLowerCase() ) { + case 'select': + return $("option:selected", element).length; + case 'input': + if( this.checkable( element) ) + return this.findByName(element.name).filter(':checked').length; + } + return value.length; + }, + + depend: function(param, element) { + return this.dependTypes[typeof param] + ? this.dependTypes[typeof param](param, element) + : true; + }, + + dependTypes: { + "boolean": function(param, element) { + return param; + }, + "string": function(param, element) { + return !!$(param, element.form).length; + }, + "function": function(param, element) { + return param(element); + } + }, + + optional: function(element) { + return !$.validator.methods.required.call(this, $.trim(element.value), element) && "dependency-mismatch"; + }, + + startRequest: function(element) { + if (!this.pending[element.name]) { + this.pendingRequest++; + this.pending[element.name] = true; + } + }, + + stopRequest: function(element, valid) { + this.pendingRequest--; + // sometimes synchronization fails, make sure pendingRequest is never < 0 + if (this.pendingRequest < 0) + this.pendingRequest = 0; + delete this.pending[element.name]; + if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) { + $(this.currentForm).submit(); + } else if (!valid && this.pendingRequest == 0 && this.formSubmitted) { + $(this.currentForm).triggerHandler("invalid-form", [this]); + } + }, + + previousValue: function(element) { + return $.data(element, "previousValue") || $.data(element, "previousValue", previous = { + old: null, + valid: true, + message: this.defaultMessage( element, "remote" ) + }); + } + + }, + + classRuleSettings: { + required: {required: true}, + email: {email: true}, + url: {url: true}, + date: {date: true}, + dateISO: {dateISO: true}, + dateDE: {dateDE: true}, + number: {number: true}, + numberDE: {numberDE: true}, + digits: {digits: true}, + creditcard: {creditcard: true} + }, + + addClassRules: function(className, rules) { + className.constructor == String ? + this.classRuleSettings[className] = rules : + $.extend(this.classRuleSettings, className); + }, + + classRules: function(element) { + var rules = {}; + var classes = $(element).attr('class'); + classes && $.each(classes.split(' '), function() { + if (this in $.validator.classRuleSettings) { + $.extend(rules, $.validator.classRuleSettings[this]); + } + }); + return rules; + }, + + attributeRules: function(element) { + var rules = {}; + var $element = $(element); + + for (method in $.validator.methods) { + var value = $element.attr(method); + if (value) { + rules[method] = value; + } + } + + // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs + if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) { + delete rules.maxlength; + } + + return rules; + }, + + metadataRules: function(element) { + if (!$.metadata) return {}; + + var meta = $.data(element.form, 'validator').settings.meta; + return meta ? + $(element).metadata()[meta] : + $(element).metadata(); + }, + + staticRules: function(element) { + var rules = {}; + var validator = $.data(element.form, 'validator'); + if (validator.settings.rules) { + rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {}; + } + return rules; + }, + + normalizeRules: function(rules, element) { + // handle dependency check + $.each(rules, function(prop, val) { + // ignore rule when param is explicitly false, eg. required:false + if (val === false) { + delete rules[prop]; + return; + } + if (val.param || val.depends) { + var keepRule = true; + switch (typeof val.depends) { + case "string": + keepRule = !!$(val.depends, element.form).length; + break; + case "function": + keepRule = val.depends.call(element, element); + break; + } + if (keepRule) { + rules[prop] = val.param !== undefined ? val.param : true; + } else { + delete rules[prop]; + } + } + }); + + // evaluate parameters + $.each(rules, function(rule, parameter) { + rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter; + }); + + // clean number parameters + $.each(['minlength', 'maxlength', 'min', 'max'], function() { + if (rules[this]) { + rules[this] = Number(rules[this]); + } + }); + $.each(['rangelength', 'range'], function() { + if (rules[this]) { + rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; + } + }); + + if ($.validator.autoCreateRanges) { + // auto-create ranges + if (rules.min && rules.max) { + rules.range = [rules.min, rules.max]; + delete rules.min; + delete rules.max; + } + if (rules.minlength && rules.maxlength) { + rules.rangelength = [rules.minlength, rules.maxlength]; + delete rules.minlength; + delete rules.maxlength; + } + } + + // To support custom messages in metadata ignore rule methods titled "messages" + if (rules.messages) { + delete rules.messages; + } + + return rules; + }, + + // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} + normalizeRule: function(data) { + if( typeof data == "string" ) { + var transformed = {}; + $.each(data.split(/\s/), function() { + transformed[this] = true; + }); + data = transformed; + } + return data; + }, + + // http://docs.jquery.com/Plugins/Validation/Validator/addMethod + addMethod: function(name, method, message) { + $.validator.methods[name] = method; + $.validator.messages[name] = message; + if (method.length < 3) { + $.validator.addClassRules(name, $.validator.normalizeRule(name)); + } + }, + + methods: { + + // http://docs.jquery.com/Plugins/Validation/Methods/required + required: function(value, element, param) { + // check if dependency is met + if ( !this.depend(param, element) ) + return "dependency-mismatch"; + switch( element.nodeName.toLowerCase() ) { + case 'select': + var options = $("option:selected", element); + return options.length > 0 && ( element.type == "select-multiple" || ($.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0); + case 'input': + if ( this.checkable(element) ) + return this.getLength(value, element) > 0; + default: + return $.trim(value).length > 0; + } + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/remote + remote: function(value, element, param) { + if ( this.optional(element) ) + return "dependency-mismatch"; + + var previous = this.previousValue(element); + + if (!this.settings.messages[element.name] ) + this.settings.messages[element.name] = {}; + this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message; + + param = typeof param == "string" && {url:param} || param; + + if ( previous.old !== value ) { + previous.old = value; + var validator = this; + this.startRequest(element); + var data = {}; + data[element.name] = value; + $.ajax($.extend(true, { + url: param, + mode: "abort", + port: "validate" + element.name, + dataType: "json", + data: data, + success: function(response) { + if ( response ) { + var submitted = validator.formSubmitted; + validator.prepareElement(element); + validator.formSubmitted = submitted; + validator.successList.push(element); + validator.showErrors(); + } else { + var errors = {}; + errors[element.name] = response || validator.defaultMessage( element, "remote" ); + validator.showErrors(errors); + } + previous.valid = response; + validator.stopRequest(element, response); + } + }, param)); + return "pending"; + } else if( this.pending[element.name] ) { + return "pending"; + } + return previous.valid; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/minlength + minlength: function(value, element, param) { + return this.optional(element) || this.getLength($.trim(value), element) >= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/maxlength + maxlength: function(value, element, param) { + return this.optional(element) || this.getLength($.trim(value), element) <= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/rangelength + rangelength: function(value, element, param) { + var length = this.getLength($.trim(value), element); + return this.optional(element) || ( length >= param[0] && length <= param[1] ); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/min + min: function( value, element, param ) { + return this.optional(element) || value >= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/max + max: function( value, element, param ) { + return this.optional(element) || value <= param; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/range + range: function( value, element, param ) { + return this.optional(element) || ( value >= param[0] && value <= param[1] ); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/email + email: function(value, element) { + // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ + return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/url + url: function(value, element) { + // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ + return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/date + date: function(value, element) { + return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/dateISO + dateISO: function(value, element) { + return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/dateDE + dateDE: function(value, element) { + return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/number + number: function(value, element) { + return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/numberDE + numberDE: function(value, element) { + return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/digits + digits: function(value, element) { + return this.optional(element) || /^\d+$/.test(value); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/creditcard + // based on http://en.wikipedia.org/wiki/Luhn + creditcard: function(value, element) { + if ( this.optional(element) ) + return "dependency-mismatch"; + // accept only digits and dashes + if (/[^0-9-]+/.test(value)) + return false; + var nCheck = 0, + nDigit = 0, + bEven = false; + + value = value.replace(/\D/g, ""); + + for (n = value.length - 1; n >= 0; n--) { + var cDigit = value.charAt(n); + var nDigit = parseInt(cDigit, 10); + if (bEven) { + if ((nDigit *= 2) > 9) + nDigit -= 9; + } + nCheck += nDigit; + bEven = !bEven; + } + + return (nCheck % 10) == 0; + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/accept + accept: function(value, element, param) { + param = typeof param == "string" ? param : "png|jpe?g|gif"; + return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); + }, + + // http://docs.jquery.com/Plugins/Validation/Methods/equalTo + equalTo: function(value, element, param) { + return value == $(param).val(); + }, + checkname: function(value,element) { + return this.optional(element) || /^[\u4e00-\u9fa5]{5,6}$/.test(value); + } + } + +}); + +})(jQuery); + +// ajax mode: abort +// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); +// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() +;(function($) { + var ajax = $.ajax; + var pendingRequests = {}; + $.ajax = function(settings) { + // create settings for compatibility with ajaxSetup + settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings)); + var port = settings.port; + if (settings.mode == "abort") { + if ( pendingRequests[port] ) { + pendingRequests[port].abort(); + } + return (pendingRequests[port] = ajax.apply(this, arguments)); + } + return ajax.apply(this, arguments); + }; +})(jQuery); + +// provides cross-browser focusin and focusout events +// IE has native support, in other browsers, use event caputuring (neither bubbles) + +// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation +// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target + +// provides triggerEvent(type: String, target: Element) to trigger delegated events +;(function($) { + $.each({ + focus: 'focusin', + blur: 'focusout' + }, function( original, fix ){ + $.event.special[fix] = { + setup:function() { + if ( $.browser.msie ) return false; + this.addEventListener( original, $.event.special[fix].handler, true ); + }, + teardown:function() { + if ( $.browser.msie ) return false; + this.removeEventListener( original, + $.event.special[fix].handler, true ); + }, + handler: function(e) { + arguments[0] = $.event.fix(e); + arguments[0].type = fix; + return $.event.handle.apply(this, arguments); + } + }; + }); + $.extend($.fn, { + delegate: function(type, delegate, handler) { + return this.bind(type, function(event) { + var target = $(event.target); + if (target.is(delegate)) { + return handler.apply(target, arguments); + } + }); + }, + triggerEvent: function(type, target) { + return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]); + } + }); +})(jQuery); diff --git a/src/test/java/com/bw/ApplicationTests.java b/src/test/java/com/bw/ApplicationTests.java new file mode 100644 index 0000000..acb482a --- /dev/null +++ b/src/test/java/com/bw/ApplicationTests.java @@ -0,0 +1,13 @@ +package com.bw; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ApplicationTests { + + @Test + void contextLoads() { + } + +}

`L$_VPlHHKS=;mF6;Sq8TGHfXRkBmVuG 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%0DHm?yu~2{ft?o0*d$97qQG(=p?K*FBG1E%~LjHZ> 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

Y4iz*Q^sx1Vmkss*HnpFDNyyi05@_; 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%0DQ>M6dZL(><%DRIDC-9E(!Fhl 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